Nuitka-winsvc 2.7.7__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- nuitka/Builtins.py +259 -0
- nuitka/BytecodeCaching.py +184 -0
- nuitka/Bytecodes.py +109 -0
- nuitka/CacheCleanup.py +54 -0
- nuitka/Constants.py +425 -0
- nuitka/Errors.py +93 -0
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +1201 -0
- nuitka/ModuleRegistry.py +364 -0
- nuitka/OptionParsing.py +2473 -0
- nuitka/Options.py +2948 -0
- nuitka/OutputDirectories.py +201 -0
- nuitka/PostProcessing.py +551 -0
- nuitka/Progress.py +252 -0
- nuitka/PythonFlavors.py +426 -0
- nuitka/PythonOperators.py +146 -0
- nuitka/PythonVersions.py +513 -0
- nuitka/Serialization.py +291 -0
- nuitka/SourceCodeReferences.py +176 -0
- nuitka/Tracing.py +579 -0
- nuitka/TreeXML.py +141 -0
- nuitka/Variables.py +515 -0
- nuitka/Version.py +88 -0
- nuitka/__init__.py +19 -0
- nuitka/__main__.py +224 -0
- nuitka/__past__.py +217 -0
- nuitka/build/Backend.scons +1111 -0
- nuitka/build/CCompilerVersion.scons +281 -0
- nuitka/build/DataComposerInterface.py +116 -0
- nuitka/build/Offsets.scons +626 -0
- nuitka/build/Onefile.scons +564 -0
- nuitka/build/SconsCaching.py +451 -0
- nuitka/build/SconsCompilerSettings.py +1133 -0
- nuitka/build/SconsHacks.py +215 -0
- nuitka/build/SconsInterface.py +664 -0
- nuitka/build/SconsProgress.py +100 -0
- nuitka/build/SconsSpawn.py +436 -0
- nuitka/build/SconsUtils.py +939 -0
- nuitka/build/__init__.py +19 -0
- nuitka/build/include/nuitka/allocator.h +450 -0
- nuitka/build/include/nuitka/builtins.h +97 -0
- nuitka/build/include/nuitka/calling.h +123 -0
- nuitka/build/include/nuitka/checkers.h +39 -0
- nuitka/build/include/nuitka/checksum_tools.h +28 -0
- nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
- nuitka/build/include/nuitka/compiled_cell.h +64 -0
- nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
- nuitka/build/include/nuitka/compiled_frame.h +502 -0
- nuitka/build/include/nuitka/compiled_function.h +170 -0
- nuitka/build/include/nuitka/compiled_generator.h +287 -0
- nuitka/build/include/nuitka/compiled_method.h +54 -0
- nuitka/build/include/nuitka/constants.h +251 -0
- nuitka/build/include/nuitka/constants_blob.h +34 -0
- nuitka/build/include/nuitka/debug_settings.h +60 -0
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +51 -0
- nuitka/build/include/nuitka/exception_groups.h +167 -0
- nuitka/build/include/nuitka/exceptions.h +1458 -0
- nuitka/build/include/nuitka/filesystem_paths.h +117 -0
- nuitka/build/include/nuitka/freelists.h +92 -0
- nuitka/build/include/nuitka/hedley.h +1774 -0
- nuitka/build/include/nuitka/helper/attributes.h +90 -0
- nuitka/build/include/nuitka/helper/boolean.h +86 -0
- nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
- nuitka/build/include/nuitka/helper/bytes.h +28 -0
- nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_eq.h +247 -0
- nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
- nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
- nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
- nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
- nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
- nuitka/build/include/nuitka/helper/complex.h +46 -0
- nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
- nuitka/build/include/nuitka/helper/floats.h +32 -0
- nuitka/build/include/nuitka/helper/import_hard.h +121 -0
- nuitka/build/include/nuitka/helper/indexes.h +47 -0
- nuitka/build/include/nuitka/helper/ints.h +165 -0
- nuitka/build/include/nuitka/helper/iterators.h +376 -0
- nuitka/build/include/nuitka/helper/lists.h +94 -0
- nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
- nuitka/build/include/nuitka/helper/mappings.h +39 -0
- nuitka/build/include/nuitka/helper/operations.h +114 -0
- nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
- nuitka/build/include/nuitka/helper/raising.h +114 -0
- nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
- nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
- nuitka/build/include/nuitka/helper/sequences.h +33 -0
- nuitka/build/include/nuitka/helper/sets.h +25 -0
- nuitka/build/include/nuitka/helper/slices.h +314 -0
- nuitka/build/include/nuitka/helper/strings.h +30 -0
- nuitka/build/include/nuitka/helper/subscripts.h +390 -0
- nuitka/build/include/nuitka/helper/tuples.h +187 -0
- nuitka/build/include/nuitka/helpers.h +417 -0
- nuitka/build/include/nuitka/importing.h +149 -0
- nuitka/build/include/nuitka/incbin.h +402 -0
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +626 -0
- nuitka/build/include/nuitka/printing.h +84 -0
- nuitka/build/include/nuitka/python_pgo.h +57 -0
- nuitka/build/include/nuitka/safe_string_ops.h +57 -0
- nuitka/build/include/nuitka/threading.h +142 -0
- nuitka/build/include/nuitka/tracing.h +82 -0
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +91 -0
- nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
- nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
- nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
- nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
- nuitka/build/inline_copy/bin/scons.py +58 -0
- nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
- nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
- nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
- nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
- nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
- nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
- nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
- nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
- nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
- nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
- nuitka/build/inline_copy/glob2/LICENSE +27 -0
- nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
- nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
- nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
- nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
- nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
- nuitka/build/inline_copy/jinja2/README.rst +2 -0
- nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
- nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
- nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
- nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
- nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
- nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
- nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
- nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
- nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
- nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
- nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
- nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
- nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
- nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
- nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
- nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
- nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
- nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
- nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
- nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
- nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
- nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
- nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
- nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
- nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
- nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
- nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
- nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
- nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
- nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
- nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
- nuitka/build/inline_copy/pefile/pefile.py +8034 -0
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
- nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
- nuitka/build/inline_copy/stubgen/six.py +998 -0
- nuitka/build/inline_copy/stubgen/stubgen.py +484 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
- nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
- nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
- nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
- nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
- nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
- nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
- nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
- nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
- nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
- nuitka/build/inline_copy/yaml/LICENSE +20 -0
- nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
- nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
- nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
- nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
- nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
- nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
- nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
- nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
- nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
- nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
- nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
- nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
- nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
- nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
- nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
- nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
- nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/inline_copy/zstd/LICENSE.txt +30 -0
- nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
- nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
- nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
- nuitka/build/inline_copy/zstd/common/debug.h +107 -0
- nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
- nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
- nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
- nuitka/build/inline_copy/zstd/common/fse.h +715 -0
- nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
- nuitka/build/inline_copy/zstd/common/huf.h +361 -0
- nuitka/build/inline_copy/zstd/common/mem.h +426 -0
- nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
- nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
- nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
- nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
- nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
- nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
- nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
- nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
- nuitka/build/inline_copy/zstd/zstd.h +2391 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
- nuitka/build/static_src/CompiledCellType.c +300 -0
- nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
- nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
- nuitka/build/static_src/CompiledFrameType.c +1337 -0
- nuitka/build/static_src/CompiledFunctionType.c +3320 -0
- nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
- nuitka/build/static_src/CompiledMethodType.c +614 -0
- nuitka/build/static_src/GenerateHeadersMain.c +30 -0
- nuitka/build/static_src/HelpersAllocator.c +939 -0
- nuitka/build/static_src/HelpersAttributes.c +1241 -0
- nuitka/build/static_src/HelpersBuiltin.c +901 -0
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
- nuitka/build/static_src/HelpersBytes.c +107 -0
- nuitka/build/static_src/HelpersCalling.c +397 -0
- nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
- nuitka/build/static_src/HelpersChecksumTools.c +59 -0
- nuitka/build/static_src/HelpersClasses.c +91 -0
- nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
- nuitka/build/static_src/HelpersComparisonEq.c +12070 -0
- nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
- nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
- nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
- nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
- nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
- nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
- nuitka/build/static_src/HelpersConsole.c +124 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
- nuitka/build/static_src/HelpersDeepcopy.c +636 -0
- nuitka/build/static_src/HelpersDictionaries.c +1739 -0
- nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
- nuitka/build/static_src/HelpersExceptions.c +298 -0
- nuitka/build/static_src/HelpersFiles.c +353 -0
- nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
- nuitka/build/static_src/HelpersFloats.c +92 -0
- nuitka/build/static_src/HelpersHeapStorage.c +68 -0
- nuitka/build/static_src/HelpersImport.c +506 -0
- nuitka/build/static_src/HelpersImportHard.c +526 -0
- nuitka/build/static_src/HelpersJitSources.c +48 -0
- nuitka/build/static_src/HelpersLists.c +899 -0
- nuitka/build/static_src/HelpersListsGenerated.c +564 -0
- nuitka/build/static_src/HelpersMappings.c +46 -0
- nuitka/build/static_src/HelpersMatching.c +192 -0
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
- nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
- nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
- nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
- nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
- nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
- nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
- nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
- nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
- nuitka/build/static_src/HelpersProfiling.c +104 -0
- nuitka/build/static_src/HelpersPythonPgo.c +113 -0
- nuitka/build/static_src/HelpersRaising.c +447 -0
- nuitka/build/static_src/HelpersSafeStrings.c +185 -0
- nuitka/build/static_src/HelpersSequences.c +134 -0
- nuitka/build/static_src/HelpersSlices.c +73 -0
- nuitka/build/static_src/HelpersStrings.c +998 -0
- nuitka/build/static_src/HelpersTuples.c +148 -0
- nuitka/build/static_src/HelpersTypes.c +329 -0
- nuitka/build/static_src/InspectPatcher.c +439 -0
- nuitka/build/static_src/MainProgram.c +2060 -0
- nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
- nuitka/build/static_src/OnefileBootstrap.c +1580 -0
- nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
- nuitka/code_generation/AsyncgenCodes.py +186 -0
- nuitka/code_generation/AttributeCodes.py +357 -0
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
- nuitka/code_generation/BranchCodes.py +67 -0
- nuitka/code_generation/BuiltinCodes.py +529 -0
- nuitka/code_generation/CallCodes.py +1186 -0
- nuitka/code_generation/ClassCodes.py +156 -0
- nuitka/code_generation/CodeGeneration.py +1078 -0
- nuitka/code_generation/CodeHelperSelection.py +81 -0
- nuitka/code_generation/CodeHelpers.py +455 -0
- nuitka/code_generation/CodeObjectCodes.py +165 -0
- nuitka/code_generation/ComparisonCodes.py +569 -0
- nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
- nuitka/code_generation/ConditionalCodes.py +236 -0
- nuitka/code_generation/ConstantCodes.py +243 -0
- nuitka/code_generation/Contexts.py +1248 -0
- nuitka/code_generation/CoroutineCodes.py +253 -0
- nuitka/code_generation/CtypesCodes.py +46 -0
- nuitka/code_generation/DictCodes.py +918 -0
- nuitka/code_generation/Emission.py +75 -0
- nuitka/code_generation/ErrorCodes.py +281 -0
- nuitka/code_generation/EvalCodes.py +444 -0
- nuitka/code_generation/ExceptionCodes.py +337 -0
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
- nuitka/code_generation/ExpressionCodes.py +61 -0
- nuitka/code_generation/FrameCodes.py +518 -0
- nuitka/code_generation/FunctionCodes.py +858 -0
- nuitka/code_generation/GeneratorCodes.py +218 -0
- nuitka/code_generation/GlobalConstants.py +249 -0
- nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
- nuitka/code_generation/IdCodes.py +53 -0
- nuitka/code_generation/ImportCodes.py +468 -0
- nuitka/code_generation/Indentation.py +45 -0
- nuitka/code_generation/IndexCodes.py +50 -0
- nuitka/code_generation/InjectCCodes.py +28 -0
- nuitka/code_generation/IntegerCodes.py +110 -0
- nuitka/code_generation/IteratorCodes.py +378 -0
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +68 -0
- nuitka/code_generation/LineNumberCodes.py +91 -0
- nuitka/code_generation/ListCodes.py +502 -0
- nuitka/code_generation/LoaderCodes.py +193 -0
- nuitka/code_generation/LocalsDictCodes.py +359 -0
- nuitka/code_generation/LoopCodes.py +88 -0
- nuitka/code_generation/MatchCodes.py +67 -0
- nuitka/code_generation/ModuleCodes.py +247 -0
- nuitka/code_generation/Namify.py +260 -0
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +398 -0
- nuitka/code_generation/PackageResourceCodes.py +986 -0
- nuitka/code_generation/PrintCodes.py +93 -0
- nuitka/code_generation/PythonAPICodes.py +215 -0
- nuitka/code_generation/RaisingCodes.py +481 -0
- nuitka/code_generation/Reports.py +115 -0
- nuitka/code_generation/ReturnCodes.py +143 -0
- nuitka/code_generation/SetCodes.py +196 -0
- nuitka/code_generation/SliceCodes.py +465 -0
- nuitka/code_generation/StringCodes.py +303 -0
- nuitka/code_generation/SubscriptCodes.py +263 -0
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +326 -0
- nuitka/code_generation/TupleCodes.py +115 -0
- nuitka/code_generation/TypeAliasCodes.py +120 -0
- nuitka/code_generation/VariableCodes.py +519 -0
- nuitka/code_generation/VariableDeclarations.py +279 -0
- nuitka/code_generation/YieldCodes.py +253 -0
- nuitka/code_generation/__init__.py +19 -0
- nuitka/code_generation/c_types/CTypeBases.py +177 -0
- nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
- nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
- nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
- nuitka/code_generation/c_types/CTypeVoids.py +92 -0
- nuitka/code_generation/c_types/__init__.py +19 -0
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
- nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
- nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
- nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
- nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
- nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
- nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
- nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
- nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
- nuitka/code_generation/templates/__init__.py +19 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
- nuitka/containers/Namedtuples.py +51 -0
- nuitka/containers/OrderedDicts.py +191 -0
- nuitka/containers/OrderedSets.py +123 -0
- nuitka/containers/OrderedSetsFallback.py +139 -0
- nuitka/containers/__init__.py +19 -0
- nuitka/distutils/Build.py +76 -0
- nuitka/distutils/DistutilCommands.py +438 -0
- nuitka/distutils/__init__.py +19 -0
- nuitka/finalizations/Finalization.py +35 -0
- nuitka/finalizations/FinalizeMarkups.py +136 -0
- nuitka/finalizations/__init__.py +19 -0
- nuitka/freezer/DependsExe.py +257 -0
- nuitka/freezer/DllDependenciesCommon.py +97 -0
- nuitka/freezer/DllDependenciesMacOS.py +444 -0
- nuitka/freezer/DllDependenciesPosix.py +242 -0
- nuitka/freezer/DllDependenciesWin32.py +315 -0
- nuitka/freezer/ImportDetection.py +359 -0
- nuitka/freezer/IncludedDataFiles.py +689 -0
- nuitka/freezer/IncludedEntryPoints.py +376 -0
- nuitka/freezer/Onefile.py +296 -0
- nuitka/freezer/Standalone.py +520 -0
- nuitka/freezer/__init__.py +19 -0
- nuitka/importing/IgnoreListing.py +449 -0
- nuitka/importing/ImportCache.py +95 -0
- nuitka/importing/ImportResolving.py +186 -0
- nuitka/importing/Importing.py +1200 -0
- nuitka/importing/PreloadedPackages.py +164 -0
- nuitka/importing/Recursion.py +611 -0
- nuitka/importing/StandardLibrary.py +429 -0
- nuitka/importing/__init__.py +19 -0
- nuitka/nodes/AsyncgenNodes.py +107 -0
- nuitka/nodes/AttributeLookupNodes.py +124 -0
- nuitka/nodes/AttributeNodes.py +386 -0
- nuitka/nodes/AttributeNodesGenerated.py +10734 -0
- nuitka/nodes/BuiltinAllNodes.py +115 -0
- nuitka/nodes/BuiltinAnyNodes.py +124 -0
- nuitka/nodes/BuiltinComplexNodes.py +83 -0
- nuitka/nodes/BuiltinDecodingNodes.py +52 -0
- nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
- nuitka/nodes/BuiltinDictNodes.py +140 -0
- nuitka/nodes/BuiltinFormatNodes.py +159 -0
- nuitka/nodes/BuiltinHashNodes.py +63 -0
- nuitka/nodes/BuiltinInputNodes.py +39 -0
- nuitka/nodes/BuiltinIntegerNodes.py +170 -0
- nuitka/nodes/BuiltinIteratorNodes.py +391 -0
- nuitka/nodes/BuiltinLenNodes.py +61 -0
- nuitka/nodes/BuiltinNextNodes.py +111 -0
- nuitka/nodes/BuiltinOpenNodes.py +148 -0
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
- nuitka/nodes/BuiltinRangeNodes.py +690 -0
- nuitka/nodes/BuiltinRefNodes.py +314 -0
- nuitka/nodes/BuiltinSumNodes.py +104 -0
- nuitka/nodes/BuiltinTypeNodes.py +454 -0
- nuitka/nodes/BuiltinVarsNodes.py +44 -0
- nuitka/nodes/BytesNodes.py +829 -0
- nuitka/nodes/CallNodes.py +217 -0
- nuitka/nodes/Checkers.py +55 -0
- nuitka/nodes/ChildrenHavingMixins.py +21576 -0
- nuitka/nodes/ClassNodes.py +286 -0
- nuitka/nodes/CodeObjectSpecs.py +230 -0
- nuitka/nodes/ComparisonNodes.py +687 -0
- nuitka/nodes/ConditionalNodes.py +884 -0
- nuitka/nodes/ConstantRefNodes.py +1717 -0
- nuitka/nodes/ContainerMakingNodes.py +408 -0
- nuitka/nodes/ContainerOperationNodes.py +87 -0
- nuitka/nodes/CoroutineNodes.py +144 -0
- nuitka/nodes/CtypesNodes.py +51 -0
- nuitka/nodes/DictionaryNodes.py +1513 -0
- nuitka/nodes/ExceptionNodes.py +393 -0
- nuitka/nodes/ExecEvalNodes.py +229 -0
- nuitka/nodes/ExpressionBases.py +1301 -0
- nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
- nuitka/nodes/ExpressionShapeMixins.py +886 -0
- nuitka/nodes/FrameNodes.py +413 -0
- nuitka/nodes/FunctionAttributeNodes.py +102 -0
- nuitka/nodes/FunctionNodes.py +1303 -0
- nuitka/nodes/FutureSpecs.py +224 -0
- nuitka/nodes/GeneratorNodes.py +201 -0
- nuitka/nodes/GlobalsLocalsNodes.py +209 -0
- nuitka/nodes/HardImportNodesGenerated.py +3599 -0
- nuitka/nodes/ImportHardNodes.py +185 -0
- nuitka/nodes/ImportNodes.py +1366 -0
- nuitka/nodes/IndicatorMixins.py +79 -0
- nuitka/nodes/InjectCNodes.py +51 -0
- nuitka/nodes/IterationHandles.py +407 -0
- nuitka/nodes/KeyValuePairNodes.py +378 -0
- nuitka/nodes/ListOperationNodes.py +525 -0
- nuitka/nodes/LocalsDictNodes.py +717 -0
- nuitka/nodes/LocalsScopes.py +505 -0
- nuitka/nodes/LoopNodes.py +445 -0
- nuitka/nodes/MatchNodes.py +60 -0
- nuitka/nodes/ModuleAttributeNodes.py +180 -0
- nuitka/nodes/ModuleNodes.py +1137 -0
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +890 -0
- nuitka/nodes/NodeMakingHelpers.py +481 -0
- nuitka/nodes/NodeMetaClasses.py +172 -0
- nuitka/nodes/OperatorNodes.py +944 -0
- nuitka/nodes/OperatorNodesUnary.py +403 -0
- nuitka/nodes/OsSysNodes.py +215 -0
- nuitka/nodes/OutlineNodes.py +372 -0
- nuitka/nodes/PackageMetadataNodes.py +982 -0
- nuitka/nodes/PackageResourceNodes.py +424 -0
- nuitka/nodes/PrintNodes.py +105 -0
- nuitka/nodes/ReturnNodes.py +255 -0
- nuitka/nodes/SideEffectNodes.py +139 -0
- nuitka/nodes/SliceNodes.py +386 -0
- nuitka/nodes/StatementBasesGenerated.py +3419 -0
- nuitka/nodes/StatementNodes.py +316 -0
- nuitka/nodes/StrNodes.py +919 -0
- nuitka/nodes/StringConcatenationNodes.py +103 -0
- nuitka/nodes/SubscriptNodes.py +245 -0
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +519 -0
- nuitka/nodes/TypeMatchNodes.py +65 -0
- nuitka/nodes/TypeNodes.py +390 -0
- nuitka/nodes/VariableAssignNodes.py +1177 -0
- nuitka/nodes/VariableDelNodes.py +320 -0
- nuitka/nodes/VariableNameNodes.py +153 -0
- nuitka/nodes/VariableRefNodes.py +895 -0
- nuitka/nodes/VariableReleaseNodes.py +153 -0
- nuitka/nodes/YieldNodes.py +121 -0
- nuitka/nodes/__init__.py +19 -0
- nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
- nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
- nuitka/nodes/shapes/IteratorShapes.py +71 -0
- nuitka/nodes/shapes/ShapeMixins.py +255 -0
- nuitka/nodes/shapes/StandardShapes.py +1384 -0
- nuitka/nodes/shapes/__init__.py +19 -0
- nuitka/optimizations/BytecodeDemotion.py +105 -0
- nuitka/optimizations/FunctionInlining.py +110 -0
- nuitka/optimizations/Graphs.py +70 -0
- nuitka/optimizations/Optimization.py +363 -0
- nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
- nuitka/optimizations/Tags.py +76 -0
- nuitka/optimizations/TraceCollections.py +1257 -0
- nuitka/optimizations/ValueTraces.py +980 -0
- nuitka/optimizations/__init__.py +19 -0
- nuitka/pgo/PGO.py +160 -0
- nuitka/pgo/__init__.py +19 -0
- nuitka/plugins/PluginBase.py +1924 -0
- nuitka/plugins/Plugins.py +2007 -0
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +19 -0
- nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
- nuitka/plugins/standard/DataFilesPlugin.py +311 -0
- nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
- nuitka/plugins/standard/DillPlugin.py +137 -0
- nuitka/plugins/standard/DllFilesPlugin.py +527 -0
- nuitka/plugins/standard/EnumPlugin.py +64 -0
- nuitka/plugins/standard/EventletPlugin.py +57 -0
- nuitka/plugins/standard/GeventPlugin.py +64 -0
- nuitka/plugins/standard/GiPlugin.py +118 -0
- nuitka/plugins/standard/GlfwPlugin.py +138 -0
- nuitka/plugins/standard/ImplicitImports.py +845 -0
- nuitka/plugins/standard/KivyPlugin.py +141 -0
- nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
- nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
- nuitka/plugins/standard/NumpyPlugin.py +35 -0
- nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
- nuitka/plugins/standard/PbrPlugin.py +62 -0
- nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
- nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
- nuitka/plugins/standard/PmwPlugin.py +248 -0
- nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
- nuitka/plugins/standard/PywebViewPlugin.py +81 -0
- nuitka/plugins/standard/SpacyPlugin.py +137 -0
- nuitka/plugins/standard/TensorflowPlugin.py +35 -0
- nuitka/plugins/standard/TkinterPlugin.py +416 -0
- nuitka/plugins/standard/TorchPlugin.py +35 -0
- nuitka/plugins/standard/TransformersPlugin.py +121 -0
- nuitka/plugins/standard/TrioPlugin.py +33 -0
- nuitka/plugins/standard/UpxPlugin.py +174 -0
- nuitka/plugins/standard/__init__.py +19 -0
- nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
- nuitka/reports/CompilationReportReader.py +83 -0
- nuitka/reports/LicenseReport.rst.j2 +41 -0
- nuitka/reports/Reports.py +961 -0
- nuitka/reports/__init__.py +19 -0
- nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
- nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
- nuitka/specs/BuiltinListOperationSpecs.py +80 -0
- nuitka/specs/BuiltinParameterSpecs.py +831 -0
- nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
- nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
- nuitka/specs/HardImportSpecs.py +236 -0
- nuitka/specs/ParameterSpecs.py +630 -0
- nuitka/specs/__init__.py +19 -0
- nuitka/tools/Basics.py +55 -0
- nuitka/tools/__init__.py +19 -0
- nuitka/tools/commercial/__init__.py +21 -0
- nuitka/tools/data_composer/DataComposer.py +593 -0
- nuitka/tools/data_composer/__init__.py +19 -0
- nuitka/tools/data_composer/__main__.py +41 -0
- nuitka/tools/environments/CreateEnvironment.py +69 -0
- nuitka/tools/environments/Virtualenv.py +158 -0
- nuitka/tools/environments/__init__.py +19 -0
- nuitka/tools/general/__init__.py +19 -0
- nuitka/tools/general/dll_report/__init__.py +19 -0
- nuitka/tools/general/dll_report/__main__.py +83 -0
- nuitka/tools/general/find_module/FindModuleCode.py +127 -0
- nuitka/tools/general/find_module/__init__.py +19 -0
- nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
- nuitka/tools/general/generate_header/__init__.py +19 -0
- nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
- nuitka/tools/onefile_compressor/__init__.py +19 -0
- nuitka/tools/onefile_compressor/__main__.py +41 -0
- nuitka/tools/podman/Podman.py +55 -0
- nuitka/tools/podman/__init__.py +19 -0
- nuitka/tools/podman/__main__.py +425 -0
- nuitka/tools/profiler/__init__.py +19 -0
- nuitka/tools/profiler/__main__.py +93 -0
- nuitka/tools/scanning/DisplayDistributions.py +39 -0
- nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
- nuitka/tools/scanning/DisplayPackageData.py +73 -0
- nuitka/tools/scanning/__init__.py +19 -0
- nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
- nuitka/tools/specialize/Common.py +380 -0
- nuitka/tools/specialize/SpecializeC.py +1483 -0
- nuitka/tools/specialize/SpecializePython.py +1151 -0
- nuitka/tools/specialize/__init__.py +19 -0
- nuitka/tools/testing/Common.py +2007 -0
- nuitka/tools/testing/Constructs.py +53 -0
- nuitka/tools/testing/DocTests.py +156 -0
- nuitka/tools/testing/OutputComparison.py +313 -0
- nuitka/tools/testing/Pythons.py +34 -0
- nuitka/tools/testing/RuntimeTracing.py +260 -0
- nuitka/tools/testing/SearchModes.py +208 -0
- nuitka/tools/testing/Valgrind.py +103 -0
- nuitka/tools/testing/__init__.py +19 -0
- nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
- nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
- nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
- nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
- nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
- nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
- nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
- nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
- nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
- nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/Common.py +55 -0
- nuitka/tools/watch/Conda.py +125 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/Pacman.py +73 -0
- nuitka/tools/watch/Pipenv.py +145 -0
- nuitka/tools/watch/__init__.py +19 -0
- nuitka/tools/watch/__main__.py +615 -0
- nuitka/tree/Building.py +1459 -0
- nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
- nuitka/tree/Extractions.py +48 -0
- nuitka/tree/FutureSpecState.py +71 -0
- nuitka/tree/InternalModule.py +96 -0
- nuitka/tree/Operations.py +45 -0
- nuitka/tree/ReformulationAssertStatements.py +97 -0
- nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
- nuitka/tree/ReformulationBooleanExpressions.py +97 -0
- nuitka/tree/ReformulationCallExpressions.py +314 -0
- nuitka/tree/ReformulationClasses.py +407 -0
- nuitka/tree/ReformulationClasses3.py +1149 -0
- nuitka/tree/ReformulationComparisonExpressions.py +174 -0
- nuitka/tree/ReformulationContractionExpressions.py +676 -0
- nuitka/tree/ReformulationDictionaryCreation.py +304 -0
- nuitka/tree/ReformulationExecStatements.py +386 -0
- nuitka/tree/ReformulationForLoopStatements.py +215 -0
- nuitka/tree/ReformulationFunctionStatements.py +931 -0
- nuitka/tree/ReformulationImportStatements.py +333 -0
- nuitka/tree/ReformulationLambdaExpressions.py +185 -0
- nuitka/tree/ReformulationMatchStatements.py +797 -0
- nuitka/tree/ReformulationMultidist.py +80 -0
- nuitka/tree/ReformulationNamespacePackages.py +239 -0
- nuitka/tree/ReformulationPrintStatements.py +127 -0
- nuitka/tree/ReformulationSequenceCreation.py +438 -0
- nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
- nuitka/tree/ReformulationTryExceptStatements.py +418 -0
- nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
- nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
- nuitka/tree/ReformulationWithStatements.py +382 -0
- nuitka/tree/ReformulationYieldExpressions.py +133 -0
- nuitka/tree/SourceHandling.py +476 -0
- nuitka/tree/SyntaxErrors.py +143 -0
- nuitka/tree/TreeHelpers.py +720 -0
- nuitka/tree/VariableClosure.py +483 -0
- nuitka/tree/__init__.py +19 -0
- nuitka/utils/AppDirs.py +104 -0
- nuitka/utils/CStrings.py +208 -0
- nuitka/utils/CommandLineOptions.py +207 -0
- nuitka/utils/Distributions.py +728 -0
- nuitka/utils/Download.py +217 -0
- nuitka/utils/Execution.py +517 -0
- nuitka/utils/FileOperations.py +1587 -0
- nuitka/utils/Hashing.py +137 -0
- nuitka/utils/Images.py +79 -0
- nuitka/utils/Importing.py +335 -0
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +254 -0
- nuitka/utils/InstanceCounters.py +86 -0
- nuitka/utils/Jinja2.py +158 -0
- nuitka/utils/Json.py +40 -0
- nuitka/utils/MacOSApp.py +134 -0
- nuitka/utils/MemoryUsage.py +165 -0
- nuitka/utils/ModuleNames.py +317 -0
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +152 -0
- nuitka/utils/Rest.py +60 -0
- nuitka/utils/SharedLibraries.py +1014 -0
- nuitka/utils/Shebang.py +113 -0
- nuitka/utils/Signing.py +144 -0
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +260 -0
- nuitka/utils/ThreadedExecutor.py +87 -0
- nuitka/utils/Timing.py +102 -0
- nuitka/utils/Utils.py +483 -0
- nuitka/utils/WindowsFileUsage.py +337 -0
- nuitka/utils/WindowsResources.py +652 -0
- nuitka/utils/Yaml.py +247 -0
- nuitka/utils/__init__.py +19 -0
- nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
- nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
- nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
- nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
- nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
- nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
- nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
- nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1458 @@
|
|
|
1
|
+
// Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
#ifndef __NUITKA_EXCEPTIONS_H__
|
|
4
|
+
#define __NUITKA_EXCEPTIONS_H__
|
|
5
|
+
|
|
6
|
+
// Exception helpers for generated code and compiled code helpers.
|
|
7
|
+
|
|
8
|
+
// Fundamental, because we use it for print style debugging in everything.
|
|
9
|
+
#include "nuitka/checkers.h"
|
|
10
|
+
#include "nuitka/constants.h"
|
|
11
|
+
#include "nuitka/printing.h"
|
|
12
|
+
|
|
13
|
+
// Did an error occur.
|
|
14
|
+
NUITKA_MAY_BE_UNUSED static inline bool HAS_ERROR_OCCURRED(PyThreadState const *tstate) {
|
|
15
|
+
#if PYTHON_VERSION < 0x3c0
|
|
16
|
+
return tstate->curexc_type != NULL;
|
|
17
|
+
#else
|
|
18
|
+
return tstate->current_exception != NULL;
|
|
19
|
+
#endif
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Get the error type occurred, no reference given.
|
|
23
|
+
NUITKA_MAY_BE_UNUSED static inline PyObject *GET_ERROR_OCCURRED(PyThreadState const *const tstate) {
|
|
24
|
+
#if PYTHON_VERSION < 0x3c0
|
|
25
|
+
return tstate->curexc_type;
|
|
26
|
+
#else
|
|
27
|
+
return tstate->current_exception ? (PyObject *)PyExceptionInstance_Class(tstate->current_exception) : NULL;
|
|
28
|
+
#endif
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Checks that an exception value is normalized or NULL.
|
|
32
|
+
NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE_X(PyObject const *const exception_value) {
|
|
33
|
+
CHECK_OBJECT_X(exception_value);
|
|
34
|
+
assert(exception_value == NULL || PyExceptionInstance_Check(exception_value));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Checks that an exception value is normalized and not NULL.
|
|
38
|
+
NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE(PyObject *exception_value) {
|
|
39
|
+
CHECK_OBJECT(exception_value);
|
|
40
|
+
assert(PyExceptionInstance_Check(exception_value));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Clear error, which likely set, similar to "_PyErr_Clear(tstate)" and "PyErr_Clear"
|
|
44
|
+
NUITKA_MAY_BE_UNUSED static inline void CLEAR_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
45
|
+
#if PYTHON_VERSION < 0x3c0
|
|
46
|
+
PyObject *old_type = tstate->curexc_type;
|
|
47
|
+
PyObject *old_value = tstate->curexc_value;
|
|
48
|
+
PyObject *old_tb = tstate->curexc_traceback;
|
|
49
|
+
|
|
50
|
+
tstate->curexc_type = NULL;
|
|
51
|
+
tstate->curexc_value = NULL;
|
|
52
|
+
tstate->curexc_traceback = NULL;
|
|
53
|
+
|
|
54
|
+
Py_XDECREF(old_type);
|
|
55
|
+
Py_XDECREF(old_value);
|
|
56
|
+
Py_XDECREF(old_tb);
|
|
57
|
+
#else
|
|
58
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
59
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
60
|
+
|
|
61
|
+
tstate->current_exception = NULL;
|
|
62
|
+
|
|
63
|
+
Py_XDECREF(old_exception_value);
|
|
64
|
+
#endif
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Clear error, which is not likely set, use "CLEAR_ERROR_OCCURRED" not sure there is an error.
|
|
68
|
+
NUITKA_MAY_BE_UNUSED static inline bool DROP_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
69
|
+
|
|
70
|
+
#if PYTHON_VERSION < 0x3c0
|
|
71
|
+
if (unlikely(tstate->curexc_type != NULL)) {
|
|
72
|
+
PyObject *old_type = tstate->curexc_type;
|
|
73
|
+
PyObject *old_value = tstate->curexc_value;
|
|
74
|
+
PyObject *old_tb = tstate->curexc_traceback;
|
|
75
|
+
|
|
76
|
+
tstate->curexc_type = NULL;
|
|
77
|
+
tstate->curexc_value = NULL;
|
|
78
|
+
tstate->curexc_traceback = NULL;
|
|
79
|
+
|
|
80
|
+
Py_DECREF(old_type);
|
|
81
|
+
Py_XDECREF(old_value);
|
|
82
|
+
Py_XDECREF(old_tb);
|
|
83
|
+
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
#else
|
|
87
|
+
if (unlikely(tstate->current_exception != NULL)) {
|
|
88
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
89
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(old_exception_value);
|
|
90
|
+
|
|
91
|
+
tstate->current_exception = NULL;
|
|
92
|
+
|
|
93
|
+
Py_DECREF(old_exception_value);
|
|
94
|
+
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
#endif
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
#if PYTHON_VERSION < 0x3c0
|
|
102
|
+
// Fetch the current error into object variables, transfers reference coming from tstate ownership
|
|
103
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED(PyThreadState *tstate, PyObject **exception_type,
|
|
104
|
+
PyObject **exception_value,
|
|
105
|
+
PyTracebackObject **exception_traceback) {
|
|
106
|
+
*exception_type = tstate->curexc_type;
|
|
107
|
+
*exception_value = tstate->curexc_value;
|
|
108
|
+
*exception_traceback = (PyTracebackObject *)tstate->curexc_traceback;
|
|
109
|
+
|
|
110
|
+
#if _DEBUG_EXCEPTIONS
|
|
111
|
+
PRINT_STRING("FETCH_ERROR_OCCURRED:\n");
|
|
112
|
+
PRINT_CURRENT_EXCEPTION();
|
|
113
|
+
#endif
|
|
114
|
+
|
|
115
|
+
tstate->curexc_type = NULL;
|
|
116
|
+
tstate->curexc_value = NULL;
|
|
117
|
+
tstate->curexc_traceback = NULL;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Fetch the current error into object variables.
|
|
121
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_UNTRACED(PyThreadState *tstate, PyObject **exception_type,
|
|
122
|
+
PyObject **exception_value,
|
|
123
|
+
PyTracebackObject **exception_traceback) {
|
|
124
|
+
*exception_type = tstate->curexc_type;
|
|
125
|
+
*exception_value = tstate->curexc_value;
|
|
126
|
+
*exception_traceback = (PyTracebackObject *)tstate->curexc_traceback;
|
|
127
|
+
|
|
128
|
+
tstate->curexc_type = NULL;
|
|
129
|
+
tstate->curexc_value = NULL;
|
|
130
|
+
tstate->curexc_traceback = NULL;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
NUITKA_MAY_BE_UNUSED static void RESTORE_ERROR_OCCURRED(PyThreadState *tstate, PyObject *exception_type,
|
|
134
|
+
PyObject *exception_value,
|
|
135
|
+
PyTracebackObject *exception_traceback) {
|
|
136
|
+
PyObject *old_exception_type = tstate->curexc_type;
|
|
137
|
+
PyObject *old_exception_value = tstate->curexc_value;
|
|
138
|
+
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
139
|
+
|
|
140
|
+
tstate->curexc_type = exception_type;
|
|
141
|
+
tstate->curexc_value = exception_value;
|
|
142
|
+
tstate->curexc_traceback = (PyObject *)exception_traceback;
|
|
143
|
+
|
|
144
|
+
#if _DEBUG_EXCEPTIONS
|
|
145
|
+
PRINT_STRING("RESTORE_ERROR_OCCURRED:\n");
|
|
146
|
+
PRINT_CURRENT_EXCEPTION();
|
|
147
|
+
#endif
|
|
148
|
+
|
|
149
|
+
Py_XDECREF(old_exception_type);
|
|
150
|
+
Py_XDECREF(old_exception_value);
|
|
151
|
+
Py_XDECREF(old_exception_traceback);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
NUITKA_MAY_BE_UNUSED static void RESTORE_ERROR_OCCURRED_UNTRACED(PyThreadState *tstate, PyObject *exception_type,
|
|
155
|
+
PyObject *exception_value,
|
|
156
|
+
PyTracebackObject *exception_traceback) {
|
|
157
|
+
PyObject *old_exception_type = tstate->curexc_type;
|
|
158
|
+
PyObject *old_exception_value = tstate->curexc_value;
|
|
159
|
+
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
160
|
+
|
|
161
|
+
tstate->curexc_type = exception_type;
|
|
162
|
+
tstate->curexc_value = exception_value;
|
|
163
|
+
tstate->curexc_traceback = (PyObject *)exception_traceback;
|
|
164
|
+
|
|
165
|
+
Py_XDECREF(old_exception_type);
|
|
166
|
+
Py_XDECREF(old_exception_value);
|
|
167
|
+
Py_XDECREF(old_exception_traceback);
|
|
168
|
+
}
|
|
169
|
+
#endif
|
|
170
|
+
|
|
171
|
+
struct Nuitka_FrameObject;
|
|
172
|
+
|
|
173
|
+
extern PyTracebackObject *MAKE_TRACEBACK(struct Nuitka_FrameObject *frame, int lineno);
|
|
174
|
+
|
|
175
|
+
// Add a frame to an existing exception trace-back.
|
|
176
|
+
NUITKA_MAY_BE_UNUSED static PyTracebackObject *ADD_TRACEBACK(PyTracebackObject *exception_tb,
|
|
177
|
+
struct Nuitka_FrameObject *frame, int lineno) {
|
|
178
|
+
CHECK_OBJECT(exception_tb);
|
|
179
|
+
CHECK_OBJECT(frame);
|
|
180
|
+
|
|
181
|
+
PyTracebackObject *traceback_new = MAKE_TRACEBACK(frame, lineno);
|
|
182
|
+
traceback_new->tb_next = exception_tb;
|
|
183
|
+
Py_INCREF(exception_tb);
|
|
184
|
+
return traceback_new;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Need some wrapper functions for accessing exception type, value, and traceback
|
|
188
|
+
// due to changes in Python 3.7
|
|
189
|
+
|
|
190
|
+
#if PYTHON_VERSION < 0x370
|
|
191
|
+
#define EXC_TYPE(x) (x->exc_type)
|
|
192
|
+
#define EXC_VALUE(x) (x->exc_value)
|
|
193
|
+
#define EXC_TRACEBACK(x) ((PyTracebackObject *)(x->exc_traceback))
|
|
194
|
+
#define EXC_TRACEBACK_PTR(x) ((PyTracebackObject **)(&x->exc_traceback))
|
|
195
|
+
#define SET_EXC_TRACEBACK(x, tb) x->exc_traceback = (PyObject *)tb
|
|
196
|
+
#elif PYTHON_VERSION < 0x3b0
|
|
197
|
+
#define EXC_TYPE(x) (x->exc_state.exc_type)
|
|
198
|
+
#define EXC_VALUE(x) (x->exc_state.exc_value)
|
|
199
|
+
#define EXC_TRACEBACK(x) ((PyTracebackObject *)(x->exc_state.exc_traceback))
|
|
200
|
+
#define EXC_TRACEBACK_PTR(x) ((PyTracebackObject **)(&x->exc_state.exc_traceback))
|
|
201
|
+
#define SET_EXC_TRACEBACK(x, tb) x->exc_state.exc_traceback = (PyObject *)tb
|
|
202
|
+
#else
|
|
203
|
+
#define EXC_TYPE(x) ((PyObject *)Py_TYPE(x->exc_state.exc_value))
|
|
204
|
+
#define EXC_VALUE(x) (x->exc_state.exc_value)
|
|
205
|
+
#endif
|
|
206
|
+
|
|
207
|
+
#if PYTHON_VERSION < 0x370
|
|
208
|
+
#define EXC_TYPE_F(x) (x->m_frame->m_frame.f_exc_type)
|
|
209
|
+
#define EXC_VALUE_F(x) (x->m_frame->m_frame.f_exc_value)
|
|
210
|
+
#define EXC_TRACEBACK_F(x) (x->m_frame->m_frame.f_exc_traceback)
|
|
211
|
+
#define ASSIGN_EXC_TRACEBACK_F(x, tb) x->m_frame->m_frame.f_exc_traceback = (PyObject *)(tb)
|
|
212
|
+
#elif PYTHON_VERSION < 0x3b0
|
|
213
|
+
#define EXC_TYPE_F(x) (x->m_exc_state.exception_type)
|
|
214
|
+
#define EXC_VALUE_F(x) (x->m_exc_state.exception_value)
|
|
215
|
+
#define EXC_TRACEBACK_F(x) (x->m_exc_state.exception_tb)
|
|
216
|
+
#define ASSIGN_EXC_TRACEBACK_F(x, tb) x->m_exc_state.exception_tb = (PyTracebackObject *)(tb)
|
|
217
|
+
#else
|
|
218
|
+
#define EXC_VALUE_F(x) (x->m_exc_state.exception_value)
|
|
219
|
+
#endif
|
|
220
|
+
|
|
221
|
+
#if PYTHON_VERSION < 0x3b0
|
|
222
|
+
struct Nuitka_ExceptionStackItem {
|
|
223
|
+
PyObject *exception_type;
|
|
224
|
+
PyObject *exception_value;
|
|
225
|
+
PyTracebackObject *exception_tb;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
#if defined(__cplusplus)
|
|
229
|
+
static const struct Nuitka_ExceptionStackItem Nuitka_ExceptionStackItem_Empty = {NULL, NULL, NULL};
|
|
230
|
+
#else
|
|
231
|
+
#define Nuitka_ExceptionStackItem_Empty \
|
|
232
|
+
(struct Nuitka_ExceptionStackItem) { .exception_type = NULL, .exception_value = NULL, .exception_tb = NULL }
|
|
233
|
+
#endif
|
|
234
|
+
#else
|
|
235
|
+
struct Nuitka_ExceptionStackItem {
|
|
236
|
+
PyObject *exception_value;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
#if defined(__cplusplus)
|
|
240
|
+
static const struct Nuitka_ExceptionStackItem Nuitka_ExceptionStackItem_Empty = {NULL};
|
|
241
|
+
#else
|
|
242
|
+
#define Nuitka_ExceptionStackItem_Empty \
|
|
243
|
+
(struct Nuitka_ExceptionStackItem) { .exception_value = NULL }
|
|
244
|
+
#endif
|
|
245
|
+
|
|
246
|
+
#endif
|
|
247
|
+
|
|
248
|
+
// Helper that gets the current thread exception, for use in exception handlers
|
|
249
|
+
NUITKA_MAY_BE_UNUSED inline static struct Nuitka_ExceptionStackItem GET_CURRENT_EXCEPTION(PyThreadState *tstate) {
|
|
250
|
+
struct Nuitka_ExceptionStackItem result;
|
|
251
|
+
#if PYTHON_VERSION < 0x3b0
|
|
252
|
+
result.exception_type = EXC_TYPE(tstate);
|
|
253
|
+
Py_XINCREF(result.exception_type);
|
|
254
|
+
#endif
|
|
255
|
+
result.exception_value = EXC_VALUE(tstate);
|
|
256
|
+
Py_XINCREF(result.exception_value);
|
|
257
|
+
#if PYTHON_VERSION < 0x3b0
|
|
258
|
+
result.exception_tb = (PyTracebackObject *)EXC_TRACEBACK(tstate);
|
|
259
|
+
Py_XINCREF(result.exception_tb);
|
|
260
|
+
#endif
|
|
261
|
+
|
|
262
|
+
return result;
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
#if PYTHON_VERSION < 0x300 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_SYS_EXC_VARS)
|
|
266
|
+
#define _NUITKA_MAINTAIN_SYS_EXC_VARS 1
|
|
267
|
+
#endif
|
|
268
|
+
|
|
269
|
+
// Helper that sets the current thread exception, releasing the current one, for
|
|
270
|
+
// use in this file only.
|
|
271
|
+
NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION(PyThreadState *tstate,
|
|
272
|
+
struct Nuitka_ExceptionStackItem *exc_state) {
|
|
273
|
+
#if PYTHON_VERSION < 0x3b0
|
|
274
|
+
CHECK_OBJECT_X(exc_state->exception_type);
|
|
275
|
+
#endif
|
|
276
|
+
CHECK_OBJECT_X(exc_state->exception_value);
|
|
277
|
+
#if PYTHON_VERSION < 0x3b0
|
|
278
|
+
CHECK_OBJECT_X(exc_state->exception_tb);
|
|
279
|
+
#endif
|
|
280
|
+
|
|
281
|
+
#if PYTHON_VERSION < 0x3b0
|
|
282
|
+
PyObject *old_type = EXC_TYPE(tstate);
|
|
283
|
+
#endif
|
|
284
|
+
PyObject *old_value = EXC_VALUE(tstate);
|
|
285
|
+
#if PYTHON_VERSION < 0x3b0
|
|
286
|
+
PyTracebackObject *old_tb = EXC_TRACEBACK(tstate);
|
|
287
|
+
#endif
|
|
288
|
+
|
|
289
|
+
#if PYTHON_VERSION < 0x3b0
|
|
290
|
+
CHECK_OBJECT_X(old_type);
|
|
291
|
+
#endif
|
|
292
|
+
CHECK_OBJECT_X(old_value);
|
|
293
|
+
#if PYTHON_VERSION < 0x3b0
|
|
294
|
+
CHECK_OBJECT_X(old_tb);
|
|
295
|
+
#endif
|
|
296
|
+
|
|
297
|
+
#if PYTHON_VERSION < 0x3b0
|
|
298
|
+
EXC_TYPE(tstate) = exc_state->exception_type;
|
|
299
|
+
#endif
|
|
300
|
+
EXC_VALUE(tstate) = exc_state->exception_value;
|
|
301
|
+
#if PYTHON_VERSION < 0x3b0
|
|
302
|
+
SET_EXC_TRACEBACK(tstate, exc_state->exception_tb);
|
|
303
|
+
#endif
|
|
304
|
+
|
|
305
|
+
#if _DEBUG_EXCEPTIONS
|
|
306
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION:\n");
|
|
307
|
+
PRINT_PUBLISHED_EXCEPTION();
|
|
308
|
+
#endif
|
|
309
|
+
|
|
310
|
+
#if PYTHON_VERSION < 0x3b0
|
|
311
|
+
Py_XDECREF(old_type);
|
|
312
|
+
#endif
|
|
313
|
+
Py_XDECREF(old_value);
|
|
314
|
+
#if PYTHON_VERSION < 0x3b0
|
|
315
|
+
Py_XDECREF(old_tb);
|
|
316
|
+
#endif
|
|
317
|
+
|
|
318
|
+
#if _NUITKA_MAINTAIN_SYS_EXC_VARS
|
|
319
|
+
// Set sys attributes in the fastest possible way, spell-checker: ignore sysdict
|
|
320
|
+
PyObject *sys_dict = tstate->interp->sysdict;
|
|
321
|
+
CHECK_OBJECT(sys_dict);
|
|
322
|
+
|
|
323
|
+
PyDict_SetItem(sys_dict, const_str_plain_exc_type, exc_state->exception_type ? exc_state->exception_type : Py_None);
|
|
324
|
+
PyDict_SetItem(sys_dict, const_str_plain_exc_value,
|
|
325
|
+
exc_state->exception_value ? exc_state->exception_value : Py_None);
|
|
326
|
+
PyDict_SetItem(sys_dict, const_str_plain_exc_traceback,
|
|
327
|
+
exc_state->exception_tb ? (PyObject *)exc_state->exception_tb : Py_None);
|
|
328
|
+
|
|
329
|
+
if (exc_state->exception_type) {
|
|
330
|
+
assert(Py_REFCNT(exc_state->exception_type) >= 2);
|
|
331
|
+
}
|
|
332
|
+
if (exc_state->exception_value) {
|
|
333
|
+
assert(Py_REFCNT(exc_state->exception_value) >= 2);
|
|
334
|
+
}
|
|
335
|
+
if (exc_state->exception_tb) {
|
|
336
|
+
assert(Py_REFCNT(exc_state->exception_tb) >= 2);
|
|
337
|
+
}
|
|
338
|
+
#endif
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Normalize an exception, may release old values and replace them, expects
|
|
342
|
+
// references passed and returns them.
|
|
343
|
+
NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
|
|
344
|
+
PyObject **exception_value,
|
|
345
|
+
PyTracebackObject **exception_tb);
|
|
346
|
+
|
|
347
|
+
extern PyObject *NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(PyThreadState *tstate, PyObject *exception_type);
|
|
348
|
+
|
|
349
|
+
// Helper that sets the current thread exception, and has no reference passed.
|
|
350
|
+
// Similar to "PyErr_SetNone".
|
|
351
|
+
NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0(PyThreadState *tstate, PyObject *exception_type) {
|
|
352
|
+
CHECK_OBJECT(exception_type);
|
|
353
|
+
|
|
354
|
+
#if PYTHON_VERSION < 0x3c0
|
|
355
|
+
PyObject *old_exception_type = tstate->curexc_type;
|
|
356
|
+
PyObject *old_exception_value = tstate->curexc_value;
|
|
357
|
+
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
358
|
+
|
|
359
|
+
tstate->curexc_type = exception_type;
|
|
360
|
+
Py_INCREF(exception_type);
|
|
361
|
+
tstate->curexc_value = NULL;
|
|
362
|
+
tstate->curexc_traceback = NULL;
|
|
363
|
+
|
|
364
|
+
#if _DEBUG_EXCEPTIONS
|
|
365
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0:\n");
|
|
366
|
+
PRINT_CURRENT_EXCEPTION();
|
|
367
|
+
#endif
|
|
368
|
+
|
|
369
|
+
Py_XDECREF(old_exception_type);
|
|
370
|
+
Py_XDECREF(old_exception_value);
|
|
371
|
+
Py_XDECREF(old_exception_traceback);
|
|
372
|
+
#else
|
|
373
|
+
PyObject *old_exception = tstate->current_exception;
|
|
374
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception);
|
|
375
|
+
|
|
376
|
+
// TODO: Make the call, exception creation on the outside somehow.
|
|
377
|
+
PyObject *exception_value = NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(tstate, exception_type);
|
|
378
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
379
|
+
tstate->current_exception = exception_value;
|
|
380
|
+
|
|
381
|
+
#if _DEBUG_EXCEPTIONS
|
|
382
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0:\n");
|
|
383
|
+
PRINT_CURRENT_EXCEPTION();
|
|
384
|
+
#endif
|
|
385
|
+
|
|
386
|
+
Py_XDECREF(old_exception);
|
|
387
|
+
#endif
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// Same as "PyErr_SetObject" CPython API, use this instead.
|
|
391
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
392
|
+
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
|
|
393
|
+
CHECK_OBJECT(exception_type);
|
|
394
|
+
CHECK_OBJECT(exception_value);
|
|
395
|
+
|
|
396
|
+
#if PYTHON_VERSION < 0x3c0
|
|
397
|
+
PyObject *old_exception_type = tstate->curexc_type;
|
|
398
|
+
PyObject *old_exception_value = tstate->curexc_value;
|
|
399
|
+
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
400
|
+
|
|
401
|
+
tstate->curexc_type = exception_type;
|
|
402
|
+
Py_INCREF(exception_type);
|
|
403
|
+
tstate->curexc_value = exception_value;
|
|
404
|
+
Py_INCREF(exception_value);
|
|
405
|
+
tstate->curexc_traceback = NULL;
|
|
406
|
+
|
|
407
|
+
#if _DEBUG_EXCEPTIONS
|
|
408
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE0:\n");
|
|
409
|
+
PRINT_CURRENT_EXCEPTION();
|
|
410
|
+
#endif
|
|
411
|
+
|
|
412
|
+
Py_XDECREF(old_exception_type);
|
|
413
|
+
Py_XDECREF(old_exception_value);
|
|
414
|
+
Py_XDECREF(old_exception_traceback);
|
|
415
|
+
#else
|
|
416
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
417
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
418
|
+
|
|
419
|
+
// TODO: Make the call on the outside.
|
|
420
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
421
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
422
|
+
tstate->current_exception = exception_value;
|
|
423
|
+
Py_INCREF(exception_value);
|
|
424
|
+
|
|
425
|
+
#if _DEBUG_EXCEPTIONS
|
|
426
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE_0_VALUE0:\n");
|
|
427
|
+
PRINT_CURRENT_EXCEPTION();
|
|
428
|
+
#endif
|
|
429
|
+
|
|
430
|
+
Py_XDECREF(old_exception_value);
|
|
431
|
+
#endif
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// TODO: For Python3.12 it would be nice to know it's normalized already, so we
|
|
435
|
+
// can avoid the call to "NORMALIZE_EXCEPTION".
|
|
436
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
437
|
+
SET_CURRENT_EXCEPTION_TYPE0_VALUE1(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
|
|
438
|
+
CHECK_OBJECT(exception_type);
|
|
439
|
+
CHECK_OBJECT(exception_value);
|
|
440
|
+
|
|
441
|
+
#if PYTHON_VERSION < 0x3c0
|
|
442
|
+
PyObject *old_exception_type = tstate->curexc_type;
|
|
443
|
+
PyObject *old_exception_value = tstate->curexc_value;
|
|
444
|
+
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
445
|
+
|
|
446
|
+
tstate->curexc_type = exception_type;
|
|
447
|
+
Py_INCREF(exception_type);
|
|
448
|
+
tstate->curexc_value = exception_value;
|
|
449
|
+
tstate->curexc_traceback = NULL;
|
|
450
|
+
|
|
451
|
+
#if _DEBUG_EXCEPTIONS
|
|
452
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE1:\n");
|
|
453
|
+
PRINT_CURRENT_EXCEPTION();
|
|
454
|
+
#endif
|
|
455
|
+
|
|
456
|
+
Py_XDECREF(old_exception_type);
|
|
457
|
+
Py_XDECREF(old_exception_value);
|
|
458
|
+
Py_XDECREF(old_exception_traceback);
|
|
459
|
+
#else
|
|
460
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
461
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
462
|
+
|
|
463
|
+
// TODO: Make the call, exception creation on the outside somehow.
|
|
464
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
465
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_value);
|
|
466
|
+
tstate->current_exception = exception_value;
|
|
467
|
+
|
|
468
|
+
#if _DEBUG_EXCEPTIONS
|
|
469
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE1:\n");
|
|
470
|
+
PRINT_CURRENT_EXCEPTION();
|
|
471
|
+
#endif
|
|
472
|
+
|
|
473
|
+
Py_XDECREF(old_exception_value);
|
|
474
|
+
#endif
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// Helper that sets the current thread exception, and has no reference passed.
|
|
478
|
+
// Same as CPython API PyErr_SetString
|
|
479
|
+
|
|
480
|
+
NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0_STR(PyThreadState *tstate, PyObject *exception_type,
|
|
481
|
+
char const *value) {
|
|
482
|
+
PyObject *exception_value = Nuitka_String_FromString(value);
|
|
483
|
+
|
|
484
|
+
SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, exception_type, exception_value);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Helper that sets the current thread exception with format of one or two arg, and has no reference passed.
|
|
488
|
+
extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyObject *exception_type, char const *format, char const *value);
|
|
489
|
+
extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT2(PyObject *exception_type, char const *format, char const *value1,
|
|
490
|
+
char const *value2);
|
|
491
|
+
extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT3(PyObject *exception_type, char const *format, char const *value1,
|
|
492
|
+
char const *value2, char const *value3);
|
|
493
|
+
|
|
494
|
+
extern void SET_CURRENT_EXCEPTION_TYPE_COMPLAINT(char const *format, PyObject *mistyped);
|
|
495
|
+
extern void SET_CURRENT_EXCEPTION_TYPE_COMPLAINT_NICE(char const *format, PyObject *mistyped);
|
|
496
|
+
|
|
497
|
+
#if PYTHON_VERSION < 0x300
|
|
498
|
+
|
|
499
|
+
// Preserve the current exception as the frame to restore.
|
|
500
|
+
NUITKA_MAY_BE_UNUSED static inline void PRESERVE_FRAME_EXCEPTION(PyThreadState *tstate,
|
|
501
|
+
struct Nuitka_FrameObject *frame_object) {
|
|
502
|
+
PyFrameObject *frame = (PyFrameObject *)frame_object;
|
|
503
|
+
|
|
504
|
+
// Setting exception for frame if not already done.
|
|
505
|
+
if (frame->f_exc_type == NULL) {
|
|
506
|
+
if (tstate->exc_type != NULL && tstate->exc_type != Py_None) {
|
|
507
|
+
#if _DEBUG_EXCEPTIONS
|
|
508
|
+
PRINT_STRING("PRESERVE_FRAME_EXCEPTION: preserve thread exception\n");
|
|
509
|
+
#endif
|
|
510
|
+
frame->f_exc_type = tstate->exc_type;
|
|
511
|
+
Py_INCREF(frame->f_exc_type);
|
|
512
|
+
frame->f_exc_value = tstate->exc_value;
|
|
513
|
+
Py_XINCREF(frame->f_exc_value);
|
|
514
|
+
frame->f_exc_traceback = tstate->exc_traceback;
|
|
515
|
+
Py_XINCREF(frame->f_exc_traceback);
|
|
516
|
+
} else {
|
|
517
|
+
#if _DEBUG_EXCEPTIONS
|
|
518
|
+
PRINT_STRING("PRESERVE_FRAME_EXCEPTION: no exception to preserve\n");
|
|
519
|
+
#endif
|
|
520
|
+
frame->f_exc_type = Py_None;
|
|
521
|
+
Py_INCREF_IMMORTAL(frame->f_exc_type);
|
|
522
|
+
frame->f_exc_value = NULL;
|
|
523
|
+
frame->f_exc_traceback = NULL;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
#if _DEBUG_EXCEPTIONS
|
|
527
|
+
else {
|
|
528
|
+
PRINT_STRING("PRESERVE_FRAME_EXCEPTION: already preserving\n");
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
PRINT_ITEM((PyObject *)frame_object);
|
|
532
|
+
PRINT_NEW_LINE();
|
|
533
|
+
PRINT_EXCEPTION(frame->f_exc_type, frame->f_exc_value, (PyTracebackObject *)frame->f_exc_traceback);
|
|
534
|
+
#endif
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Restore a previously preserved exception to the frame.
|
|
538
|
+
NUITKA_MAY_BE_UNUSED static inline void RESTORE_FRAME_EXCEPTION(PyThreadState *tstate,
|
|
539
|
+
struct Nuitka_FrameObject *frame_object) {
|
|
540
|
+
PyFrameObject *frame = (PyFrameObject *)frame_object;
|
|
541
|
+
|
|
542
|
+
if (frame->f_exc_type) {
|
|
543
|
+
#if _DEBUG_EXCEPTIONS
|
|
544
|
+
PRINT_STRING("RESTORE_FRAME_EXCEPTION: restoring preserved\n");
|
|
545
|
+
PRINT_ITEM((PyObject *)frame_object);
|
|
546
|
+
PRINT_NEW_LINE();
|
|
547
|
+
#endif
|
|
548
|
+
|
|
549
|
+
struct Nuitka_ExceptionStackItem exc_state;
|
|
550
|
+
|
|
551
|
+
exc_state.exception_type = frame->f_exc_type;
|
|
552
|
+
exc_state.exception_value = frame->f_exc_value;
|
|
553
|
+
exc_state.exception_tb = (PyTracebackObject *)frame->f_exc_traceback;
|
|
554
|
+
|
|
555
|
+
SET_CURRENT_EXCEPTION(tstate, &exc_state);
|
|
556
|
+
|
|
557
|
+
frame->f_exc_type = NULL;
|
|
558
|
+
frame->f_exc_value = NULL;
|
|
559
|
+
frame->f_exc_traceback = NULL;
|
|
560
|
+
}
|
|
561
|
+
#if _DEBUG_EXCEPTIONS
|
|
562
|
+
else {
|
|
563
|
+
PRINT_STRING("RESTORE_FRAME_EXCEPTION: nothing to restore\n");
|
|
564
|
+
PRINT_ITEM((PyObject *)frame_object);
|
|
565
|
+
PRINT_NEW_LINE();
|
|
566
|
+
}
|
|
567
|
+
#endif
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
#endif
|
|
571
|
+
|
|
572
|
+
// Similar to "PyException_SetTraceback", only done for Python3.
|
|
573
|
+
#if PYTHON_VERSION < 0x300
|
|
574
|
+
#define ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb) ;
|
|
575
|
+
#else
|
|
576
|
+
NUITKA_MAY_BE_UNUSED static inline void ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(PyObject *exception_value,
|
|
577
|
+
PyTracebackObject *exception_tb) {
|
|
578
|
+
CHECK_OBJECT(exception_value);
|
|
579
|
+
CHECK_OBJECT_X(exception_tb);
|
|
580
|
+
|
|
581
|
+
if (exception_tb == (PyTracebackObject *)Py_None) {
|
|
582
|
+
exception_tb = NULL;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
assert(PyExceptionInstance_Check(exception_value));
|
|
586
|
+
assert(exception_tb == NULL || PyTraceBack_Check(exception_tb));
|
|
587
|
+
|
|
588
|
+
PyBaseExceptionObject *e = (PyBaseExceptionObject *)exception_value;
|
|
589
|
+
|
|
590
|
+
PyObject *old = e->traceback;
|
|
591
|
+
Py_XINCREF(exception_tb);
|
|
592
|
+
e->traceback = (PyObject *)exception_tb;
|
|
593
|
+
Py_XDECREF(old);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// Much like "PyException_GetTraceback", but does not give a reference.
|
|
597
|
+
NUITKA_MAY_BE_UNUSED static inline PyTracebackObject *GET_EXCEPTION_TRACEBACK(PyObject *exception_value) {
|
|
598
|
+
CHECK_OBJECT(exception_value);
|
|
599
|
+
assert(PyExceptionInstance_Check(exception_value));
|
|
600
|
+
|
|
601
|
+
PyBaseExceptionObject *exc_object = (PyBaseExceptionObject *)(exception_value);
|
|
602
|
+
return (PyTracebackObject *)exc_object->traceback;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
#endif
|
|
606
|
+
|
|
607
|
+
NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tstate, PyObject *exception_value,
|
|
608
|
+
PyObject *exception_checked);
|
|
609
|
+
|
|
610
|
+
NUITKA_MAY_BE_UNUSED static bool _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(PyThreadState *tstate, PyObject *exception_type) {
|
|
611
|
+
#if PYTHON_VERSION < 0x3c0
|
|
612
|
+
PyObject *exception_current = tstate->curexc_type;
|
|
613
|
+
#else
|
|
614
|
+
PyObject *exception_current = tstate->current_exception;
|
|
615
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_current);
|
|
616
|
+
#endif
|
|
617
|
+
if (exception_current == NULL) {
|
|
618
|
+
return true;
|
|
619
|
+
} else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
|
|
620
|
+
CHECK_OBJECT(exception_current);
|
|
621
|
+
|
|
622
|
+
#if PYTHON_VERSION < 0x3c0
|
|
623
|
+
// Clear the exception first, we believe we know it doesn't have side effects.
|
|
624
|
+
Py_DECREF(exception_current);
|
|
625
|
+
tstate->curexc_type = NULL;
|
|
626
|
+
|
|
627
|
+
PyObject *old_value = tstate->curexc_value;
|
|
628
|
+
PyObject *old_tb = tstate->curexc_traceback;
|
|
629
|
+
|
|
630
|
+
tstate->curexc_value = NULL;
|
|
631
|
+
tstate->curexc_traceback = NULL;
|
|
632
|
+
|
|
633
|
+
Py_XDECREF(old_value);
|
|
634
|
+
Py_XDECREF(old_tb);
|
|
635
|
+
#else
|
|
636
|
+
tstate->current_exception = NULL;
|
|
637
|
+
Py_DECREF(exception_current);
|
|
638
|
+
#endif
|
|
639
|
+
|
|
640
|
+
return true;
|
|
641
|
+
} else {
|
|
642
|
+
return false;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/* Special helper that checks for StopIteration and if so clears it, only
|
|
647
|
+
indicating if it was set in the return value.
|
|
648
|
+
|
|
649
|
+
Equivalent to if(PyErr_ExceptionMatches(PyExc_StopIteration) PyErr_Clear();
|
|
650
|
+
|
|
651
|
+
If error is raised by built-in function next() and an iterator's __next__()
|
|
652
|
+
method to signal that there are no further items produced by the iterator then
|
|
653
|
+
it resets the TSTATE to NULL and returns True else return False
|
|
654
|
+
|
|
655
|
+
*/
|
|
656
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(PyThreadState *tstate) {
|
|
657
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_StopIteration);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/* Special helper that checks for KeyError and if so clears it, only
|
|
661
|
+
indicating if it was set in the return value.
|
|
662
|
+
|
|
663
|
+
Equivalent to if(PyErr_ExceptionMatches(PyExc_KeyError) PyErr_Clear();
|
|
664
|
+
|
|
665
|
+
*/
|
|
666
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_KEY_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
667
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_KeyError);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_ATTRIBUTE_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
671
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_AttributeError);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
675
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_TUPLE1(PyThreadState *tstate, PyObject *element1);
|
|
676
|
+
|
|
677
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
|
|
678
|
+
PyObject *arg) {
|
|
679
|
+
PyBaseExceptionObject *self;
|
|
680
|
+
|
|
681
|
+
PyTypeObject *type_object = (PyTypeObject *)type;
|
|
682
|
+
|
|
683
|
+
self = (PyBaseExceptionObject *)(type_object->tp_alloc(type_object, 0));
|
|
684
|
+
|
|
685
|
+
self->dict = NULL;
|
|
686
|
+
self->notes = NULL;
|
|
687
|
+
self->traceback = self->cause = self->context = NULL;
|
|
688
|
+
self->suppress_context = 0;
|
|
689
|
+
|
|
690
|
+
assert(arg != NULL);
|
|
691
|
+
|
|
692
|
+
if (!PyTuple_Check(arg)) {
|
|
693
|
+
self->args = MAKE_TUPLE1(tstate, arg);
|
|
694
|
+
} else {
|
|
695
|
+
self->args = Py_NewRef(arg);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
return (PyObject *)self;
|
|
699
|
+
}
|
|
700
|
+
#else
|
|
701
|
+
|
|
702
|
+
extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
|
|
703
|
+
|
|
704
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
|
|
705
|
+
PyObject *arg) {
|
|
706
|
+
return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, type, arg);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
#endif
|
|
710
|
+
|
|
711
|
+
#if PYTHON_VERSION < 0x3c0
|
|
712
|
+
struct Nuitka_ExceptionPreservationItem {
|
|
713
|
+
PyObject *exception_type;
|
|
714
|
+
PyObject *exception_value;
|
|
715
|
+
PyTracebackObject *exception_tb;
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
static const struct Nuitka_ExceptionPreservationItem Empty_Nuitka_ExceptionPreservationItem = {0};
|
|
719
|
+
|
|
720
|
+
// Fetch the current exception into state, transfers reference coming from tstate ownership. Old values are overwritten.
|
|
721
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
|
|
722
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
723
|
+
FETCH_ERROR_OCCURRED(tstate, &exception_state->exception_type, &exception_state->exception_value,
|
|
724
|
+
&exception_state->exception_tb);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
// Restore the current exception from state, transfers reference from state to tstate ownership.
|
|
728
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
729
|
+
RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
730
|
+
RESTORE_ERROR_OCCURRED(tstate, exception_state->exception_type, exception_state->exception_value,
|
|
731
|
+
exception_state->exception_tb);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
735
|
+
FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
736
|
+
FETCH_ERROR_OCCURRED_UNTRACED(tstate, &exception_state->exception_type, &exception_state->exception_value,
|
|
737
|
+
&exception_state->exception_tb);
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
741
|
+
RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
742
|
+
RESTORE_ERROR_OCCURRED_UNTRACED(tstate, exception_state->exception_type, exception_state->exception_value,
|
|
743
|
+
exception_state->exception_tb);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
747
|
+
ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state1,
|
|
748
|
+
struct Nuitka_ExceptionPreservationItem const *exception_state2) {
|
|
749
|
+
assert(exception_state1->exception_type == exception_state2->exception_type);
|
|
750
|
+
assert(exception_state1->exception_value == exception_state2->exception_value);
|
|
751
|
+
assert(exception_state1->exception_tb == exception_state2->exception_tb);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
755
|
+
ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
756
|
+
assert(exception_state->exception_type == NULL);
|
|
757
|
+
assert(exception_state->exception_value == NULL);
|
|
758
|
+
assert(exception_state->exception_tb == NULL);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
762
|
+
exception_state->exception_type = NULL;
|
|
763
|
+
exception_state->exception_value = NULL;
|
|
764
|
+
exception_state->exception_tb = NULL;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
768
|
+
RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
769
|
+
CHECK_OBJECT(exception_state->exception_type);
|
|
770
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
771
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
772
|
+
Py_DECREF(exception_state->exception_type);
|
|
773
|
+
Py_XDECREF(exception_state->exception_value);
|
|
774
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
778
|
+
RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
779
|
+
CHECK_OBJECT_X(exception_state->exception_type);
|
|
780
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
781
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
782
|
+
|
|
783
|
+
Py_XDECREF(exception_state->exception_type);
|
|
784
|
+
Py_XDECREF(exception_state->exception_value);
|
|
785
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
|
|
789
|
+
PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
|
|
790
|
+
PyObject *exception_value, PyTracebackObject *exception_tb) {
|
|
791
|
+
Py_INCREF(exception_type);
|
|
792
|
+
Py_XINCREF(exception_value);
|
|
793
|
+
Py_XINCREF(exception_tb);
|
|
794
|
+
|
|
795
|
+
exception_state->exception_type = exception_type;
|
|
796
|
+
exception_state->exception_value = exception_value;
|
|
797
|
+
exception_state->exception_tb = exception_tb;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
801
|
+
ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
802
|
+
PyObject **exception_type, PyObject **exception_value,
|
|
803
|
+
PyTracebackObject **exception_tb) {
|
|
804
|
+
|
|
805
|
+
*exception_type = exception_state->exception_type;
|
|
806
|
+
Py_INCREF(*exception_type);
|
|
807
|
+
*exception_value = exception_state->exception_value;
|
|
808
|
+
Py_XINCREF(*exception_value);
|
|
809
|
+
*exception_tb = exception_state->exception_tb;
|
|
810
|
+
Py_XINCREF(*exception_tb);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
NUITKA_MAY_BE_UNUSED static PyTracebackObject *
|
|
814
|
+
GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
815
|
+
return exception_state->exception_tb;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
// Transfer ownership of the traceback to the exception state.
|
|
819
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
820
|
+
PyTracebackObject *exception_tb) {
|
|
821
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
822
|
+
CHECK_OBJECT_X(exception_tb);
|
|
823
|
+
|
|
824
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
825
|
+
exception_state->exception_tb = exception_tb;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
829
|
+
return exception_state->exception_type != NULL;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
833
|
+
EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
834
|
+
PyObject *exception_checked) {
|
|
835
|
+
return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_type, exception_checked);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
839
|
+
CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
840
|
+
CHECK_OBJECT(exception_state->exception_type);
|
|
841
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
842
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
846
|
+
CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
847
|
+
CHECK_OBJECT_X(exception_state->exception_type);
|
|
848
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
849
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
#else
|
|
853
|
+
struct Nuitka_ExceptionPreservationItem {
|
|
854
|
+
PyObject *exception_value;
|
|
855
|
+
};
|
|
856
|
+
|
|
857
|
+
static const struct Nuitka_ExceptionPreservationItem Empty_Nuitka_ExceptionPreservationItem = {0};
|
|
858
|
+
|
|
859
|
+
// Fetch the current exception into state, transfers reference coming from tstate ownership. Old value is overwritten.
|
|
860
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
|
|
861
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
862
|
+
exception_state->exception_value = tstate->current_exception;
|
|
863
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
864
|
+
|
|
865
|
+
#if _DEBUG_EXCEPTIONS
|
|
866
|
+
PRINT_STRING("FETCH_ERROR_OCCURRED_STATE:\n");
|
|
867
|
+
PRINT_CURRENT_EXCEPTION();
|
|
868
|
+
#endif
|
|
869
|
+
|
|
870
|
+
tstate->current_exception = NULL;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
874
|
+
FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
875
|
+
exception_state->exception_value = tstate->current_exception;
|
|
876
|
+
tstate->current_exception = NULL;
|
|
877
|
+
|
|
878
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
882
|
+
RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
883
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
884
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
885
|
+
|
|
886
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
887
|
+
tstate->current_exception = exception_state->exception_value;
|
|
888
|
+
|
|
889
|
+
#if _DEBUG_EXCEPTIONS
|
|
890
|
+
PRINT_STRING("RESTORE_ERROR_OCCURRED_STATE:\n");
|
|
891
|
+
PRINT_CURRENT_EXCEPTION();
|
|
892
|
+
#endif
|
|
893
|
+
|
|
894
|
+
Py_XDECREF(old_exception_value);
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
898
|
+
RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
899
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
900
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
901
|
+
|
|
902
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
903
|
+
tstate->current_exception = exception_state->exception_value;
|
|
904
|
+
|
|
905
|
+
Py_XDECREF(old_exception_value);
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
909
|
+
ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state1,
|
|
910
|
+
struct Nuitka_ExceptionPreservationItem *exception_state2) {
|
|
911
|
+
assert(exception_state1->exception_value == exception_state2->exception_value);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
915
|
+
ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
916
|
+
assert(exception_state->exception_value == NULL);
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
920
|
+
exception_state->exception_value = NULL;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
924
|
+
RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
925
|
+
CHECK_OBJECT(exception_state->exception_value);
|
|
926
|
+
Py_DECREF(exception_state->exception_value);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
930
|
+
RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
931
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
932
|
+
Py_XDECREF(exception_state->exception_value);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
|
|
936
|
+
PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
|
|
937
|
+
PyObject *exception_value, PyTracebackObject *exception_tb) {
|
|
938
|
+
|
|
939
|
+
Py_XINCREF(exception_type);
|
|
940
|
+
Py_XINCREF(exception_value);
|
|
941
|
+
Py_XINCREF(exception_tb);
|
|
942
|
+
|
|
943
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, &exception_tb);
|
|
944
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
945
|
+
|
|
946
|
+
exception_state->exception_value = exception_value;
|
|
947
|
+
Py_INCREF(exception_value);
|
|
948
|
+
|
|
949
|
+
ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb);
|
|
950
|
+
|
|
951
|
+
Py_XDECREF(exception_type);
|
|
952
|
+
Py_XDECREF(exception_value);
|
|
953
|
+
Py_XDECREF(exception_tb);
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
957
|
+
ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
958
|
+
PyObject **exception_type, PyObject **exception_value,
|
|
959
|
+
PyTracebackObject **exception_tb) {
|
|
960
|
+
|
|
961
|
+
*exception_value = exception_state->exception_value;
|
|
962
|
+
|
|
963
|
+
if (*exception_value) {
|
|
964
|
+
Py_INCREF(*exception_value);
|
|
965
|
+
|
|
966
|
+
*exception_type = (PyObject *)PyExceptionInstance_Class(*exception_value);
|
|
967
|
+
Py_INCREF(*exception_type);
|
|
968
|
+
*exception_tb = GET_EXCEPTION_TRACEBACK(*exception_value);
|
|
969
|
+
Py_XINCREF(*exception_tb);
|
|
970
|
+
} else {
|
|
971
|
+
*exception_type = NULL;
|
|
972
|
+
*exception_tb = NULL;
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
NUITKA_MAY_BE_UNUSED static PyTracebackObject *
|
|
977
|
+
GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
978
|
+
return GET_EXCEPTION_TRACEBACK(exception_state->exception_value);
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// Transfer ownership of the traceback to the exception state.
|
|
982
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
983
|
+
PyTracebackObject *exception_tb) {
|
|
984
|
+
ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_state->exception_value, exception_tb);
|
|
985
|
+
Py_XDECREF(exception_tb);
|
|
986
|
+
CHECK_OBJECT_X(exception_tb);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
990
|
+
return exception_state->exception_value != NULL;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
994
|
+
EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem const *exception_state,
|
|
995
|
+
PyObject *exception_checked) {
|
|
996
|
+
return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_value, exception_checked);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1000
|
+
CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
1001
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_state->exception_value);
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1005
|
+
CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
1006
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
#endif
|
|
1010
|
+
|
|
1011
|
+
NUITKA_MAY_BE_UNUSED inline static void SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0(
|
|
1012
|
+
PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type) {
|
|
1013
|
+
|
|
1014
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, exception_state, exception_type, NULL, NULL);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
|
|
1018
|
+
|
|
1019
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1020
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(PyThreadState *tstate,
|
|
1021
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1022
|
+
PyObject *exception_type, PyObject *exception_value) {
|
|
1023
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1024
|
+
Py_INCREF(exception_type);
|
|
1025
|
+
|
|
1026
|
+
exception_state->exception_type = exception_type;
|
|
1027
|
+
exception_state->exception_value = exception_value;
|
|
1028
|
+
exception_state->exception_tb = NULL;
|
|
1029
|
+
#else
|
|
1030
|
+
PyObject *exc = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, exception_type, exception_value);
|
|
1031
|
+
exception_state->exception_value = exc;
|
|
1032
|
+
Py_DECREF(exception_value);
|
|
1033
|
+
#endif
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1037
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1_NORMALIZED(PyThreadState *tstate,
|
|
1038
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1039
|
+
PyObject *exception_type, PyObject *exception_value) {
|
|
1040
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1041
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value);
|
|
1042
|
+
#else
|
|
1043
|
+
exception_state->exception_value = exception_value;
|
|
1044
|
+
#endif
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1048
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE0(PyThreadState *tstate,
|
|
1049
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1050
|
+
PyObject *exception_type, PyObject *exception_value) {
|
|
1051
|
+
// TODO: Add variants for normalized values only.
|
|
1052
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, exception_state, exception_type, exception_value, NULL);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1056
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(PyThreadState *tstate,
|
|
1057
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1058
|
+
PyObject *exception_type, char const *value) {
|
|
1059
|
+
PyObject *exception_value = Nuitka_String_FromString(value);
|
|
1060
|
+
|
|
1061
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value);
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
#define SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_FORMAT1(tstate, exception_state, exception_type, message, arg1) \
|
|
1065
|
+
{ \
|
|
1066
|
+
PyObject *exception_value = Nuitka_String_FromFormat(message, arg1); \
|
|
1067
|
+
CHECK_OBJECT(exception_value); \
|
|
1068
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value); \
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
#define SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_FORMAT2(tstate, exception_state, exception_type, message, arg1, \
|
|
1072
|
+
arg2) \
|
|
1073
|
+
{ \
|
|
1074
|
+
PyObject *exception_value = Nuitka_String_FromFormat(message, arg1, arg2); \
|
|
1075
|
+
CHECK_OBJECT(exception_value); \
|
|
1076
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value); \
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_GENERATOR(PyThreadState *tstate, PyObject *exception_value) {
|
|
1080
|
+
CHECK_OBJECT(exception_value);
|
|
1081
|
+
|
|
1082
|
+
// TODO: For Python3.12 this must be done differently to be a lot better.
|
|
1083
|
+
|
|
1084
|
+
// We need to check the class.
|
|
1085
|
+
if (PyExceptionInstance_Check(exception_value)) {
|
|
1086
|
+
exception_value = PyExceptionInstance_Class(exception_value);
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
// Lets be optimistic. If it matches, we would be wasting our time.
|
|
1090
|
+
if (exception_value == PyExc_GeneratorExit || exception_value == PyExc_StopIteration) {
|
|
1091
|
+
return true;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
if (PyExceptionClass_Check(exception_value)) {
|
|
1095
|
+
// Save the current exception, if any, we must preserve it.
|
|
1096
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1097
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1098
|
+
|
|
1099
|
+
int res = PyObject_IsSubclass(exception_value, PyExc_GeneratorExit);
|
|
1100
|
+
|
|
1101
|
+
// This function must not fail, so print the error here */
|
|
1102
|
+
if (unlikely(res == -1)) {
|
|
1103
|
+
PyErr_WriteUnraisable(exception_value);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
if (res == 1) {
|
|
1107
|
+
return true;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
res = PyObject_IsSubclass(exception_value, PyExc_StopIteration);
|
|
1111
|
+
|
|
1112
|
+
// This function must not fail, so print the error here */
|
|
1113
|
+
if (unlikely(res == -1)) {
|
|
1114
|
+
PyErr_WriteUnraisable(exception_value);
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1118
|
+
|
|
1119
|
+
return res == 1;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
return false;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
1126
|
+
EXCEPTION_STATE_MATCH_GENERATOR(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1127
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1128
|
+
return EXCEPTION_MATCH_GENERATOR(tstate, exception_state->exception_type);
|
|
1129
|
+
#else
|
|
1130
|
+
return EXCEPTION_MATCH_GENERATOR(tstate, exception_state->exception_value);
|
|
1131
|
+
#endif
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tstate, PyObject *exception_value,
|
|
1135
|
+
PyObject *exception_checked) {
|
|
1136
|
+
CHECK_OBJECT(exception_value);
|
|
1137
|
+
CHECK_OBJECT(exception_checked);
|
|
1138
|
+
|
|
1139
|
+
// We need to check the class.
|
|
1140
|
+
if (PyExceptionInstance_Check(exception_value)) {
|
|
1141
|
+
exception_value = PyExceptionInstance_Class(exception_value);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
// Lets be optimistic. If it matches, we would be wasting our time.
|
|
1145
|
+
if (exception_value == exception_checked) {
|
|
1146
|
+
return true;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
if (PyExceptionClass_Check(exception_value)) {
|
|
1150
|
+
#if PYTHON_VERSION < 0x300
|
|
1151
|
+
// Save the current exception, if any, we must preserve it.
|
|
1152
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1153
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1154
|
+
|
|
1155
|
+
// Python3.10 at least uses PyType_IsSubtype and needs no
|
|
1156
|
+
// fetch restore.
|
|
1157
|
+
int res = PyObject_IsSubclass(exception_value, exception_checked);
|
|
1158
|
+
|
|
1159
|
+
// This function must not fail, so print the error here */
|
|
1160
|
+
if (unlikely(res == -1)) {
|
|
1161
|
+
PyErr_WriteUnraisable(exception_value);
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1165
|
+
|
|
1166
|
+
return res == 1;
|
|
1167
|
+
#else
|
|
1168
|
+
int res = Nuitka_Type_IsSubtype((PyTypeObject *)exception_value, (PyTypeObject *)exception_checked);
|
|
1169
|
+
return res == 1;
|
|
1170
|
+
#endif
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
return false;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
NUITKA_MAY_BE_UNUSED static inline int _EXCEPTION_MATCH_BOOL(PyThreadState *tstate, PyObject *exception_value,
|
|
1177
|
+
PyObject *exception_checked) {
|
|
1178
|
+
CHECK_OBJECT(exception_value);
|
|
1179
|
+
CHECK_OBJECT(exception_checked);
|
|
1180
|
+
|
|
1181
|
+
// Reduce to exception class actually. TODO: Can this not be an instance from called code?!
|
|
1182
|
+
PyObject *exception_class;
|
|
1183
|
+
if (PyExceptionInstance_Check(exception_value)) {
|
|
1184
|
+
exception_class = PyExceptionInstance_Class(exception_value);
|
|
1185
|
+
} else {
|
|
1186
|
+
exception_class = exception_value;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
#if PYTHON_VERSION < 0x300
|
|
1190
|
+
if (PyExceptionClass_Check(exception_class) && PyExceptionClass_Check(exception_checked)) {
|
|
1191
|
+
// Save the current exception, if any, we must preserve it.
|
|
1192
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1193
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1194
|
+
|
|
1195
|
+
// Avoid recursion limit being exceeded just then
|
|
1196
|
+
int recursion_limit = Py_GetRecursionLimit();
|
|
1197
|
+
if (recursion_limit < (1 << 30)) {
|
|
1198
|
+
Py_SetRecursionLimit(recursion_limit + 5);
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
int res = PyObject_IsSubclass(exception_class, exception_checked);
|
|
1202
|
+
|
|
1203
|
+
Py_SetRecursionLimit(recursion_limit);
|
|
1204
|
+
|
|
1205
|
+
// This function must not fail, so print the error here */
|
|
1206
|
+
if (unlikely(res == -1)) {
|
|
1207
|
+
PyErr_WriteUnraisable(exception_value);
|
|
1208
|
+
res = 0;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1212
|
+
|
|
1213
|
+
return res;
|
|
1214
|
+
} else {
|
|
1215
|
+
return exception_class == exception_checked;
|
|
1216
|
+
}
|
|
1217
|
+
#else
|
|
1218
|
+
if (PyExceptionClass_Check(exception_class) && PyExceptionClass_Check(exception_checked)) {
|
|
1219
|
+
return Nuitka_Type_IsSubtype((PyTypeObject *)exception_class, (PyTypeObject *)exception_checked);
|
|
1220
|
+
} else {
|
|
1221
|
+
return exception_class == exception_checked;
|
|
1222
|
+
}
|
|
1223
|
+
#endif
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// This is for the actual comparison operation that is being done in the
|
|
1227
|
+
// node tree, no other code should use it. TODO: Then it's probably not
|
|
1228
|
+
// properly located here.
|
|
1229
|
+
NUITKA_MAY_BE_UNUSED static inline int EXCEPTION_MATCH_BOOL(PyThreadState *tstate, PyObject *exception_value,
|
|
1230
|
+
PyObject *exception_checked) {
|
|
1231
|
+
CHECK_OBJECT(exception_value);
|
|
1232
|
+
CHECK_OBJECT(exception_checked);
|
|
1233
|
+
|
|
1234
|
+
#if PYTHON_VERSION >= 0x300
|
|
1235
|
+
/* Note: Exact matching tuples seems to needed, despite using GET_ITEM later
|
|
1236
|
+
on, this probably cannot be overloaded that deep. */
|
|
1237
|
+
if (PyTuple_Check(exception_checked)) {
|
|
1238
|
+
Py_ssize_t length = PyTuple_GET_SIZE(exception_checked);
|
|
1239
|
+
|
|
1240
|
+
for (Py_ssize_t i = 0; i < length; i += 1) {
|
|
1241
|
+
PyObject *element = PyTuple_GET_ITEM(exception_checked, i);
|
|
1242
|
+
|
|
1243
|
+
if (unlikely(!PyExceptionClass_Check(element))) {
|
|
1244
|
+
SET_CURRENT_EXCEPTION_TYPE0_STR(
|
|
1245
|
+
tstate, PyExc_TypeError, "catching classes that do not inherit from BaseException is not allowed");
|
|
1246
|
+
return -1;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
} else if (unlikely(!PyExceptionClass_Check(exception_checked))) {
|
|
1250
|
+
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
|
|
1251
|
+
"catching classes that do not inherit from BaseException is not allowed");
|
|
1252
|
+
return -1;
|
|
1253
|
+
}
|
|
1254
|
+
#endif
|
|
1255
|
+
|
|
1256
|
+
if (PyTuple_Check(exception_checked)) {
|
|
1257
|
+
Py_ssize_t length = PyTuple_GET_SIZE(exception_checked);
|
|
1258
|
+
|
|
1259
|
+
for (Py_ssize_t i = 0; i < length; i += 1) {
|
|
1260
|
+
PyObject *element = PyTuple_GET_ITEM(exception_checked, i);
|
|
1261
|
+
|
|
1262
|
+
int res = EXCEPTION_MATCH_BOOL(tstate, exception_value, element);
|
|
1263
|
+
|
|
1264
|
+
if (res != 0) {
|
|
1265
|
+
return res;
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
return 0;
|
|
1270
|
+
} else {
|
|
1271
|
+
return _EXCEPTION_MATCH_BOOL(tstate, exception_value, exception_checked);
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
// Normalize an exception type to a value.
|
|
1276
|
+
|
|
1277
|
+
extern void Nuitka_Err_NormalizeException(PyThreadState *tstate, PyObject **exc, PyObject **val,
|
|
1278
|
+
PyTracebackObject **tb);
|
|
1279
|
+
|
|
1280
|
+
// Normalize an exception, may release old values and replace them, expects
|
|
1281
|
+
// references passed and returns them.
|
|
1282
|
+
NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
|
|
1283
|
+
PyObject **exception_value,
|
|
1284
|
+
PyTracebackObject **exception_tb) {
|
|
1285
|
+
#if _DEBUG_EXCEPTIONS
|
|
1286
|
+
PRINT_STRING("NORMALIZE_EXCEPTION: Enter\n");
|
|
1287
|
+
PRINT_EXCEPTION(*exception_type, *exception_value, *exception_tb);
|
|
1288
|
+
#endif
|
|
1289
|
+
CHECK_OBJECT_X(*exception_type);
|
|
1290
|
+
CHECK_OBJECT_X(*exception_value);
|
|
1291
|
+
if (exception_tb) {
|
|
1292
|
+
CHECK_OBJECT_X(*exception_tb);
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
// TODO: Often we already know this to be true.
|
|
1296
|
+
if (*exception_type != Py_None && *exception_type != NULL) {
|
|
1297
|
+
Nuitka_Err_NormalizeException(tstate, exception_type, exception_value, exception_tb);
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
#if _DEBUG_EXCEPTIONS
|
|
1301
|
+
PRINT_STRING("NORMALIZE_EXCEPTION: Leave\n");
|
|
1302
|
+
PRINT_EXCEPTION(*exception_type, *exception_value, exception_tb ? *exception_tb : NULL);
|
|
1303
|
+
#endif
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1307
|
+
// Normalize an exception, may release old values and replace them, expects
|
|
1308
|
+
// references passed and returns them.
|
|
1309
|
+
static inline void NORMALIZE_EXCEPTION_STATE(PyThreadState *tstate,
|
|
1310
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1311
|
+
CHECK_EXCEPTION_STATE_X(exception_state);
|
|
1312
|
+
|
|
1313
|
+
NORMALIZE_EXCEPTION(tstate, &exception_state->exception_type, &exception_state->exception_value,
|
|
1314
|
+
&exception_state->exception_tb);
|
|
1315
|
+
}
|
|
1316
|
+
#endif
|
|
1317
|
+
|
|
1318
|
+
extern PyObject *CALL_FUNCTION_NO_ARGS(PyThreadState *tstate, PyObject *called);
|
|
1319
|
+
|
|
1320
|
+
// Publish an exception, erasing the values of the variables.
|
|
1321
|
+
NUITKA_MAY_BE_UNUSED static inline void
|
|
1322
|
+
PUBLISH_CURRENT_EXCEPTION(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1323
|
+
#if _DEBUG_EXCEPTIONS
|
|
1324
|
+
PRINT_STRING("PUBLISH_CURRENT_EXCEPTION:\n");
|
|
1325
|
+
PRINT_EXCEPTION_STATE(exception_state);
|
|
1326
|
+
#endif
|
|
1327
|
+
|
|
1328
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1329
|
+
NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
|
|
1330
|
+
ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_state->exception_value, exception_state->exception_tb);
|
|
1331
|
+
#endif
|
|
1332
|
+
|
|
1333
|
+
struct Nuitka_ExceptionStackItem exc_state;
|
|
1334
|
+
|
|
1335
|
+
#if PYTHON_VERSION < 0x3b0
|
|
1336
|
+
exc_state.exception_type = exception_state->exception_type;
|
|
1337
|
+
#endif
|
|
1338
|
+
exc_state.exception_value = exception_state->exception_value;
|
|
1339
|
+
#if PYTHON_VERSION < 0x3b0
|
|
1340
|
+
exc_state.exception_tb = exception_state->exception_tb;
|
|
1341
|
+
#endif
|
|
1342
|
+
|
|
1343
|
+
SET_CURRENT_EXCEPTION(tstate, &exc_state);
|
|
1344
|
+
|
|
1345
|
+
#if PYTHON_VERSION >= 0x3b0 && PYTHON_VERSION < 0x3c0
|
|
1346
|
+
// TODO: We shouldn't get these in the first place, we don't transfer the
|
|
1347
|
+
// type anymore and the exception tb could come in already attached.
|
|
1348
|
+
Py_DECREF(exception_state->exception_type);
|
|
1349
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
1350
|
+
#endif
|
|
1351
|
+
|
|
1352
|
+
INIT_ERROR_OCCURRED_STATE(exception_state);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
1356
|
+
_CHECK_AND_CLEAR_EXCEPTION_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1357
|
+
PyObject *exception_type) {
|
|
1358
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1359
|
+
PyObject *exception_current = exception_state->exception_type;
|
|
1360
|
+
#else
|
|
1361
|
+
PyObject *exception_current = exception_state->exception_value;
|
|
1362
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_current);
|
|
1363
|
+
#endif
|
|
1364
|
+
if (exception_current == NULL) {
|
|
1365
|
+
return true;
|
|
1366
|
+
} else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
|
|
1367
|
+
CHECK_OBJECT(exception_current);
|
|
1368
|
+
|
|
1369
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
1370
|
+
INIT_ERROR_OCCURRED_STATE(exception_state);
|
|
1371
|
+
|
|
1372
|
+
return true;
|
|
1373
|
+
} else {
|
|
1374
|
+
return false;
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
// TODO: Get rid of "CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED" and rename this to
|
|
1379
|
+
// its name.
|
|
1380
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
1381
|
+
CHECK_AND_CLEAR_STOP_ITERATION_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1382
|
+
return _CHECK_AND_CLEAR_EXCEPTION_STATE(tstate, exception_state, PyExc_StopIteration);
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
// Format a UnboundLocalError exception for a variable name. TODO: This is more
|
|
1386
|
+
// for "raising.h" it seems.
|
|
1387
|
+
extern void FORMAT_UNBOUND_LOCAL_ERROR(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1388
|
+
PyObject *variable_name);
|
|
1389
|
+
|
|
1390
|
+
extern void FORMAT_UNBOUND_CLOSURE_ERROR(PyThreadState *tstate,
|
|
1391
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1392
|
+
PyObject *variable_name);
|
|
1393
|
+
|
|
1394
|
+
#if PYTHON_VERSION >= 0x300
|
|
1395
|
+
static inline PyBaseExceptionObject *_PyBaseExceptionObject_cast(PyObject *exc) {
|
|
1396
|
+
assert(PyExceptionInstance_Check(exc));
|
|
1397
|
+
return (PyBaseExceptionObject *)exc;
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
// Exception context, replacement for "PyException_GetContext", it however gives no
|
|
1401
|
+
// reference.
|
|
1402
|
+
NUITKA_MAY_BE_UNUSED static inline PyObject *Nuitka_Exception_GetContext(PyObject *self) {
|
|
1403
|
+
return _PyBaseExceptionObject_cast(self)->context;
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
// Exception context, replacement for "PyException_SetContext" it however doesn't
|
|
1407
|
+
// consume a reference.
|
|
1408
|
+
NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_SetContext(PyObject *self, PyObject *context) {
|
|
1409
|
+
CHECK_OBJECT(context);
|
|
1410
|
+
|
|
1411
|
+
Py_INCREF(context);
|
|
1412
|
+
Py_XSETREF(_PyBaseExceptionObject_cast(self)->context, context);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_DeleteContext(PyObject *self) {
|
|
1416
|
+
Py_XSETREF(_PyBaseExceptionObject_cast(self)->context, NULL);
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
#if PYTHON_VERSION >= 0x300
|
|
1420
|
+
// Attach the exception context if necessary.
|
|
1421
|
+
NUITKA_MAY_BE_UNUSED static inline void
|
|
1422
|
+
ADD_EXCEPTION_CONTEXT(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1423
|
+
PyObject *context = EXC_VALUE(tstate);
|
|
1424
|
+
|
|
1425
|
+
if (context != NULL) {
|
|
1426
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1427
|
+
NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
|
|
1428
|
+
#endif
|
|
1429
|
+
Nuitka_Exception_SetContext(exception_state->exception_value, context);
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
#endif
|
|
1433
|
+
|
|
1434
|
+
// Our replacement for "PyException_SetCause", consumes a reference.
|
|
1435
|
+
NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_SetCause(PyObject *self, PyObject *cause) {
|
|
1436
|
+
PyBaseExceptionObject *base_self = _PyBaseExceptionObject_cast(self);
|
|
1437
|
+
base_self->suppress_context = 1;
|
|
1438
|
+
Py_XSETREF(base_self->cause, cause);
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
#endif
|
|
1442
|
+
|
|
1443
|
+
#endif
|
|
1444
|
+
|
|
1445
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1446
|
+
// integrates with CPython, but also works on its own.
|
|
1447
|
+
//
|
|
1448
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1449
|
+
// you may not use this file except in compliance with the License.
|
|
1450
|
+
// You may obtain a copy of the License at
|
|
1451
|
+
//
|
|
1452
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1453
|
+
//
|
|
1454
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1455
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1456
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1457
|
+
// See the License for the specific language governing permissions and
|
|
1458
|
+
// limitations under the License.
|