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,1257 @@
|
|
|
1
|
+
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
""" Trace collection (also often still referred to as constraint collection).
|
|
5
|
+
|
|
6
|
+
At the core of value propagation there is the collection of constraints that
|
|
7
|
+
allow to propagate knowledge forward or not.
|
|
8
|
+
|
|
9
|
+
This is about collecting these constraints and to manage them.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import contextlib
|
|
13
|
+
from collections import defaultdict
|
|
14
|
+
from contextlib import contextmanager
|
|
15
|
+
|
|
16
|
+
from nuitka import Variables
|
|
17
|
+
from nuitka.__past__ import iterItems # Python3 compatibility.
|
|
18
|
+
from nuitka.containers.OrderedDicts import OrderedDict
|
|
19
|
+
from nuitka.containers.OrderedSets import OrderedSet
|
|
20
|
+
from nuitka.ModuleRegistry import addUsedModule
|
|
21
|
+
from nuitka.nodes.NodeMakingHelpers import getComputationResult
|
|
22
|
+
from nuitka.nodes.shapes.StandardShapes import tshape_uninitialized
|
|
23
|
+
from nuitka.Tracing import (
|
|
24
|
+
inclusion_logger,
|
|
25
|
+
printError,
|
|
26
|
+
printLine,
|
|
27
|
+
printSeparator,
|
|
28
|
+
)
|
|
29
|
+
from nuitka.tree.SourceHandling import readSourceLine
|
|
30
|
+
from nuitka.utils.InstanceCounters import (
|
|
31
|
+
counted_del,
|
|
32
|
+
counted_init,
|
|
33
|
+
isCountingInstances,
|
|
34
|
+
)
|
|
35
|
+
from nuitka.utils.Timing import TimerReport
|
|
36
|
+
|
|
37
|
+
from .ValueTraces import (
|
|
38
|
+
ValueTraceAssign,
|
|
39
|
+
ValueTraceAssignUnescapable,
|
|
40
|
+
ValueTraceAssignUnescapablePropagated,
|
|
41
|
+
ValueTraceAssignVeryTrusted,
|
|
42
|
+
ValueTraceDeleted,
|
|
43
|
+
ValueTraceEscaped,
|
|
44
|
+
ValueTraceInit,
|
|
45
|
+
ValueTraceInitStarArgs,
|
|
46
|
+
ValueTraceInitStarDict,
|
|
47
|
+
ValueTraceLoopComplete,
|
|
48
|
+
ValueTraceLoopIncomplete,
|
|
49
|
+
ValueTraceMerge,
|
|
50
|
+
ValueTraceUninitialized,
|
|
51
|
+
ValueTraceUnknown,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Keeping trace of how often branches are merged between calls
|
|
55
|
+
_merge_counts = defaultdict(int)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def fetchMergeCounts():
|
|
59
|
+
result = dict(_merge_counts)
|
|
60
|
+
_merge_counts.clear()
|
|
61
|
+
return result
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
signalChange = None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@contextmanager
|
|
68
|
+
def withChangeIndicationsTo(signal_change):
|
|
69
|
+
"""Decide where change indications should go to."""
|
|
70
|
+
|
|
71
|
+
global signalChange # Singleton, pylint: disable=global-statement
|
|
72
|
+
|
|
73
|
+
old = signalChange
|
|
74
|
+
signalChange = signal_change
|
|
75
|
+
yield
|
|
76
|
+
signalChange = old
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class CollectionUpdateMixin(object):
|
|
80
|
+
"""Mixin to use in every collection to add traces."""
|
|
81
|
+
|
|
82
|
+
# Mixins are not allowed to specify slots.
|
|
83
|
+
__slots__ = ()
|
|
84
|
+
|
|
85
|
+
def hasVariableTrace(self, variable, version):
|
|
86
|
+
return (variable, version) in self.variable_traces
|
|
87
|
+
|
|
88
|
+
def getVariableTrace(self, variable, version):
|
|
89
|
+
return self.variable_traces[(variable, version)]
|
|
90
|
+
|
|
91
|
+
def getVariableTraces(self, variable):
|
|
92
|
+
result = []
|
|
93
|
+
|
|
94
|
+
for key, variable_trace in iterItems(self.variable_traces):
|
|
95
|
+
candidate = key[0]
|
|
96
|
+
|
|
97
|
+
if variable is candidate:
|
|
98
|
+
result.append(variable_trace)
|
|
99
|
+
|
|
100
|
+
return result
|
|
101
|
+
|
|
102
|
+
def getVariableTracesAll(self):
|
|
103
|
+
return self.variable_traces
|
|
104
|
+
|
|
105
|
+
def addVariableTrace(self, variable, version, trace):
|
|
106
|
+
key = variable, version
|
|
107
|
+
|
|
108
|
+
assert key not in self.variable_traces, (key, self)
|
|
109
|
+
self.variable_traces[key] = trace
|
|
110
|
+
|
|
111
|
+
def addVariableMergeMultipleTrace(self, variable, traces):
|
|
112
|
+
version = variable.allocateTargetNumber()
|
|
113
|
+
|
|
114
|
+
trace_merge = ValueTraceMerge(traces)
|
|
115
|
+
|
|
116
|
+
self.addVariableTrace(variable, version, trace_merge)
|
|
117
|
+
|
|
118
|
+
return version
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class CollectionStartPointMixin(CollectionUpdateMixin):
|
|
122
|
+
"""Mixin to use in start points of collections.
|
|
123
|
+
|
|
124
|
+
These are modules, functions, etc. typically entry points.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
# Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
|
|
128
|
+
__slots__ = ()
|
|
129
|
+
|
|
130
|
+
# Many things are traced
|
|
131
|
+
|
|
132
|
+
def __init__(self):
|
|
133
|
+
# Variable assignments performed in here, last issued number, only used
|
|
134
|
+
# to determine the next number that should be used for a new assignment.
|
|
135
|
+
self.variable_versions = {}
|
|
136
|
+
|
|
137
|
+
# The full trace of a variable with a version for the function or module
|
|
138
|
+
# this is.
|
|
139
|
+
self.variable_traces = {}
|
|
140
|
+
|
|
141
|
+
self.break_collections = None
|
|
142
|
+
self.continue_collections = None
|
|
143
|
+
self.return_collections = None
|
|
144
|
+
self.exception_collections = None
|
|
145
|
+
|
|
146
|
+
self.outline_functions = None
|
|
147
|
+
|
|
148
|
+
def getLoopBreakCollections(self):
|
|
149
|
+
return self.break_collections
|
|
150
|
+
|
|
151
|
+
def onLoopBreak(self, collection=None):
|
|
152
|
+
if collection is None:
|
|
153
|
+
collection = self
|
|
154
|
+
|
|
155
|
+
self.break_collections.append(
|
|
156
|
+
TraceCollectionBranch(parent=collection, name="loop break")
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
def getLoopContinueCollections(self):
|
|
160
|
+
return self.continue_collections
|
|
161
|
+
|
|
162
|
+
def onLoopContinue(self, collection=None):
|
|
163
|
+
if collection is None:
|
|
164
|
+
collection = self
|
|
165
|
+
|
|
166
|
+
self.continue_collections.append(
|
|
167
|
+
TraceCollectionBranch(parent=collection, name="loop continue")
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
def onFunctionReturn(self, collection=None):
|
|
171
|
+
if collection is None:
|
|
172
|
+
collection = self
|
|
173
|
+
|
|
174
|
+
if self.return_collections is not None:
|
|
175
|
+
self.return_collections.append(
|
|
176
|
+
TraceCollectionBranch(parent=collection, name="return")
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
def onExceptionRaiseExit(self, raisable_exceptions, collection=None):
|
|
180
|
+
"""Indicate to the trace collection what exceptions may have occurred.
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
raisable_exception: Currently ignored, one or more exceptions that
|
|
184
|
+
could occur, e.g. "BaseException".
|
|
185
|
+
collection: To pass the collection that will be the parent
|
|
186
|
+
Notes:
|
|
187
|
+
Currently this is unused. Passing "collection" as an argument, so
|
|
188
|
+
we know the original collection to attach the branch to, is maybe
|
|
189
|
+
not the most clever way to do this
|
|
190
|
+
|
|
191
|
+
We also might want to specialize functions for specific exceptions,
|
|
192
|
+
there is little point in providing BaseException as an argument in
|
|
193
|
+
so many places.
|
|
194
|
+
|
|
195
|
+
The actual storage of the exceptions that can occur is currently
|
|
196
|
+
missing entirely. We just use this to detect "any exception" by
|
|
197
|
+
not being empty.
|
|
198
|
+
"""
|
|
199
|
+
|
|
200
|
+
# TODO: We might want to track per exception, pylint: disable=unused-argument
|
|
201
|
+
|
|
202
|
+
if self.exception_collections is not None:
|
|
203
|
+
if collection is None:
|
|
204
|
+
collection = self
|
|
205
|
+
|
|
206
|
+
self.exception_collections.append(
|
|
207
|
+
TraceCollectionBranch(parent=collection, name="exception")
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
def getFunctionReturnCollections(self):
|
|
211
|
+
return self.return_collections
|
|
212
|
+
|
|
213
|
+
def getExceptionRaiseCollections(self):
|
|
214
|
+
return self.exception_collections
|
|
215
|
+
|
|
216
|
+
def hasEmptyTraces(self, variable):
|
|
217
|
+
# TODO: Combine these steps into one for performance gains.
|
|
218
|
+
traces = self.getVariableTraces(variable)
|
|
219
|
+
return areEmptyTraces(traces)
|
|
220
|
+
|
|
221
|
+
def hasReadOnlyTraces(self, variable):
|
|
222
|
+
# TODO: Combine these steps into one for performance gains.
|
|
223
|
+
traces = self.getVariableTraces(variable)
|
|
224
|
+
return areReadOnlyTraces(traces)
|
|
225
|
+
|
|
226
|
+
def initVariableUnknown(self, variable):
|
|
227
|
+
trace = ValueTraceUnknown(owner=self.owner, previous=None)
|
|
228
|
+
|
|
229
|
+
self.addVariableTrace(variable, 0, trace)
|
|
230
|
+
|
|
231
|
+
return trace
|
|
232
|
+
|
|
233
|
+
def initVariableModule(self, variable):
|
|
234
|
+
trace = ValueTraceUnknown(owner=self.owner, previous=None)
|
|
235
|
+
|
|
236
|
+
self.addVariableTrace(variable, 0, trace)
|
|
237
|
+
|
|
238
|
+
return trace
|
|
239
|
+
|
|
240
|
+
def initVariableInit(self, variable):
|
|
241
|
+
trace = ValueTraceInit(self.owner)
|
|
242
|
+
|
|
243
|
+
self.addVariableTrace(variable, 0, trace)
|
|
244
|
+
|
|
245
|
+
return trace
|
|
246
|
+
|
|
247
|
+
def initVariableInitStarArgs(self, variable):
|
|
248
|
+
trace = ValueTraceInitStarArgs(self.owner)
|
|
249
|
+
|
|
250
|
+
self.addVariableTrace(variable, 0, trace)
|
|
251
|
+
|
|
252
|
+
return trace
|
|
253
|
+
|
|
254
|
+
def initVariableInitStarDict(self, variable):
|
|
255
|
+
trace = ValueTraceInitStarDict(self.owner)
|
|
256
|
+
|
|
257
|
+
self.addVariableTrace(variable, 0, trace)
|
|
258
|
+
|
|
259
|
+
return trace
|
|
260
|
+
|
|
261
|
+
def initVariableUninitialized(self, variable):
|
|
262
|
+
trace = ValueTraceUninitialized(owner=self.owner, previous=None)
|
|
263
|
+
|
|
264
|
+
self.addVariableTrace(variable, 0, trace)
|
|
265
|
+
|
|
266
|
+
return trace
|
|
267
|
+
|
|
268
|
+
def updateVariablesFromCollection(self, old_collection, source_ref):
|
|
269
|
+
Variables.updateVariablesFromCollection(old_collection, self, source_ref)
|
|
270
|
+
|
|
271
|
+
@contextlib.contextmanager
|
|
272
|
+
def makeAbortStackContext(
|
|
273
|
+
self, catch_breaks, catch_continues, catch_returns, catch_exceptions
|
|
274
|
+
):
|
|
275
|
+
if catch_breaks:
|
|
276
|
+
old_break_collections = self.break_collections
|
|
277
|
+
self.break_collections = []
|
|
278
|
+
if catch_continues:
|
|
279
|
+
old_continue_collections = self.continue_collections
|
|
280
|
+
self.continue_collections = []
|
|
281
|
+
if catch_returns:
|
|
282
|
+
old_return_collections = self.return_collections
|
|
283
|
+
self.return_collections = []
|
|
284
|
+
if catch_exceptions:
|
|
285
|
+
old_exception_collections = self.exception_collections
|
|
286
|
+
self.exception_collections = []
|
|
287
|
+
|
|
288
|
+
yield
|
|
289
|
+
|
|
290
|
+
if catch_breaks:
|
|
291
|
+
self.break_collections = old_break_collections
|
|
292
|
+
if catch_continues:
|
|
293
|
+
self.continue_collections = old_continue_collections
|
|
294
|
+
if catch_returns:
|
|
295
|
+
self.return_collections = old_return_collections
|
|
296
|
+
if catch_exceptions:
|
|
297
|
+
self.exception_collections = old_exception_collections
|
|
298
|
+
|
|
299
|
+
def initVariable(self, variable):
|
|
300
|
+
return variable.initVariable(self)
|
|
301
|
+
|
|
302
|
+
def addOutlineFunction(self, outline):
|
|
303
|
+
if self.outline_functions is None:
|
|
304
|
+
self.outline_functions = [outline]
|
|
305
|
+
else:
|
|
306
|
+
self.outline_functions.append(outline)
|
|
307
|
+
|
|
308
|
+
def getOutlineFunctions(self):
|
|
309
|
+
return self.outline_functions
|
|
310
|
+
|
|
311
|
+
def onLocalsDictEscaped(self, locals_scope):
|
|
312
|
+
locals_scope.preventLocalsDictPropagation()
|
|
313
|
+
|
|
314
|
+
for variable in locals_scope.variables.values():
|
|
315
|
+
self.markActiveVariableAsEscaped(variable)
|
|
316
|
+
|
|
317
|
+
# TODO: Limit to the scope.
|
|
318
|
+
# TODO: Does the above code not do that already?
|
|
319
|
+
for variable in self.variable_actives:
|
|
320
|
+
if variable.isTempVariable() or variable.isModuleVariable():
|
|
321
|
+
continue
|
|
322
|
+
|
|
323
|
+
self.markActiveVariableAsEscaped(variable)
|
|
324
|
+
|
|
325
|
+
def onUsedFunction(self, function_body):
|
|
326
|
+
owning_module = function_body.getParentModule()
|
|
327
|
+
|
|
328
|
+
# Make sure the owning module is added to the used set. This is most
|
|
329
|
+
# important for helper functions, or modules, which otherwise have
|
|
330
|
+
# become unused.
|
|
331
|
+
addUsedModule(
|
|
332
|
+
module=owning_module,
|
|
333
|
+
using_module=None,
|
|
334
|
+
usage_tag="function",
|
|
335
|
+
reason="Function %s" % self.name,
|
|
336
|
+
source_ref=owning_module.source_ref,
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
needs_visit = owning_module.addUsedFunction(function_body)
|
|
340
|
+
|
|
341
|
+
if needs_visit or function_body.isExpressionFunctionPureBody():
|
|
342
|
+
function_body.computeFunctionRaw(self)
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
class TraceCollectionBase(object):
|
|
346
|
+
"""This contains for logic for maintaining active traces.
|
|
347
|
+
|
|
348
|
+
They are kept for "variable" and versions.
|
|
349
|
+
"""
|
|
350
|
+
|
|
351
|
+
__slots__ = ("owner", "parent", "name", "variable_actives")
|
|
352
|
+
|
|
353
|
+
if isCountingInstances():
|
|
354
|
+
__del__ = counted_del()
|
|
355
|
+
|
|
356
|
+
@counted_init
|
|
357
|
+
def __init__(self, owner, name, parent):
|
|
358
|
+
self.owner = owner
|
|
359
|
+
self.parent = parent
|
|
360
|
+
self.name = name
|
|
361
|
+
|
|
362
|
+
# Currently active values in the tracing.
|
|
363
|
+
self.variable_actives = {}
|
|
364
|
+
|
|
365
|
+
def __repr__(self):
|
|
366
|
+
return "<%s for %s at 0x%x>" % (self.__class__.__name__, self.name, id(self))
|
|
367
|
+
|
|
368
|
+
def getOwner(self):
|
|
369
|
+
return self.owner
|
|
370
|
+
|
|
371
|
+
def dumpActiveTraces(self, indent=""):
|
|
372
|
+
printSeparator()
|
|
373
|
+
printLine("Active are:")
|
|
374
|
+
for variable, version in sorted(
|
|
375
|
+
self.variable_actives.items(), key=lambda var: var[0].variable_name
|
|
376
|
+
):
|
|
377
|
+
printLine("%s %s:" % (variable, version))
|
|
378
|
+
self.getVariableCurrentTrace(variable).dump(indent)
|
|
379
|
+
|
|
380
|
+
printSeparator()
|
|
381
|
+
|
|
382
|
+
def getVariableCurrentTrace(self, variable):
|
|
383
|
+
"""Get the current value trace associated to this variable
|
|
384
|
+
|
|
385
|
+
It is also created on the fly if necessary. We create them
|
|
386
|
+
lazy so to keep the tracing branches minimal where possible.
|
|
387
|
+
"""
|
|
388
|
+
|
|
389
|
+
return self.getVariableTrace(
|
|
390
|
+
variable=variable, version=self._getCurrentVariableVersion(variable)
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
def markCurrentVariableTrace(self, variable, version):
|
|
394
|
+
self.variable_actives[variable] = version
|
|
395
|
+
|
|
396
|
+
def _getCurrentVariableVersion(self, variable):
|
|
397
|
+
try:
|
|
398
|
+
return self.variable_actives[variable]
|
|
399
|
+
except KeyError:
|
|
400
|
+
# Initialize variables on the fly.
|
|
401
|
+
if not self.hasVariableTrace(variable, 0):
|
|
402
|
+
self.initVariable(variable)
|
|
403
|
+
|
|
404
|
+
self.markCurrentVariableTrace(variable, 0)
|
|
405
|
+
|
|
406
|
+
return self.variable_actives[variable]
|
|
407
|
+
|
|
408
|
+
def markActiveVariableAsEscaped(self, variable):
|
|
409
|
+
current = self.getVariableCurrentTrace(variable)
|
|
410
|
+
|
|
411
|
+
if current.isTraceThatNeedsEscape():
|
|
412
|
+
version = variable.allocateTargetNumber()
|
|
413
|
+
|
|
414
|
+
self.addVariableTrace(
|
|
415
|
+
variable,
|
|
416
|
+
version,
|
|
417
|
+
ValueTraceEscaped(owner=self.owner, previous=current),
|
|
418
|
+
)
|
|
419
|
+
|
|
420
|
+
self.markCurrentVariableTrace(variable, version)
|
|
421
|
+
|
|
422
|
+
def markClosureVariableAsUnknown(self, variable):
|
|
423
|
+
current = self.getVariableCurrentTrace(variable)
|
|
424
|
+
|
|
425
|
+
if not current.isUnknownTrace():
|
|
426
|
+
version = variable.allocateTargetNumber()
|
|
427
|
+
|
|
428
|
+
self.addVariableTrace(
|
|
429
|
+
variable,
|
|
430
|
+
version,
|
|
431
|
+
ValueTraceUnknown(owner=self.owner, previous=current),
|
|
432
|
+
)
|
|
433
|
+
|
|
434
|
+
self.markCurrentVariableTrace(variable, version)
|
|
435
|
+
|
|
436
|
+
def markActiveVariableAsUnknown(self, variable):
|
|
437
|
+
current = self.getVariableCurrentTrace(variable)
|
|
438
|
+
|
|
439
|
+
if not current.isUnknownOrVeryTrustedTrace():
|
|
440
|
+
version = variable.allocateTargetNumber()
|
|
441
|
+
|
|
442
|
+
self.addVariableTrace(
|
|
443
|
+
variable,
|
|
444
|
+
version,
|
|
445
|
+
ValueTraceUnknown(owner=self.owner, previous=current),
|
|
446
|
+
)
|
|
447
|
+
|
|
448
|
+
self.markCurrentVariableTrace(variable, version)
|
|
449
|
+
|
|
450
|
+
def markActiveVariableAsLoopMerge(
|
|
451
|
+
self, loop_node, current, variable, shapes, incomplete
|
|
452
|
+
):
|
|
453
|
+
if incomplete:
|
|
454
|
+
result = ValueTraceLoopIncomplete(loop_node, current, shapes)
|
|
455
|
+
else:
|
|
456
|
+
# TODO: Empty is a missing optimization somewhere, but it also happens that
|
|
457
|
+
# a variable is getting released in a loop.
|
|
458
|
+
# assert shapes, (variable, current)
|
|
459
|
+
|
|
460
|
+
if not shapes:
|
|
461
|
+
shapes.add(tshape_uninitialized)
|
|
462
|
+
|
|
463
|
+
result = ValueTraceLoopComplete(loop_node, current, shapes)
|
|
464
|
+
|
|
465
|
+
version = variable.allocateTargetNumber()
|
|
466
|
+
self.addVariableTrace(variable, version, result)
|
|
467
|
+
|
|
468
|
+
self.markCurrentVariableTrace(variable, version)
|
|
469
|
+
|
|
470
|
+
return result
|
|
471
|
+
|
|
472
|
+
@staticmethod
|
|
473
|
+
def signalChange(tags, source_ref, message):
|
|
474
|
+
# This is monkey patched from another module. pylint: disable=I0021,not-callable
|
|
475
|
+
signalChange(tags, source_ref, message)
|
|
476
|
+
|
|
477
|
+
@staticmethod
|
|
478
|
+
def mustAlias(a, b):
|
|
479
|
+
if a.isExpressionVariableRef() and b.isExpressionVariableRef():
|
|
480
|
+
return a.getVariable() is b.getVariable()
|
|
481
|
+
|
|
482
|
+
return False
|
|
483
|
+
|
|
484
|
+
@staticmethod
|
|
485
|
+
def mustNotAlias(a, b):
|
|
486
|
+
# TODO: not yet really implemented
|
|
487
|
+
if a.isExpressionConstantRef() and b.isExpressionConstantRef():
|
|
488
|
+
if a.isMutable() or b.isMutable():
|
|
489
|
+
return True
|
|
490
|
+
|
|
491
|
+
return False
|
|
492
|
+
|
|
493
|
+
def onControlFlowEscape(self, node):
|
|
494
|
+
# TODO: One day, we should trace which nodes exactly cause a variable
|
|
495
|
+
# to be considered escaped, pylint: disable=unused-argument
|
|
496
|
+
for variable in self.variable_actives:
|
|
497
|
+
variable.onControlFlowEscape(self)
|
|
498
|
+
|
|
499
|
+
def removeKnowledge(self, node):
|
|
500
|
+
if node.isExpressionVariableRef():
|
|
501
|
+
node.variable.removeKnowledge(self)
|
|
502
|
+
|
|
503
|
+
def onValueEscapeStr(self, node):
|
|
504
|
+
# TODO: We can ignore these for now.
|
|
505
|
+
pass
|
|
506
|
+
|
|
507
|
+
def removeAllKnowledge(self):
|
|
508
|
+
for variable in self.variable_actives:
|
|
509
|
+
variable.removeAllKnowledge(self)
|
|
510
|
+
|
|
511
|
+
def onVariableSet(self, variable, version, assign_node):
|
|
512
|
+
variable_trace = ValueTraceAssign(
|
|
513
|
+
owner=self.owner,
|
|
514
|
+
assign_node=assign_node,
|
|
515
|
+
previous=self.getVariableCurrentTrace(variable),
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
self.addVariableTrace(variable, version, variable_trace)
|
|
519
|
+
|
|
520
|
+
# Make references point to it.
|
|
521
|
+
self.markCurrentVariableTrace(variable, version)
|
|
522
|
+
|
|
523
|
+
return variable_trace
|
|
524
|
+
|
|
525
|
+
def onVariableSetAliasing(self, variable, version, assign_node, source):
|
|
526
|
+
other_variable_trace = source.variable_trace
|
|
527
|
+
|
|
528
|
+
if other_variable_trace.__class__ is ValueTraceAssignUnescapable:
|
|
529
|
+
return self.onVariableSetToUnescapableValue(
|
|
530
|
+
variable=variable, version=version, assign_node=assign_node
|
|
531
|
+
)
|
|
532
|
+
elif other_variable_trace.__class__ is ValueTraceAssignVeryTrusted:
|
|
533
|
+
return self.onVariableSetToVeryTrustedValue(
|
|
534
|
+
variable=variable, version=version, assign_node=assign_node
|
|
535
|
+
)
|
|
536
|
+
else:
|
|
537
|
+
result = self.onVariableSet(
|
|
538
|
+
variable=variable, version=version, assign_node=assign_node
|
|
539
|
+
)
|
|
540
|
+
|
|
541
|
+
self.removeKnowledge(source)
|
|
542
|
+
|
|
543
|
+
return result
|
|
544
|
+
|
|
545
|
+
def onVariableSetToUnescapableValue(self, variable, version, assign_node):
|
|
546
|
+
variable_trace = ValueTraceAssignUnescapable(
|
|
547
|
+
owner=self.owner,
|
|
548
|
+
assign_node=assign_node,
|
|
549
|
+
previous=self.getVariableCurrentTrace(variable),
|
|
550
|
+
)
|
|
551
|
+
|
|
552
|
+
self.addVariableTrace(variable, version, variable_trace)
|
|
553
|
+
|
|
554
|
+
# Make references point to it.
|
|
555
|
+
self.markCurrentVariableTrace(variable, version)
|
|
556
|
+
|
|
557
|
+
return variable_trace
|
|
558
|
+
|
|
559
|
+
def onVariableSetToVeryTrustedValue(self, variable, version, assign_node):
|
|
560
|
+
variable_trace = ValueTraceAssignVeryTrusted(
|
|
561
|
+
owner=self.owner,
|
|
562
|
+
assign_node=assign_node,
|
|
563
|
+
previous=self.getVariableCurrentTrace(variable),
|
|
564
|
+
)
|
|
565
|
+
|
|
566
|
+
self.addVariableTrace(variable, version, variable_trace)
|
|
567
|
+
|
|
568
|
+
# Make references point to it.
|
|
569
|
+
self.markCurrentVariableTrace(variable, version)
|
|
570
|
+
|
|
571
|
+
return variable_trace
|
|
572
|
+
|
|
573
|
+
def onVariableSetToUnescapablePropagatedValue(
|
|
574
|
+
self, variable, version, assign_node, replacement
|
|
575
|
+
):
|
|
576
|
+
variable_trace = ValueTraceAssignUnescapablePropagated(
|
|
577
|
+
owner=self.owner,
|
|
578
|
+
assign_node=assign_node,
|
|
579
|
+
previous=self.getVariableCurrentTrace(variable),
|
|
580
|
+
replacement=replacement,
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
self.addVariableTrace(variable, version, variable_trace)
|
|
584
|
+
|
|
585
|
+
# Make references point to it.
|
|
586
|
+
self.markCurrentVariableTrace(variable, version)
|
|
587
|
+
|
|
588
|
+
return variable_trace
|
|
589
|
+
|
|
590
|
+
def onVariableDel(self, variable, version, del_node):
|
|
591
|
+
# Add a new trace, allocating a new version for the variable, and
|
|
592
|
+
# remember the delete of the current
|
|
593
|
+
old_trace = self.getVariableCurrentTrace(variable)
|
|
594
|
+
|
|
595
|
+
# TODO: Annotate value content as escaped.
|
|
596
|
+
|
|
597
|
+
variable_trace = ValueTraceDeleted(
|
|
598
|
+
owner=self.owner, del_node=del_node, previous=old_trace
|
|
599
|
+
)
|
|
600
|
+
|
|
601
|
+
# Assign to not initialized again.
|
|
602
|
+
self.addVariableTrace(variable, version, variable_trace)
|
|
603
|
+
|
|
604
|
+
# Make references point to it.
|
|
605
|
+
self.markCurrentVariableTrace(variable, version)
|
|
606
|
+
|
|
607
|
+
return variable_trace
|
|
608
|
+
|
|
609
|
+
def onLocalsUsage(self, locals_scope):
|
|
610
|
+
self.onLocalsDictEscaped(locals_scope)
|
|
611
|
+
|
|
612
|
+
result = []
|
|
613
|
+
|
|
614
|
+
scope_locals_variables = locals_scope.getLocalsRelevantVariables()
|
|
615
|
+
|
|
616
|
+
for variable in self.variable_actives:
|
|
617
|
+
if variable.isLocalVariable() and variable in scope_locals_variables:
|
|
618
|
+
variable_trace = self.getVariableCurrentTrace(variable)
|
|
619
|
+
|
|
620
|
+
variable_trace.addNameUsage()
|
|
621
|
+
result.append((variable, variable_trace))
|
|
622
|
+
|
|
623
|
+
return result
|
|
624
|
+
|
|
625
|
+
def onVariableContentEscapes(self, variable):
|
|
626
|
+
self.markActiveVariableAsEscaped(variable)
|
|
627
|
+
|
|
628
|
+
def onExpression(self, expression, allow_none=False):
|
|
629
|
+
if expression is None and allow_none:
|
|
630
|
+
return None
|
|
631
|
+
|
|
632
|
+
parent = expression.parent
|
|
633
|
+
assert parent, expression
|
|
634
|
+
|
|
635
|
+
# Now compute this expression, allowing it to replace itself with
|
|
636
|
+
# something else as part of a local peep hole optimization.
|
|
637
|
+
new_node, change_tags, change_desc = expression.computeExpressionRaw(self)
|
|
638
|
+
|
|
639
|
+
if change_tags is not None:
|
|
640
|
+
# This is mostly for tracing and indication that a change occurred
|
|
641
|
+
# and it may be interesting to look again.
|
|
642
|
+
self.signalChange(change_tags, expression.getSourceReference(), change_desc)
|
|
643
|
+
|
|
644
|
+
if new_node is not expression:
|
|
645
|
+
parent.replaceChild(expression, new_node)
|
|
646
|
+
|
|
647
|
+
return new_node
|
|
648
|
+
|
|
649
|
+
def onStatement(self, statement):
|
|
650
|
+
try:
|
|
651
|
+
new_statement, change_tags, change_desc = statement.computeStatement(self)
|
|
652
|
+
|
|
653
|
+
# print new_statement, change_tags, change_desc
|
|
654
|
+
if new_statement is not statement:
|
|
655
|
+
self.signalChange(
|
|
656
|
+
change_tags, statement.getSourceReference(), change_desc
|
|
657
|
+
)
|
|
658
|
+
|
|
659
|
+
return new_statement
|
|
660
|
+
except Exception:
|
|
661
|
+
printError(
|
|
662
|
+
"Problem with statement at %s:\n-> %s"
|
|
663
|
+
% (
|
|
664
|
+
statement.source_ref.getAsString(),
|
|
665
|
+
readSourceLine(statement.source_ref),
|
|
666
|
+
)
|
|
667
|
+
)
|
|
668
|
+
raise
|
|
669
|
+
|
|
670
|
+
def computedStatementResult(self, statement, change_tags, change_desc):
|
|
671
|
+
"""Make sure the replacement statement is computed.
|
|
672
|
+
|
|
673
|
+
Use this when a replacement expression needs to be seen by the trace
|
|
674
|
+
collection and be computed, without causing any duplication, but where
|
|
675
|
+
otherwise there would be loss of annotated effects.
|
|
676
|
+
|
|
677
|
+
This may e.g. be true for nodes that need an initial run to know their
|
|
678
|
+
exception result and type shape.
|
|
679
|
+
"""
|
|
680
|
+
# Need to compute the replacement still.
|
|
681
|
+
new_statement = statement.computeStatement(self)
|
|
682
|
+
|
|
683
|
+
if new_statement[0] is not statement:
|
|
684
|
+
# Signal intermediate result as well.
|
|
685
|
+
self.signalChange(change_tags, statement.getSourceReference(), change_desc)
|
|
686
|
+
|
|
687
|
+
return new_statement
|
|
688
|
+
else:
|
|
689
|
+
return statement, change_tags, change_desc
|
|
690
|
+
|
|
691
|
+
def computedExpressionResult(self, expression, change_tags, change_desc):
|
|
692
|
+
"""Make sure the replacement expression is computed.
|
|
693
|
+
|
|
694
|
+
Use this when a replacement expression needs to be seen by the trace
|
|
695
|
+
collection and be computed, without causing any duplication, but where
|
|
696
|
+
otherwise there would be loss of annotated effects.
|
|
697
|
+
|
|
698
|
+
This may e.g. be true for nodes that need an initial run to know their
|
|
699
|
+
exception result and type shape.
|
|
700
|
+
"""
|
|
701
|
+
|
|
702
|
+
# Need to compute the replacement still.
|
|
703
|
+
new_expression = expression.computeExpression(self)
|
|
704
|
+
|
|
705
|
+
if new_expression[0] is not expression:
|
|
706
|
+
# Signal intermediate result as well.
|
|
707
|
+
self.signalChange(change_tags, expression.getSourceReference(), change_desc)
|
|
708
|
+
|
|
709
|
+
return new_expression
|
|
710
|
+
else:
|
|
711
|
+
return expression, change_tags, change_desc
|
|
712
|
+
|
|
713
|
+
def computedExpressionResultRaw(self, expression, change_tags, change_desc):
|
|
714
|
+
"""Make sure the replacement expression is computed.
|
|
715
|
+
|
|
716
|
+
Use this when a replacement expression needs to be seen by the trace
|
|
717
|
+
collection and be computed, without causing any duplication, but where
|
|
718
|
+
otherwise there would be loss of annotated effects.
|
|
719
|
+
|
|
720
|
+
This may e.g. be true for nodes that need an initial run to know their
|
|
721
|
+
exception result and type shape.
|
|
722
|
+
|
|
723
|
+
This is for raw, i.e. subnodes are not yet computed automatically.
|
|
724
|
+
"""
|
|
725
|
+
|
|
726
|
+
# Need to compute the replacement still.
|
|
727
|
+
new_expression = expression.computeExpressionRaw(self)
|
|
728
|
+
|
|
729
|
+
if new_expression[0] is not expression:
|
|
730
|
+
# Signal intermediate result as well.
|
|
731
|
+
self.signalChange(change_tags, expression.getSourceReference(), change_desc)
|
|
732
|
+
|
|
733
|
+
return new_expression
|
|
734
|
+
else:
|
|
735
|
+
return expression, change_tags, change_desc
|
|
736
|
+
|
|
737
|
+
def mergeBranches(self, collection_yes, collection_no):
|
|
738
|
+
"""Merge two alternative branches into this trace.
|
|
739
|
+
|
|
740
|
+
This is mostly for merging conditional branches, or other ways
|
|
741
|
+
of having alternative control flow. This deals with up to two
|
|
742
|
+
alternative branches to both change this collection.
|
|
743
|
+
"""
|
|
744
|
+
|
|
745
|
+
# Many branches due to inlining the actual merge and preparing it
|
|
746
|
+
# pylint: disable=too-many-branches
|
|
747
|
+
|
|
748
|
+
if collection_yes is None:
|
|
749
|
+
if collection_no is not None:
|
|
750
|
+
# Handle one branch case, we need to merge versions backwards as
|
|
751
|
+
# they may make themselves obsolete.
|
|
752
|
+
collection1 = self
|
|
753
|
+
collection2 = collection_no
|
|
754
|
+
else:
|
|
755
|
+
# Refuse to do stupid work
|
|
756
|
+
return
|
|
757
|
+
elif collection_no is None:
|
|
758
|
+
# Handle one branch case, we need to merge versions backwards as
|
|
759
|
+
# they may make themselves obsolete.
|
|
760
|
+
collection1 = self
|
|
761
|
+
collection2 = collection_yes
|
|
762
|
+
else:
|
|
763
|
+
# Handle two branch case, they may or may not do the same things.
|
|
764
|
+
collection1 = collection_yes
|
|
765
|
+
collection2 = collection_no
|
|
766
|
+
|
|
767
|
+
_merge_counts[2] += 1
|
|
768
|
+
|
|
769
|
+
variable_versions = {}
|
|
770
|
+
|
|
771
|
+
for variable, version in iterItems(collection1.variable_actives):
|
|
772
|
+
variable_versions[variable] = version
|
|
773
|
+
|
|
774
|
+
for variable, version in iterItems(collection2.variable_actives):
|
|
775
|
+
if variable not in variable_versions:
|
|
776
|
+
if version != 0:
|
|
777
|
+
variable_versions[variable] = 0, version
|
|
778
|
+
else:
|
|
779
|
+
variable_versions[variable] = 0
|
|
780
|
+
else:
|
|
781
|
+
other = variable_versions[variable]
|
|
782
|
+
|
|
783
|
+
if other != version:
|
|
784
|
+
variable_versions[variable] = other, version
|
|
785
|
+
|
|
786
|
+
# That would not be fast, pylint: disable=consider-using-dict-items
|
|
787
|
+
for variable in variable_versions:
|
|
788
|
+
if variable not in collection2.variable_actives:
|
|
789
|
+
if variable_versions[variable] != 0:
|
|
790
|
+
variable_versions[variable] = variable_versions[variable], 0
|
|
791
|
+
|
|
792
|
+
self.variable_actives = {}
|
|
793
|
+
|
|
794
|
+
for variable, versions in iterItems(variable_versions):
|
|
795
|
+
if type(versions) is tuple:
|
|
796
|
+
trace1 = self.getVariableTrace(variable, versions[0])
|
|
797
|
+
trace2 = self.getVariableTrace(variable, versions[1])
|
|
798
|
+
|
|
799
|
+
if trace1.isEscapeTrace() and trace1.previous is trace2:
|
|
800
|
+
version = versions[0]
|
|
801
|
+
elif trace2.isEscapeTrace() and trace2.previous is trace1:
|
|
802
|
+
version = versions[1]
|
|
803
|
+
else:
|
|
804
|
+
version = self.addVariableMergeMultipleTrace(
|
|
805
|
+
variable=variable,
|
|
806
|
+
traces=(
|
|
807
|
+
trace1,
|
|
808
|
+
trace2,
|
|
809
|
+
),
|
|
810
|
+
)
|
|
811
|
+
else:
|
|
812
|
+
version = versions
|
|
813
|
+
|
|
814
|
+
self.markCurrentVariableTrace(variable, version)
|
|
815
|
+
|
|
816
|
+
def mergeMultipleBranches(self, collections):
|
|
817
|
+
# This one is really complex, pylint: disable=too-many-branches
|
|
818
|
+
|
|
819
|
+
assert collections
|
|
820
|
+
|
|
821
|
+
# Optimize for length 1, which is trivial merge and needs not a
|
|
822
|
+
# lot of work, and length 2 has dedicated code as it's so frequent.
|
|
823
|
+
merge_size = len(collections)
|
|
824
|
+
|
|
825
|
+
if merge_size == 1:
|
|
826
|
+
self.replaceBranch(collections[0])
|
|
827
|
+
return
|
|
828
|
+
elif merge_size == 2:
|
|
829
|
+
return self.mergeBranches(*collections)
|
|
830
|
+
|
|
831
|
+
_merge_counts[len(collections)] += 1
|
|
832
|
+
|
|
833
|
+
with TimerReport(
|
|
834
|
+
message="Running merge for %s took %%.2f seconds" % collections,
|
|
835
|
+
decider=False,
|
|
836
|
+
):
|
|
837
|
+
variable_versions = defaultdict(OrderedSet)
|
|
838
|
+
|
|
839
|
+
for collection in collections:
|
|
840
|
+
for variable, version in iterItems(collection.variable_actives):
|
|
841
|
+
variable_versions[variable].add(version)
|
|
842
|
+
|
|
843
|
+
for collection in collections:
|
|
844
|
+
for variable, versions in iterItems(variable_versions):
|
|
845
|
+
if variable not in collection.variable_actives:
|
|
846
|
+
versions.add(0)
|
|
847
|
+
|
|
848
|
+
self.variable_actives = {}
|
|
849
|
+
|
|
850
|
+
for variable, versions in iterItems(variable_versions):
|
|
851
|
+
if len(versions) == 1:
|
|
852
|
+
(version,) = versions
|
|
853
|
+
else:
|
|
854
|
+
traces = []
|
|
855
|
+
escaped = []
|
|
856
|
+
winner_version = None
|
|
857
|
+
|
|
858
|
+
for version in versions:
|
|
859
|
+
trace = self.getVariableTrace(variable, version)
|
|
860
|
+
|
|
861
|
+
if trace.isEscapeTrace():
|
|
862
|
+
winner_version = version
|
|
863
|
+
escaped_trace = trace.previous
|
|
864
|
+
|
|
865
|
+
if escaped_trace in traces:
|
|
866
|
+
traces.remove(trace.previous)
|
|
867
|
+
|
|
868
|
+
escaped.append(escaped)
|
|
869
|
+
traces.append(trace)
|
|
870
|
+
else:
|
|
871
|
+
if trace not in escaped:
|
|
872
|
+
traces.append(trace)
|
|
873
|
+
|
|
874
|
+
if len(traces) == 1:
|
|
875
|
+
version = winner_version
|
|
876
|
+
assert winner_version is not None
|
|
877
|
+
else:
|
|
878
|
+
version = self.addVariableMergeMultipleTrace(
|
|
879
|
+
variable=variable, traces=tuple(traces)
|
|
880
|
+
)
|
|
881
|
+
|
|
882
|
+
self.markCurrentVariableTrace(variable, version)
|
|
883
|
+
|
|
884
|
+
# print("Leave mergeMultipleBranches", len(collections))
|
|
885
|
+
|
|
886
|
+
def replaceBranch(self, collection_replace):
|
|
887
|
+
self.variable_actives.update(collection_replace.variable_actives)
|
|
888
|
+
collection_replace.variable_actives = None
|
|
889
|
+
|
|
890
|
+
_merge_counts[1] += 1
|
|
891
|
+
|
|
892
|
+
def onLoopBreak(self, collection=None):
|
|
893
|
+
if collection is None:
|
|
894
|
+
collection = self
|
|
895
|
+
|
|
896
|
+
return self.parent.onLoopBreak(collection)
|
|
897
|
+
|
|
898
|
+
def onLoopContinue(self, collection=None):
|
|
899
|
+
if collection is None:
|
|
900
|
+
collection = self
|
|
901
|
+
|
|
902
|
+
return self.parent.onLoopContinue(collection)
|
|
903
|
+
|
|
904
|
+
def onFunctionReturn(self, collection=None):
|
|
905
|
+
if collection is None:
|
|
906
|
+
collection = self
|
|
907
|
+
|
|
908
|
+
return self.parent.onFunctionReturn(collection)
|
|
909
|
+
|
|
910
|
+
def onExceptionRaiseExit(self, raisable_exceptions, collection=None):
|
|
911
|
+
if collection is None:
|
|
912
|
+
collection = self
|
|
913
|
+
|
|
914
|
+
return self.parent.onExceptionRaiseExit(raisable_exceptions, collection)
|
|
915
|
+
|
|
916
|
+
def getLoopBreakCollections(self):
|
|
917
|
+
return self.parent.getLoopBreakCollections()
|
|
918
|
+
|
|
919
|
+
def getLoopContinueCollections(self):
|
|
920
|
+
return self.parent.getLoopContinueCollections()
|
|
921
|
+
|
|
922
|
+
def getFunctionReturnCollections(self):
|
|
923
|
+
return self.parent.getFunctionReturnCollections()
|
|
924
|
+
|
|
925
|
+
def getExceptionRaiseCollections(self):
|
|
926
|
+
return self.parent.getExceptionRaiseCollections()
|
|
927
|
+
|
|
928
|
+
def makeAbortStackContext(
|
|
929
|
+
self, catch_breaks, catch_continues, catch_returns, catch_exceptions
|
|
930
|
+
):
|
|
931
|
+
return self.parent.makeAbortStackContext(
|
|
932
|
+
catch_breaks=catch_breaks,
|
|
933
|
+
catch_continues=catch_continues,
|
|
934
|
+
catch_returns=catch_returns,
|
|
935
|
+
catch_exceptions=catch_exceptions,
|
|
936
|
+
)
|
|
937
|
+
|
|
938
|
+
def onLocalsDictEscaped(self, locals_scope):
|
|
939
|
+
self.parent.onLocalsDictEscaped(locals_scope)
|
|
940
|
+
|
|
941
|
+
def getCompileTimeComputationResult(
|
|
942
|
+
self, node, computation, description, user_provided=False
|
|
943
|
+
):
|
|
944
|
+
new_node, change_tags, message = getComputationResult(
|
|
945
|
+
node=node,
|
|
946
|
+
computation=computation,
|
|
947
|
+
description=description,
|
|
948
|
+
user_provided=user_provided,
|
|
949
|
+
)
|
|
950
|
+
|
|
951
|
+
if change_tags == "new_raise":
|
|
952
|
+
self.onExceptionRaiseExit(BaseException)
|
|
953
|
+
|
|
954
|
+
return new_node, change_tags, message
|
|
955
|
+
|
|
956
|
+
def addOutlineFunction(self, outline):
|
|
957
|
+
self.parent.addOutlineFunction(outline)
|
|
958
|
+
|
|
959
|
+
def getVeryTrustedModuleVariables(self):
|
|
960
|
+
return self.parent.getVeryTrustedModuleVariables()
|
|
961
|
+
|
|
962
|
+
def onUsedFunction(self, function_body):
|
|
963
|
+
return self.parent.onUsedFunction(function_body)
|
|
964
|
+
|
|
965
|
+
def onModuleUsageAttempts(self, module_usage_attempts):
|
|
966
|
+
self.parent.onModuleUsageAttempts(module_usage_attempts)
|
|
967
|
+
|
|
968
|
+
def onModuleUsageAttempt(self, module_usage_attempt):
|
|
969
|
+
self.parent.onModuleUsageAttempt(module_usage_attempt)
|
|
970
|
+
|
|
971
|
+
def onDistributionUsed(self, distribution_name, node, success):
|
|
972
|
+
self.parent.onDistributionUsed(
|
|
973
|
+
distribution_name=distribution_name, node=node, success=success
|
|
974
|
+
)
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
class TraceCollectionBranch(CollectionUpdateMixin, TraceCollectionBase):
|
|
978
|
+
__slots__ = ("variable_traces",)
|
|
979
|
+
|
|
980
|
+
def __init__(self, name, parent):
|
|
981
|
+
TraceCollectionBase.__init__(self, owner=parent.owner, name=name, parent=parent)
|
|
982
|
+
|
|
983
|
+
# Detach from others
|
|
984
|
+
self.variable_actives = dict(parent.variable_actives)
|
|
985
|
+
|
|
986
|
+
# For quick access without going to parent.
|
|
987
|
+
self.variable_traces = parent.variable_traces
|
|
988
|
+
|
|
989
|
+
def computeBranch(self, branch):
|
|
990
|
+
assert branch.isStatementsSequence()
|
|
991
|
+
|
|
992
|
+
result = branch.computeStatementsSequence(self)
|
|
993
|
+
|
|
994
|
+
if result is not branch:
|
|
995
|
+
branch.parent.replaceChild(branch, result)
|
|
996
|
+
|
|
997
|
+
return result
|
|
998
|
+
|
|
999
|
+
def initVariable(self, variable):
|
|
1000
|
+
variable_trace = self.parent.initVariable(variable)
|
|
1001
|
+
|
|
1002
|
+
self.variable_actives[variable] = 0
|
|
1003
|
+
|
|
1004
|
+
return variable_trace
|
|
1005
|
+
|
|
1006
|
+
|
|
1007
|
+
class TraceCollectionFunction(CollectionStartPointMixin, TraceCollectionBase):
|
|
1008
|
+
__slots__ = (
|
|
1009
|
+
"variable_versions",
|
|
1010
|
+
"variable_traces",
|
|
1011
|
+
"break_collections",
|
|
1012
|
+
"continue_collections",
|
|
1013
|
+
"return_collections",
|
|
1014
|
+
"exception_collections",
|
|
1015
|
+
"outline_functions",
|
|
1016
|
+
"very_trusted_module_variables",
|
|
1017
|
+
)
|
|
1018
|
+
|
|
1019
|
+
def __init__(self, parent, function_body):
|
|
1020
|
+
assert (
|
|
1021
|
+
function_body.isExpressionFunctionBody()
|
|
1022
|
+
or function_body.isExpressionGeneratorObjectBody()
|
|
1023
|
+
or function_body.isExpressionCoroutineObjectBody()
|
|
1024
|
+
or function_body.isExpressionAsyncgenObjectBody()
|
|
1025
|
+
), function_body
|
|
1026
|
+
|
|
1027
|
+
CollectionStartPointMixin.__init__(self)
|
|
1028
|
+
|
|
1029
|
+
TraceCollectionBase.__init__(
|
|
1030
|
+
self,
|
|
1031
|
+
owner=function_body,
|
|
1032
|
+
name="collection_" + function_body.getCodeName(),
|
|
1033
|
+
parent=parent,
|
|
1034
|
+
)
|
|
1035
|
+
|
|
1036
|
+
if parent is not None:
|
|
1037
|
+
self.very_trusted_module_variables = parent.getVeryTrustedModuleVariables()
|
|
1038
|
+
else:
|
|
1039
|
+
self.very_trusted_module_variables = ()
|
|
1040
|
+
|
|
1041
|
+
if function_body.isExpressionFunctionBody():
|
|
1042
|
+
parameters = function_body.getParameters()
|
|
1043
|
+
|
|
1044
|
+
for parameter_variable in parameters.getTopLevelVariables():
|
|
1045
|
+
self.initVariableInit(parameter_variable)
|
|
1046
|
+
self.variable_actives[parameter_variable] = 0
|
|
1047
|
+
|
|
1048
|
+
list_star_variable = parameters.getListStarArgVariable()
|
|
1049
|
+
if list_star_variable is not None:
|
|
1050
|
+
self.initVariableInitStarArgs(list_star_variable)
|
|
1051
|
+
self.variable_actives[list_star_variable] = 0
|
|
1052
|
+
|
|
1053
|
+
dict_star_variable = parameters.getDictStarArgVariable()
|
|
1054
|
+
if dict_star_variable is not None:
|
|
1055
|
+
self.initVariableInitStarDict(dict_star_variable)
|
|
1056
|
+
self.variable_actives[dict_star_variable] = 0
|
|
1057
|
+
|
|
1058
|
+
for closure_variable in function_body.getClosureVariables():
|
|
1059
|
+
self.initVariableUnknown(closure_variable)
|
|
1060
|
+
self.variable_actives[closure_variable] = 0
|
|
1061
|
+
|
|
1062
|
+
# TODO: Have special function type for exec functions stuff.
|
|
1063
|
+
locals_scope = function_body.getLocalsScope()
|
|
1064
|
+
|
|
1065
|
+
if locals_scope is not None:
|
|
1066
|
+
if not locals_scope.isMarkedForPropagation():
|
|
1067
|
+
for locals_dict_variable in locals_scope.variables.values():
|
|
1068
|
+
self.initVariableUninitialized(locals_dict_variable)
|
|
1069
|
+
else:
|
|
1070
|
+
function_body.locals_scope = None
|
|
1071
|
+
|
|
1072
|
+
def initVariableModule(self, variable):
|
|
1073
|
+
trusted_node = self.very_trusted_module_variables.get(variable)
|
|
1074
|
+
|
|
1075
|
+
if trusted_node is None:
|
|
1076
|
+
return CollectionStartPointMixin.initVariableModule(self, variable)
|
|
1077
|
+
|
|
1078
|
+
assign_trace = ValueTraceAssignVeryTrusted(
|
|
1079
|
+
self.owner, assign_node=trusted_node.getParent(), previous=None
|
|
1080
|
+
)
|
|
1081
|
+
|
|
1082
|
+
# This is rare enough to not need a more optimized code.
|
|
1083
|
+
self.addVariableTrace(variable, 0, assign_trace)
|
|
1084
|
+
self.markActiveVariableAsEscaped(variable)
|
|
1085
|
+
|
|
1086
|
+
return self.getVariableCurrentTrace(variable)
|
|
1087
|
+
|
|
1088
|
+
|
|
1089
|
+
class TraceCollectionPureFunction(TraceCollectionFunction):
|
|
1090
|
+
"""Pure functions don't feed their parent."""
|
|
1091
|
+
|
|
1092
|
+
__slots__ = ("used_functions",)
|
|
1093
|
+
|
|
1094
|
+
def __init__(self, function_body):
|
|
1095
|
+
TraceCollectionFunction.__init__(self, parent=None, function_body=function_body)
|
|
1096
|
+
|
|
1097
|
+
self.used_functions = OrderedSet()
|
|
1098
|
+
|
|
1099
|
+
def getUsedFunctions(self):
|
|
1100
|
+
return self.used_functions
|
|
1101
|
+
|
|
1102
|
+
def onUsedFunction(self, function_body):
|
|
1103
|
+
self.used_functions.add(function_body)
|
|
1104
|
+
|
|
1105
|
+
TraceCollectionFunction.onUsedFunction(self, function_body=function_body)
|
|
1106
|
+
|
|
1107
|
+
|
|
1108
|
+
class TraceCollectionModule(CollectionStartPointMixin, TraceCollectionBase):
|
|
1109
|
+
__slots__ = (
|
|
1110
|
+
"variable_versions",
|
|
1111
|
+
"variable_traces",
|
|
1112
|
+
"break_collections",
|
|
1113
|
+
"continue_collections",
|
|
1114
|
+
"return_collections",
|
|
1115
|
+
"exception_collections",
|
|
1116
|
+
"outline_functions",
|
|
1117
|
+
"very_trusted_module_variables",
|
|
1118
|
+
"module_usage_attempts",
|
|
1119
|
+
"distribution_names",
|
|
1120
|
+
)
|
|
1121
|
+
|
|
1122
|
+
def __init__(self, module, very_trusted_module_variables):
|
|
1123
|
+
assert module.isCompiledPythonModule(), module
|
|
1124
|
+
|
|
1125
|
+
CollectionStartPointMixin.__init__(self)
|
|
1126
|
+
|
|
1127
|
+
TraceCollectionBase.__init__(
|
|
1128
|
+
self, owner=module, name="module:" + module.getFullName(), parent=None
|
|
1129
|
+
)
|
|
1130
|
+
|
|
1131
|
+
self.very_trusted_module_variables = very_trusted_module_variables
|
|
1132
|
+
|
|
1133
|
+
# Attempts to use a module in this module.
|
|
1134
|
+
self.module_usage_attempts = OrderedSet()
|
|
1135
|
+
|
|
1136
|
+
# Attempts to use a distribution in this module.
|
|
1137
|
+
self.distribution_names = OrderedDict()
|
|
1138
|
+
|
|
1139
|
+
def getVeryTrustedModuleVariables(self):
|
|
1140
|
+
return self.very_trusted_module_variables
|
|
1141
|
+
|
|
1142
|
+
def updateVeryTrustedModuleVariables(self, very_trusted_module_variables):
|
|
1143
|
+
result = self.very_trusted_module_variables != very_trusted_module_variables
|
|
1144
|
+
|
|
1145
|
+
self.very_trusted_module_variables = very_trusted_module_variables
|
|
1146
|
+
|
|
1147
|
+
return result
|
|
1148
|
+
|
|
1149
|
+
def getModuleUsageAttempts(self):
|
|
1150
|
+
return self.module_usage_attempts
|
|
1151
|
+
|
|
1152
|
+
def onModuleUsageAttempts(self, module_usage_attempts):
|
|
1153
|
+
self.module_usage_attempts.update(module_usage_attempts)
|
|
1154
|
+
|
|
1155
|
+
def onModuleUsageAttempt(self, module_usage_attempt):
|
|
1156
|
+
self.module_usage_attempts.add(module_usage_attempt)
|
|
1157
|
+
|
|
1158
|
+
def getUsedDistributions(self):
|
|
1159
|
+
return self.distribution_names
|
|
1160
|
+
|
|
1161
|
+
def onDistributionUsed(self, distribution_name, node, success):
|
|
1162
|
+
inclusion_logger.info_to_file_only(
|
|
1163
|
+
"Cannot find distribution '%s' at '%s', expect potential run time problem, unless this is unused code."
|
|
1164
|
+
% (distribution_name, node.source_ref.getAsString())
|
|
1165
|
+
)
|
|
1166
|
+
|
|
1167
|
+
self.distribution_names[distribution_name] = success
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
# TODO: This should not exist, but be part of decision at the time these are collected.
|
|
1171
|
+
def areEmptyTraces(variable_traces):
|
|
1172
|
+
"""Do these traces contain any writes or accesses."""
|
|
1173
|
+
# Many cases immediately return, that is how we do it here,
|
|
1174
|
+
# pylint: disable=too-many-branches,too-many-return-statements
|
|
1175
|
+
|
|
1176
|
+
for variable_trace in variable_traces:
|
|
1177
|
+
if variable_trace.isAssignTrace():
|
|
1178
|
+
return False
|
|
1179
|
+
elif variable_trace.isInitTrace():
|
|
1180
|
+
return False
|
|
1181
|
+
elif variable_trace.isDeletedTrace():
|
|
1182
|
+
# A "del" statement can do this, and needs to prevent variable
|
|
1183
|
+
# from being removed.
|
|
1184
|
+
|
|
1185
|
+
return False
|
|
1186
|
+
elif variable_trace.isUninitializedTrace():
|
|
1187
|
+
if variable_trace.getUsageCount():
|
|
1188
|
+
# Checking definite is enough, the merges, we shall see
|
|
1189
|
+
# them as well.
|
|
1190
|
+
return False
|
|
1191
|
+
elif variable_trace.isUnknownTrace():
|
|
1192
|
+
if variable_trace.getUsageCount():
|
|
1193
|
+
# Checking definite is enough, the merges, we shall see
|
|
1194
|
+
# them as well.
|
|
1195
|
+
return False
|
|
1196
|
+
elif variable_trace.isEscapeTrace():
|
|
1197
|
+
if variable_trace.getUsageCount():
|
|
1198
|
+
# Checking definite is enough, the merges, we shall see
|
|
1199
|
+
# them as well.
|
|
1200
|
+
return False
|
|
1201
|
+
elif variable_trace.isMergeTrace():
|
|
1202
|
+
if variable_trace.getUsageCount():
|
|
1203
|
+
# Checking definite is enough, the merges, we shall see
|
|
1204
|
+
# them as well.
|
|
1205
|
+
return False
|
|
1206
|
+
elif variable_trace.isLoopTrace():
|
|
1207
|
+
return False
|
|
1208
|
+
else:
|
|
1209
|
+
assert False, variable_trace
|
|
1210
|
+
|
|
1211
|
+
return True
|
|
1212
|
+
|
|
1213
|
+
|
|
1214
|
+
def areReadOnlyTraces(variable_traces):
|
|
1215
|
+
"""Do these traces contain any writes."""
|
|
1216
|
+
|
|
1217
|
+
# Many cases immediately return, that is how we do it here,
|
|
1218
|
+
for variable_trace in variable_traces:
|
|
1219
|
+
if variable_trace.isAssignTrace():
|
|
1220
|
+
return False
|
|
1221
|
+
elif variable_trace.isInitTrace():
|
|
1222
|
+
pass
|
|
1223
|
+
elif variable_trace.isDeletedTrace():
|
|
1224
|
+
# A "del" statement can do this, and needs to prevent variable
|
|
1225
|
+
# from being not released.
|
|
1226
|
+
|
|
1227
|
+
return False
|
|
1228
|
+
elif variable_trace.isUninitializedTrace():
|
|
1229
|
+
pass
|
|
1230
|
+
elif variable_trace.isUnknownTrace():
|
|
1231
|
+
return False
|
|
1232
|
+
elif variable_trace.isEscapeTrace():
|
|
1233
|
+
pass
|
|
1234
|
+
elif variable_trace.isMergeTrace():
|
|
1235
|
+
pass
|
|
1236
|
+
elif variable_trace.isLoopTrace():
|
|
1237
|
+
pass
|
|
1238
|
+
else:
|
|
1239
|
+
assert False, variable_trace
|
|
1240
|
+
|
|
1241
|
+
return True
|
|
1242
|
+
|
|
1243
|
+
|
|
1244
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1245
|
+
# integrates with CPython, but also works on its own.
|
|
1246
|
+
#
|
|
1247
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1248
|
+
# you may not use this file except in compliance with the License.
|
|
1249
|
+
# You may obtain a copy of the License at
|
|
1250
|
+
#
|
|
1251
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1252
|
+
#
|
|
1253
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1254
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1255
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1256
|
+
# See the License for the specific language governing permissions and
|
|
1257
|
+
# limitations under the License.
|