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,1303 @@
|
|
|
1
|
+
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
""" Nodes for functions and their creations.
|
|
5
|
+
|
|
6
|
+
Lambdas are functions too. The functions are at the core of the language and
|
|
7
|
+
have their complexities.
|
|
8
|
+
|
|
9
|
+
Creating a CPython function object is an optional thing. Some things might
|
|
10
|
+
only be used to be called directly, while knowing exactly what it is. So
|
|
11
|
+
the "ExpressionFunctionCreation" might be used to provide that kind of
|
|
12
|
+
CPython reference, and may escape.
|
|
13
|
+
|
|
14
|
+
Coroutines and generators live in their dedicated module and share base
|
|
15
|
+
classes.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
import inspect
|
|
19
|
+
import re
|
|
20
|
+
|
|
21
|
+
from nuitka import Options, Variables
|
|
22
|
+
from nuitka.Constants import isMutable
|
|
23
|
+
from nuitka.optimizations.TraceCollections import (
|
|
24
|
+
TraceCollectionPureFunction,
|
|
25
|
+
withChangeIndicationsTo,
|
|
26
|
+
)
|
|
27
|
+
from nuitka.PythonVersions import python_version
|
|
28
|
+
from nuitka.specs.ParameterSpecs import (
|
|
29
|
+
ParameterSpec,
|
|
30
|
+
TooManyArguments,
|
|
31
|
+
matchCall,
|
|
32
|
+
)
|
|
33
|
+
from nuitka.Tracing import optimization_logger, printError
|
|
34
|
+
from nuitka.tree.Extractions import updateVariableUsage
|
|
35
|
+
from nuitka.tree.SourceHandling import readSourceLines
|
|
36
|
+
from nuitka.tree.TreeHelpers import makeDictCreationOrConstant2
|
|
37
|
+
|
|
38
|
+
from .ChildrenHavingMixins import (
|
|
39
|
+
ChildHavingBodyOptionalMixin,
|
|
40
|
+
ChildrenHavingDefaultsTupleKwDefaultsOptionalAnnotationsOptionalFunctionRefMixin,
|
|
41
|
+
ChildrenHavingFunctionValuesTupleMixin,
|
|
42
|
+
ChildrenHavingKwDefaultsOptionalDefaultsTupleAnnotationsOptionalFunctionRefMixin,
|
|
43
|
+
)
|
|
44
|
+
from .CodeObjectSpecs import CodeObjectSpec
|
|
45
|
+
from .ContainerMakingNodes import makeExpressionMakeTupleOrConstant
|
|
46
|
+
from .ExpressionBases import ExpressionBase, ExpressionNoSideEffectsMixin
|
|
47
|
+
from .FutureSpecs import fromFlags
|
|
48
|
+
from .IndicatorMixins import (
|
|
49
|
+
EntryPointMixin,
|
|
50
|
+
MarkUnoptimizedFunctionIndicatorMixin,
|
|
51
|
+
)
|
|
52
|
+
from .LocalsScopes import getLocalsDictHandle
|
|
53
|
+
from .NodeBases import (
|
|
54
|
+
ClosureGiverNodeMixin,
|
|
55
|
+
ClosureTakerMixin,
|
|
56
|
+
SideEffectsFromChildrenMixin,
|
|
57
|
+
)
|
|
58
|
+
from .NodeMakingHelpers import (
|
|
59
|
+
makeRaiseExceptionReplacementExpressionFromInstance,
|
|
60
|
+
wrapExpressionWithSideEffects,
|
|
61
|
+
)
|
|
62
|
+
from .shapes.BuiltinTypeShapes import tshape_function
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class MaybeLocalVariableUsage(Exception):
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class ExpressionFunctionBodyBase(
|
|
70
|
+
ClosureTakerMixin,
|
|
71
|
+
ClosureGiverNodeMixin,
|
|
72
|
+
ChildHavingBodyOptionalMixin,
|
|
73
|
+
ExpressionBase,
|
|
74
|
+
):
|
|
75
|
+
# TODO: The code_prefix should be a class attribute instead.
|
|
76
|
+
__slots__ = (
|
|
77
|
+
"provider",
|
|
78
|
+
"taken",
|
|
79
|
+
"name",
|
|
80
|
+
"code_prefix",
|
|
81
|
+
"code_name",
|
|
82
|
+
"uids",
|
|
83
|
+
"temp_variables",
|
|
84
|
+
"temp_scopes",
|
|
85
|
+
"preserver_id",
|
|
86
|
+
"flags",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
if python_version >= 0x300:
|
|
90
|
+
__slots__ += ("qualname_provider", "non_local_declarations")
|
|
91
|
+
|
|
92
|
+
# Might be None initially in some cases.
|
|
93
|
+
named_children = ("body|optional+setter",)
|
|
94
|
+
|
|
95
|
+
def __init__(self, provider, name, body, code_prefix, flags, source_ref):
|
|
96
|
+
while provider.isExpressionOutlineBody():
|
|
97
|
+
provider = provider.getParentVariableProvider()
|
|
98
|
+
|
|
99
|
+
ChildHavingBodyOptionalMixin.__init__(
|
|
100
|
+
self,
|
|
101
|
+
body=body,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
ClosureTakerMixin.__init__(self, provider=provider)
|
|
105
|
+
|
|
106
|
+
ClosureGiverNodeMixin.__init__(self, name=name, code_prefix=code_prefix)
|
|
107
|
+
|
|
108
|
+
ExpressionBase.__init__(self, source_ref)
|
|
109
|
+
|
|
110
|
+
# Special things, "has_super" indicates presence of "super" in variable
|
|
111
|
+
# usage, which modifies some behaviors.
|
|
112
|
+
self.flags = flags or None
|
|
113
|
+
|
|
114
|
+
# Hack: This allows some APIs to work although this is not yet
|
|
115
|
+
# officially a child yet. Important during building.
|
|
116
|
+
self.parent = provider
|
|
117
|
+
|
|
118
|
+
if python_version >= 0x300:
|
|
119
|
+
# Python3: Might be overridden by global statement on the class name.
|
|
120
|
+
# TODO: Make this class only code.
|
|
121
|
+
self.qualname_provider = provider
|
|
122
|
+
|
|
123
|
+
# Non-local declarations if any.
|
|
124
|
+
self.non_local_declarations = None
|
|
125
|
+
|
|
126
|
+
@staticmethod
|
|
127
|
+
def isExpressionFunctionBodyBase():
|
|
128
|
+
return True
|
|
129
|
+
|
|
130
|
+
def getEntryPoint(self):
|
|
131
|
+
"""Entry point for code.
|
|
132
|
+
|
|
133
|
+
Normally ourselves. Only outlines will refer to their parent which
|
|
134
|
+
technically owns them.
|
|
135
|
+
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
return self
|
|
139
|
+
|
|
140
|
+
def getContainingClassDictCreation(self):
|
|
141
|
+
current = self
|
|
142
|
+
|
|
143
|
+
while not current.isCompiledPythonModule():
|
|
144
|
+
if current.isExpressionClassBodyBase():
|
|
145
|
+
return current
|
|
146
|
+
|
|
147
|
+
current = current.getParentVariableProvider()
|
|
148
|
+
|
|
149
|
+
return None
|
|
150
|
+
|
|
151
|
+
def hasFlag(self, flag):
|
|
152
|
+
return self.flags is not None and flag in self.flags
|
|
153
|
+
|
|
154
|
+
def discardFlag(self, flag):
|
|
155
|
+
if self.flags is not None:
|
|
156
|
+
self.flags.discard(flag)
|
|
157
|
+
|
|
158
|
+
@staticmethod
|
|
159
|
+
def isEarlyClosure():
|
|
160
|
+
"""Early closure taking means immediate binding of references.
|
|
161
|
+
|
|
162
|
+
Normally it's good to lookup name references immediately, but not for
|
|
163
|
+
functions. In case of a function body it is not allowed to do that,
|
|
164
|
+
because a later assignment needs to be queried first. Nodes need to
|
|
165
|
+
indicate via this if they would like to resolve references at the same
|
|
166
|
+
time as assignments.
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
return False
|
|
170
|
+
|
|
171
|
+
def getLocalsScope(self):
|
|
172
|
+
return self.locals_scope
|
|
173
|
+
|
|
174
|
+
# TODO: Dubious function doing to distinct things, should be moved to users.
|
|
175
|
+
def hasVariableName(self, variable_name):
|
|
176
|
+
return (
|
|
177
|
+
self.locals_scope.hasProvidedVariable(variable_name)
|
|
178
|
+
or variable_name in self.temp_variables
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
def getProvidedVariables(self):
|
|
182
|
+
if self.locals_scope is not None:
|
|
183
|
+
return self.locals_scope.getProvidedVariables()
|
|
184
|
+
else:
|
|
185
|
+
return ()
|
|
186
|
+
|
|
187
|
+
def getLocalVariables(self):
|
|
188
|
+
return [
|
|
189
|
+
variable
|
|
190
|
+
for variable in self.getProvidedVariables()
|
|
191
|
+
if variable.isLocalVariable()
|
|
192
|
+
]
|
|
193
|
+
|
|
194
|
+
def getUserLocalVariables(self):
|
|
195
|
+
return [
|
|
196
|
+
variable
|
|
197
|
+
for variable in self.getProvidedVariables()
|
|
198
|
+
if variable.isLocalVariable() and not variable.isParameterVariable()
|
|
199
|
+
if variable.getOwner() is self
|
|
200
|
+
]
|
|
201
|
+
|
|
202
|
+
def getOutlineLocalVariables(self):
|
|
203
|
+
result = []
|
|
204
|
+
|
|
205
|
+
outlines = self.getTraceCollection().getOutlineFunctions()
|
|
206
|
+
|
|
207
|
+
if outlines is None:
|
|
208
|
+
return result
|
|
209
|
+
|
|
210
|
+
for outline in outlines:
|
|
211
|
+
result.extend(outline.getUserLocalVariables())
|
|
212
|
+
|
|
213
|
+
return result
|
|
214
|
+
|
|
215
|
+
def removeClosureVariable(self, variable):
|
|
216
|
+
# Do not remove parameter variables of ours.
|
|
217
|
+
assert not variable.isParameterVariable() or variable.getOwner() is not self
|
|
218
|
+
|
|
219
|
+
self.locals_scope.unregisterClosureVariable(variable)
|
|
220
|
+
|
|
221
|
+
self.taken.remove(variable)
|
|
222
|
+
|
|
223
|
+
self.code_object.removeFreeVarname(variable.getName())
|
|
224
|
+
|
|
225
|
+
def demoteClosureVariable(self, variable):
|
|
226
|
+
assert variable.isLocalVariable()
|
|
227
|
+
|
|
228
|
+
self.taken.remove(variable)
|
|
229
|
+
|
|
230
|
+
assert variable.getOwner() is not self
|
|
231
|
+
|
|
232
|
+
new_variable = Variables.LocalVariable(
|
|
233
|
+
owner=self, variable_name=variable.getName()
|
|
234
|
+
)
|
|
235
|
+
for variable_trace in variable.traces:
|
|
236
|
+
if variable_trace.getOwner() is self:
|
|
237
|
+
new_variable.addTrace(variable_trace)
|
|
238
|
+
new_variable.updateUsageState()
|
|
239
|
+
|
|
240
|
+
self.locals_scope.unregisterClosureVariable(variable)
|
|
241
|
+
self.locals_scope.registerProvidedVariable(new_variable)
|
|
242
|
+
|
|
243
|
+
updateVariableUsage(
|
|
244
|
+
provider=self, old_variable=variable, new_variable=new_variable
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
def hasClosureVariable(self, variable):
|
|
248
|
+
return variable in self.taken
|
|
249
|
+
|
|
250
|
+
def getVariableForAssignment(self, variable_name):
|
|
251
|
+
# print("ASS func", self, variable_name)
|
|
252
|
+
|
|
253
|
+
if self.hasTakenVariable(variable_name):
|
|
254
|
+
result = self.getTakenVariable(variable_name)
|
|
255
|
+
else:
|
|
256
|
+
result = self.getProvidedVariable(variable_name)
|
|
257
|
+
|
|
258
|
+
return result
|
|
259
|
+
|
|
260
|
+
def getVariableForReference(self, variable_name):
|
|
261
|
+
# print( "REF func", self, variable_name )
|
|
262
|
+
|
|
263
|
+
if self.hasProvidedVariable(variable_name):
|
|
264
|
+
result = self.getProvidedVariable(variable_name)
|
|
265
|
+
else:
|
|
266
|
+
result = self.getClosureVariable(variable_name=variable_name)
|
|
267
|
+
|
|
268
|
+
# Remember that we need that closure variable for something, so
|
|
269
|
+
# we don't create it again all the time.
|
|
270
|
+
if not result.isModuleVariable():
|
|
271
|
+
self.locals_scope.registerClosureVariable(result)
|
|
272
|
+
|
|
273
|
+
entry_point = self.getEntryPoint()
|
|
274
|
+
|
|
275
|
+
# For "exec" containing/star import containing, we raise this exception to indicate
|
|
276
|
+
# that instead of merely a variable, to be assigned, we need to replace with locals
|
|
277
|
+
# dict access.
|
|
278
|
+
if (
|
|
279
|
+
python_version < 0x300
|
|
280
|
+
and not entry_point.isExpressionClassBodyBase()
|
|
281
|
+
and not entry_point.isPythonMainModule()
|
|
282
|
+
and result.isModuleVariable()
|
|
283
|
+
and entry_point.isUnoptimized()
|
|
284
|
+
):
|
|
285
|
+
raise MaybeLocalVariableUsage
|
|
286
|
+
|
|
287
|
+
return result
|
|
288
|
+
|
|
289
|
+
def getVariableForClosure(self, variable_name):
|
|
290
|
+
# print( "getVariableForClosure", self.getCodeName(), variable_name, self.isUnoptimized() )
|
|
291
|
+
|
|
292
|
+
if self.hasProvidedVariable(variable_name):
|
|
293
|
+
return self.getProvidedVariable(variable_name)
|
|
294
|
+
|
|
295
|
+
return self.takeVariableForClosure(variable_name)
|
|
296
|
+
|
|
297
|
+
def takeVariableForClosure(self, variable_name):
|
|
298
|
+
result = self.provider.getVariableForClosure(variable_name)
|
|
299
|
+
self.taken.add(result)
|
|
300
|
+
return result
|
|
301
|
+
|
|
302
|
+
def createProvidedVariable(self, variable_name):
|
|
303
|
+
# print("createProvidedVariable", self, variable_name)
|
|
304
|
+
|
|
305
|
+
assert self.locals_scope, self
|
|
306
|
+
|
|
307
|
+
return self.locals_scope.getLocalVariable(
|
|
308
|
+
variable_name=variable_name, owner=self
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
def addNonlocalsDeclaration(self, names, user_provided, source_ref):
|
|
312
|
+
"""Add a nonlocal declared name.
|
|
313
|
+
|
|
314
|
+
This happens during tree building, and is a Python3 only
|
|
315
|
+
feature. We remember the names for later use through the
|
|
316
|
+
function @consumeNonlocalDeclarations
|
|
317
|
+
"""
|
|
318
|
+
if self.non_local_declarations is None:
|
|
319
|
+
self.non_local_declarations = []
|
|
320
|
+
|
|
321
|
+
self.non_local_declarations.append((names, user_provided, source_ref))
|
|
322
|
+
|
|
323
|
+
def consumeNonlocalDeclarations(self):
|
|
324
|
+
"""Return the nonlocal declared names for this function.
|
|
325
|
+
|
|
326
|
+
There may not be any, which is why we assigned it to
|
|
327
|
+
None originally and now check and return empty tuple
|
|
328
|
+
in that case.
|
|
329
|
+
"""
|
|
330
|
+
|
|
331
|
+
result = self.non_local_declarations or ()
|
|
332
|
+
self.non_local_declarations = None
|
|
333
|
+
return result
|
|
334
|
+
|
|
335
|
+
def getFunctionName(self):
|
|
336
|
+
return self.name
|
|
337
|
+
|
|
338
|
+
def getFunctionQualname(self):
|
|
339
|
+
"""Function __qualname__ new in CPython3.3
|
|
340
|
+
|
|
341
|
+
Should contain some kind of full name descriptions for the closure to
|
|
342
|
+
recognize and will be used for outputs.
|
|
343
|
+
"""
|
|
344
|
+
|
|
345
|
+
function_name = self.getFunctionName()
|
|
346
|
+
|
|
347
|
+
if python_version < 0x300:
|
|
348
|
+
qualname_provider = self.getParentVariableProvider()
|
|
349
|
+
else:
|
|
350
|
+
qualname_provider = self.qualname_provider
|
|
351
|
+
|
|
352
|
+
return qualname_provider.getChildQualname(function_name)
|
|
353
|
+
|
|
354
|
+
def computeExpression(self, trace_collection):
|
|
355
|
+
assert False
|
|
356
|
+
|
|
357
|
+
# Function body is quite irreplaceable.
|
|
358
|
+
return self, None, None
|
|
359
|
+
|
|
360
|
+
def mayRaiseException(self, exception_type):
|
|
361
|
+
body = self.subnode_body
|
|
362
|
+
|
|
363
|
+
if body is None:
|
|
364
|
+
return False
|
|
365
|
+
else:
|
|
366
|
+
return self.subnode_body.mayRaiseException(exception_type)
|
|
367
|
+
|
|
368
|
+
def getFunctionInlineCost(self, values):
|
|
369
|
+
"""Cost of inlining this function with given arguments
|
|
370
|
+
|
|
371
|
+
Returns: None or integer values, None means don't do it.
|
|
372
|
+
"""
|
|
373
|
+
|
|
374
|
+
# For overload, pylint: disable=no-self-use,unused-argument
|
|
375
|
+
return None
|
|
376
|
+
|
|
377
|
+
def optimizeUnusedClosureVariables(self):
|
|
378
|
+
"""Gets called once module is complete, to consider giving up on closure variables."""
|
|
379
|
+
|
|
380
|
+
changed = False
|
|
381
|
+
|
|
382
|
+
for closure_variable in self.getClosureVariables():
|
|
383
|
+
# Need to take closure of those either way
|
|
384
|
+
if (
|
|
385
|
+
closure_variable.isParameterVariable()
|
|
386
|
+
and self.isExpressionGeneratorObjectBody()
|
|
387
|
+
):
|
|
388
|
+
continue
|
|
389
|
+
|
|
390
|
+
empty = self.trace_collection.hasEmptyTraces(closure_variable)
|
|
391
|
+
|
|
392
|
+
if empty:
|
|
393
|
+
changed = True
|
|
394
|
+
|
|
395
|
+
self.trace_collection.signalChange(
|
|
396
|
+
"var_usage",
|
|
397
|
+
self.source_ref,
|
|
398
|
+
message="Remove unused closure variable '%s'."
|
|
399
|
+
% closure_variable.getName(),
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
self.removeClosureVariable(closure_variable)
|
|
403
|
+
|
|
404
|
+
return changed
|
|
405
|
+
|
|
406
|
+
def optimizeVariableReleases(self):
|
|
407
|
+
for parameter_variable in self.getParameterVariablesWithManualRelease():
|
|
408
|
+
read_only = self.trace_collection.hasReadOnlyTraces(parameter_variable)
|
|
409
|
+
|
|
410
|
+
if read_only:
|
|
411
|
+
self.trace_collection.signalChange(
|
|
412
|
+
"var_usage",
|
|
413
|
+
self.source_ref,
|
|
414
|
+
message="Schedule removal releases of unassigned parameter variable '%s'."
|
|
415
|
+
% parameter_variable.getName(),
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
self.removeVariableReleases(parameter_variable)
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
class ExpressionFunctionEntryPointBase(EntryPointMixin, ExpressionFunctionBodyBase):
|
|
422
|
+
__slots__ = ("trace_collection", "code_object", "locals_scope", "auto_release")
|
|
423
|
+
|
|
424
|
+
def __init__(
|
|
425
|
+
self, provider, name, code_object, code_prefix, flags, auto_release, source_ref
|
|
426
|
+
):
|
|
427
|
+
ExpressionFunctionBodyBase.__init__(
|
|
428
|
+
self,
|
|
429
|
+
provider=provider,
|
|
430
|
+
name=name,
|
|
431
|
+
code_prefix=code_prefix,
|
|
432
|
+
flags=flags,
|
|
433
|
+
body=None,
|
|
434
|
+
source_ref=source_ref,
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
EntryPointMixin.__init__(self)
|
|
438
|
+
|
|
439
|
+
self.code_object = code_object
|
|
440
|
+
|
|
441
|
+
provider.getParentModule().addFunction(self)
|
|
442
|
+
|
|
443
|
+
if flags is not None and "has_exec" in flags:
|
|
444
|
+
locals_kind = "python2_function_exec"
|
|
445
|
+
else:
|
|
446
|
+
locals_kind = "python_function"
|
|
447
|
+
|
|
448
|
+
self.locals_scope = getLocalsDictHandle(
|
|
449
|
+
"locals_%s" % self.getCodeName(), locals_kind, self
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
# Automatic parameter variable releases.
|
|
453
|
+
self.auto_release = auto_release or None
|
|
454
|
+
|
|
455
|
+
def getDetails(self):
|
|
456
|
+
result = ExpressionFunctionBodyBase.getDetails(self)
|
|
457
|
+
|
|
458
|
+
result["auto_release"] = tuple(sorted(self.auto_release or ()))
|
|
459
|
+
|
|
460
|
+
return result
|
|
461
|
+
|
|
462
|
+
def getCodeObject(self):
|
|
463
|
+
return self.code_object
|
|
464
|
+
|
|
465
|
+
def getChildQualname(self, function_name):
|
|
466
|
+
return self.getFunctionQualname() + ".<locals>." + function_name
|
|
467
|
+
|
|
468
|
+
def computeFunctionRaw(self, trace_collection):
|
|
469
|
+
from nuitka.optimizations.TraceCollections import (
|
|
470
|
+
TraceCollectionFunction,
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
trace_collection = TraceCollectionFunction(
|
|
474
|
+
parent=trace_collection, function_body=self
|
|
475
|
+
)
|
|
476
|
+
old_collection = self.setTraceCollection(trace_collection)
|
|
477
|
+
|
|
478
|
+
self.computeFunction(trace_collection)
|
|
479
|
+
|
|
480
|
+
trace_collection.updateVariablesFromCollection(old_collection, self.source_ref)
|
|
481
|
+
|
|
482
|
+
def computeFunction(self, trace_collection):
|
|
483
|
+
statements_sequence = self.subnode_body
|
|
484
|
+
|
|
485
|
+
# TODO: Lift this restriction to only functions here and it code generation.
|
|
486
|
+
if statements_sequence is not None and self.isExpressionFunctionBody():
|
|
487
|
+
if statements_sequence.subnode_statements[0].isStatementReturnNone():
|
|
488
|
+
statements_sequence.finalize()
|
|
489
|
+
self.setChildBody(None)
|
|
490
|
+
|
|
491
|
+
statements_sequence = None
|
|
492
|
+
|
|
493
|
+
if statements_sequence is not None:
|
|
494
|
+
result = statements_sequence.computeStatementsSequence(
|
|
495
|
+
trace_collection=trace_collection
|
|
496
|
+
)
|
|
497
|
+
|
|
498
|
+
if result is not statements_sequence:
|
|
499
|
+
self.setChildBody(result)
|
|
500
|
+
|
|
501
|
+
def removeVariableReleases(self, variable):
|
|
502
|
+
assert variable in self.locals_scope.providing.values(), (self, variable)
|
|
503
|
+
|
|
504
|
+
if self.auto_release is None:
|
|
505
|
+
self.auto_release = set()
|
|
506
|
+
|
|
507
|
+
self.auto_release.add(variable)
|
|
508
|
+
|
|
509
|
+
def getParameterVariablesWithManualRelease(self):
|
|
510
|
+
"""Return the list of parameter variables that have release statements.
|
|
511
|
+
|
|
512
|
+
These are for consideration if these can be dropped, and if so, they
|
|
513
|
+
are releases automatically by function code.
|
|
514
|
+
"""
|
|
515
|
+
return tuple(
|
|
516
|
+
variable
|
|
517
|
+
for variable in self.locals_scope.getProvidedVariables()
|
|
518
|
+
if not self.auto_release or variable not in self.auto_release
|
|
519
|
+
if variable.isParameterVariable()
|
|
520
|
+
if variable.getOwner() is self
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
def isAutoReleaseVariable(self, variable):
|
|
524
|
+
"""Is this variable to be automatically released."""
|
|
525
|
+
return self.auto_release is not None and variable in self.auto_release
|
|
526
|
+
|
|
527
|
+
def getFunctionVariablesWithAutoReleases(self):
|
|
528
|
+
"""Return the list of function variables that should be released at exit."""
|
|
529
|
+
if self.auto_release is None:
|
|
530
|
+
return ()
|
|
531
|
+
|
|
532
|
+
return tuple(
|
|
533
|
+
variable
|
|
534
|
+
for variable in self.locals_scope.getProvidedVariables()
|
|
535
|
+
if variable in self.auto_release
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
@staticmethod
|
|
539
|
+
def getConstantReturnValue():
|
|
540
|
+
"""Special function that checks if code generation allows to use common C code.
|
|
541
|
+
|
|
542
|
+
Notes:
|
|
543
|
+
This is only done for standard functions.
|
|
544
|
+
|
|
545
|
+
"""
|
|
546
|
+
return False, False
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
class ExpressionFunctionBody(
|
|
550
|
+
ExpressionNoSideEffectsMixin,
|
|
551
|
+
MarkUnoptimizedFunctionIndicatorMixin,
|
|
552
|
+
ExpressionFunctionEntryPointBase,
|
|
553
|
+
):
|
|
554
|
+
# TODO: There should be more special ones than this general type in order to
|
|
555
|
+
# not cover exec ones in the same object.
|
|
556
|
+
|
|
557
|
+
kind = "EXPRESSION_FUNCTION_BODY"
|
|
558
|
+
|
|
559
|
+
__slots__ = (
|
|
560
|
+
"unoptimized_locals",
|
|
561
|
+
"unqualified_exec",
|
|
562
|
+
"doc",
|
|
563
|
+
"return_exception",
|
|
564
|
+
"needs_creation",
|
|
565
|
+
"needs_direct",
|
|
566
|
+
"cross_module_use",
|
|
567
|
+
"parameters",
|
|
568
|
+
)
|
|
569
|
+
|
|
570
|
+
if python_version >= 0x300:
|
|
571
|
+
__slots__ += ("qualname_setup",)
|
|
572
|
+
|
|
573
|
+
def __init__(
|
|
574
|
+
self,
|
|
575
|
+
provider,
|
|
576
|
+
name,
|
|
577
|
+
code_object,
|
|
578
|
+
doc,
|
|
579
|
+
parameters,
|
|
580
|
+
flags,
|
|
581
|
+
auto_release,
|
|
582
|
+
code_prefix,
|
|
583
|
+
source_ref,
|
|
584
|
+
):
|
|
585
|
+
ExpressionFunctionEntryPointBase.__init__(
|
|
586
|
+
self,
|
|
587
|
+
provider=provider,
|
|
588
|
+
name=name,
|
|
589
|
+
code_object=code_object,
|
|
590
|
+
code_prefix=code_prefix,
|
|
591
|
+
flags=flags,
|
|
592
|
+
auto_release=auto_release,
|
|
593
|
+
source_ref=source_ref,
|
|
594
|
+
)
|
|
595
|
+
|
|
596
|
+
MarkUnoptimizedFunctionIndicatorMixin.__init__(self, flags)
|
|
597
|
+
|
|
598
|
+
self.doc = doc
|
|
599
|
+
|
|
600
|
+
# Indicator if the return value exception might be required.
|
|
601
|
+
self.return_exception = False
|
|
602
|
+
|
|
603
|
+
# Indicator if the function needs to be created as a function object.
|
|
604
|
+
self.needs_creation = False
|
|
605
|
+
|
|
606
|
+
# Indicator if the function is called directly.
|
|
607
|
+
self.needs_direct = False
|
|
608
|
+
|
|
609
|
+
# Indicator if the function is used outside of where it's defined.
|
|
610
|
+
self.cross_module_use = False
|
|
611
|
+
|
|
612
|
+
if python_version >= 0x300:
|
|
613
|
+
self.qualname_setup = None
|
|
614
|
+
|
|
615
|
+
self.parameters = parameters
|
|
616
|
+
self.parameters.setOwner(self)
|
|
617
|
+
|
|
618
|
+
for variable in self.parameters.getAllVariables():
|
|
619
|
+
self.locals_scope.registerProvidedVariable(variable)
|
|
620
|
+
|
|
621
|
+
def getDetails(self):
|
|
622
|
+
return {
|
|
623
|
+
"name": self.getFunctionName(),
|
|
624
|
+
"ref_name": self.getCodeName(),
|
|
625
|
+
"parameters": self.getParameters(),
|
|
626
|
+
"code_object": self.code_object,
|
|
627
|
+
"provider": self.provider.getCodeName(),
|
|
628
|
+
"doc": self.doc,
|
|
629
|
+
"flags": self.flags,
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
def getDetailsForDisplay(self):
|
|
633
|
+
result = {
|
|
634
|
+
"name": self.getFunctionName(),
|
|
635
|
+
"provider": self.provider.getCodeName(),
|
|
636
|
+
"flags": self.flags,
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
result.update(self.parameters.getDetails())
|
|
640
|
+
|
|
641
|
+
if self.code_object:
|
|
642
|
+
result.update(self.code_object.getDetails())
|
|
643
|
+
|
|
644
|
+
if self.doc is not None:
|
|
645
|
+
result["doc"] = self.doc
|
|
646
|
+
|
|
647
|
+
return result
|
|
648
|
+
|
|
649
|
+
@classmethod
|
|
650
|
+
def fromXML(cls, provider, source_ref, **args):
|
|
651
|
+
assert provider is not None
|
|
652
|
+
|
|
653
|
+
parameter_spec_args = {}
|
|
654
|
+
code_object_args = {}
|
|
655
|
+
other_args = {}
|
|
656
|
+
|
|
657
|
+
for key, value in args.items():
|
|
658
|
+
if key.startswith("ps_"):
|
|
659
|
+
parameter_spec_args[key] = value
|
|
660
|
+
elif key.startswith("co_"):
|
|
661
|
+
code_object_args[key] = value
|
|
662
|
+
elif key == "code_flags":
|
|
663
|
+
code_object_args["future_spec"] = fromFlags(args["code_flags"])
|
|
664
|
+
else:
|
|
665
|
+
other_args[key] = value
|
|
666
|
+
|
|
667
|
+
parameters = ParameterSpec(**parameter_spec_args)
|
|
668
|
+
code_object = CodeObjectSpec(**code_object_args)
|
|
669
|
+
|
|
670
|
+
# The empty doc string and no doc string are distinguished by presence. The
|
|
671
|
+
# most common case is going to be not present.
|
|
672
|
+
if "doc" not in other_args:
|
|
673
|
+
other_args["doc"] = None
|
|
674
|
+
|
|
675
|
+
return cls(
|
|
676
|
+
provider=provider,
|
|
677
|
+
parameters=parameters,
|
|
678
|
+
code_object=code_object,
|
|
679
|
+
source_ref=source_ref,
|
|
680
|
+
**other_args
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
@staticmethod
|
|
684
|
+
def isExpressionFunctionBody():
|
|
685
|
+
return True
|
|
686
|
+
|
|
687
|
+
def getParent(self):
|
|
688
|
+
assert False
|
|
689
|
+
|
|
690
|
+
def getDoc(self):
|
|
691
|
+
return self.doc
|
|
692
|
+
|
|
693
|
+
def getParameters(self):
|
|
694
|
+
return self.parameters
|
|
695
|
+
|
|
696
|
+
def needsCreation(self):
|
|
697
|
+
return self.needs_creation
|
|
698
|
+
|
|
699
|
+
def markAsNeedsCreation(self):
|
|
700
|
+
self.needs_creation = True
|
|
701
|
+
|
|
702
|
+
def needsDirectCall(self):
|
|
703
|
+
return self.needs_direct
|
|
704
|
+
|
|
705
|
+
def markAsDirectlyCalled(self):
|
|
706
|
+
self.needs_direct = True
|
|
707
|
+
|
|
708
|
+
def isCrossModuleUsed(self):
|
|
709
|
+
return self.cross_module_use
|
|
710
|
+
|
|
711
|
+
def markAsCrossModuleUsed(self):
|
|
712
|
+
self.cross_module_use = True
|
|
713
|
+
|
|
714
|
+
def computeExpressionCall(self, call_node, call_args, call_kw, trace_collection):
|
|
715
|
+
# TODO: Until we have something to re-order the arguments, we need to
|
|
716
|
+
# skip this. For the immediate need, we avoid this complexity, as a
|
|
717
|
+
# re-ordering will be needed.
|
|
718
|
+
|
|
719
|
+
assert False, self
|
|
720
|
+
|
|
721
|
+
@staticmethod
|
|
722
|
+
def isCompileTimeConstant():
|
|
723
|
+
# TODO: It's actually pretty much compile time accessible maybe, but that
|
|
724
|
+
# would require extra effort.
|
|
725
|
+
return False
|
|
726
|
+
|
|
727
|
+
# TODO: This is an overload that contradicts no side effects, this might be
|
|
728
|
+
# used by outside code, not removed, but we should investigate this.
|
|
729
|
+
def mayRaiseException(self, exception_type):
|
|
730
|
+
body = self.subnode_body
|
|
731
|
+
|
|
732
|
+
return body is not None and body.mayRaiseException(exception_type)
|
|
733
|
+
|
|
734
|
+
def markAsExceptionReturnValue(self):
|
|
735
|
+
self.return_exception = True
|
|
736
|
+
|
|
737
|
+
def needsExceptionReturnValue(self):
|
|
738
|
+
return self.return_exception
|
|
739
|
+
|
|
740
|
+
def getConstantReturnValue(self):
|
|
741
|
+
"""Special function that checks if code generation allows to use common C code."""
|
|
742
|
+
body = self.subnode_body
|
|
743
|
+
|
|
744
|
+
if body is None:
|
|
745
|
+
return True, None
|
|
746
|
+
|
|
747
|
+
first_statement = body.subnode_statements[0]
|
|
748
|
+
|
|
749
|
+
if first_statement.isStatementReturnConstant():
|
|
750
|
+
constant_value = first_statement.getConstant()
|
|
751
|
+
|
|
752
|
+
# TODO: For mutable constants, we could also have something, but it would require an indicator
|
|
753
|
+
# flag to make a deep copy.
|
|
754
|
+
if not isMutable(constant_value):
|
|
755
|
+
return True, constant_value
|
|
756
|
+
else:
|
|
757
|
+
return False, False
|
|
758
|
+
else:
|
|
759
|
+
return False, False
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
class ExpressionFunctionPureBody(ExpressionFunctionBody):
|
|
763
|
+
kind = "EXPRESSION_FUNCTION_PURE_BODY"
|
|
764
|
+
|
|
765
|
+
__slots__ = (
|
|
766
|
+
# These need only one optimization ever.
|
|
767
|
+
"optimization_done",
|
|
768
|
+
)
|
|
769
|
+
|
|
770
|
+
def __init__(
|
|
771
|
+
self,
|
|
772
|
+
provider,
|
|
773
|
+
name,
|
|
774
|
+
code_object,
|
|
775
|
+
doc,
|
|
776
|
+
parameters,
|
|
777
|
+
flags,
|
|
778
|
+
auto_release,
|
|
779
|
+
code_prefix,
|
|
780
|
+
source_ref,
|
|
781
|
+
):
|
|
782
|
+
ExpressionFunctionBody.__init__(
|
|
783
|
+
self,
|
|
784
|
+
provider=provider,
|
|
785
|
+
name=name,
|
|
786
|
+
code_object=code_object,
|
|
787
|
+
doc=doc,
|
|
788
|
+
parameters=parameters,
|
|
789
|
+
flags=flags,
|
|
790
|
+
auto_release=auto_release,
|
|
791
|
+
code_prefix=code_prefix,
|
|
792
|
+
source_ref=source_ref,
|
|
793
|
+
)
|
|
794
|
+
|
|
795
|
+
self.optimization_done = False
|
|
796
|
+
|
|
797
|
+
def computeFunctionRaw(self, trace_collection):
|
|
798
|
+
if self.optimization_done:
|
|
799
|
+
for function_body in self.trace_collection.getUsedFunctions():
|
|
800
|
+
trace_collection.onUsedFunction(function_body)
|
|
801
|
+
|
|
802
|
+
return
|
|
803
|
+
|
|
804
|
+
def mySignal(tag, source_ref, change_desc):
|
|
805
|
+
if Options.is_verbose:
|
|
806
|
+
optimization_logger.info(
|
|
807
|
+
"{source_ref} : {tags} : {message}".format(
|
|
808
|
+
source_ref=source_ref.getAsString(),
|
|
809
|
+
tags=tag,
|
|
810
|
+
message=(
|
|
811
|
+
change_desc()
|
|
812
|
+
if inspect.isfunction(change_desc)
|
|
813
|
+
else change_desc
|
|
814
|
+
),
|
|
815
|
+
)
|
|
816
|
+
)
|
|
817
|
+
|
|
818
|
+
tags.add(tag)
|
|
819
|
+
|
|
820
|
+
tags = set()
|
|
821
|
+
|
|
822
|
+
while 1:
|
|
823
|
+
trace_collection = TraceCollectionPureFunction(function_body=self)
|
|
824
|
+
old_collection = self.setTraceCollection(trace_collection)
|
|
825
|
+
|
|
826
|
+
with withChangeIndicationsTo(mySignal):
|
|
827
|
+
self.computeFunction(trace_collection)
|
|
828
|
+
|
|
829
|
+
trace_collection.updateVariablesFromCollection(
|
|
830
|
+
old_collection, self.source_ref
|
|
831
|
+
)
|
|
832
|
+
|
|
833
|
+
if tags:
|
|
834
|
+
tags.clear()
|
|
835
|
+
else:
|
|
836
|
+
break
|
|
837
|
+
|
|
838
|
+
self.optimization_done = True
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
class ExpressionFunctionPureInlineConstBody(ExpressionFunctionBody):
|
|
842
|
+
kind = "EXPRESSION_FUNCTION_PURE_INLINE_CONST_BODY"
|
|
843
|
+
|
|
844
|
+
def getFunctionInlineCost(self, values):
|
|
845
|
+
return 0
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
# TODO: Function direct call node ought to be here too.
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
def makeExpressionFunctionCreation(
|
|
852
|
+
function_ref, defaults, kw_defaults, annotations, source_ref
|
|
853
|
+
):
|
|
854
|
+
if kw_defaults is not None and kw_defaults.isExpressionConstantDictEmptyRef():
|
|
855
|
+
kw_defaults = None
|
|
856
|
+
|
|
857
|
+
assert function_ref.isExpressionFunctionRef()
|
|
858
|
+
|
|
859
|
+
return ExpressionFunctionCreation(
|
|
860
|
+
function_ref=function_ref,
|
|
861
|
+
defaults=defaults,
|
|
862
|
+
kw_defaults=kw_defaults,
|
|
863
|
+
annotations=annotations,
|
|
864
|
+
source_ref=source_ref,
|
|
865
|
+
)
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
class ExpressionFunctionCreationMixin(SideEffectsFromChildrenMixin):
|
|
869
|
+
# Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
|
|
870
|
+
__slots__ = ()
|
|
871
|
+
|
|
872
|
+
@staticmethod
|
|
873
|
+
def isExpressionFunctionCreation():
|
|
874
|
+
return True
|
|
875
|
+
|
|
876
|
+
def getName(self):
|
|
877
|
+
return self.subnode_function_ref.getName()
|
|
878
|
+
|
|
879
|
+
@staticmethod
|
|
880
|
+
def getTypeShape():
|
|
881
|
+
return tshape_function
|
|
882
|
+
|
|
883
|
+
def computeExpression(self, trace_collection):
|
|
884
|
+
self.variable_closure_traces = []
|
|
885
|
+
|
|
886
|
+
for (
|
|
887
|
+
closure_variable
|
|
888
|
+
) in self.subnode_function_ref.getFunctionBody().getClosureVariables():
|
|
889
|
+
trace = trace_collection.getVariableCurrentTrace(closure_variable)
|
|
890
|
+
trace.addNameUsage()
|
|
891
|
+
|
|
892
|
+
self.variable_closure_traces.append((closure_variable, trace))
|
|
893
|
+
|
|
894
|
+
kw_defaults = self.subnode_kw_defaults
|
|
895
|
+
if kw_defaults is not None:
|
|
896
|
+
kw_defaults.onContentEscapes(trace_collection)
|
|
897
|
+
|
|
898
|
+
for default in self.subnode_defaults:
|
|
899
|
+
default.onContentEscapes(trace_collection)
|
|
900
|
+
|
|
901
|
+
# TODO: Function body may know something too.
|
|
902
|
+
return self, None, None
|
|
903
|
+
|
|
904
|
+
def mayRaiseException(self, exception_type):
|
|
905
|
+
for default in self.subnode_defaults:
|
|
906
|
+
if default.mayRaiseException(exception_type):
|
|
907
|
+
return True
|
|
908
|
+
|
|
909
|
+
kw_defaults = self.subnode_kw_defaults
|
|
910
|
+
|
|
911
|
+
if kw_defaults is not None and kw_defaults.mayRaiseException(exception_type):
|
|
912
|
+
return True
|
|
913
|
+
|
|
914
|
+
annotations = self.subnode_annotations
|
|
915
|
+
|
|
916
|
+
if annotations is not None and annotations.mayRaiseException(exception_type):
|
|
917
|
+
return True
|
|
918
|
+
|
|
919
|
+
return False
|
|
920
|
+
|
|
921
|
+
def computeExpressionCall(self, call_node, call_args, call_kw, trace_collection):
|
|
922
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
923
|
+
|
|
924
|
+
# TODO: Until we have something to re-order the keyword arguments, we
|
|
925
|
+
# need to skip this. For the immediate need, we avoid this complexity,
|
|
926
|
+
# as a re-ordering will be needed.
|
|
927
|
+
if call_kw is not None and not call_kw.isExpressionConstantDictEmptyRef():
|
|
928
|
+
return call_node, None, None
|
|
929
|
+
|
|
930
|
+
if call_args is None:
|
|
931
|
+
args_tuple = ()
|
|
932
|
+
else:
|
|
933
|
+
assert (
|
|
934
|
+
call_args.isExpressionConstantTupleRef()
|
|
935
|
+
or call_args.isExpressionMakeTuple()
|
|
936
|
+
)
|
|
937
|
+
|
|
938
|
+
args_tuple = call_args.getIterationValues()
|
|
939
|
+
|
|
940
|
+
function_body = self.subnode_function_ref.getFunctionBody()
|
|
941
|
+
|
|
942
|
+
# TODO: Actually the above disables it entirely, as it is at least
|
|
943
|
+
# the empty dictionary node in any case. We will need some enhanced
|
|
944
|
+
# interfaces for "matchCall" to work on.
|
|
945
|
+
|
|
946
|
+
call_spec = function_body.getParameters()
|
|
947
|
+
|
|
948
|
+
try:
|
|
949
|
+
args_dict = matchCall(
|
|
950
|
+
func_name=self.getName(),
|
|
951
|
+
args=call_spec.getArgumentNames(),
|
|
952
|
+
kw_only_args=call_spec.getKwOnlyParameterNames(),
|
|
953
|
+
star_list_arg=call_spec.getStarListArgumentName(),
|
|
954
|
+
star_dict_arg=call_spec.getStarDictArgumentName(),
|
|
955
|
+
star_list_single_arg=False,
|
|
956
|
+
num_defaults=call_spec.getDefaultCount(),
|
|
957
|
+
num_pos_only=call_spec.getPosOnlyParameterCount(),
|
|
958
|
+
positional=args_tuple,
|
|
959
|
+
pairs=(),
|
|
960
|
+
)
|
|
961
|
+
|
|
962
|
+
values = [args_dict[name] for name in call_spec.getParameterNames()]
|
|
963
|
+
|
|
964
|
+
# TODO: Not handling default values either yet.
|
|
965
|
+
if None in values:
|
|
966
|
+
return call_node, None, None
|
|
967
|
+
|
|
968
|
+
# TODO: This is probably something that the matchCall ought to do
|
|
969
|
+
# for us, but that will need cleanups. Also these functions and
|
|
970
|
+
# nodes ought to work with ordered dictionaries maybe.
|
|
971
|
+
if call_spec.getStarDictArgumentName():
|
|
972
|
+
values[-1] = makeDictCreationOrConstant2(
|
|
973
|
+
keys=[value[0] for value in values[-1]],
|
|
974
|
+
values=[value[1] for value in values[-1]],
|
|
975
|
+
source_ref=call_node.source_ref,
|
|
976
|
+
)
|
|
977
|
+
|
|
978
|
+
star_list_offset = -2
|
|
979
|
+
else:
|
|
980
|
+
star_list_offset = -1
|
|
981
|
+
|
|
982
|
+
if call_spec.getStarListArgumentName():
|
|
983
|
+
values[star_list_offset] = makeExpressionMakeTupleOrConstant(
|
|
984
|
+
elements=values[star_list_offset],
|
|
985
|
+
user_provided=False,
|
|
986
|
+
source_ref=call_node.source_ref,
|
|
987
|
+
)
|
|
988
|
+
|
|
989
|
+
result = makeExpressionFunctionCall(
|
|
990
|
+
function=self.makeClone(),
|
|
991
|
+
values=values,
|
|
992
|
+
source_ref=call_node.source_ref,
|
|
993
|
+
)
|
|
994
|
+
|
|
995
|
+
return (
|
|
996
|
+
result,
|
|
997
|
+
"new_statements", # TODO: More appropriate tag maybe.
|
|
998
|
+
"""\
|
|
999
|
+
Replaced call to created function body '%s' with direct function call."""
|
|
1000
|
+
% self.getName(),
|
|
1001
|
+
)
|
|
1002
|
+
|
|
1003
|
+
except TooManyArguments as e:
|
|
1004
|
+
result = wrapExpressionWithSideEffects(
|
|
1005
|
+
new_node=makeRaiseExceptionReplacementExpressionFromInstance(
|
|
1006
|
+
expression=call_node, exception=e.getRealException()
|
|
1007
|
+
),
|
|
1008
|
+
old_node=call_node,
|
|
1009
|
+
side_effects=call_node.extractSideEffectsPreCall(),
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
return (
|
|
1013
|
+
result,
|
|
1014
|
+
"new_raise", # TODO: More appropriate tag maybe.
|
|
1015
|
+
"""Replaced call to created function body '%s' to argument \
|
|
1016
|
+
error"""
|
|
1017
|
+
% self.getName(),
|
|
1018
|
+
)
|
|
1019
|
+
|
|
1020
|
+
def getClosureVariableVersions(self):
|
|
1021
|
+
return self.variable_closure_traces
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
class ExpressionFunctionCreationOld(
|
|
1025
|
+
ExpressionFunctionCreationMixin,
|
|
1026
|
+
ChildrenHavingKwDefaultsOptionalDefaultsTupleAnnotationsOptionalFunctionRefMixin,
|
|
1027
|
+
ExpressionBase,
|
|
1028
|
+
):
|
|
1029
|
+
kind = "EXPRESSION_FUNCTION_CREATION_OLD"
|
|
1030
|
+
|
|
1031
|
+
python_version_spec = "< 0x300"
|
|
1032
|
+
# Note: The order of evaluation for these is a bit unexpected, but
|
|
1033
|
+
# true. Keyword defaults go first, then normal defaults, and annotations of
|
|
1034
|
+
# all kinds go last.
|
|
1035
|
+
|
|
1036
|
+
# A bug of CPython3.x was not fixed before version 3.4, this is to allow
|
|
1037
|
+
# code generation to detect which one is used. bugs.python.org/issue16967
|
|
1038
|
+
kw_defaults_before_defaults = True
|
|
1039
|
+
|
|
1040
|
+
named_children = (
|
|
1041
|
+
"kw_defaults|optional",
|
|
1042
|
+
"defaults|tuple",
|
|
1043
|
+
"annotations|optional",
|
|
1044
|
+
"function_ref",
|
|
1045
|
+
)
|
|
1046
|
+
|
|
1047
|
+
__slots__ = ("variable_closure_traces",)
|
|
1048
|
+
|
|
1049
|
+
def __init__(self, kw_defaults, defaults, annotations, function_ref, source_ref):
|
|
1050
|
+
ChildrenHavingKwDefaultsOptionalDefaultsTupleAnnotationsOptionalFunctionRefMixin.__init__(
|
|
1051
|
+
self,
|
|
1052
|
+
kw_defaults=kw_defaults,
|
|
1053
|
+
defaults=defaults,
|
|
1054
|
+
annotations=annotations,
|
|
1055
|
+
function_ref=function_ref,
|
|
1056
|
+
)
|
|
1057
|
+
|
|
1058
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1059
|
+
|
|
1060
|
+
self.variable_closure_traces = None
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
class ExpressionFunctionCreation(
|
|
1064
|
+
ExpressionFunctionCreationMixin,
|
|
1065
|
+
ChildrenHavingDefaultsTupleKwDefaultsOptionalAnnotationsOptionalFunctionRefMixin,
|
|
1066
|
+
ExpressionBase,
|
|
1067
|
+
):
|
|
1068
|
+
kind = "EXPRESSION_FUNCTION_CREATION"
|
|
1069
|
+
|
|
1070
|
+
python_version_spec = ">= 0x340"
|
|
1071
|
+
|
|
1072
|
+
# A bug of CPython3.x was not fixed before version 3.4, this is to allow
|
|
1073
|
+
# code generation to detect which one is used. bugs.python.org/issue16967
|
|
1074
|
+
kw_defaults_before_defaults = False
|
|
1075
|
+
|
|
1076
|
+
named_children = (
|
|
1077
|
+
"defaults|tuple",
|
|
1078
|
+
"kw_defaults|optional",
|
|
1079
|
+
"annotations|optional",
|
|
1080
|
+
"function_ref",
|
|
1081
|
+
)
|
|
1082
|
+
|
|
1083
|
+
__slots__ = ("variable_closure_traces",)
|
|
1084
|
+
|
|
1085
|
+
def __init__(self, defaults, kw_defaults, annotations, function_ref, source_ref):
|
|
1086
|
+
ChildrenHavingDefaultsTupleKwDefaultsOptionalAnnotationsOptionalFunctionRefMixin.__init__(
|
|
1087
|
+
self,
|
|
1088
|
+
kw_defaults=kw_defaults,
|
|
1089
|
+
defaults=defaults,
|
|
1090
|
+
annotations=annotations,
|
|
1091
|
+
function_ref=function_ref,
|
|
1092
|
+
)
|
|
1093
|
+
|
|
1094
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1095
|
+
|
|
1096
|
+
self.variable_closure_traces = None
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
if python_version < 0x300:
|
|
1100
|
+
ExpressionFunctionCreation = ExpressionFunctionCreationOld
|
|
1101
|
+
|
|
1102
|
+
|
|
1103
|
+
class ExpressionFunctionRef(ExpressionNoSideEffectsMixin, ExpressionBase):
|
|
1104
|
+
kind = "EXPRESSION_FUNCTION_REF"
|
|
1105
|
+
|
|
1106
|
+
__slots__ = "function_body", "code_name", "function_source"
|
|
1107
|
+
|
|
1108
|
+
def __init__(self, source_ref, function_body=None, code_name=None):
|
|
1109
|
+
assert function_body is not None or code_name is not None
|
|
1110
|
+
assert code_name != "None"
|
|
1111
|
+
|
|
1112
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1113
|
+
|
|
1114
|
+
self.function_body = function_body
|
|
1115
|
+
self.code_name = code_name
|
|
1116
|
+
self.function_source = None
|
|
1117
|
+
|
|
1118
|
+
def finalize(self):
|
|
1119
|
+
del self.parent
|
|
1120
|
+
del self.function_body
|
|
1121
|
+
del self.function_source
|
|
1122
|
+
|
|
1123
|
+
def getName(self):
|
|
1124
|
+
return self.function_body.getName()
|
|
1125
|
+
|
|
1126
|
+
def getDetails(self):
|
|
1127
|
+
return {"function_body": self.function_body}
|
|
1128
|
+
|
|
1129
|
+
def getDetailsForDisplay(self):
|
|
1130
|
+
return {"code_name": self.getFunctionBody().getCodeName()}
|
|
1131
|
+
|
|
1132
|
+
def getFunctionBody(self):
|
|
1133
|
+
if self.function_body is None:
|
|
1134
|
+
module_code_name, _ = self.code_name.split("$$$", 1)
|
|
1135
|
+
|
|
1136
|
+
from nuitka.ModuleRegistry import getModuleFromCodeName
|
|
1137
|
+
|
|
1138
|
+
module = getModuleFromCodeName(module_code_name)
|
|
1139
|
+
|
|
1140
|
+
self.function_body = module.getFunctionFromCodeName(self.code_name)
|
|
1141
|
+
|
|
1142
|
+
return self.function_body
|
|
1143
|
+
|
|
1144
|
+
def computeExpressionRaw(self, trace_collection):
|
|
1145
|
+
trace_collection.onUsedFunction(self.getFunctionBody())
|
|
1146
|
+
|
|
1147
|
+
# TODO: Function after collection may now know something.
|
|
1148
|
+
return self, None, None
|
|
1149
|
+
|
|
1150
|
+
def getFunctionSourceCode(self):
|
|
1151
|
+
if self.function_source is None:
|
|
1152
|
+
try:
|
|
1153
|
+
lines = readSourceLines(self.getFunctionBody().source_ref)
|
|
1154
|
+
|
|
1155
|
+
# This needs to match "inspect.findsource".
|
|
1156
|
+
pat = re.compile(
|
|
1157
|
+
r"^(\s*def\s)|(\s*async\s+def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)"
|
|
1158
|
+
)
|
|
1159
|
+
|
|
1160
|
+
line_number = self.source_ref.line - 1
|
|
1161
|
+
|
|
1162
|
+
while line_number > 0:
|
|
1163
|
+
line = lines[line_number]
|
|
1164
|
+
|
|
1165
|
+
if pat.match(line):
|
|
1166
|
+
break
|
|
1167
|
+
|
|
1168
|
+
line_number = line_number - 1
|
|
1169
|
+
|
|
1170
|
+
self.function_source = (
|
|
1171
|
+
"".join(inspect.getblock(lines[line_number:])),
|
|
1172
|
+
line_number,
|
|
1173
|
+
)
|
|
1174
|
+
except Exception:
|
|
1175
|
+
printError(
|
|
1176
|
+
"Problem with retrieving source code of '%s' at %s"
|
|
1177
|
+
% (self.getFunctionSuperQualifiedName(), self.source_ref)
|
|
1178
|
+
)
|
|
1179
|
+
raise
|
|
1180
|
+
|
|
1181
|
+
return self.function_source
|
|
1182
|
+
|
|
1183
|
+
def getFunctionSuperQualifiedName(self):
|
|
1184
|
+
return "%s.%s" % (
|
|
1185
|
+
self.getParentModule().getFullName(),
|
|
1186
|
+
self.getFunctionBody().getFunctionQualname(),
|
|
1187
|
+
)
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
def makeExpressionFunctionCall(function, values, source_ref):
|
|
1191
|
+
assert function.isExpressionFunctionCreation()
|
|
1192
|
+
|
|
1193
|
+
return ExpressionFunctionCall(
|
|
1194
|
+
function=function, values=tuple(values), source_ref=source_ref
|
|
1195
|
+
)
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
class ExpressionFunctionCall(ChildrenHavingFunctionValuesTupleMixin, ExpressionBase):
|
|
1199
|
+
"""Shared function call.
|
|
1200
|
+
|
|
1201
|
+
This is for calling created function bodies with multiple users. Not
|
|
1202
|
+
clear if such a thing should exist. But what this will do is to have
|
|
1203
|
+
respect for the fact that there are multiple such calls.
|
|
1204
|
+
"""
|
|
1205
|
+
|
|
1206
|
+
kind = "EXPRESSION_FUNCTION_CALL"
|
|
1207
|
+
|
|
1208
|
+
__slots__ = ("variable_closure_traces",)
|
|
1209
|
+
|
|
1210
|
+
named_children = ("function", "values|tuple")
|
|
1211
|
+
|
|
1212
|
+
def __init__(self, function, values, source_ref):
|
|
1213
|
+
ChildrenHavingFunctionValuesTupleMixin.__init__(
|
|
1214
|
+
self,
|
|
1215
|
+
function=function,
|
|
1216
|
+
values=values,
|
|
1217
|
+
)
|
|
1218
|
+
|
|
1219
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1220
|
+
|
|
1221
|
+
self.variable_closure_traces = None
|
|
1222
|
+
|
|
1223
|
+
def computeExpression(self, trace_collection):
|
|
1224
|
+
function = self.subnode_function
|
|
1225
|
+
function_body = function.subnode_function_ref.getFunctionBody()
|
|
1226
|
+
|
|
1227
|
+
if function_body.mayRaiseException(BaseException):
|
|
1228
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1229
|
+
|
|
1230
|
+
values = self.subnode_values
|
|
1231
|
+
|
|
1232
|
+
for value in values:
|
|
1233
|
+
value.onContentEscapes(trace_collection)
|
|
1234
|
+
|
|
1235
|
+
# Ask for function for its cost.
|
|
1236
|
+
cost = function_body.getFunctionInlineCost(values)
|
|
1237
|
+
|
|
1238
|
+
if cost is not None and cost < 50:
|
|
1239
|
+
from nuitka.optimizations.FunctionInlining import (
|
|
1240
|
+
convertFunctionCallToOutline,
|
|
1241
|
+
)
|
|
1242
|
+
|
|
1243
|
+
result = convertFunctionCallToOutline(
|
|
1244
|
+
provider=self.getParentVariableProvider(),
|
|
1245
|
+
function_body=function_body,
|
|
1246
|
+
values=values,
|
|
1247
|
+
call_source_ref=self.source_ref,
|
|
1248
|
+
)
|
|
1249
|
+
|
|
1250
|
+
return (
|
|
1251
|
+
result,
|
|
1252
|
+
"new_statements",
|
|
1253
|
+
lambda: "Function call to '%s' in-lined." % function_body.getCodeName(),
|
|
1254
|
+
)
|
|
1255
|
+
|
|
1256
|
+
self.variable_closure_traces = []
|
|
1257
|
+
|
|
1258
|
+
for closure_variable in function_body.getClosureVariables():
|
|
1259
|
+
trace = trace_collection.getVariableCurrentTrace(closure_variable)
|
|
1260
|
+
trace.addNameUsage()
|
|
1261
|
+
|
|
1262
|
+
self.variable_closure_traces.append((closure_variable, trace))
|
|
1263
|
+
|
|
1264
|
+
return self, None, None
|
|
1265
|
+
|
|
1266
|
+
def mayRaiseException(self, exception_type):
|
|
1267
|
+
function = self.subnode_function
|
|
1268
|
+
|
|
1269
|
+
if function.subnode_function_ref.getFunctionBody().mayRaiseException(
|
|
1270
|
+
exception_type
|
|
1271
|
+
):
|
|
1272
|
+
return True
|
|
1273
|
+
|
|
1274
|
+
values = self.subnode_values
|
|
1275
|
+
|
|
1276
|
+
for value in values:
|
|
1277
|
+
if value.mayRaiseException(exception_type):
|
|
1278
|
+
return True
|
|
1279
|
+
|
|
1280
|
+
return False
|
|
1281
|
+
|
|
1282
|
+
def getClosureVariableVersions(self):
|
|
1283
|
+
return self.variable_closure_traces
|
|
1284
|
+
|
|
1285
|
+
def onContentEscapes(self, trace_collection):
|
|
1286
|
+
for value in self.subnode_values:
|
|
1287
|
+
value.onContentEscapes(trace_collection)
|
|
1288
|
+
|
|
1289
|
+
|
|
1290
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1291
|
+
# integrates with CPython, but also works on its own.
|
|
1292
|
+
#
|
|
1293
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1294
|
+
# you may not use this file except in compliance with the License.
|
|
1295
|
+
# You may obtain a copy of the License at
|
|
1296
|
+
#
|
|
1297
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1298
|
+
#
|
|
1299
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1300
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1301
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1302
|
+
# See the License for the specific language governing permissions and
|
|
1303
|
+
# limitations under the License.
|