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,1513 @@
|
|
|
1
|
+
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
""" Nodes that build and operate on dictionaries.
|
|
5
|
+
|
|
6
|
+
The "pair" is a sub-structure of the dictionary, representing a key/value pair
|
|
7
|
+
that is the child of the dictionary creation.
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from nuitka import Constants
|
|
12
|
+
from nuitka.specs.BuiltinDictOperationSpecs import dict_fromkeys_spec
|
|
13
|
+
from nuitka.specs.BuiltinParameterSpecs import extractBuiltinArgs
|
|
14
|
+
|
|
15
|
+
from .AttributeNodes import makeExpressionAttributeLookup
|
|
16
|
+
from .BuiltinOperationNodeBasesGenerated import (
|
|
17
|
+
ExpressionDictOperationClearBase,
|
|
18
|
+
ExpressionDictOperationCopyBase,
|
|
19
|
+
ExpressionDictOperationFromkeys2Base,
|
|
20
|
+
ExpressionDictOperationFromkeys3Base,
|
|
21
|
+
ExpressionDictOperationGet2Base,
|
|
22
|
+
ExpressionDictOperationGet3Base,
|
|
23
|
+
ExpressionDictOperationHaskeyBase,
|
|
24
|
+
ExpressionDictOperationItemsBase,
|
|
25
|
+
ExpressionDictOperationIteritemsBase,
|
|
26
|
+
ExpressionDictOperationIterkeysBase,
|
|
27
|
+
ExpressionDictOperationItervaluesBase,
|
|
28
|
+
ExpressionDictOperationKeysBase,
|
|
29
|
+
ExpressionDictOperationPop2Base,
|
|
30
|
+
ExpressionDictOperationPop3Base,
|
|
31
|
+
ExpressionDictOperationPopitemBase,
|
|
32
|
+
ExpressionDictOperationSetdefault2Base,
|
|
33
|
+
ExpressionDictOperationSetdefault3Base,
|
|
34
|
+
ExpressionDictOperationUpdate2Base,
|
|
35
|
+
ExpressionDictOperationUpdate3Base,
|
|
36
|
+
ExpressionDictOperationValuesBase,
|
|
37
|
+
ExpressionDictOperationViewitemsBase,
|
|
38
|
+
ExpressionDictOperationViewkeysBase,
|
|
39
|
+
ExpressionDictOperationViewvaluesBase,
|
|
40
|
+
)
|
|
41
|
+
from .ChildrenHavingMixins import (
|
|
42
|
+
ChildrenExpressionDictOperationItemMixin,
|
|
43
|
+
ChildrenExpressionDictOperationUpdatePairsMixin,
|
|
44
|
+
ChildrenExpressionMakeDictMixin,
|
|
45
|
+
ChildrenHavingKeyDictArgMixin,
|
|
46
|
+
)
|
|
47
|
+
from .ConstantRefNodes import (
|
|
48
|
+
ExpressionConstantDictEmptyRef,
|
|
49
|
+
makeConstantRefNode,
|
|
50
|
+
)
|
|
51
|
+
from .ExpressionBases import ExpressionBase, ExpressionNoSideEffectsMixin
|
|
52
|
+
from .ExpressionShapeMixins import (
|
|
53
|
+
ExpressionBoolShapeExactMixin,
|
|
54
|
+
ExpressionDictShapeExactMixin,
|
|
55
|
+
)
|
|
56
|
+
from .NodeBases import SideEffectsFromChildrenMixin
|
|
57
|
+
from .NodeMakingHelpers import (
|
|
58
|
+
makeConstantReplacementNode,
|
|
59
|
+
makeRaiseExceptionExpressionFromTemplate,
|
|
60
|
+
makeRaiseExceptionReplacementExpression,
|
|
61
|
+
makeStatementOnlyNodesFromExpressions,
|
|
62
|
+
wrapExpressionWithSideEffects,
|
|
63
|
+
)
|
|
64
|
+
from .shapes.IteratorShapes import tshape_iterator
|
|
65
|
+
from .StatementBasesGenerated import (
|
|
66
|
+
StatementDictOperationRemoveBase,
|
|
67
|
+
StatementDictOperationSetBase,
|
|
68
|
+
StatementDictOperationSetKeyValueBase,
|
|
69
|
+
StatementDictOperationUpdateBase,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def makeExpressionMakeDict(pairs, source_ref):
|
|
74
|
+
if pairs:
|
|
75
|
+
return ExpressionMakeDict(pairs, source_ref)
|
|
76
|
+
else:
|
|
77
|
+
# TODO: Get rid of user provided for empty dict refs, makes no sense.
|
|
78
|
+
return ExpressionConstantDictEmptyRef(
|
|
79
|
+
user_provided=False, source_ref=source_ref
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def makeExpressionMakeDictOrConstant(pairs, user_provided, source_ref):
|
|
84
|
+
# Create dictionary node or constant value if possible.
|
|
85
|
+
|
|
86
|
+
for pair in pairs:
|
|
87
|
+
if (
|
|
88
|
+
not pair.isCompileTimeConstant()
|
|
89
|
+
or pair.isKeyKnownToBeHashable() is not True
|
|
90
|
+
):
|
|
91
|
+
result = makeExpressionMakeDict(pairs, source_ref)
|
|
92
|
+
break
|
|
93
|
+
else:
|
|
94
|
+
# Unless told otherwise, create the dictionary in its full size, so
|
|
95
|
+
# that no growing occurs and the constant becomes as similar as possible
|
|
96
|
+
# before being marshaled.
|
|
97
|
+
result = makeConstantRefNode(
|
|
98
|
+
constant=Constants.createConstantDict(
|
|
99
|
+
keys=[pair.getKeyCompileTimeConstant() for pair in pairs],
|
|
100
|
+
values=[pair.getValueCompileTimeConstant() for pair in pairs],
|
|
101
|
+
),
|
|
102
|
+
user_provided=user_provided,
|
|
103
|
+
source_ref=source_ref,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if pairs:
|
|
107
|
+
result.setCompatibleSourceReference(
|
|
108
|
+
source_ref=pairs[-1].getCompatibleSourceReference()
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
return result
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class ExpressionMakeDictMixin(object):
|
|
115
|
+
__slots__ = ()
|
|
116
|
+
|
|
117
|
+
def mayRaiseException(self, exception_type):
|
|
118
|
+
for pair in self.subnode_pairs:
|
|
119
|
+
if pair.mayRaiseException(exception_type):
|
|
120
|
+
return True
|
|
121
|
+
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
def isKnownToBeIterable(self, count):
|
|
125
|
+
return count is None or count == len(self.subnode_pairs)
|
|
126
|
+
|
|
127
|
+
def getIterationLength(self):
|
|
128
|
+
pair_count = len(self.subnode_pairs)
|
|
129
|
+
|
|
130
|
+
# Hashing may consume elements.
|
|
131
|
+
if pair_count > 1:
|
|
132
|
+
return None
|
|
133
|
+
else:
|
|
134
|
+
return pair_count
|
|
135
|
+
|
|
136
|
+
@staticmethod
|
|
137
|
+
def getIterationMinLength():
|
|
138
|
+
return 1
|
|
139
|
+
|
|
140
|
+
@staticmethod
|
|
141
|
+
def canPredictIterationValues():
|
|
142
|
+
# Dictionaries are assumed to be fully predictable
|
|
143
|
+
|
|
144
|
+
# TODO: For some things, that may not be true, when key collisions
|
|
145
|
+
# happen for example. We will have to check that then.
|
|
146
|
+
return True
|
|
147
|
+
|
|
148
|
+
def getIterationValue(self, count):
|
|
149
|
+
return self.subnode_pairs[count].getKeyNode()
|
|
150
|
+
|
|
151
|
+
def isMappingWithConstantStringKeys(self):
|
|
152
|
+
return all(pair.isKeyExpressionConstantStrRef() for pair in self.subnode_pairs)
|
|
153
|
+
|
|
154
|
+
def getMappingStringKeyPairs(self):
|
|
155
|
+
return [
|
|
156
|
+
(pair.getKeyCompileTimeConstant(), pair.getValueNode())
|
|
157
|
+
for pair in self.subnode_pairs
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
# TODO: Make this happen from auto-compute, children only side effects
|
|
161
|
+
def computeExpressionDrop(self, statement, trace_collection):
|
|
162
|
+
# Virtual method overload, pylint: disable=unused-argument
|
|
163
|
+
expressions = []
|
|
164
|
+
|
|
165
|
+
for pair in self.subnode_pairs:
|
|
166
|
+
expressions.extend(pair.extractSideEffects())
|
|
167
|
+
|
|
168
|
+
result = makeStatementOnlyNodesFromExpressions(expressions=expressions)
|
|
169
|
+
|
|
170
|
+
del self.parent
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
result,
|
|
174
|
+
"new_statements",
|
|
175
|
+
"""\
|
|
176
|
+
Removed sequence creation for unused sequence.""",
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
# TODO: Missing computeExpressionIter1 here. For now it would require us to
|
|
180
|
+
# add lots of temporary variables for keys, which then becomes the tuple,
|
|
181
|
+
# but for as long as we don't have efficient forward propagation of these,
|
|
182
|
+
# we won't do that. Otherwise we loose execution order of values with them
|
|
183
|
+
# remaining as side effects. We could limit ourselves to cases where
|
|
184
|
+
# isMappingWithConstantStringKeys is true, or keys had no side effects, but
|
|
185
|
+
# that feels wasted effort as we are going to have full propagation.
|
|
186
|
+
|
|
187
|
+
@staticmethod
|
|
188
|
+
def computeExpressionIter1(iter_node, trace_collection):
|
|
189
|
+
return iter_node, None, None
|
|
190
|
+
|
|
191
|
+
def onContentEscapes(self, trace_collection):
|
|
192
|
+
for pair in self.subnode_pairs:
|
|
193
|
+
pair.onContentEscapes(trace_collection)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class ExpressionMakeDict(
|
|
197
|
+
ExpressionDictShapeExactMixin,
|
|
198
|
+
SideEffectsFromChildrenMixin,
|
|
199
|
+
ExpressionMakeDictMixin,
|
|
200
|
+
ChildrenExpressionMakeDictMixin,
|
|
201
|
+
ExpressionBase,
|
|
202
|
+
):
|
|
203
|
+
kind = "EXPRESSION_MAKE_DICT"
|
|
204
|
+
|
|
205
|
+
named_children = ("pairs|tuple",)
|
|
206
|
+
|
|
207
|
+
def __init__(self, pairs, source_ref):
|
|
208
|
+
assert pairs
|
|
209
|
+
|
|
210
|
+
ChildrenExpressionMakeDictMixin.__init__(
|
|
211
|
+
self,
|
|
212
|
+
pairs=pairs,
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
ExpressionBase.__init__(self, source_ref)
|
|
216
|
+
|
|
217
|
+
def computeExpression(self, trace_collection):
|
|
218
|
+
pairs = self.subnode_pairs
|
|
219
|
+
|
|
220
|
+
is_constant = True
|
|
221
|
+
|
|
222
|
+
for pair in pairs:
|
|
223
|
+
if pair.isKeyKnownToBeHashable() is False:
|
|
224
|
+
# The ones with constant keys are hashable.
|
|
225
|
+
key = pair.subnode_key
|
|
226
|
+
|
|
227
|
+
side_effects = []
|
|
228
|
+
|
|
229
|
+
for pair2 in pairs:
|
|
230
|
+
side_effects.extend(pair2.extractSideEffects())
|
|
231
|
+
|
|
232
|
+
if pair2 is pair:
|
|
233
|
+
break
|
|
234
|
+
|
|
235
|
+
result = makeRaiseExceptionExpressionFromTemplate(
|
|
236
|
+
exception_type="TypeError",
|
|
237
|
+
template="unhashable type: '%s'",
|
|
238
|
+
template_args=makeExpressionAttributeLookup(
|
|
239
|
+
expression=key.extractUnhashableNodeType(),
|
|
240
|
+
attribute_name="__name__",
|
|
241
|
+
source_ref=key.source_ref,
|
|
242
|
+
),
|
|
243
|
+
source_ref=key.source_ref,
|
|
244
|
+
)
|
|
245
|
+
result = wrapExpressionWithSideEffects(
|
|
246
|
+
side_effects=side_effects,
|
|
247
|
+
old_node=key,
|
|
248
|
+
new_node=result,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
return (
|
|
252
|
+
result,
|
|
253
|
+
"new_raise",
|
|
254
|
+
"Dictionary key is known to not be hashable.",
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
if is_constant:
|
|
258
|
+
if not pair.isCompileTimeConstant():
|
|
259
|
+
is_constant = False
|
|
260
|
+
|
|
261
|
+
if not is_constant:
|
|
262
|
+
return self, None, None
|
|
263
|
+
|
|
264
|
+
constant_value = Constants.createConstantDict(
|
|
265
|
+
keys=[pair.getKeyCompileTimeConstant() for pair in pairs],
|
|
266
|
+
values=[pair.getValueCompileTimeConstant() for pair in pairs],
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
new_node = makeConstantReplacementNode(
|
|
270
|
+
constant=constant_value, node=self, user_provided=True
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
return (
|
|
274
|
+
new_node,
|
|
275
|
+
"new_constant",
|
|
276
|
+
"""\
|
|
277
|
+
Created dictionary found to be constant.""",
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
@staticmethod
|
|
281
|
+
def getTruthValue():
|
|
282
|
+
# Cannot be empty
|
|
283
|
+
return True
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
class StatementDictOperationSetMixin(object):
|
|
287
|
+
__slots__ = ()
|
|
288
|
+
|
|
289
|
+
def computeStatementOperation(self, trace_collection):
|
|
290
|
+
key = self.subnode_key
|
|
291
|
+
|
|
292
|
+
if not key.isKnownToBeHashable():
|
|
293
|
+
# Any exception may be raised.
|
|
294
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
295
|
+
|
|
296
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
297
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
298
|
+
|
|
299
|
+
return self, None, None
|
|
300
|
+
|
|
301
|
+
def mayRaiseException(self, exception_type):
|
|
302
|
+
key = self.subnode_key
|
|
303
|
+
|
|
304
|
+
if not key.isKnownToBeHashable():
|
|
305
|
+
return True
|
|
306
|
+
|
|
307
|
+
if key.mayRaiseException(exception_type):
|
|
308
|
+
return True
|
|
309
|
+
|
|
310
|
+
value = self.subnode_value
|
|
311
|
+
|
|
312
|
+
if value.mayRaiseException(exception_type):
|
|
313
|
+
return True
|
|
314
|
+
|
|
315
|
+
return False
|
|
316
|
+
|
|
317
|
+
def mayRaiseExceptionOperation(self):
|
|
318
|
+
return not self.subnode_key.isKnownToBeHashable()
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class StatementDictOperationSet(
|
|
322
|
+
StatementDictOperationSetMixin, StatementDictOperationSetBase
|
|
323
|
+
):
|
|
324
|
+
kind = "STATEMENT_DICT_OPERATION_SET"
|
|
325
|
+
|
|
326
|
+
named_children = ("value", "dict_arg", "key")
|
|
327
|
+
auto_compute_handling = "operation"
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
class StatementDictOperationSetKeyValue(
|
|
331
|
+
StatementDictOperationSetMixin, StatementDictOperationSetKeyValueBase
|
|
332
|
+
):
|
|
333
|
+
kind = "STATEMENT_DICT_OPERATION_SET_KEY_VALUE"
|
|
334
|
+
|
|
335
|
+
named_children = ("value", "dict_arg", "key")
|
|
336
|
+
auto_compute_handling = "operation"
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
class StatementDictOperationRemove(StatementDictOperationRemoveBase):
|
|
340
|
+
kind = "STATEMENT_DICT_OPERATION_REMOVE"
|
|
341
|
+
|
|
342
|
+
named_children = ("dict_arg", "key")
|
|
343
|
+
auto_compute_handling = "operation"
|
|
344
|
+
|
|
345
|
+
def computeStatementOperation(self, trace_collection):
|
|
346
|
+
# Any exception may be raised, we don't know if the key is present.
|
|
347
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
348
|
+
|
|
349
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
350
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
351
|
+
|
|
352
|
+
return self, None, None
|
|
353
|
+
|
|
354
|
+
def mayRaiseException(self, exception_type):
|
|
355
|
+
key = self.subnode_key
|
|
356
|
+
|
|
357
|
+
if not key.isKnownToBeHashable():
|
|
358
|
+
return True
|
|
359
|
+
|
|
360
|
+
if key.mayRaiseException(exception_type):
|
|
361
|
+
return True
|
|
362
|
+
|
|
363
|
+
# TODO: Could check dict for knowledge about keys.
|
|
364
|
+
return True
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
class ExpressionDictOperationPop2(ExpressionDictOperationPop2Base):
|
|
368
|
+
"""This operation represents d.pop(key), i.e. default None."""
|
|
369
|
+
|
|
370
|
+
kind = "EXPRESSION_DICT_OPERATION_POP2"
|
|
371
|
+
|
|
372
|
+
__slots__ = ("known_hashable_key",)
|
|
373
|
+
|
|
374
|
+
def __init__(self, dict_arg, key, source_ref):
|
|
375
|
+
ExpressionDictOperationPop2Base.__init__(
|
|
376
|
+
self,
|
|
377
|
+
dict_arg=dict_arg,
|
|
378
|
+
key=key,
|
|
379
|
+
source_ref=source_ref,
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
self.known_hashable_key = None
|
|
383
|
+
|
|
384
|
+
def computeExpression(self, trace_collection):
|
|
385
|
+
dict_arg = self.subnode_dict_arg
|
|
386
|
+
key = self.subnode_key
|
|
387
|
+
|
|
388
|
+
if self.known_hashable_key is None:
|
|
389
|
+
self.known_hashable_key = key.isKnownToBeHashable()
|
|
390
|
+
|
|
391
|
+
if self.known_hashable_key is False:
|
|
392
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
393
|
+
|
|
394
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
395
|
+
node=self,
|
|
396
|
+
key=key,
|
|
397
|
+
operation="dict.pop",
|
|
398
|
+
side_effects=(dict_arg, key),
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
# TODO: Check if dict_arg has key.
|
|
402
|
+
|
|
403
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
404
|
+
trace_collection.removeKnowledge(dict_arg)
|
|
405
|
+
|
|
406
|
+
# TODO: Until we can know KeyError won't happen, but then we should change into
|
|
407
|
+
# something else.
|
|
408
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
409
|
+
|
|
410
|
+
# TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
|
|
411
|
+
# that case.
|
|
412
|
+
return self, None, None
|
|
413
|
+
|
|
414
|
+
# TODO: These turn this into dictionary item removals, as value is unused.
|
|
415
|
+
# def computeExpressionDrop(self, statement, trace_collection):
|
|
416
|
+
|
|
417
|
+
# TODO: Might raise KeyError depending on dictionary.
|
|
418
|
+
@staticmethod
|
|
419
|
+
def mayRaiseException(exception_type):
|
|
420
|
+
return True
|
|
421
|
+
|
|
422
|
+
# if self.known_hashable_key is None:
|
|
423
|
+
# return True
|
|
424
|
+
# else:
|
|
425
|
+
# return self.subnode_dict_arg.mayRaiseException(
|
|
426
|
+
# exception_type
|
|
427
|
+
# ) or self.subnode_key.mayRaiseException(exception_type)
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
class ExpressionDictOperationPop3(ExpressionDictOperationPop3Base):
|
|
431
|
+
"""This operation represents d.pop(key, default)."""
|
|
432
|
+
|
|
433
|
+
kind = "EXPRESSION_DICT_OPERATION_POP3"
|
|
434
|
+
|
|
435
|
+
__slots__ = ("known_hashable_key",)
|
|
436
|
+
|
|
437
|
+
def __init__(self, dict_arg, key, default, source_ref):
|
|
438
|
+
ExpressionDictOperationPop3Base.__init__(
|
|
439
|
+
self,
|
|
440
|
+
dict_arg=dict_arg,
|
|
441
|
+
key=key,
|
|
442
|
+
default=default,
|
|
443
|
+
source_ref=source_ref,
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
self.known_hashable_key = None
|
|
447
|
+
|
|
448
|
+
def computeExpression(self, trace_collection):
|
|
449
|
+
dict_arg = self.subnode_dict_arg
|
|
450
|
+
key = self.subnode_key
|
|
451
|
+
|
|
452
|
+
if self.known_hashable_key is None:
|
|
453
|
+
self.known_hashable_key = key.isKnownToBeHashable()
|
|
454
|
+
|
|
455
|
+
if self.known_hashable_key is False:
|
|
456
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
457
|
+
|
|
458
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
459
|
+
node=self,
|
|
460
|
+
key=key,
|
|
461
|
+
operation="dict.pop",
|
|
462
|
+
side_effects=(dict_arg, key, self.subnode_default),
|
|
463
|
+
)
|
|
464
|
+
|
|
465
|
+
# TODO: Check if dict_arg has key
|
|
466
|
+
|
|
467
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
468
|
+
trace_collection.removeKnowledge(dict_arg)
|
|
469
|
+
|
|
470
|
+
# TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
|
|
471
|
+
# that case.
|
|
472
|
+
return self, None, None
|
|
473
|
+
|
|
474
|
+
# TODO: These turn this into dictionary item removals, as value is unused.
|
|
475
|
+
# def computeExpressionDrop(self, statement, trace_collection):
|
|
476
|
+
|
|
477
|
+
def mayRaiseException(self, exception_type):
|
|
478
|
+
if self.known_hashable_key is None:
|
|
479
|
+
return True
|
|
480
|
+
else:
|
|
481
|
+
return (
|
|
482
|
+
self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
483
|
+
or self.subnode_key.mayRaiseException(exception_type)
|
|
484
|
+
or self.subnode_default.mayRaiseException(exception_type)
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
class ExpressionDictOperationPopitem(ExpressionDictOperationPopitemBase):
|
|
489
|
+
"""This operation represents d.popitem()."""
|
|
490
|
+
|
|
491
|
+
kind = "EXPRESSION_DICT_OPERATION_POPITEM"
|
|
492
|
+
|
|
493
|
+
def computeExpression(self, trace_collection):
|
|
494
|
+
dict_arg = self.subnode_dict_arg
|
|
495
|
+
|
|
496
|
+
# TODO: Check if dict_arg is not empty.
|
|
497
|
+
|
|
498
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
499
|
+
trace_collection.removeKnowledge(dict_arg)
|
|
500
|
+
|
|
501
|
+
# TODO: Until we can know KeyError won't happen, but then we should change into
|
|
502
|
+
# something else.
|
|
503
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
504
|
+
|
|
505
|
+
return self, None, None
|
|
506
|
+
|
|
507
|
+
# TODO: These turn this into dictionary item removal, as value is unused.
|
|
508
|
+
# def computeExpressionDrop(self, statement, trace_collection):
|
|
509
|
+
|
|
510
|
+
# TODO: Might raise KeyError depending on dictionary.
|
|
511
|
+
@staticmethod
|
|
512
|
+
def mayRaiseException(exception_type):
|
|
513
|
+
return True
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
class ExpressionDictOperationSetdefault2(ExpressionDictOperationSetdefault2Base):
|
|
517
|
+
"""This operation represents d.setdefault(key), i.e. default None."""
|
|
518
|
+
|
|
519
|
+
kind = "EXPRESSION_DICT_OPERATION_SETDEFAULT2"
|
|
520
|
+
|
|
521
|
+
__slots__ = ("known_hashable_key",)
|
|
522
|
+
|
|
523
|
+
def __init__(self, dict_arg, key, source_ref):
|
|
524
|
+
ExpressionDictOperationSetdefault2Base.__init__(
|
|
525
|
+
self,
|
|
526
|
+
dict_arg=dict_arg,
|
|
527
|
+
key=key,
|
|
528
|
+
source_ref=source_ref,
|
|
529
|
+
)
|
|
530
|
+
|
|
531
|
+
self.known_hashable_key = None
|
|
532
|
+
|
|
533
|
+
def computeExpression(self, trace_collection):
|
|
534
|
+
dict_arg = self.subnode_dict_arg
|
|
535
|
+
key = self.subnode_key
|
|
536
|
+
|
|
537
|
+
if self.known_hashable_key is None:
|
|
538
|
+
self.known_hashable_key = key.isKnownToBeHashable()
|
|
539
|
+
|
|
540
|
+
if self.known_hashable_key is False:
|
|
541
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
542
|
+
|
|
543
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
544
|
+
node=self,
|
|
545
|
+
key=key,
|
|
546
|
+
operation="dict.setdefault",
|
|
547
|
+
side_effects=(dict_arg, key),
|
|
548
|
+
)
|
|
549
|
+
|
|
550
|
+
# TODO: Check if dict_arg has key, and eliminate this node entirely
|
|
551
|
+
# if that's the case with hashing of the key as a remaining side effect
|
|
552
|
+
# though.
|
|
553
|
+
|
|
554
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
555
|
+
trace_collection.removeKnowledge(dict_arg)
|
|
556
|
+
|
|
557
|
+
# TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
|
|
558
|
+
# that case.
|
|
559
|
+
return self, None, None
|
|
560
|
+
|
|
561
|
+
def mayRaiseException(self, exception_type):
|
|
562
|
+
if self.known_hashable_key is not True:
|
|
563
|
+
return True
|
|
564
|
+
else:
|
|
565
|
+
return self.subnode_dict_arg.mayRaiseException(
|
|
566
|
+
exception_type
|
|
567
|
+
) or self.subnode_key.mayRaiseException(exception_type)
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
class ExpressionDictOperationSetdefault3(ExpressionDictOperationSetdefault3Base):
|
|
571
|
+
"""This operation represents d.setdefault(key, default)."""
|
|
572
|
+
|
|
573
|
+
kind = "EXPRESSION_DICT_OPERATION_SETDEFAULT3"
|
|
574
|
+
|
|
575
|
+
__slots__ = ("known_hashable_key",)
|
|
576
|
+
|
|
577
|
+
def __init__(self, dict_arg, key, default, source_ref):
|
|
578
|
+
ExpressionDictOperationSetdefault3Base.__init__(
|
|
579
|
+
self,
|
|
580
|
+
dict_arg=dict_arg,
|
|
581
|
+
key=key,
|
|
582
|
+
default=default,
|
|
583
|
+
source_ref=source_ref,
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
# TODO: Slots could be part of base class generation too.
|
|
587
|
+
self.known_hashable_key = None
|
|
588
|
+
|
|
589
|
+
def computeExpression(self, trace_collection):
|
|
590
|
+
dict_arg = self.subnode_dict_arg
|
|
591
|
+
key = self.subnode_key
|
|
592
|
+
|
|
593
|
+
if self.known_hashable_key is None:
|
|
594
|
+
self.known_hashable_key = key.isKnownToBeHashable()
|
|
595
|
+
|
|
596
|
+
if self.known_hashable_key is False:
|
|
597
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
598
|
+
|
|
599
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
600
|
+
node=self,
|
|
601
|
+
key=key,
|
|
602
|
+
operation="dict.setdefault",
|
|
603
|
+
side_effects=(dict_arg, key, self.subnode_default),
|
|
604
|
+
)
|
|
605
|
+
|
|
606
|
+
# TODO: Check if dict_arg has key, and eliminate this node entirely
|
|
607
|
+
# if that's the case with hashing of the key as a remaining side effect
|
|
608
|
+
# though.
|
|
609
|
+
|
|
610
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
611
|
+
trace_collection.removeKnowledge(dict_arg)
|
|
612
|
+
|
|
613
|
+
# TODO: Check for "None" default and demote to ExpressionDictOperationSetdefault3 in
|
|
614
|
+
# that case.
|
|
615
|
+
return self, None, None
|
|
616
|
+
|
|
617
|
+
def mayRaiseException(self, exception_type):
|
|
618
|
+
if self.known_hashable_key is not True:
|
|
619
|
+
return True
|
|
620
|
+
else:
|
|
621
|
+
return (
|
|
622
|
+
self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
623
|
+
or self.subnode_key.mayRaiseException(exception_type)
|
|
624
|
+
or self.subnode_default.mayRaiseException(exception_type)
|
|
625
|
+
)
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
class ExpressionDictOperationItem(
|
|
629
|
+
ChildrenExpressionDictOperationItemMixin, ExpressionBase
|
|
630
|
+
):
|
|
631
|
+
"""This operation represents d[key] with an exception for missing key."""
|
|
632
|
+
|
|
633
|
+
kind = "EXPRESSION_DICT_OPERATION_ITEM"
|
|
634
|
+
|
|
635
|
+
named_children = ("dict_arg", "key")
|
|
636
|
+
|
|
637
|
+
def __init__(self, dict_arg, key, source_ref):
|
|
638
|
+
ChildrenExpressionDictOperationItemMixin.__init__(
|
|
639
|
+
self, dict_arg=dict_arg, key=key
|
|
640
|
+
)
|
|
641
|
+
|
|
642
|
+
ExpressionBase.__init__(self, source_ref)
|
|
643
|
+
|
|
644
|
+
def computeExpression(self, trace_collection):
|
|
645
|
+
dict_arg = self.subnode_dict_arg
|
|
646
|
+
key = self.subnode_key
|
|
647
|
+
|
|
648
|
+
if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
|
|
649
|
+
return trace_collection.getCompileTimeComputationResult(
|
|
650
|
+
node=self,
|
|
651
|
+
computation=lambda: self.getCompileTimeConstant()[
|
|
652
|
+
dict_arg.getCompileTimeConstant()[key.getCompileTimeConstant()]
|
|
653
|
+
],
|
|
654
|
+
user_provided=dict_arg.user_provided,
|
|
655
|
+
description="Dictionary item lookup with constant key.",
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
# TODO: Only if the key is not hashable.
|
|
659
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
660
|
+
|
|
661
|
+
return self, None, None
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
class ExpressionDictOperationGet2(ExpressionDictOperationGet2Base):
|
|
665
|
+
"""This operation represents d.get(key) with no exception for missing key but None default."""
|
|
666
|
+
|
|
667
|
+
kind = "EXPRESSION_DICT_OPERATION_GET2"
|
|
668
|
+
|
|
669
|
+
named_children = ("dict_arg", "key")
|
|
670
|
+
|
|
671
|
+
__slots__ = ("known_hashable_key",)
|
|
672
|
+
|
|
673
|
+
def __init__(self, dict_arg, key, source_ref):
|
|
674
|
+
ExpressionDictOperationGet2Base.__init__(
|
|
675
|
+
self, dict_arg=dict_arg, key=key, source_ref=source_ref
|
|
676
|
+
)
|
|
677
|
+
|
|
678
|
+
self.known_hashable_key = None
|
|
679
|
+
|
|
680
|
+
def computeExpression(self, trace_collection):
|
|
681
|
+
dict_arg = self.subnode_dict_arg
|
|
682
|
+
key = self.subnode_key
|
|
683
|
+
|
|
684
|
+
if self.known_hashable_key is None:
|
|
685
|
+
self.known_hashable_key = self.subnode_key.isKnownToBeHashable()
|
|
686
|
+
|
|
687
|
+
if self.known_hashable_key is False:
|
|
688
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
689
|
+
|
|
690
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
691
|
+
node=self,
|
|
692
|
+
key=key,
|
|
693
|
+
operation="dict.get",
|
|
694
|
+
side_effects=(dict_arg, key),
|
|
695
|
+
)
|
|
696
|
+
|
|
697
|
+
if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
|
|
698
|
+
result = wrapExpressionWithSideEffects(
|
|
699
|
+
new_node=makeConstantReplacementNode(
|
|
700
|
+
constant=dict_arg.getCompileTimeConstant().get(
|
|
701
|
+
key.getCompileTimeConstant()
|
|
702
|
+
),
|
|
703
|
+
node=self,
|
|
704
|
+
user_provided=dict_arg.user_provided,
|
|
705
|
+
),
|
|
706
|
+
old_node=self,
|
|
707
|
+
side_effects=(dict_arg, key),
|
|
708
|
+
)
|
|
709
|
+
|
|
710
|
+
return (
|
|
711
|
+
result,
|
|
712
|
+
"new_expression",
|
|
713
|
+
"Compile time computed 'dict.get' on constant argument.",
|
|
714
|
+
)
|
|
715
|
+
|
|
716
|
+
if self.known_hashable_key is None:
|
|
717
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
718
|
+
|
|
719
|
+
return self, None, None
|
|
720
|
+
|
|
721
|
+
def mayRaiseException(self, exception_type):
|
|
722
|
+
if self.known_hashable_key is None:
|
|
723
|
+
return True
|
|
724
|
+
else:
|
|
725
|
+
return self.subnode_dict_arg.mayRaiseException(
|
|
726
|
+
exception_type
|
|
727
|
+
) or self.subnode_key.mayRaiseException(exception_type)
|
|
728
|
+
|
|
729
|
+
def mayHaveSideEffects(self):
|
|
730
|
+
if self.known_hashable_key is None:
|
|
731
|
+
return True
|
|
732
|
+
else:
|
|
733
|
+
return (
|
|
734
|
+
self.subnode_dict_arg.mayHaveSideEffects()
|
|
735
|
+
or self.subnode_key.mayHaveSideEffects()
|
|
736
|
+
)
|
|
737
|
+
|
|
738
|
+
def extractSideEffects(self):
|
|
739
|
+
if self.known_hashable_key is None:
|
|
740
|
+
return (self,)
|
|
741
|
+
else:
|
|
742
|
+
return (
|
|
743
|
+
self.subnode_dict_arg.extractSideEffects()
|
|
744
|
+
+ self.subnode_key.extractSideEffects()
|
|
745
|
+
)
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
class ExpressionDictOperationGet3(ExpressionDictOperationGet3Base):
|
|
749
|
+
"""This operation represents d.get(key, default) with no exception for missing key but default value."""
|
|
750
|
+
|
|
751
|
+
kind = "EXPRESSION_DICT_OPERATION_GET3"
|
|
752
|
+
|
|
753
|
+
named_children = ("dict_arg", "key", "default")
|
|
754
|
+
|
|
755
|
+
__slots__ = ("known_hashable_key",)
|
|
756
|
+
|
|
757
|
+
def __init__(self, dict_arg, key, default, source_ref):
|
|
758
|
+
ExpressionDictOperationGet3Base.__init__(
|
|
759
|
+
self, dict_arg=dict_arg, key=key, default=default, source_ref=source_ref
|
|
760
|
+
)
|
|
761
|
+
|
|
762
|
+
self.known_hashable_key = None
|
|
763
|
+
|
|
764
|
+
def computeExpression(self, trace_collection):
|
|
765
|
+
dict_arg = self.subnode_dict_arg
|
|
766
|
+
key = self.subnode_key
|
|
767
|
+
|
|
768
|
+
if self.known_hashable_key is None:
|
|
769
|
+
self.known_hashable_key = key.isKnownToBeHashable()
|
|
770
|
+
|
|
771
|
+
if self.known_hashable_key is False:
|
|
772
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
773
|
+
|
|
774
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
775
|
+
node=self,
|
|
776
|
+
key=key,
|
|
777
|
+
operation="dict.get",
|
|
778
|
+
side_effects=(dict_arg, key, self.subnode_default),
|
|
779
|
+
)
|
|
780
|
+
|
|
781
|
+
# TODO: With dictionary tracing, this could become more transparent.
|
|
782
|
+
if dict_arg.isCompileTimeConstant() and key.isCompileTimeConstant():
|
|
783
|
+
dict_value = dict_arg.getCompileTimeConstant()
|
|
784
|
+
key_value = key.getCompileTimeConstant()
|
|
785
|
+
|
|
786
|
+
if key_value in dict_value:
|
|
787
|
+
# Side effects of args must be retained, but it's not used.
|
|
788
|
+
result = wrapExpressionWithSideEffects(
|
|
789
|
+
new_node=makeConstantReplacementNode(
|
|
790
|
+
constant=dict_value[key_value],
|
|
791
|
+
node=self,
|
|
792
|
+
user_provided=dict_arg.user_provided,
|
|
793
|
+
),
|
|
794
|
+
old_node=self,
|
|
795
|
+
side_effects=(
|
|
796
|
+
dict_arg,
|
|
797
|
+
key,
|
|
798
|
+
self.subnode_default,
|
|
799
|
+
),
|
|
800
|
+
)
|
|
801
|
+
|
|
802
|
+
description = "Compile time computed 'dict.get' on constant argument to not use default."
|
|
803
|
+
else:
|
|
804
|
+
# Side effects of dict and key must be retained, but it's not used.
|
|
805
|
+
result = wrapExpressionWithSideEffects(
|
|
806
|
+
new_node=self.subnode_default,
|
|
807
|
+
old_node=self,
|
|
808
|
+
side_effects=(dict_arg, key),
|
|
809
|
+
)
|
|
810
|
+
|
|
811
|
+
description = "Compile time computed 'dict.get' on constant argument to use default."
|
|
812
|
+
|
|
813
|
+
return (result, "new_expression", description)
|
|
814
|
+
|
|
815
|
+
if self.known_hashable_key is None:
|
|
816
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
817
|
+
|
|
818
|
+
return self, None, None
|
|
819
|
+
|
|
820
|
+
def mayRaiseException(self, exception_type):
|
|
821
|
+
if self.known_hashable_key is None:
|
|
822
|
+
return True
|
|
823
|
+
else:
|
|
824
|
+
return (
|
|
825
|
+
self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
826
|
+
or self.subnode_key.mayRaiseException(exception_type)
|
|
827
|
+
or self.subnode_default.mayRaiseException(exception_type)
|
|
828
|
+
)
|
|
829
|
+
|
|
830
|
+
def mayHaveSideEffects(self):
|
|
831
|
+
if self.known_hashable_key is None:
|
|
832
|
+
return True
|
|
833
|
+
else:
|
|
834
|
+
return (
|
|
835
|
+
self.subnode_dict_arg.mayHaveSideEffects()
|
|
836
|
+
or self.subnode_key.mayHaveSideEffects()
|
|
837
|
+
or self.subnode_default.mayHaveSideEffects()
|
|
838
|
+
)
|
|
839
|
+
|
|
840
|
+
def extractSideEffects(self):
|
|
841
|
+
if self.known_hashable_key is None:
|
|
842
|
+
return (self,)
|
|
843
|
+
else:
|
|
844
|
+
return (
|
|
845
|
+
self.subnode_dict_arg.extractSideEffects()
|
|
846
|
+
+ self.subnode_key.extractSideEffects()
|
|
847
|
+
+ self.subnode_defaults.extractSideEffects()
|
|
848
|
+
)
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
class ExpressionDictOperationCopy(
|
|
852
|
+
SideEffectsFromChildrenMixin,
|
|
853
|
+
ExpressionDictOperationCopyBase,
|
|
854
|
+
):
|
|
855
|
+
kind = "EXPRESSION_DICT_OPERATION_COPY"
|
|
856
|
+
|
|
857
|
+
def computeExpression(self, trace_collection):
|
|
858
|
+
dict_arg = self.subnode_dict_arg
|
|
859
|
+
|
|
860
|
+
if dict_arg.isCompileTimeConstant():
|
|
861
|
+
result = makeConstantReplacementNode(
|
|
862
|
+
constant=dict_arg.getCompileTimeConstant().copy(),
|
|
863
|
+
node=self,
|
|
864
|
+
user_provided=dict_arg.user_provided,
|
|
865
|
+
)
|
|
866
|
+
|
|
867
|
+
return (
|
|
868
|
+
result,
|
|
869
|
+
"new_expression",
|
|
870
|
+
"Compile time computed 'dict.copy' on constant argument.",
|
|
871
|
+
)
|
|
872
|
+
|
|
873
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
874
|
+
|
|
875
|
+
return self, None, None
|
|
876
|
+
|
|
877
|
+
def mayRaiseException(self, exception_type):
|
|
878
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
class ExpressionDictOperationClear(ExpressionDictOperationClearBase):
|
|
882
|
+
kind = "EXPRESSION_DICT_OPERATION_CLEAR"
|
|
883
|
+
|
|
884
|
+
def computeExpression(self, trace_collection):
|
|
885
|
+
# Once we do dictionary tracing, we should tell it, we know its new value
|
|
886
|
+
# perfectly, and that we have no use for previous value.
|
|
887
|
+
# trace_collection.onDictionaryReplaceValueWithKnownValue(self.subnode_dict_arg, {})
|
|
888
|
+
|
|
889
|
+
return self, None, None
|
|
890
|
+
|
|
891
|
+
def mayRaiseException(self, exception_type):
|
|
892
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
class ExpressionDictOperationKeys(
|
|
896
|
+
SideEffectsFromChildrenMixin,
|
|
897
|
+
ExpressionDictOperationKeysBase,
|
|
898
|
+
):
|
|
899
|
+
kind = "EXPRESSION_DICT_OPERATION_KEYS"
|
|
900
|
+
|
|
901
|
+
def computeExpression(self, trace_collection):
|
|
902
|
+
dict_arg = self.subnode_dict_arg
|
|
903
|
+
|
|
904
|
+
if dict_arg.isCompileTimeConstant():
|
|
905
|
+
result = makeConstantReplacementNode(
|
|
906
|
+
constant=dict_arg.getCompileTimeConstant().keys(),
|
|
907
|
+
node=self,
|
|
908
|
+
user_provided=dict_arg.user_provided,
|
|
909
|
+
)
|
|
910
|
+
|
|
911
|
+
return (
|
|
912
|
+
result,
|
|
913
|
+
"new_expression",
|
|
914
|
+
"Compile time computed 'dict.keys' on constant argument.",
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
return self, None, None
|
|
918
|
+
|
|
919
|
+
def mayRaiseException(self, exception_type):
|
|
920
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
class ExpressionDictOperationViewkeys(
|
|
924
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationViewkeysBase
|
|
925
|
+
):
|
|
926
|
+
kind = "EXPRESSION_DICT_OPERATION_VIEWKEYS"
|
|
927
|
+
|
|
928
|
+
def computeExpression(self, trace_collection):
|
|
929
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
930
|
+
|
|
931
|
+
return self, None, None
|
|
932
|
+
|
|
933
|
+
@staticmethod
|
|
934
|
+
def getTypeShape():
|
|
935
|
+
# TODO: Actually iterator that yields key values
|
|
936
|
+
return tshape_iterator
|
|
937
|
+
|
|
938
|
+
def mayRaiseException(self, exception_type):
|
|
939
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
class ExpressionDictOperationIterkeys(
|
|
943
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationIterkeysBase
|
|
944
|
+
):
|
|
945
|
+
kind = "EXPRESSION_DICT_OPERATION_ITERKEYS"
|
|
946
|
+
|
|
947
|
+
def computeExpression(self, trace_collection):
|
|
948
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
949
|
+
|
|
950
|
+
return self, None, None
|
|
951
|
+
|
|
952
|
+
@staticmethod
|
|
953
|
+
def getTypeShape():
|
|
954
|
+
# TODO: Actually iterator yield keys
|
|
955
|
+
return tshape_iterator
|
|
956
|
+
|
|
957
|
+
def mayRaiseException(self, exception_type):
|
|
958
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
class ExpressionDictOperationValues(
|
|
962
|
+
SideEffectsFromChildrenMixin,
|
|
963
|
+
ExpressionDictOperationValuesBase,
|
|
964
|
+
):
|
|
965
|
+
kind = "EXPRESSION_DICT_OPERATION_VALUES"
|
|
966
|
+
|
|
967
|
+
def computeExpression(self, trace_collection):
|
|
968
|
+
dict_arg = self.subnode_dict_arg
|
|
969
|
+
|
|
970
|
+
if dict_arg.isCompileTimeConstant():
|
|
971
|
+
result = makeConstantReplacementNode(
|
|
972
|
+
constant=dict_arg.getCompileTimeConstant().values(),
|
|
973
|
+
node=self,
|
|
974
|
+
user_provided=dict_arg.user_provided,
|
|
975
|
+
)
|
|
976
|
+
|
|
977
|
+
return (
|
|
978
|
+
result,
|
|
979
|
+
"new_expression",
|
|
980
|
+
"Compile time computed 'dict.values' on constant argument.",
|
|
981
|
+
)
|
|
982
|
+
|
|
983
|
+
return self, None, None
|
|
984
|
+
|
|
985
|
+
def mayRaiseException(self, exception_type):
|
|
986
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
class ExpressionDictOperationViewvalues(
|
|
990
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationViewvaluesBase
|
|
991
|
+
):
|
|
992
|
+
kind = "EXPRESSION_DICT_OPERATION_VIEWVALUES"
|
|
993
|
+
|
|
994
|
+
def computeExpression(self, trace_collection):
|
|
995
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
996
|
+
|
|
997
|
+
return self, None, None
|
|
998
|
+
|
|
999
|
+
@staticmethod
|
|
1000
|
+
def getTypeShape():
|
|
1001
|
+
# TODO: Actually iterator that yields key values
|
|
1002
|
+
return tshape_iterator
|
|
1003
|
+
|
|
1004
|
+
def mayRaiseException(self, exception_type):
|
|
1005
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
class ExpressionDictOperationItervalues(
|
|
1009
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationItervaluesBase
|
|
1010
|
+
):
|
|
1011
|
+
kind = "EXPRESSION_DICT_OPERATION_ITERVALUES"
|
|
1012
|
+
|
|
1013
|
+
def computeExpression(self, trace_collection):
|
|
1014
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1015
|
+
|
|
1016
|
+
return self, None, None
|
|
1017
|
+
|
|
1018
|
+
@staticmethod
|
|
1019
|
+
def getTypeShape():
|
|
1020
|
+
# TODO: Actually the iterator yield values.
|
|
1021
|
+
return tshape_iterator
|
|
1022
|
+
|
|
1023
|
+
def mayRaiseException(self, exception_type):
|
|
1024
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
class ExpressionDictOperationItems(
|
|
1028
|
+
SideEffectsFromChildrenMixin,
|
|
1029
|
+
ExpressionDictOperationItemsBase,
|
|
1030
|
+
):
|
|
1031
|
+
kind = "EXPRESSION_DICT_OPERATION_ITEMS"
|
|
1032
|
+
|
|
1033
|
+
def computeExpression(self, trace_collection):
|
|
1034
|
+
dict_arg = self.subnode_dict_arg
|
|
1035
|
+
|
|
1036
|
+
if dict_arg.isCompileTimeConstant():
|
|
1037
|
+
result = makeConstantReplacementNode(
|
|
1038
|
+
constant=dict_arg.getCompileTimeConstant().items(),
|
|
1039
|
+
node=self,
|
|
1040
|
+
user_provided=dict_arg.user_provided,
|
|
1041
|
+
)
|
|
1042
|
+
|
|
1043
|
+
return (
|
|
1044
|
+
result,
|
|
1045
|
+
"new_expression",
|
|
1046
|
+
"Compile time computed 'dict.items' on constant argument.",
|
|
1047
|
+
)
|
|
1048
|
+
|
|
1049
|
+
return self, None, None
|
|
1050
|
+
|
|
1051
|
+
def mayRaiseException(self, exception_type):
|
|
1052
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1053
|
+
|
|
1054
|
+
|
|
1055
|
+
class ExpressionDictOperationIteritems(
|
|
1056
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationIteritemsBase
|
|
1057
|
+
):
|
|
1058
|
+
kind = "EXPRESSION_DICT_OPERATION_ITERITEMS"
|
|
1059
|
+
|
|
1060
|
+
def computeExpression(self, trace_collection):
|
|
1061
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1062
|
+
|
|
1063
|
+
return self, None, None
|
|
1064
|
+
|
|
1065
|
+
@staticmethod
|
|
1066
|
+
def getTypeShape():
|
|
1067
|
+
# TODO: Actually iterator that yields 2 element tuples, add shapes
|
|
1068
|
+
# for that too.
|
|
1069
|
+
return tshape_iterator
|
|
1070
|
+
|
|
1071
|
+
def mayRaiseException(self, exception_type):
|
|
1072
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
class ExpressionDictOperationViewitems(
|
|
1076
|
+
SideEffectsFromChildrenMixin, ExpressionDictOperationViewitemsBase
|
|
1077
|
+
):
|
|
1078
|
+
kind = "EXPRESSION_DICT_OPERATION_VIEWITEMS"
|
|
1079
|
+
|
|
1080
|
+
def computeExpression(self, trace_collection):
|
|
1081
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1082
|
+
|
|
1083
|
+
return self, None, None
|
|
1084
|
+
|
|
1085
|
+
@staticmethod
|
|
1086
|
+
def getTypeShape():
|
|
1087
|
+
# TODO: Actually iterator that yields key values
|
|
1088
|
+
return tshape_iterator
|
|
1089
|
+
|
|
1090
|
+
def mayRaiseException(self, exception_type):
|
|
1091
|
+
return self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
class ExpressionDictOperationUpdate2(ExpressionDictOperationUpdate2Base):
|
|
1095
|
+
"""This operation represents d.update(iterable)."""
|
|
1096
|
+
|
|
1097
|
+
kind = "EXPRESSION_DICT_OPERATION_UPDATE2"
|
|
1098
|
+
|
|
1099
|
+
def __init__(self, dict_arg, iterable, source_ref):
|
|
1100
|
+
# TODO: Change generation of attribute nodes to pass it like this already.
|
|
1101
|
+
if type(iterable) is tuple:
|
|
1102
|
+
(iterable,) = iterable
|
|
1103
|
+
|
|
1104
|
+
ExpressionDictOperationUpdate2Base.__init__(
|
|
1105
|
+
self,
|
|
1106
|
+
dict_arg=dict_arg,
|
|
1107
|
+
iterable=iterable,
|
|
1108
|
+
source_ref=source_ref,
|
|
1109
|
+
)
|
|
1110
|
+
|
|
1111
|
+
def computeExpression(self, trace_collection):
|
|
1112
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
1113
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
1114
|
+
# TODO: Using it might change it, unfortunately
|
|
1115
|
+
trace_collection.removeKnowledge(self.subnode_iterable)
|
|
1116
|
+
|
|
1117
|
+
# TODO: Until we can know iteration error won't happen, but then we should change into
|
|
1118
|
+
# something else.
|
|
1119
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1120
|
+
|
|
1121
|
+
# TODO: Check empty, and remove itself if that's the case.
|
|
1122
|
+
return self, None, None
|
|
1123
|
+
|
|
1124
|
+
# TODO: Might raise non-iterable depending on value shape, or not hashable from content.
|
|
1125
|
+
@staticmethod
|
|
1126
|
+
def mayRaiseException(exception_type):
|
|
1127
|
+
return True
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
def makeExpressionDictOperationUpdate3(dict_arg, iterable, pairs, source_ref):
|
|
1131
|
+
# Artefact of star argument parsing iterable, where it is also optional
|
|
1132
|
+
# revolved on the outside here
|
|
1133
|
+
if type(iterable) is tuple:
|
|
1134
|
+
if not iterable:
|
|
1135
|
+
iterable = None
|
|
1136
|
+
else:
|
|
1137
|
+
(iterable,) = iterable
|
|
1138
|
+
|
|
1139
|
+
if iterable is not None:
|
|
1140
|
+
return ExpressionDictOperationUpdate3(dict_arg, iterable, pairs, source_ref)
|
|
1141
|
+
else:
|
|
1142
|
+
return ExpressionDictOperationUpdatePairs(dict_arg, pairs, source_ref)
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
class ExpressionDictOperationUpdate3(ExpressionDictOperationUpdate3Base):
|
|
1146
|
+
"""This operation represents d.update(iterable, **pairs)."""
|
|
1147
|
+
|
|
1148
|
+
kind = "EXPRESSION_DICT_OPERATION_UPDATE3"
|
|
1149
|
+
|
|
1150
|
+
def __init__(self, dict_arg, iterable, pairs, source_ref):
|
|
1151
|
+
ExpressionDictOperationUpdate3Base.__init__(
|
|
1152
|
+
self,
|
|
1153
|
+
dict_arg=dict_arg,
|
|
1154
|
+
iterable=iterable,
|
|
1155
|
+
pairs=pairs,
|
|
1156
|
+
source_ref=source_ref,
|
|
1157
|
+
)
|
|
1158
|
+
|
|
1159
|
+
def computeExpression(self, trace_collection):
|
|
1160
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
1161
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
1162
|
+
# TODO: Using it might change it, unfortunately
|
|
1163
|
+
# TODO: When iterable is empty, this should be specialized further to
|
|
1164
|
+
# ExpressionDictOperationUpdatePairs
|
|
1165
|
+
trace_collection.removeKnowledge(self.subnode_iterable)
|
|
1166
|
+
|
|
1167
|
+
for pair in self.subnode_pairs:
|
|
1168
|
+
trace_collection.removeKnowledge(pair)
|
|
1169
|
+
|
|
1170
|
+
# TODO: Until we can know iteration error won't happen, but then we should change into
|
|
1171
|
+
# something else.
|
|
1172
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1173
|
+
|
|
1174
|
+
# TODO: Check empty, and remove itself if that's the case.
|
|
1175
|
+
return self, None, None
|
|
1176
|
+
|
|
1177
|
+
# TODO: Might raise non-iterable depending on value shape, or not hashable from content.
|
|
1178
|
+
@staticmethod
|
|
1179
|
+
def mayRaiseException(exception_type):
|
|
1180
|
+
return True
|
|
1181
|
+
|
|
1182
|
+
|
|
1183
|
+
class ExpressionDictOperationUpdatePairs(
|
|
1184
|
+
ChildrenExpressionDictOperationUpdatePairsMixin, ExpressionBase
|
|
1185
|
+
):
|
|
1186
|
+
"""This operation represents d.update(iterable, **pairs)."""
|
|
1187
|
+
|
|
1188
|
+
kind = "EXPRESSION_DICT_OPERATION_UPDATE_PAIRS"
|
|
1189
|
+
|
|
1190
|
+
named_children = ("dict_arg", "pairs|tuple")
|
|
1191
|
+
|
|
1192
|
+
def __init__(self, dict_arg, pairs, source_ref):
|
|
1193
|
+
ChildrenExpressionDictOperationUpdatePairsMixin.__init__(
|
|
1194
|
+
self,
|
|
1195
|
+
dict_arg=dict_arg,
|
|
1196
|
+
pairs=pairs,
|
|
1197
|
+
)
|
|
1198
|
+
|
|
1199
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1200
|
+
|
|
1201
|
+
def computeExpression(self, trace_collection):
|
|
1202
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
1203
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
1204
|
+
# TODO: Using it might change it, unfortunately
|
|
1205
|
+
# TODO: When iterable is empty, this should be specialized further.
|
|
1206
|
+
|
|
1207
|
+
for pair in self.subnode_pairs:
|
|
1208
|
+
trace_collection.removeKnowledge(pair)
|
|
1209
|
+
|
|
1210
|
+
# TODO: Until we can know KeyError won't happen, but then we should change into
|
|
1211
|
+
# something else.
|
|
1212
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1213
|
+
|
|
1214
|
+
# TODO: Check empty, and remove itself if that's the case.
|
|
1215
|
+
return self, None, None
|
|
1216
|
+
|
|
1217
|
+
# TODO: Might raise non-iterable depending on value shape, or not hashable from content.
|
|
1218
|
+
@staticmethod
|
|
1219
|
+
def mayRaiseException(exception_type):
|
|
1220
|
+
return True
|
|
1221
|
+
|
|
1222
|
+
|
|
1223
|
+
class StatementDictOperationUpdate(StatementDictOperationUpdateBase):
|
|
1224
|
+
"""Update dict value.
|
|
1225
|
+
|
|
1226
|
+
This is mainly used for re-formulations, where a dictionary
|
|
1227
|
+
update will be performed on what is known not to be a
|
|
1228
|
+
general mapping.
|
|
1229
|
+
"""
|
|
1230
|
+
|
|
1231
|
+
kind = "STATEMENT_DICT_OPERATION_UPDATE"
|
|
1232
|
+
|
|
1233
|
+
named_children = ("dict_arg", "value")
|
|
1234
|
+
auto_compute_handling = "operation"
|
|
1235
|
+
|
|
1236
|
+
def computeStatementOperation(self, trace_collection):
|
|
1237
|
+
# TODO: Until we have proper dictionary tracing, do this.
|
|
1238
|
+
trace_collection.removeKnowledge(self.subnode_dict_arg)
|
|
1239
|
+
# TODO: Using it might change it, unfortunately
|
|
1240
|
+
trace_collection.removeKnowledge(self.subnode_value)
|
|
1241
|
+
|
|
1242
|
+
# TODO: Until we can know iteration error won't happen, but then we should change into
|
|
1243
|
+
# something else.
|
|
1244
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1245
|
+
|
|
1246
|
+
# TODO: Check empty, and remove itself if that's the case.
|
|
1247
|
+
return self, None, None
|
|
1248
|
+
|
|
1249
|
+
|
|
1250
|
+
def makeUnhashableExceptionReplacementExpression(node, key, side_effects, operation):
|
|
1251
|
+
unhashable_type_name = (
|
|
1252
|
+
key.extractUnhashableNodeType().getCompileTimeConstant().__name__
|
|
1253
|
+
)
|
|
1254
|
+
result = makeRaiseExceptionReplacementExpression(
|
|
1255
|
+
expression=node,
|
|
1256
|
+
exception_type="TypeError",
|
|
1257
|
+
exception_value="unhashable type: '%s'" % unhashable_type_name,
|
|
1258
|
+
)
|
|
1259
|
+
result = wrapExpressionWithSideEffects(
|
|
1260
|
+
side_effects=side_effects,
|
|
1261
|
+
old_node=node,
|
|
1262
|
+
new_node=result,
|
|
1263
|
+
)
|
|
1264
|
+
|
|
1265
|
+
return (
|
|
1266
|
+
result,
|
|
1267
|
+
"new_raise",
|
|
1268
|
+
"Dictionary operation '%s' with key of type '%s' that is known to not be hashable."
|
|
1269
|
+
% (operation, unhashable_type_name),
|
|
1270
|
+
)
|
|
1271
|
+
|
|
1272
|
+
|
|
1273
|
+
class ExpressionDictOperationInNotInUncertainMixin(object):
|
|
1274
|
+
# Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
|
|
1275
|
+
__slots__ = ()
|
|
1276
|
+
|
|
1277
|
+
def computeExpression(self, trace_collection):
|
|
1278
|
+
if self.known_hashable_key is None:
|
|
1279
|
+
self.known_hashable_key = self.subnode_key.isKnownToBeHashable()
|
|
1280
|
+
|
|
1281
|
+
if self.known_hashable_key is False:
|
|
1282
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1283
|
+
|
|
1284
|
+
return makeUnhashableExceptionReplacementExpression(
|
|
1285
|
+
node=self,
|
|
1286
|
+
key=self.subnode_key,
|
|
1287
|
+
operation="in (dict)",
|
|
1288
|
+
side_effects=self.getVisitableNodes(),
|
|
1289
|
+
)
|
|
1290
|
+
|
|
1291
|
+
if self.known_hashable_key is None:
|
|
1292
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1293
|
+
|
|
1294
|
+
if self.subnode_key.isCompileTimeConstant():
|
|
1295
|
+
truth_value = self.subnode_dict_arg.getExpressionDictInConstant(
|
|
1296
|
+
self.subnode_key.getCompileTimeConstant()
|
|
1297
|
+
)
|
|
1298
|
+
|
|
1299
|
+
if truth_value is not None:
|
|
1300
|
+
# TODO: Ugly that this code is not drawing from derived class methods.
|
|
1301
|
+
if "NOT" in self.kind:
|
|
1302
|
+
truth_value = not truth_value
|
|
1303
|
+
|
|
1304
|
+
result = wrapExpressionWithSideEffects(
|
|
1305
|
+
new_node=makeConstantReplacementNode(
|
|
1306
|
+
constant=truth_value, node=self, user_provided=True
|
|
1307
|
+
),
|
|
1308
|
+
old_node=self,
|
|
1309
|
+
side_effects=self.getVisitableNodes(),
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
return result, "new_constant", "Predicted dict 'in' truth value"
|
|
1313
|
+
|
|
1314
|
+
return self, None, None
|
|
1315
|
+
|
|
1316
|
+
def mayRaiseException(self, exception_type):
|
|
1317
|
+
return (
|
|
1318
|
+
self.subnode_key.mayRaiseException(exception_type)
|
|
1319
|
+
or self.subnode_dict_arg.mayRaiseException(exception_type)
|
|
1320
|
+
or self.known_hashable_key is not True
|
|
1321
|
+
)
|
|
1322
|
+
|
|
1323
|
+
def mayHaveSideEffects(self):
|
|
1324
|
+
return self.mayRaiseException(BaseException)
|
|
1325
|
+
|
|
1326
|
+
def extractSideEffects(self):
|
|
1327
|
+
if self.known_hashable_key is not True:
|
|
1328
|
+
return (self,)
|
|
1329
|
+
else:
|
|
1330
|
+
# No side effects at all but from the children.
|
|
1331
|
+
result = []
|
|
1332
|
+
|
|
1333
|
+
# The order of evaluation is different for "in" and "has_key", so we go
|
|
1334
|
+
# through visitable nodes.
|
|
1335
|
+
for child in self.getVisitableNodes():
|
|
1336
|
+
result.extend(child.extractSideEffects())
|
|
1337
|
+
|
|
1338
|
+
return tuple(result)
|
|
1339
|
+
|
|
1340
|
+
|
|
1341
|
+
class ExpressionDictOperationInNotInUncertainBase(
|
|
1342
|
+
ExpressionDictOperationInNotInUncertainMixin,
|
|
1343
|
+
ExpressionBoolShapeExactMixin,
|
|
1344
|
+
ChildrenHavingKeyDictArgMixin,
|
|
1345
|
+
ExpressionBase,
|
|
1346
|
+
):
|
|
1347
|
+
# Follows the reversed nature of "in", with the dictionary on the right
|
|
1348
|
+
# side of things.
|
|
1349
|
+
named_children = ("key", "dict_arg")
|
|
1350
|
+
|
|
1351
|
+
__slots__ = ("known_hashable_key",)
|
|
1352
|
+
|
|
1353
|
+
def __init__(self, key, dict_arg, source_ref):
|
|
1354
|
+
ChildrenHavingKeyDictArgMixin.__init__(
|
|
1355
|
+
self,
|
|
1356
|
+
key=key,
|
|
1357
|
+
dict_arg=dict_arg,
|
|
1358
|
+
)
|
|
1359
|
+
|
|
1360
|
+
ExpressionBase.__init__(self, source_ref)
|
|
1361
|
+
|
|
1362
|
+
self.known_hashable_key = None
|
|
1363
|
+
|
|
1364
|
+
|
|
1365
|
+
class ExpressionDictOperationIn(ExpressionDictOperationInNotInUncertainBase):
|
|
1366
|
+
kind = "EXPRESSION_DICT_OPERATION_IN"
|
|
1367
|
+
|
|
1368
|
+
|
|
1369
|
+
class ExpressionDictOperationNotIn(ExpressionDictOperationInNotInUncertainBase):
|
|
1370
|
+
kind = "EXPRESSION_DICT_OPERATION_NOT_IN"
|
|
1371
|
+
|
|
1372
|
+
|
|
1373
|
+
class ExpressionDictOperationHaskey(
|
|
1374
|
+
ExpressionDictOperationInNotInUncertainMixin,
|
|
1375
|
+
ExpressionDictOperationHaskeyBase,
|
|
1376
|
+
):
|
|
1377
|
+
kind = "EXPRESSION_DICT_OPERATION_HASKEY"
|
|
1378
|
+
|
|
1379
|
+
# Different order of arguments.
|
|
1380
|
+
named_children = ("dict_arg", "key")
|
|
1381
|
+
|
|
1382
|
+
__slots__ = ("known_hashable_key",)
|
|
1383
|
+
|
|
1384
|
+
def __init__(self, key, dict_arg, source_ref):
|
|
1385
|
+
ExpressionDictOperationHaskeyBase.__init__(
|
|
1386
|
+
self, key=key, dict_arg=dict_arg, source_ref=source_ref
|
|
1387
|
+
)
|
|
1388
|
+
|
|
1389
|
+
self.known_hashable_key = None
|
|
1390
|
+
|
|
1391
|
+
|
|
1392
|
+
class ExpressionDictOperationFromkeys2(ExpressionDictOperationFromkeys2Base):
|
|
1393
|
+
kind = "EXPRESSION_DICT_OPERATION_FROMKEYS2"
|
|
1394
|
+
|
|
1395
|
+
def computeExpression(self, trace_collection):
|
|
1396
|
+
if self.mayRaiseExceptionOperation():
|
|
1397
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1398
|
+
|
|
1399
|
+
if self.subnode_iterable.isCompileTimeConstant():
|
|
1400
|
+
# TODO: Could be assert against it being None with a compile time constant,
|
|
1401
|
+
# we will usually be able to tell?
|
|
1402
|
+
# This is actually OK to use like this, pylint: disable=bad-chained-comparison
|
|
1403
|
+
if None is not self.subnode_iterable.getIterationLength() < 256:
|
|
1404
|
+
return trace_collection.getCompileTimeComputationResult(
|
|
1405
|
+
node=self,
|
|
1406
|
+
computation=lambda: dict.fromkeys(
|
|
1407
|
+
self.subnode_iterable.getCompileTimeConstant()
|
|
1408
|
+
),
|
|
1409
|
+
description="Computed 'dict.fromkeys' with constant value.",
|
|
1410
|
+
)
|
|
1411
|
+
|
|
1412
|
+
return self, None, None
|
|
1413
|
+
|
|
1414
|
+
def mayRaiseException(self, exception_type):
|
|
1415
|
+
return (
|
|
1416
|
+
self.subnode_iterable.mayRaiseException(exception_type)
|
|
1417
|
+
or self.mayRaiseExceptionOperation()
|
|
1418
|
+
)
|
|
1419
|
+
|
|
1420
|
+
def mayRaiseExceptionOperation(self):
|
|
1421
|
+
# This is actually OK to use like this, pylint: disable=bad-chained-comparison
|
|
1422
|
+
return None is not self.subnode_iterable.getIterationLength() < 256
|
|
1423
|
+
|
|
1424
|
+
|
|
1425
|
+
class ExpressionDictOperationFromkeys3(ExpressionDictOperationFromkeys3Base):
|
|
1426
|
+
kind = "EXPRESSION_DICT_OPERATION_FROMKEYS3"
|
|
1427
|
+
|
|
1428
|
+
def computeExpression(self, trace_collection):
|
|
1429
|
+
if self.mayRaiseExceptionOperation():
|
|
1430
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1431
|
+
|
|
1432
|
+
if (
|
|
1433
|
+
self.subnode_iterable.isCompileTimeConstant()
|
|
1434
|
+
and self.subnode_value.isCompileTimeConstant()
|
|
1435
|
+
):
|
|
1436
|
+
# TODO: Could be assert against it being None with a compile time constant,
|
|
1437
|
+
# we will usually be able to tell?
|
|
1438
|
+
# This is actually OK to use like this, pylint: disable=bad-chained-comparison
|
|
1439
|
+
if None is not self.subnode_iterable.getIterationLength() < 256:
|
|
1440
|
+
return trace_collection.getCompileTimeComputationResult(
|
|
1441
|
+
node=self,
|
|
1442
|
+
computation=lambda: dict.fromkeys(
|
|
1443
|
+
self.subnode_iterable.getCompileTimeConstant(),
|
|
1444
|
+
self.subnode_value.getCompileTimeConstant(),
|
|
1445
|
+
),
|
|
1446
|
+
description="Computed 'dict.fromkeys' with constant values.",
|
|
1447
|
+
)
|
|
1448
|
+
|
|
1449
|
+
return self, None, None
|
|
1450
|
+
|
|
1451
|
+
def mayRaiseException(self, exception_type):
|
|
1452
|
+
return (
|
|
1453
|
+
self.subnode_iterable.mayRaiseException(exception_type)
|
|
1454
|
+
or self.subnode_value.mayRaiseException(exception_type)
|
|
1455
|
+
or self.mayRaiseExceptionOperation()
|
|
1456
|
+
)
|
|
1457
|
+
|
|
1458
|
+
def mayRaiseExceptionOperation(self):
|
|
1459
|
+
# This is actually OK to use like this, pylint: disable=bad-chained-comparison
|
|
1460
|
+
return None is not self.subnode_iterable.getIterationLength() < 256
|
|
1461
|
+
|
|
1462
|
+
|
|
1463
|
+
class ExpressionDictOperationFromkeysRef(ExpressionNoSideEffectsMixin, ExpressionBase):
|
|
1464
|
+
kind = "EXPRESSION_DICT_OPERATION_FROMKEYS_REF"
|
|
1465
|
+
|
|
1466
|
+
def finalize(self):
|
|
1467
|
+
del self.parent
|
|
1468
|
+
|
|
1469
|
+
def computeExpressionRaw(self, trace_collection):
|
|
1470
|
+
return self, None, None
|
|
1471
|
+
|
|
1472
|
+
def computeExpressionCall(self, call_node, call_args, call_kw, trace_collection):
|
|
1473
|
+
# Anything may happen. On next pass, if replaced, we might be better
|
|
1474
|
+
# but not now.
|
|
1475
|
+
trace_collection.onExceptionRaiseExit(BaseException)
|
|
1476
|
+
|
|
1477
|
+
def wrapExpressionDictOperationFromkeys(iterable, value, source_ref):
|
|
1478
|
+
if value is None:
|
|
1479
|
+
return ExpressionDictOperationFromkeys2(
|
|
1480
|
+
iterable=iterable, source_ref=source_ref
|
|
1481
|
+
)
|
|
1482
|
+
else:
|
|
1483
|
+
return ExpressionDictOperationFromkeys3(
|
|
1484
|
+
iterable=iterable, value=value, source_ref=source_ref
|
|
1485
|
+
)
|
|
1486
|
+
|
|
1487
|
+
result = extractBuiltinArgs(
|
|
1488
|
+
node=call_node,
|
|
1489
|
+
builtin_class=wrapExpressionDictOperationFromkeys,
|
|
1490
|
+
builtin_spec=dict_fromkeys_spec,
|
|
1491
|
+
)
|
|
1492
|
+
|
|
1493
|
+
return trace_collection.computedExpressionResult(
|
|
1494
|
+
expression=result,
|
|
1495
|
+
change_tags="new_expression",
|
|
1496
|
+
change_desc="Call to 'dict.fromkeys' recognized.",
|
|
1497
|
+
)
|
|
1498
|
+
|
|
1499
|
+
|
|
1500
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1501
|
+
# integrates with CPython, but also works on its own.
|
|
1502
|
+
#
|
|
1503
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1504
|
+
# you may not use this file except in compliance with the License.
|
|
1505
|
+
# You may obtain a copy of the License at
|
|
1506
|
+
#
|
|
1507
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1508
|
+
#
|
|
1509
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1510
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1511
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1512
|
+
# See the License for the specific language governing permissions and
|
|
1513
|
+
# limitations under the License.
|