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,1928 @@
|
|
|
1
|
+
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
""" C type descriptions. For specific or general C types, provide code generation help.
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import math
|
|
9
|
+
from abc import abstractmethod
|
|
10
|
+
|
|
11
|
+
from nuitka.__past__ import long
|
|
12
|
+
from nuitka.code_generation.BinaryOperationHelperDefinitions import (
|
|
13
|
+
isCommutativeType,
|
|
14
|
+
)
|
|
15
|
+
from nuitka.code_generation.Namify import namifyConstant
|
|
16
|
+
from nuitka.utils.SlotMetaClasses import getMetaClassBase
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TypeDescBase(getMetaClassBase("Type", require_slots=False)):
|
|
20
|
+
# To be overloaded
|
|
21
|
+
type_name = None
|
|
22
|
+
type_desc = None
|
|
23
|
+
type_decl = None
|
|
24
|
+
|
|
25
|
+
python_requirement = None
|
|
26
|
+
|
|
27
|
+
def __init__(self):
|
|
28
|
+
assert self.type_name
|
|
29
|
+
assert self.type_desc
|
|
30
|
+
assert self.type_decl
|
|
31
|
+
|
|
32
|
+
def __repr__(self):
|
|
33
|
+
return "<%s %s %s>" % (self.__class__.__name__, self.type_name, self.type_desc)
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def getHelperCodeName(cls):
|
|
37
|
+
return cls.type_name.upper()
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def getTypeName2(cls):
|
|
41
|
+
return cls.type_name
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def getTypeName3(cls):
|
|
45
|
+
return cls.type_name
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def getVariableDecl(cls, variable_name):
|
|
49
|
+
if cls.type_decl.endswith("*"):
|
|
50
|
+
return cls.type_decl + variable_name
|
|
51
|
+
else:
|
|
52
|
+
return cls.type_decl + " " + variable_name
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def getTypeDecl(cls):
|
|
56
|
+
return cls.type_decl
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def getCheckValueCode(cls, operand):
|
|
60
|
+
return "CHECK_OBJECT(%s);" % operand
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def getTypeValueExpression(cls, operand):
|
|
64
|
+
return "Py_TYPE(%s)" % operand
|
|
65
|
+
|
|
66
|
+
def getTypeNameExpression(self, type_name):
|
|
67
|
+
if self is object_desc:
|
|
68
|
+
return "%s->tp_name" % type_name
|
|
69
|
+
|
|
70
|
+
if self.getTypeName2() == self.getTypeName3():
|
|
71
|
+
return '"%s"' % self.getTypeName2()
|
|
72
|
+
|
|
73
|
+
if self.python_requirement == "PYTHON_VERSION < 0x300":
|
|
74
|
+
return '"%s"' % self.getTypeName2()
|
|
75
|
+
elif self.python_requirement == "PYTHON_VERSION >= 0x300":
|
|
76
|
+
return '"%s"' % self.getTypeName3()
|
|
77
|
+
elif self.python_requirement is None:
|
|
78
|
+
return '(PYTHON_VERSION < 0x300 ? "%s" : "%s")' % (
|
|
79
|
+
self.getTypeName2(),
|
|
80
|
+
self.getTypeName3(),
|
|
81
|
+
)
|
|
82
|
+
else:
|
|
83
|
+
assert False, self.python_requirement
|
|
84
|
+
|
|
85
|
+
def getTypeValueVariableExpression(self, type_name):
|
|
86
|
+
if self is object_desc:
|
|
87
|
+
return type_name
|
|
88
|
+
else:
|
|
89
|
+
return self.getTypeValueExpression(None)
|
|
90
|
+
|
|
91
|
+
@abstractmethod
|
|
92
|
+
def getNewStyleNumberTypeCheckExpression(self, operand):
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
@staticmethod
|
|
96
|
+
def needsIndexConversion():
|
|
97
|
+
return True
|
|
98
|
+
|
|
99
|
+
def isKnownToNotCoerce(self, right):
|
|
100
|
+
if right is self and right is not object_desc:
|
|
101
|
+
return True
|
|
102
|
+
|
|
103
|
+
if self in (int_desc, long_desc, float_desc):
|
|
104
|
+
if right in (
|
|
105
|
+
str_desc,
|
|
106
|
+
unicode_desc,
|
|
107
|
+
tuple_desc,
|
|
108
|
+
list_desc,
|
|
109
|
+
set_desc,
|
|
110
|
+
dict_desc,
|
|
111
|
+
bytes_desc,
|
|
112
|
+
):
|
|
113
|
+
return True
|
|
114
|
+
|
|
115
|
+
if (
|
|
116
|
+
self.getNewStyleNumberTypeCheckExpression("dummy") == "1"
|
|
117
|
+
and right.getNewStyleNumberTypeCheckExpression("dummy") == "1"
|
|
118
|
+
):
|
|
119
|
+
return True
|
|
120
|
+
|
|
121
|
+
if self is not object_desc:
|
|
122
|
+
return not self.hasSlot("nb_coerce")
|
|
123
|
+
else:
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def getMostSpecificType(self, right):
|
|
127
|
+
if self is not object_desc:
|
|
128
|
+
return self
|
|
129
|
+
else:
|
|
130
|
+
return right
|
|
131
|
+
|
|
132
|
+
def getLeastSpecificType(self, right):
|
|
133
|
+
if self is object_desc:
|
|
134
|
+
return self
|
|
135
|
+
else:
|
|
136
|
+
return right
|
|
137
|
+
|
|
138
|
+
@classmethod
|
|
139
|
+
def hasOneOrBothType(cls, right, type_name):
|
|
140
|
+
# At least one match
|
|
141
|
+
if type_name not in (cls.type_name, right.type_name):
|
|
142
|
+
return False
|
|
143
|
+
|
|
144
|
+
# Two matches perfect.
|
|
145
|
+
if cls.type_name == right.type_name:
|
|
146
|
+
return True
|
|
147
|
+
|
|
148
|
+
if "object" not in (cls.type_name, right.type_name):
|
|
149
|
+
return False
|
|
150
|
+
|
|
151
|
+
return True
|
|
152
|
+
|
|
153
|
+
@classmethod
|
|
154
|
+
def mayBothHaveType(cls, right, type_name):
|
|
155
|
+
return cls.type_name in (type_name, "object") and right.type_name in (
|
|
156
|
+
type_name,
|
|
157
|
+
"object",
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
@classmethod
|
|
161
|
+
def getTypeCheckExactExpression(cls, operand):
|
|
162
|
+
if cls.type_name == "str":
|
|
163
|
+
return "PyStr_CheckExact(%s)" % operand
|
|
164
|
+
elif cls.type_name == "dict":
|
|
165
|
+
return "PyDict_CheckExact(%s)" % operand
|
|
166
|
+
else:
|
|
167
|
+
assert False, cls
|
|
168
|
+
|
|
169
|
+
@classmethod
|
|
170
|
+
def getIntCheckExpression(cls, operand):
|
|
171
|
+
if cls.type_name == "int":
|
|
172
|
+
return "1"
|
|
173
|
+
elif cls.type_name == "object":
|
|
174
|
+
return "PyInt_CheckExact(%s)" % operand
|
|
175
|
+
else:
|
|
176
|
+
return "0"
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def getLongCheckExpression(cls, operand):
|
|
180
|
+
if cls.type_name == "long":
|
|
181
|
+
return "1"
|
|
182
|
+
elif cls.type_name == "object":
|
|
183
|
+
return "PyLong_CheckExact(%s)" % operand
|
|
184
|
+
else:
|
|
185
|
+
return "0"
|
|
186
|
+
|
|
187
|
+
@classmethod
|
|
188
|
+
def getStringCheckExpression(cls, operand):
|
|
189
|
+
if cls.type_name == "str":
|
|
190
|
+
return "1"
|
|
191
|
+
elif cls.type_name == "object":
|
|
192
|
+
return "PyString_CheckExact(%s)" % operand
|
|
193
|
+
else:
|
|
194
|
+
return "0"
|
|
195
|
+
|
|
196
|
+
@classmethod
|
|
197
|
+
def getBytesCheckExpression(cls, operand):
|
|
198
|
+
if cls.type_name == "bytes":
|
|
199
|
+
return "1"
|
|
200
|
+
elif cls.type_name == "object":
|
|
201
|
+
return "PyBytes_CheckExact(%s)" % operand
|
|
202
|
+
else:
|
|
203
|
+
return "0"
|
|
204
|
+
|
|
205
|
+
@classmethod
|
|
206
|
+
def getUnicodeCheckExpression(cls, operand):
|
|
207
|
+
if cls.type_name == "unicode":
|
|
208
|
+
return "1"
|
|
209
|
+
elif cls.type_name == "object":
|
|
210
|
+
return "PyUnicode_CheckExact(%s)" % operand
|
|
211
|
+
else:
|
|
212
|
+
return "0"
|
|
213
|
+
|
|
214
|
+
@classmethod
|
|
215
|
+
def getFloatCheckExpression(cls, operand):
|
|
216
|
+
if cls.type_name == "float":
|
|
217
|
+
return "1"
|
|
218
|
+
elif cls.type_name == "object":
|
|
219
|
+
return "PyFloat_CheckExact(%s)" % operand
|
|
220
|
+
else:
|
|
221
|
+
return "0"
|
|
222
|
+
|
|
223
|
+
@classmethod
|
|
224
|
+
def getListCheckExpression(cls, operand):
|
|
225
|
+
if cls.type_name == "list":
|
|
226
|
+
return "1"
|
|
227
|
+
elif cls.type_name == "object":
|
|
228
|
+
return "PyList_CheckExact(%s)" % operand
|
|
229
|
+
else:
|
|
230
|
+
return "0"
|
|
231
|
+
|
|
232
|
+
def getSequenceCheckExpression(self, operand, right):
|
|
233
|
+
# Dictionaries are not really sequences despite slots.
|
|
234
|
+
if self.type_name == "dict":
|
|
235
|
+
return "0"
|
|
236
|
+
elif self.type_name == "object":
|
|
237
|
+
if right.type_name == "tuple":
|
|
238
|
+
return "(PyTuple_CheckExact(%s) || PySequence_Check(%s))" % (
|
|
239
|
+
operand,
|
|
240
|
+
operand,
|
|
241
|
+
)
|
|
242
|
+
else:
|
|
243
|
+
return "PySequence_Check(%s)" % operand
|
|
244
|
+
elif self.hasSlot("sq_item"):
|
|
245
|
+
return "1"
|
|
246
|
+
else:
|
|
247
|
+
return "0"
|
|
248
|
+
|
|
249
|
+
def getInstanceCheckCode(self, operand):
|
|
250
|
+
# We do not yet specialize for instances, therefore everything but object is one.
|
|
251
|
+
if self.type_name == "object":
|
|
252
|
+
return "PyInstance_Check(%s)" % operand
|
|
253
|
+
else:
|
|
254
|
+
return "0"
|
|
255
|
+
|
|
256
|
+
def getIndexCheckExpression(self, operand):
|
|
257
|
+
if self.hasSlot("nb_index"):
|
|
258
|
+
return "1"
|
|
259
|
+
elif self.type_name == "object":
|
|
260
|
+
return "Nuitka_Index_Check(%s)" % operand
|
|
261
|
+
else:
|
|
262
|
+
return "0"
|
|
263
|
+
|
|
264
|
+
def getSaneTypeCheckCode(self, operand):
|
|
265
|
+
# Is the type known to behave well for comparisons and object identity, e.g. not float.
|
|
266
|
+
if self.type_name == "object":
|
|
267
|
+
return "IS_SANE_TYPE(Py_TYPE(%s))" % operand
|
|
268
|
+
elif self in (str_desc, int_desc, long_desc, list_desc, tuple_desc):
|
|
269
|
+
return "1"
|
|
270
|
+
elif self in (float_desc,):
|
|
271
|
+
return "0"
|
|
272
|
+
else:
|
|
273
|
+
# Detect types not yet annotated.
|
|
274
|
+
assert False, self
|
|
275
|
+
return "0"
|
|
276
|
+
|
|
277
|
+
def getTypeIdenticalCheckExpression(self, other, type1, type2):
|
|
278
|
+
if self is object_desc or other is object_desc:
|
|
279
|
+
return "%s == %s" % (
|
|
280
|
+
self.getTypeValueExpression(None) if self is not object_desc else type1,
|
|
281
|
+
(
|
|
282
|
+
other.getTypeValueExpression(None)
|
|
283
|
+
if other is not object_desc
|
|
284
|
+
else type2
|
|
285
|
+
),
|
|
286
|
+
)
|
|
287
|
+
elif self is other:
|
|
288
|
+
return "1"
|
|
289
|
+
else:
|
|
290
|
+
return "0"
|
|
291
|
+
|
|
292
|
+
def getTypeNonIdenticalCheckExpression(self, other, type1, type2):
|
|
293
|
+
if self is object_desc or other is object_desc:
|
|
294
|
+
return "%s != %s" % (
|
|
295
|
+
self.getTypeValueExpression(None) if self is not object_desc else type1,
|
|
296
|
+
(
|
|
297
|
+
other.getTypeValueExpression(None)
|
|
298
|
+
if other is not object_desc
|
|
299
|
+
else type2
|
|
300
|
+
),
|
|
301
|
+
)
|
|
302
|
+
elif self is other:
|
|
303
|
+
return "0"
|
|
304
|
+
else:
|
|
305
|
+
return "1"
|
|
306
|
+
|
|
307
|
+
def getTypeSubTypeCheckExpression(self, other, type2, type1):
|
|
308
|
+
return "Nuitka_Type_IsSubtype(%s, %s)" % (
|
|
309
|
+
other.getTypeValueExpression(None) if other is not object_desc else type2,
|
|
310
|
+
self.getTypeValueExpression(None) if self is not object_desc else type1,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
def getRealSubTypeCheckCode(self, other, type2, type1):
|
|
314
|
+
# Our concrete types, cannot be subtypes of any other type.
|
|
315
|
+
if other is object_desc:
|
|
316
|
+
return "Nuitka_Type_IsSubtype(%s, %s)" % (
|
|
317
|
+
type2,
|
|
318
|
+
self.getTypeValueExpression(None) if self is not object_desc else type1,
|
|
319
|
+
)
|
|
320
|
+
else:
|
|
321
|
+
return 0
|
|
322
|
+
|
|
323
|
+
@abstractmethod
|
|
324
|
+
def hasSlot(self, slot):
|
|
325
|
+
pass
|
|
326
|
+
|
|
327
|
+
@staticmethod
|
|
328
|
+
def hasPreferredSlot(right, slot):
|
|
329
|
+
# Virtual method, pylint: disable=unused-argument
|
|
330
|
+
return False
|
|
331
|
+
|
|
332
|
+
def _getSlotValueExpression(self, operand, slot):
|
|
333
|
+
if slot.startswith("nb_"):
|
|
334
|
+
return "(%s) ? %s : NULL" % (
|
|
335
|
+
operand
|
|
336
|
+
+ "->tp_as_number != NULL && "
|
|
337
|
+
+ self.getNewStyleNumberTypeCheckExpression(operand),
|
|
338
|
+
operand + "->tp_as_number->" + slot,
|
|
339
|
+
)
|
|
340
|
+
elif slot.startswith("sq_"):
|
|
341
|
+
return "%s ? %s : NULL" % (
|
|
342
|
+
operand + "->tp_as_sequence" + " != NULL",
|
|
343
|
+
operand + "->tp_as_sequence->" + slot,
|
|
344
|
+
)
|
|
345
|
+
elif slot == "tp_richcompare":
|
|
346
|
+
# Try to detect fallbacks, this needs version specific management
|
|
347
|
+
# for at least "LONG", maybe others. spell-checker: ignore RICHCOMPARE
|
|
348
|
+
|
|
349
|
+
assert self is object_desc, self
|
|
350
|
+
return "TP_RICHCOMPARE(%s)" % operand
|
|
351
|
+
elif slot == "tp_compare":
|
|
352
|
+
return operand + "->tp_compare"
|
|
353
|
+
else:
|
|
354
|
+
assert False, slot
|
|
355
|
+
|
|
356
|
+
@staticmethod
|
|
357
|
+
def getSlotType(slot):
|
|
358
|
+
if slot in ("nb_power", "nb_inplace_power"):
|
|
359
|
+
return "ternaryfunc"
|
|
360
|
+
elif slot in ("sq_repeat", "sq_inplace_repeat"):
|
|
361
|
+
return "ssizeargfunc"
|
|
362
|
+
else:
|
|
363
|
+
return "binaryfunc"
|
|
364
|
+
|
|
365
|
+
@staticmethod
|
|
366
|
+
def getSlotCallExpression(nb_slot, slot_var, operand1, operand2):
|
|
367
|
+
if nb_slot in ("nb_power", "nb_inplace_power"):
|
|
368
|
+
return "%s(%s, %s, Py_None)" % (slot_var, operand1, operand2)
|
|
369
|
+
else:
|
|
370
|
+
return "%s(%s, %s)" % (slot_var, operand1, operand2)
|
|
371
|
+
|
|
372
|
+
def getSlotValueExpression(self, operand, slot):
|
|
373
|
+
assert (
|
|
374
|
+
"inplace_" not in slot
|
|
375
|
+
or not self.hasSlot(slot)
|
|
376
|
+
or self in (set_desc, list_desc)
|
|
377
|
+
), self.hasSlot
|
|
378
|
+
|
|
379
|
+
if not self.hasSlot(slot):
|
|
380
|
+
return "NULL"
|
|
381
|
+
|
|
382
|
+
return self._getSlotValueExpression(operand, slot)
|
|
383
|
+
|
|
384
|
+
def getSlotValueCheckExpression(self, operand, slot):
|
|
385
|
+
# Virtual method, pylint: disable=unused-argument
|
|
386
|
+
return "true" if self.hasSlot(slot) else "false"
|
|
387
|
+
|
|
388
|
+
@abstractmethod
|
|
389
|
+
def getNoSequenceSlotAccessTestCode(self, type_name):
|
|
390
|
+
pass
|
|
391
|
+
|
|
392
|
+
@staticmethod
|
|
393
|
+
def getOperationErrorMessageName(operator, inplace):
|
|
394
|
+
operator = operator.replace("%", "%%")
|
|
395
|
+
|
|
396
|
+
if operator == "**" and not inplace:
|
|
397
|
+
return "** or pow()"
|
|
398
|
+
elif operator == "divmod":
|
|
399
|
+
assert not inplace
|
|
400
|
+
return "divmod()"
|
|
401
|
+
|
|
402
|
+
assert "=" not in operator, operator
|
|
403
|
+
|
|
404
|
+
if inplace:
|
|
405
|
+
operator = operator + "="
|
|
406
|
+
|
|
407
|
+
return operator
|
|
408
|
+
|
|
409
|
+
def getReturnUnorderableTypeErrorCode(
|
|
410
|
+
self, operator, left, right, operand1, operand2
|
|
411
|
+
):
|
|
412
|
+
args = []
|
|
413
|
+
|
|
414
|
+
if left is object_desc:
|
|
415
|
+
args.append("%s->tp_name" % operand1)
|
|
416
|
+
if right is object_desc:
|
|
417
|
+
args.append("%s->tp_name" % operand2)
|
|
418
|
+
|
|
419
|
+
if args:
|
|
420
|
+
args = ", " + ", ".join(args)
|
|
421
|
+
else:
|
|
422
|
+
args = ""
|
|
423
|
+
|
|
424
|
+
if (
|
|
425
|
+
left.getTypeName2() != left.getTypeName3()
|
|
426
|
+
or right.getTypeName2() != right.getTypeName3()
|
|
427
|
+
):
|
|
428
|
+
# TODO: The message for Python2, can it be triggered at all for non-objects?
|
|
429
|
+
return """\
|
|
430
|
+
#if PYTHON_VERSION < 0x300
|
|
431
|
+
PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type2)s() %(operator)s %(right_type2)s()"%(args)s);
|
|
432
|
+
#elif PYTHON_VERSION < 0x360
|
|
433
|
+
PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type3)s() %(operator)s %(right_type3)s()"%(args)s);
|
|
434
|
+
#else
|
|
435
|
+
PyErr_Format(PyExc_TypeError, "'%(operator)s' not supported between instances of '%(left_type3)s' and '%(right_type3)s'"%(args)s);
|
|
436
|
+
#endif
|
|
437
|
+
return %(return_value)s;""" % {
|
|
438
|
+
"operator": operator,
|
|
439
|
+
"left_type2": "%s" if left is object_desc else left.getTypeName2(),
|
|
440
|
+
"right_type2": "%s" if right is object_desc else right.getTypeName2(),
|
|
441
|
+
"left_type3": "%s" if left is object_desc else left.getTypeName3(),
|
|
442
|
+
"right_type3": "%s" if right is object_desc else right.getTypeName3(),
|
|
443
|
+
"args": args,
|
|
444
|
+
"return_value": self.getExceptionResultIndicatorValue(),
|
|
445
|
+
}
|
|
446
|
+
else:
|
|
447
|
+
return """\
|
|
448
|
+
#if PYTHON_VERSION < 0x360
|
|
449
|
+
PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type)s() %(operator)s %(right_type)s()"%(args)s);
|
|
450
|
+
#else
|
|
451
|
+
PyErr_Format(PyExc_TypeError, "'%(operator)s' not supported between instances of '%(left_type)s' and '%(right_type)s'"%(args)s);
|
|
452
|
+
#endif
|
|
453
|
+
return %(return_value)s;""" % {
|
|
454
|
+
"operator": operator,
|
|
455
|
+
"left_type": "%s" if left is object_desc else left.getTypeName2(),
|
|
456
|
+
"right_type": "%s" if right is object_desc else right.getTypeName2(),
|
|
457
|
+
"args": args,
|
|
458
|
+
"return_value": self.getExceptionResultIndicatorValue(),
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
def hasSameTypeOperationSpecializationCode(self, other, nb_slot, sq_slot):
|
|
462
|
+
# Many cases, pylint: disable=too-many-branches,too-many-return-statements
|
|
463
|
+
|
|
464
|
+
candidate = self if self is not object_desc else other
|
|
465
|
+
|
|
466
|
+
# Both are objects, nothing to be done.
|
|
467
|
+
if candidate is object_desc:
|
|
468
|
+
assert self is object_desc
|
|
469
|
+
assert other is object_desc
|
|
470
|
+
return False
|
|
471
|
+
|
|
472
|
+
# Special case for sequence concat/repeats.
|
|
473
|
+
if (
|
|
474
|
+
sq_slot is not None
|
|
475
|
+
and not candidate.hasSlot(nb_slot)
|
|
476
|
+
and candidate.hasSlot(sq_slot)
|
|
477
|
+
):
|
|
478
|
+
slot = sq_slot
|
|
479
|
+
else:
|
|
480
|
+
slot = nb_slot
|
|
481
|
+
|
|
482
|
+
if slot == "sq_repeat":
|
|
483
|
+
if candidate in (
|
|
484
|
+
list_desc,
|
|
485
|
+
tuple_desc,
|
|
486
|
+
set_desc,
|
|
487
|
+
dict_desc,
|
|
488
|
+
unicode_desc,
|
|
489
|
+
str_desc,
|
|
490
|
+
bytes_desc,
|
|
491
|
+
):
|
|
492
|
+
# No repeat with themselves.
|
|
493
|
+
return False
|
|
494
|
+
|
|
495
|
+
if slot == "nb_remainder":
|
|
496
|
+
if candidate in (list_desc, tuple_desc, set_desc, dict_desc):
|
|
497
|
+
# No remainder with themselves.
|
|
498
|
+
return False
|
|
499
|
+
|
|
500
|
+
if slot == "nb_multiply":
|
|
501
|
+
if candidate in (
|
|
502
|
+
str_desc,
|
|
503
|
+
bytes_desc,
|
|
504
|
+
list_desc,
|
|
505
|
+
tuple_desc,
|
|
506
|
+
set_desc,
|
|
507
|
+
dict_desc,
|
|
508
|
+
):
|
|
509
|
+
# No multiply with themselves.
|
|
510
|
+
return False
|
|
511
|
+
|
|
512
|
+
if slot == "nb_add":
|
|
513
|
+
# Tuple and list, etc. use sq_concat.
|
|
514
|
+
# TODO: What about unicode_desc
|
|
515
|
+
if candidate in (
|
|
516
|
+
str_desc,
|
|
517
|
+
bytes_desc,
|
|
518
|
+
tuple_desc,
|
|
519
|
+
list_desc,
|
|
520
|
+
set_desc,
|
|
521
|
+
dict_desc,
|
|
522
|
+
):
|
|
523
|
+
# No add with themselves.
|
|
524
|
+
return False
|
|
525
|
+
|
|
526
|
+
if slot in ("nb_and", "nb_or", "nb_xor"):
|
|
527
|
+
if candidate in (
|
|
528
|
+
str_desc,
|
|
529
|
+
bytes_desc,
|
|
530
|
+
unicode_desc,
|
|
531
|
+
list_desc,
|
|
532
|
+
tuple_desc,
|
|
533
|
+
dict_desc,
|
|
534
|
+
float_desc,
|
|
535
|
+
):
|
|
536
|
+
return False
|
|
537
|
+
|
|
538
|
+
if slot in ("nb_lshift", "nb_rshift"):
|
|
539
|
+
if candidate in (
|
|
540
|
+
str_desc,
|
|
541
|
+
bytes_desc,
|
|
542
|
+
unicode_desc,
|
|
543
|
+
tuple_desc,
|
|
544
|
+
list_desc,
|
|
545
|
+
set_desc,
|
|
546
|
+
dict_desc,
|
|
547
|
+
float_desc,
|
|
548
|
+
):
|
|
549
|
+
return False
|
|
550
|
+
|
|
551
|
+
if slot == "nb_matrix_multiply":
|
|
552
|
+
# Nobody has it for anything
|
|
553
|
+
return False
|
|
554
|
+
|
|
555
|
+
return True
|
|
556
|
+
|
|
557
|
+
def hasSimilarTypeSpecializationCode(self, other):
|
|
558
|
+
return other in related_types.get(self, ())
|
|
559
|
+
|
|
560
|
+
def getSameTypeType(self, other):
|
|
561
|
+
if self is object_desc:
|
|
562
|
+
return other
|
|
563
|
+
elif other is object_desc:
|
|
564
|
+
return self
|
|
565
|
+
else:
|
|
566
|
+
return object_desc
|
|
567
|
+
|
|
568
|
+
def isSimilarOrSameTypesAsOneOf(self, other):
|
|
569
|
+
assert other is not None
|
|
570
|
+
|
|
571
|
+
if self is other or other in related_types.get(self, ()):
|
|
572
|
+
return True
|
|
573
|
+
|
|
574
|
+
return False
|
|
575
|
+
|
|
576
|
+
def hasTypeSpecializationCode(self, other, nb_slot, sq_slot):
|
|
577
|
+
if self is object_desc and other is object_desc:
|
|
578
|
+
return False
|
|
579
|
+
|
|
580
|
+
if self is other:
|
|
581
|
+
return self.hasSameTypeOperationSpecializationCode(
|
|
582
|
+
other=other,
|
|
583
|
+
nb_slot=nb_slot,
|
|
584
|
+
sq_slot=sq_slot,
|
|
585
|
+
)
|
|
586
|
+
|
|
587
|
+
return self.hasSimilarTypeSpecializationCode(
|
|
588
|
+
other=other,
|
|
589
|
+
)
|
|
590
|
+
|
|
591
|
+
def getTypeComparisonSpecializationHelper(
|
|
592
|
+
self, other, op_code, target, operand1, operand2
|
|
593
|
+
):
|
|
594
|
+
candidate1 = self if self is not object_desc else other
|
|
595
|
+
candidate2 = other if other is not object_desc else self
|
|
596
|
+
|
|
597
|
+
if candidate1 is object_desc:
|
|
598
|
+
return "", None, None, None, None, None
|
|
599
|
+
|
|
600
|
+
if long_desc in (candidate1, candidate2) and int_desc in (
|
|
601
|
+
candidate1,
|
|
602
|
+
candidate2,
|
|
603
|
+
):
|
|
604
|
+
if candidate1 == int_desc:
|
|
605
|
+
operand1 = int_desc.getAsLongValueExpression(operand1)
|
|
606
|
+
candidate1 = c_long_desc
|
|
607
|
+
elif candidate2 == int_desc:
|
|
608
|
+
operand2 = int_desc.getAsLongValueExpression(operand1)
|
|
609
|
+
candidate2 = c_long_desc
|
|
610
|
+
else:
|
|
611
|
+
assert False
|
|
612
|
+
|
|
613
|
+
if (
|
|
614
|
+
target is n_bool_desc
|
|
615
|
+
and candidate1 is candidate2
|
|
616
|
+
and candidate1 not in (tuple_desc, list_desc)
|
|
617
|
+
):
|
|
618
|
+
target = c_bool_desc
|
|
619
|
+
|
|
620
|
+
return (
|
|
621
|
+
"COMPARE_%s_%s_%s_%s"
|
|
622
|
+
% (
|
|
623
|
+
op_code,
|
|
624
|
+
target.getHelperCodeName(),
|
|
625
|
+
candidate1.getHelperCodeName(),
|
|
626
|
+
candidate2.getHelperCodeName(),
|
|
627
|
+
),
|
|
628
|
+
target,
|
|
629
|
+
candidate1,
|
|
630
|
+
candidate2,
|
|
631
|
+
operand1,
|
|
632
|
+
operand2,
|
|
633
|
+
)
|
|
634
|
+
|
|
635
|
+
def getTypeComparisonSpecializationCode(
|
|
636
|
+
self, other, op_code, target, operand1, operand2
|
|
637
|
+
):
|
|
638
|
+
if (
|
|
639
|
+
target is n_bool_desc
|
|
640
|
+
and self not in (tuple_desc, list_desc)
|
|
641
|
+
and other not in (tuple_desc, list_desc)
|
|
642
|
+
):
|
|
643
|
+
helper_target = c_bool_desc
|
|
644
|
+
else:
|
|
645
|
+
helper_target = target
|
|
646
|
+
|
|
647
|
+
(
|
|
648
|
+
helper_name,
|
|
649
|
+
_helper_target,
|
|
650
|
+
_type_desc1,
|
|
651
|
+
_type_desc2,
|
|
652
|
+
operand1,
|
|
653
|
+
operand2,
|
|
654
|
+
) = self.getTypeComparisonSpecializationHelper(
|
|
655
|
+
other=other,
|
|
656
|
+
op_code=op_code,
|
|
657
|
+
target=helper_target,
|
|
658
|
+
operand1=operand1,
|
|
659
|
+
operand2=operand2,
|
|
660
|
+
)
|
|
661
|
+
|
|
662
|
+
if not helper_name:
|
|
663
|
+
return ""
|
|
664
|
+
|
|
665
|
+
assert helper_name != "COMPARE_GE_NBOOL_INT_INT"
|
|
666
|
+
|
|
667
|
+
if helper_target is target:
|
|
668
|
+
return "return %s(%s, %s);" % (
|
|
669
|
+
helper_name,
|
|
670
|
+
operand1,
|
|
671
|
+
operand2,
|
|
672
|
+
)
|
|
673
|
+
else:
|
|
674
|
+
return "return %s(%s, %s) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;" % (
|
|
675
|
+
helper_name,
|
|
676
|
+
operand1,
|
|
677
|
+
operand2,
|
|
678
|
+
)
|
|
679
|
+
|
|
680
|
+
@staticmethod
|
|
681
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
682
|
+
return "%s(%s);" % (
|
|
683
|
+
("Py_INCREF_IMMORTAL" if immortal else "Py_INCREF"),
|
|
684
|
+
operand,
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
@classmethod
|
|
688
|
+
def hasReferenceCounting(cls):
|
|
689
|
+
return True
|
|
690
|
+
|
|
691
|
+
@classmethod
|
|
692
|
+
def getReturnFromObjectExpressionCode(
|
|
693
|
+
cls, operand, take_ref=False, check_exception=True
|
|
694
|
+
):
|
|
695
|
+
if check_exception and not (cls.type_name == "object" and not take_ref):
|
|
696
|
+
r = """if (unlikely(%s == NULL)) { return %s; }\n\n""" % (
|
|
697
|
+
operand,
|
|
698
|
+
cls.getExceptionResultIndicatorValue(),
|
|
699
|
+
)
|
|
700
|
+
else:
|
|
701
|
+
r = ""
|
|
702
|
+
|
|
703
|
+
return r + cls._getReturnFromObjectExpressionCode(
|
|
704
|
+
operand=operand, take_ref=take_ref
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
@classmethod
|
|
708
|
+
def getAssignFromObjectExpressionCode(cls, result, operand, take_ref=False):
|
|
709
|
+
if cls.type_name == "object":
|
|
710
|
+
if take_ref:
|
|
711
|
+
return "Py_INCREF(%s); %s = %s;" % (operand, result, operand)
|
|
712
|
+
else:
|
|
713
|
+
return "%s = %s;" % (result, operand)
|
|
714
|
+
elif cls.isDualType():
|
|
715
|
+
ref_taking = "Py_INCREF(%s); " if take_ref else ""
|
|
716
|
+
|
|
717
|
+
return "%sSET_NILONG_OBJECT_VALUE(%s, %s);" % (ref_taking, result, operand)
|
|
718
|
+
else:
|
|
719
|
+
if take_ref:
|
|
720
|
+
return """%s = %s; """ % (
|
|
721
|
+
result,
|
|
722
|
+
cls.getToValueFromObjectExpression(operand),
|
|
723
|
+
)
|
|
724
|
+
else:
|
|
725
|
+
return """%s = %s; Py_DECREF(%s); """ % (
|
|
726
|
+
result,
|
|
727
|
+
cls.getToValueFromObjectExpression(operand),
|
|
728
|
+
operand,
|
|
729
|
+
)
|
|
730
|
+
|
|
731
|
+
@classmethod
|
|
732
|
+
def _getReturnFromObjectExpressionCode(cls, operand, take_ref):
|
|
733
|
+
if cls.type_name == "object":
|
|
734
|
+
if take_ref:
|
|
735
|
+
return "Py_INCREF(%s); return %s;" % (operand, operand)
|
|
736
|
+
else:
|
|
737
|
+
return "return %s;" % operand
|
|
738
|
+
else:
|
|
739
|
+
if take_ref:
|
|
740
|
+
return """{ %s r = %s; return r; }""" % (
|
|
741
|
+
cls.getTypeDecl(),
|
|
742
|
+
cls.getToValueFromObjectExpression(operand),
|
|
743
|
+
)
|
|
744
|
+
else:
|
|
745
|
+
return """{ %s r = %s; Py_DECREF(%s); return r; }""" % (
|
|
746
|
+
cls.getTypeDecl(),
|
|
747
|
+
cls.getToValueFromObjectExpression(operand),
|
|
748
|
+
operand,
|
|
749
|
+
)
|
|
750
|
+
|
|
751
|
+
@classmethod
|
|
752
|
+
def getReturnFromLongExpressionCode(cls, operand):
|
|
753
|
+
if cls.type_name == "object":
|
|
754
|
+
# Pick one specific.
|
|
755
|
+
# return "return PyInt_FromLong(%s);" % operand
|
|
756
|
+
assert False
|
|
757
|
+
elif cls.type_name == "nbool":
|
|
758
|
+
return "return %s;" % cls.getToValueFromBoolExpression("%s != 0" % operand)
|
|
759
|
+
else:
|
|
760
|
+
assert False, cls
|
|
761
|
+
|
|
762
|
+
@classmethod
|
|
763
|
+
def getAssignFromLongExpressionCode(cls, result, operand):
|
|
764
|
+
if cls.type_name == "object":
|
|
765
|
+
# Need to not use that, but pick one.
|
|
766
|
+
assert False
|
|
767
|
+
elif cls.type_name == "int":
|
|
768
|
+
return "%s = Nuitka_PyInt_FromLong(%s);" % (result, operand)
|
|
769
|
+
elif cls.type_name == "long":
|
|
770
|
+
return "%s = Nuitka_LongFromCLong(%s);" % (result, operand)
|
|
771
|
+
elif cls.type_name == "nbool":
|
|
772
|
+
return "%s = %s;" % (
|
|
773
|
+
result,
|
|
774
|
+
cls.getToValueFromBoolExpression("%s != 0" % operand),
|
|
775
|
+
)
|
|
776
|
+
elif cls.type_name == "nilong":
|
|
777
|
+
return "SET_NILONG_C_VALUE(%s, %s);" % (result, operand)
|
|
778
|
+
else:
|
|
779
|
+
assert False, cls
|
|
780
|
+
|
|
781
|
+
@classmethod
|
|
782
|
+
def getAssignFromBoolExpressionCode(cls, result, operand, give_ref):
|
|
783
|
+
if cls.type_name == "object":
|
|
784
|
+
code = "%s = BOOL_FROM(%s);" % (result, operand)
|
|
785
|
+
if give_ref:
|
|
786
|
+
code += "Py_INCREF_IMMORTAL(%s);" % result
|
|
787
|
+
|
|
788
|
+
return code
|
|
789
|
+
elif cls.type_name == "nbool":
|
|
790
|
+
return "%s = %s;" % (
|
|
791
|
+
result,
|
|
792
|
+
cls.getToValueFromBoolExpression("%s" % operand),
|
|
793
|
+
)
|
|
794
|
+
else:
|
|
795
|
+
assert False, cls
|
|
796
|
+
|
|
797
|
+
@classmethod
|
|
798
|
+
def getReturnFromFloatExpressionCode(cls, operand):
|
|
799
|
+
if cls.type_name == "object":
|
|
800
|
+
return "return MAKE_FLOAT_FROM_DOUBLE(%s);" % operand
|
|
801
|
+
elif cls.type_name == "nbool":
|
|
802
|
+
return "return %s;" % cls.getToValueFromBoolExpression(
|
|
803
|
+
"%s == 0.0" % operand
|
|
804
|
+
)
|
|
805
|
+
elif cls.type_name == "float":
|
|
806
|
+
return "return %s;" % operand
|
|
807
|
+
else:
|
|
808
|
+
assert False, cls
|
|
809
|
+
|
|
810
|
+
@classmethod
|
|
811
|
+
def getAssignFromFloatExpressionCode(cls, result, operand):
|
|
812
|
+
if cls.type_name in ("object", "int", "float"):
|
|
813
|
+
return "%s = MAKE_FLOAT_FROM_DOUBLE(%s);" % (result, operand)
|
|
814
|
+
elif cls.type_name == "nbool":
|
|
815
|
+
return "%s = %s;" % (
|
|
816
|
+
result,
|
|
817
|
+
cls.getToValueFromBoolExpression("%s != 0.0" % operand),
|
|
818
|
+
)
|
|
819
|
+
elif cls.type_name == "float":
|
|
820
|
+
return "%s = %s;" % (result, operand)
|
|
821
|
+
else:
|
|
822
|
+
assert False, cls
|
|
823
|
+
|
|
824
|
+
@classmethod
|
|
825
|
+
def getReturnFromFloatConstantCode(cls, value):
|
|
826
|
+
if cls.type_name == "object":
|
|
827
|
+
const_name = "const_" + namifyConstant(value)
|
|
828
|
+
|
|
829
|
+
return "Py_INCREF(%(const_name)s); return %(const_name)s;" % {
|
|
830
|
+
"const_name": const_name
|
|
831
|
+
}
|
|
832
|
+
elif cls.type_name in ("nbool", "float"):
|
|
833
|
+
return cls.getReturnFromFloatExpressionCode(value)
|
|
834
|
+
else:
|
|
835
|
+
assert False, cls
|
|
836
|
+
|
|
837
|
+
@classmethod
|
|
838
|
+
def getAssignFromFloatConstantCode(cls, result, value):
|
|
839
|
+
if value == "nan":
|
|
840
|
+
value = float(value)
|
|
841
|
+
|
|
842
|
+
if cls.type_name in ("object", "int"):
|
|
843
|
+
# TODO: Type checks for value are needed for "int".
|
|
844
|
+
|
|
845
|
+
const_name = "const_" + namifyConstant(value)
|
|
846
|
+
|
|
847
|
+
return "Py_INCREF(%(const_name)s); %(result)s = %(const_name)s;" % {
|
|
848
|
+
"result": result,
|
|
849
|
+
"const_name": const_name,
|
|
850
|
+
}
|
|
851
|
+
elif cls.type_name in ("nbool", "float"):
|
|
852
|
+
if math.isnan(value):
|
|
853
|
+
value = "Py_NAN"
|
|
854
|
+
|
|
855
|
+
return cls.getAssignFromFloatExpressionCode(result, value)
|
|
856
|
+
else:
|
|
857
|
+
assert False, cls
|
|
858
|
+
|
|
859
|
+
@classmethod
|
|
860
|
+
def getReturnFromIntConstantCode(cls, value):
|
|
861
|
+
if cls.type_name == "object":
|
|
862
|
+
const_name = "const_" + namifyConstant(value)
|
|
863
|
+
|
|
864
|
+
return "Py_INCREF(%(const_name)s); return %(const_name)s;" % {
|
|
865
|
+
"const_name": const_name
|
|
866
|
+
}
|
|
867
|
+
elif cls.type_name in ("nbool", "float"):
|
|
868
|
+
return cls.getReturnFromLongExpressionCode(value)
|
|
869
|
+
else:
|
|
870
|
+
assert False, cls
|
|
871
|
+
|
|
872
|
+
@classmethod
|
|
873
|
+
def getAssignFromIntConstantCode(cls, result, value):
|
|
874
|
+
if cls.type_name in ("object", "int"):
|
|
875
|
+
const_name = "const_" + namifyConstant(value)
|
|
876
|
+
|
|
877
|
+
return "Py_INCREF(%(const_name)s); %(result)s = %(const_name)s;" % {
|
|
878
|
+
"result": result,
|
|
879
|
+
"const_name": const_name,
|
|
880
|
+
}
|
|
881
|
+
elif cls.type_name in ("nbool", "float"):
|
|
882
|
+
return cls.getAssignFromLongExpressionCode(result, value)
|
|
883
|
+
else:
|
|
884
|
+
assert False, (cls, cls.type_name)
|
|
885
|
+
|
|
886
|
+
@classmethod
|
|
887
|
+
def getAssignFromLongConstantCode(cls, result, value):
|
|
888
|
+
if cls.type_name in ("object", "long"):
|
|
889
|
+
if str is bytes:
|
|
890
|
+
# Cannot put "L" in Jinja code for constant value.
|
|
891
|
+
value = long(value)
|
|
892
|
+
|
|
893
|
+
# The only on we surely know right now.
|
|
894
|
+
assert value == 0
|
|
895
|
+
|
|
896
|
+
# TODO: This works for small constants only and only for Python3.
|
|
897
|
+
const_name2 = "const_" + namifyConstant(value)
|
|
898
|
+
const_name3 = "Nuitka_Long_GetSmallValue(%s)" % value
|
|
899
|
+
|
|
900
|
+
assert -5 >= value < 256, value
|
|
901
|
+
|
|
902
|
+
return """\
|
|
903
|
+
#if PYTHON_VERSION < 0x300
|
|
904
|
+
%(result)s = %(const_name2)s;
|
|
905
|
+
#else
|
|
906
|
+
%(result)s = %(const_name3)s;
|
|
907
|
+
#endif
|
|
908
|
+
Py_INCREF(%(result)s);""" % {
|
|
909
|
+
"result": result,
|
|
910
|
+
"const_name2": const_name2,
|
|
911
|
+
"const_name3": const_name3,
|
|
912
|
+
}
|
|
913
|
+
elif cls.type_name in ("nbool", "float"):
|
|
914
|
+
return cls.getAssignFromLongExpressionCode(result, value)
|
|
915
|
+
else:
|
|
916
|
+
assert False, (cls, cls.type_name)
|
|
917
|
+
|
|
918
|
+
@classmethod
|
|
919
|
+
def getAssignConversionCode(cls, result, left, value):
|
|
920
|
+
def _getObjectObject():
|
|
921
|
+
code = "%s = %s;" % (result, value)
|
|
922
|
+
code += cls.getTakeReferenceStatement(result, immortal=False)
|
|
923
|
+
|
|
924
|
+
return code
|
|
925
|
+
|
|
926
|
+
if cls is left:
|
|
927
|
+
return _getObjectObject()
|
|
928
|
+
else:
|
|
929
|
+
if cls.type_name in ("object", "float"):
|
|
930
|
+
if left.type_name in ("int", "float"):
|
|
931
|
+
return _getObjectObject()
|
|
932
|
+
elif left.type_name == "clong":
|
|
933
|
+
return cls.getAssignFromLongExpressionCode(result, value)
|
|
934
|
+
else:
|
|
935
|
+
assert False, left.type_name
|
|
936
|
+
elif cls.type_name == "nbool":
|
|
937
|
+
if left.type_name == "int":
|
|
938
|
+
return "%s = %s;" % (
|
|
939
|
+
result,
|
|
940
|
+
cls.getToValueFromBoolExpression(
|
|
941
|
+
"%s != 0" % left.getAsLongValueExpression(value)
|
|
942
|
+
),
|
|
943
|
+
)
|
|
944
|
+
elif left.type_name == "float":
|
|
945
|
+
return "%s = %s;" % (
|
|
946
|
+
result,
|
|
947
|
+
cls.getToValueFromBoolExpression(
|
|
948
|
+
"%s != 0.0" % left.getAsDoubleValueExpression(value)
|
|
949
|
+
),
|
|
950
|
+
)
|
|
951
|
+
else:
|
|
952
|
+
assert False, left.type_name
|
|
953
|
+
else:
|
|
954
|
+
assert False, cls.type_name
|
|
955
|
+
|
|
956
|
+
@classmethod
|
|
957
|
+
def isDualType(cls):
|
|
958
|
+
return False
|
|
959
|
+
|
|
960
|
+
@classmethod
|
|
961
|
+
def isCommutativeType(cls):
|
|
962
|
+
return isCommutativeType(cls.getHelperCodeName())
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
class ConcreteTypeBase(TypeDescBase):
|
|
966
|
+
type_decl = "PyObject *"
|
|
967
|
+
|
|
968
|
+
def _getSlotValueExpression(self, operand, slot):
|
|
969
|
+
if slot.startswith("nb_"):
|
|
970
|
+
return self.getTypeValueExpression(operand)[1:] + ".tp_as_number->" + slot
|
|
971
|
+
elif slot.startswith("sq_"):
|
|
972
|
+
return self.getTypeValueExpression(operand)[1:] + ".tp_as_sequence->" + slot
|
|
973
|
+
elif slot.startswith("tp_"):
|
|
974
|
+
return self.getTypeValueExpression(operand)[1:] + "." + slot
|
|
975
|
+
else:
|
|
976
|
+
assert False, slot
|
|
977
|
+
|
|
978
|
+
def getCheckValueCode(self, operand):
|
|
979
|
+
return """\
|
|
980
|
+
CHECK_OBJECT(%(operand)s);
|
|
981
|
+
assert(%(type_name)s_CheckExact(%(operand)s));""" % {
|
|
982
|
+
"operand": operand,
|
|
983
|
+
"type_name": self.getTypeValueExpression(operand)[1:].split("_")[0],
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
@abstractmethod
|
|
987
|
+
def getTypeValueExpression(self, operand):
|
|
988
|
+
pass
|
|
989
|
+
|
|
990
|
+
@staticmethod
|
|
991
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
992
|
+
return ""
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
class ConcreteNonSequenceTypeBase(ConcreteTypeBase):
|
|
996
|
+
"""Base class for concrete types that are not sequences."""
|
|
997
|
+
|
|
998
|
+
# Base classes can be abstract, pylint: disable=abstract-method
|
|
999
|
+
|
|
1000
|
+
def getNoSequenceSlotAccessTestCode(self, type_name):
|
|
1001
|
+
"""Test if type has no sequence slots at all."""
|
|
1002
|
+
return "true"
|
|
1003
|
+
|
|
1004
|
+
|
|
1005
|
+
class ConcreteSequenceTypeBase(ConcreteTypeBase):
|
|
1006
|
+
"""Base class for concrete types that are sequences."""
|
|
1007
|
+
|
|
1008
|
+
# Base classes can be abstract, pylint: disable=abstract-method
|
|
1009
|
+
|
|
1010
|
+
def getNoSequenceSlotAccessTestCode(self, type_name):
|
|
1011
|
+
"""Test if type has no sequence slots at all."""
|
|
1012
|
+
return "false"
|
|
1013
|
+
|
|
1014
|
+
|
|
1015
|
+
class IntDesc(ConcreteNonSequenceTypeBase):
|
|
1016
|
+
type_name = "int"
|
|
1017
|
+
type_desc = "Python2 'int'"
|
|
1018
|
+
|
|
1019
|
+
python_requirement = "PYTHON_VERSION < 0x300"
|
|
1020
|
+
|
|
1021
|
+
@classmethod
|
|
1022
|
+
def getTypeValueExpression(cls, operand):
|
|
1023
|
+
return "&PyInt_Type"
|
|
1024
|
+
|
|
1025
|
+
@classmethod
|
|
1026
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1027
|
+
return "1"
|
|
1028
|
+
|
|
1029
|
+
def hasSlot(self, slot):
|
|
1030
|
+
if slot.startswith("nb_inplace"):
|
|
1031
|
+
return False
|
|
1032
|
+
elif slot.startswith("nb_"):
|
|
1033
|
+
return slot != "nb_matrix_multiply"
|
|
1034
|
+
elif slot.startswith("sq_"):
|
|
1035
|
+
return False
|
|
1036
|
+
elif slot == "tp_richcompare":
|
|
1037
|
+
return False
|
|
1038
|
+
elif slot == "tp_compare":
|
|
1039
|
+
return True
|
|
1040
|
+
else:
|
|
1041
|
+
assert False
|
|
1042
|
+
|
|
1043
|
+
@staticmethod
|
|
1044
|
+
def needsIndexConversion():
|
|
1045
|
+
return False
|
|
1046
|
+
|
|
1047
|
+
@staticmethod
|
|
1048
|
+
def getAsLongValueExpression(operand):
|
|
1049
|
+
return "PyInt_AS_LONG(%s)" % operand
|
|
1050
|
+
|
|
1051
|
+
@staticmethod
|
|
1052
|
+
def getAsObjectValueExpression(operand):
|
|
1053
|
+
return operand
|
|
1054
|
+
|
|
1055
|
+
@staticmethod
|
|
1056
|
+
def releaseAsObjectValueStatement(operand):
|
|
1057
|
+
# Virtual method, pylint: disable=unused-argument
|
|
1058
|
+
return ""
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
int_desc = IntDesc()
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
class StrDesc(ConcreteSequenceTypeBase):
|
|
1065
|
+
type_name = "str"
|
|
1066
|
+
type_desc = "Python2 'str'"
|
|
1067
|
+
|
|
1068
|
+
python_requirement = "PYTHON_VERSION < 0x300"
|
|
1069
|
+
|
|
1070
|
+
@classmethod
|
|
1071
|
+
def getTypeValueExpression(cls, operand):
|
|
1072
|
+
return "&PyString_Type"
|
|
1073
|
+
|
|
1074
|
+
@classmethod
|
|
1075
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1076
|
+
return "1"
|
|
1077
|
+
|
|
1078
|
+
def hasSlot(self, slot):
|
|
1079
|
+
if slot.startswith("nb_"):
|
|
1080
|
+
return slot == "nb_remainder"
|
|
1081
|
+
elif slot.startswith("sq_"):
|
|
1082
|
+
return "ass" not in slot and "inplace" not in slot
|
|
1083
|
+
elif slot == "tp_richcompare":
|
|
1084
|
+
return True
|
|
1085
|
+
elif slot == "tp_compare":
|
|
1086
|
+
return False
|
|
1087
|
+
else:
|
|
1088
|
+
assert False, (self, slot)
|
|
1089
|
+
|
|
1090
|
+
def hasPreferredSlot(self, right, slot):
|
|
1091
|
+
if slot == "nb_multiply":
|
|
1092
|
+
return right in (int_desc, long_desc)
|
|
1093
|
+
|
|
1094
|
+
return False
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
str_desc = StrDesc()
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
class UnicodeDesc(ConcreteSequenceTypeBase):
|
|
1101
|
+
type_name = "unicode"
|
|
1102
|
+
type_desc = "Python2 'unicode', Python3 'str'"
|
|
1103
|
+
|
|
1104
|
+
@classmethod
|
|
1105
|
+
def getTypeName3(cls):
|
|
1106
|
+
return "str"
|
|
1107
|
+
|
|
1108
|
+
@classmethod
|
|
1109
|
+
def getTypeValueExpression(cls, operand):
|
|
1110
|
+
return "&PyUnicode_Type"
|
|
1111
|
+
|
|
1112
|
+
@classmethod
|
|
1113
|
+
def getCheckValueCode(cls, operand):
|
|
1114
|
+
return """\
|
|
1115
|
+
CHECK_OBJECT(%(operand)s);
|
|
1116
|
+
assert(PyUnicode_CheckExact(%(operand)s));""" % {
|
|
1117
|
+
"operand": operand
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
@classmethod
|
|
1121
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1122
|
+
return "1"
|
|
1123
|
+
|
|
1124
|
+
def hasSlot(self, slot):
|
|
1125
|
+
if slot.startswith("nb_"):
|
|
1126
|
+
return slot == "nb_remainder"
|
|
1127
|
+
elif slot.startswith("sq_"):
|
|
1128
|
+
return "ass" not in slot and "inplace" not in slot
|
|
1129
|
+
elif slot == "tp_richcompare":
|
|
1130
|
+
return True
|
|
1131
|
+
elif slot == "tp_compare":
|
|
1132
|
+
return True
|
|
1133
|
+
else:
|
|
1134
|
+
assert False, slot
|
|
1135
|
+
|
|
1136
|
+
def hasPreferredSlot(self, right, slot):
|
|
1137
|
+
# TODO: Same applies to bytearray once we add it.
|
|
1138
|
+
if slot == "sq_concat" and right is str_desc:
|
|
1139
|
+
return True
|
|
1140
|
+
|
|
1141
|
+
if slot == "nb_multiply":
|
|
1142
|
+
return right in (int_desc, long_desc)
|
|
1143
|
+
|
|
1144
|
+
return False
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
unicode_desc = UnicodeDesc()
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
class FloatDesc(ConcreteNonSequenceTypeBase):
|
|
1151
|
+
type_name = "float"
|
|
1152
|
+
type_desc = "Python 'float'"
|
|
1153
|
+
|
|
1154
|
+
@classmethod
|
|
1155
|
+
def getTypeValueExpression(cls, operand):
|
|
1156
|
+
return "&PyFloat_Type"
|
|
1157
|
+
|
|
1158
|
+
@staticmethod
|
|
1159
|
+
def getAsDoubleValueExpression(operand):
|
|
1160
|
+
return "PyFloat_AS_DOUBLE(%s)" % operand
|
|
1161
|
+
|
|
1162
|
+
def hasSlot(self, slot):
|
|
1163
|
+
if slot.startswith("nb_inplace"):
|
|
1164
|
+
return False
|
|
1165
|
+
elif slot.startswith("nb_"):
|
|
1166
|
+
return slot != "nb_matrix_multiply"
|
|
1167
|
+
elif slot.startswith("sq_"):
|
|
1168
|
+
return False
|
|
1169
|
+
elif slot == "tp_richcompare":
|
|
1170
|
+
return True
|
|
1171
|
+
elif slot == "tp_compare":
|
|
1172
|
+
return False
|
|
1173
|
+
else:
|
|
1174
|
+
assert False, slot
|
|
1175
|
+
|
|
1176
|
+
@classmethod
|
|
1177
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1178
|
+
return "1"
|
|
1179
|
+
|
|
1180
|
+
def hasPreferredSlot(self, right, slot):
|
|
1181
|
+
if right in (int_desc, long_desc):
|
|
1182
|
+
return True
|
|
1183
|
+
|
|
1184
|
+
return False
|
|
1185
|
+
|
|
1186
|
+
|
|
1187
|
+
float_desc = FloatDesc()
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
class TupleDesc(ConcreteSequenceTypeBase):
|
|
1191
|
+
type_name = "tuple"
|
|
1192
|
+
type_desc = "Python 'tuple'"
|
|
1193
|
+
|
|
1194
|
+
@classmethod
|
|
1195
|
+
def getTypeValueExpression(cls, operand):
|
|
1196
|
+
return "&PyTuple_Type"
|
|
1197
|
+
|
|
1198
|
+
def hasSlot(self, slot):
|
|
1199
|
+
if slot.startswith("nb_"):
|
|
1200
|
+
return False
|
|
1201
|
+
elif slot.startswith("sq_"):
|
|
1202
|
+
return "ass" not in slot and "inplace" not in slot
|
|
1203
|
+
elif slot == "tp_richcompare":
|
|
1204
|
+
return True
|
|
1205
|
+
elif slot == "tp_compare":
|
|
1206
|
+
return False
|
|
1207
|
+
else:
|
|
1208
|
+
assert False, slot
|
|
1209
|
+
|
|
1210
|
+
@classmethod
|
|
1211
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1212
|
+
return "0"
|
|
1213
|
+
|
|
1214
|
+
def hasPreferredSlot(self, right, slot):
|
|
1215
|
+
if slot == "nb_multiply":
|
|
1216
|
+
return right in (int_desc, long_desc)
|
|
1217
|
+
|
|
1218
|
+
return False
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
tuple_desc = TupleDesc()
|
|
1222
|
+
|
|
1223
|
+
|
|
1224
|
+
class ListDesc(ConcreteSequenceTypeBase):
|
|
1225
|
+
type_name = "list"
|
|
1226
|
+
type_desc = "Python 'list'"
|
|
1227
|
+
|
|
1228
|
+
@classmethod
|
|
1229
|
+
def getTypeValueExpression(cls, operand):
|
|
1230
|
+
return "&PyList_Type"
|
|
1231
|
+
|
|
1232
|
+
def hasSlot(self, slot):
|
|
1233
|
+
if slot.startswith("nb_"):
|
|
1234
|
+
return False
|
|
1235
|
+
elif slot.startswith("sq_"):
|
|
1236
|
+
return True
|
|
1237
|
+
elif slot == "tp_richcompare":
|
|
1238
|
+
return True
|
|
1239
|
+
elif slot == "tp_compare":
|
|
1240
|
+
return False
|
|
1241
|
+
else:
|
|
1242
|
+
assert False, slot
|
|
1243
|
+
|
|
1244
|
+
@classmethod
|
|
1245
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1246
|
+
return "0"
|
|
1247
|
+
|
|
1248
|
+
def hasPreferredSlot(self, right, slot):
|
|
1249
|
+
if slot == "nb_multiply":
|
|
1250
|
+
return right in (int_desc, long_desc)
|
|
1251
|
+
|
|
1252
|
+
return False
|
|
1253
|
+
|
|
1254
|
+
|
|
1255
|
+
list_desc = ListDesc()
|
|
1256
|
+
|
|
1257
|
+
|
|
1258
|
+
class SetDesc(ConcreteSequenceTypeBase):
|
|
1259
|
+
type_name = "set"
|
|
1260
|
+
type_desc = "Python 'set'"
|
|
1261
|
+
|
|
1262
|
+
@classmethod
|
|
1263
|
+
def getTypeValueExpression(cls, operand):
|
|
1264
|
+
return "&PySet_Type"
|
|
1265
|
+
|
|
1266
|
+
def hasSlot(self, slot):
|
|
1267
|
+
if slot.startswith("nb_inplace_"):
|
|
1268
|
+
return slot in (
|
|
1269
|
+
"nb_inplace_subtract",
|
|
1270
|
+
"nb_inplace_and",
|
|
1271
|
+
"nb_inplace_or",
|
|
1272
|
+
"nb_inplace_xor",
|
|
1273
|
+
)
|
|
1274
|
+
elif slot.startswith("nb_"):
|
|
1275
|
+
return slot in ("nb_subtract", "nb_and", "nb_or", "nb_xor")
|
|
1276
|
+
elif slot.startswith("sq_"):
|
|
1277
|
+
return True
|
|
1278
|
+
else:
|
|
1279
|
+
assert False, slot
|
|
1280
|
+
|
|
1281
|
+
@classmethod
|
|
1282
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1283
|
+
return "0"
|
|
1284
|
+
|
|
1285
|
+
|
|
1286
|
+
set_desc = SetDesc()
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
class DictDesc(ConcreteSequenceTypeBase):
|
|
1290
|
+
type_name = "dict"
|
|
1291
|
+
type_desc = "Python 'dict'"
|
|
1292
|
+
|
|
1293
|
+
@classmethod
|
|
1294
|
+
def getTypeValueExpression(cls, operand):
|
|
1295
|
+
return "&PyDict_Type"
|
|
1296
|
+
|
|
1297
|
+
def hasSlot(self, slot):
|
|
1298
|
+
if slot.startswith("nb_"):
|
|
1299
|
+
return False
|
|
1300
|
+
elif slot.startswith("sq_"):
|
|
1301
|
+
return True
|
|
1302
|
+
else:
|
|
1303
|
+
assert False, slot
|
|
1304
|
+
|
|
1305
|
+
@classmethod
|
|
1306
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1307
|
+
return "0"
|
|
1308
|
+
|
|
1309
|
+
|
|
1310
|
+
dict_desc = DictDesc()
|
|
1311
|
+
|
|
1312
|
+
|
|
1313
|
+
class BytesDesc(ConcreteSequenceTypeBase):
|
|
1314
|
+
type_name = "bytes"
|
|
1315
|
+
type_desc = "Python3 'bytes'"
|
|
1316
|
+
|
|
1317
|
+
python_requirement = "PYTHON_VERSION >= 0x300"
|
|
1318
|
+
|
|
1319
|
+
@classmethod
|
|
1320
|
+
def getTypeValueExpression(cls, operand):
|
|
1321
|
+
return "&PyBytes_Type"
|
|
1322
|
+
|
|
1323
|
+
def hasSlot(self, slot):
|
|
1324
|
+
if slot.startswith("nb_"):
|
|
1325
|
+
return slot == "nb_remainder"
|
|
1326
|
+
elif slot.startswith("sq_"):
|
|
1327
|
+
return "ass" not in slot and slot != "sq_slice" and "inplace" not in slot
|
|
1328
|
+
elif slot == "tp_richcompare":
|
|
1329
|
+
return True
|
|
1330
|
+
elif slot == "tp_compare":
|
|
1331
|
+
return False
|
|
1332
|
+
else:
|
|
1333
|
+
assert False, slot
|
|
1334
|
+
|
|
1335
|
+
@classmethod
|
|
1336
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1337
|
+
return "0"
|
|
1338
|
+
|
|
1339
|
+
def hasPreferredSlot(self, right, slot):
|
|
1340
|
+
if slot == "nb_multiply":
|
|
1341
|
+
return right in (int_desc, long_desc)
|
|
1342
|
+
|
|
1343
|
+
return False
|
|
1344
|
+
|
|
1345
|
+
|
|
1346
|
+
bytes_desc = BytesDesc()
|
|
1347
|
+
|
|
1348
|
+
|
|
1349
|
+
class LongDesc(ConcreteNonSequenceTypeBase):
|
|
1350
|
+
type_name = "long"
|
|
1351
|
+
type_desc = "Python2 'long', Python3 'int'"
|
|
1352
|
+
|
|
1353
|
+
@classmethod
|
|
1354
|
+
def getTypeName3(cls):
|
|
1355
|
+
return "int"
|
|
1356
|
+
|
|
1357
|
+
@classmethod
|
|
1358
|
+
def getTypeValueExpression(cls, operand):
|
|
1359
|
+
return "&PyLong_Type"
|
|
1360
|
+
|
|
1361
|
+
def hasSlot(self, slot):
|
|
1362
|
+
if slot.startswith("nb_inplace_"):
|
|
1363
|
+
return False
|
|
1364
|
+
elif slot.startswith("nb_"):
|
|
1365
|
+
return slot != "nb_matrix_multiply"
|
|
1366
|
+
elif slot.startswith("sq_"):
|
|
1367
|
+
return False
|
|
1368
|
+
elif slot == "tp_richcompare":
|
|
1369
|
+
assert False
|
|
1370
|
+
# For Python3 it's there though
|
|
1371
|
+
return False
|
|
1372
|
+
elif slot == "tp_compare":
|
|
1373
|
+
# For Python2 it's tp_compare though
|
|
1374
|
+
return True
|
|
1375
|
+
else:
|
|
1376
|
+
assert False, slot
|
|
1377
|
+
|
|
1378
|
+
def getSlotValueExpression(self, operand, slot):
|
|
1379
|
+
# Python2 long does have "tp_compare", Python3 does have "tp_richcompare",
|
|
1380
|
+
# therefore create code that makes this a conditional expression on the
|
|
1381
|
+
# Python version
|
|
1382
|
+
if slot == "tp_richcompare":
|
|
1383
|
+
return "(PYTHON_VERSION < 0x300 ? NULL : PyLong_Type.tp_richcompare)"
|
|
1384
|
+
|
|
1385
|
+
return ConcreteTypeBase.getSlotValueExpression(self, operand=operand, slot=slot)
|
|
1386
|
+
|
|
1387
|
+
@classmethod
|
|
1388
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1389
|
+
return "1"
|
|
1390
|
+
|
|
1391
|
+
@staticmethod
|
|
1392
|
+
def needsIndexConversion():
|
|
1393
|
+
return False
|
|
1394
|
+
|
|
1395
|
+
def hasPreferredSlot(self, right, slot):
|
|
1396
|
+
if right is int_desc:
|
|
1397
|
+
return True
|
|
1398
|
+
|
|
1399
|
+
return False
|
|
1400
|
+
|
|
1401
|
+
@staticmethod
|
|
1402
|
+
def getLongValueSizeExpression(operand):
|
|
1403
|
+
return "Nuitka_LongGetSignedDigitSize(%s_long_object)" % operand
|
|
1404
|
+
|
|
1405
|
+
@staticmethod
|
|
1406
|
+
def getLongValueIsNegativeTestExpression(operand):
|
|
1407
|
+
return "Nuitka_LongIsNegative(%s_long_object)" % operand
|
|
1408
|
+
|
|
1409
|
+
@staticmethod
|
|
1410
|
+
def getLongValueDigitCountExpression(operand):
|
|
1411
|
+
return "Nuitka_LongGetDigitSize(%s_long_object)" % operand
|
|
1412
|
+
|
|
1413
|
+
@staticmethod
|
|
1414
|
+
def getLongValueDigitExpression(operand, index):
|
|
1415
|
+
return "Nuitka_LongGetDigitPointer(%s_long_object)[%s]" % (operand, index)
|
|
1416
|
+
|
|
1417
|
+
@staticmethod
|
|
1418
|
+
def getLongValueDigitsPointerExpression(operand):
|
|
1419
|
+
return "Nuitka_LongGetDigitPointer(%s_long_object)" % operand
|
|
1420
|
+
|
|
1421
|
+
@staticmethod
|
|
1422
|
+
def getLongValueMediumValueExpression(operand):
|
|
1423
|
+
return "MEDIUM_VALUE(%s_long_object)" % (operand)
|
|
1424
|
+
|
|
1425
|
+
|
|
1426
|
+
long_desc = LongDesc()
|
|
1427
|
+
|
|
1428
|
+
|
|
1429
|
+
class ObjectDesc(TypeDescBase):
|
|
1430
|
+
type_name = "object"
|
|
1431
|
+
type_desc = "any Python object"
|
|
1432
|
+
type_decl = "PyObject *"
|
|
1433
|
+
|
|
1434
|
+
def hasSlot(self, slot):
|
|
1435
|
+
# Don't want to get asked, we cannot know.
|
|
1436
|
+
assert False
|
|
1437
|
+
|
|
1438
|
+
def getIndexCheckExpression(self, operand):
|
|
1439
|
+
return "Nuitka_Index_Check(%s)" % operand
|
|
1440
|
+
|
|
1441
|
+
def getNewStyleNumberTypeCheckExpression(self, operand):
|
|
1442
|
+
return "NEW_STYLE_NUMBER_TYPE(%s)" % operand
|
|
1443
|
+
|
|
1444
|
+
def getSlotValueExpression(self, operand, slot):
|
|
1445
|
+
# Always check.
|
|
1446
|
+
return self._getSlotValueExpression(operand, slot)
|
|
1447
|
+
|
|
1448
|
+
def getSlotValueCheckExpression(self, operand, slot):
|
|
1449
|
+
return "(%s) != NULL" % self._getSlotValueExpression(operand, slot)
|
|
1450
|
+
|
|
1451
|
+
@staticmethod
|
|
1452
|
+
def getToValueFromBoolExpression(operand):
|
|
1453
|
+
return "BOOL_FROM(%s)" % operand
|
|
1454
|
+
|
|
1455
|
+
@staticmethod
|
|
1456
|
+
def getToValueFromObjectExpression(operand):
|
|
1457
|
+
return operand
|
|
1458
|
+
|
|
1459
|
+
@staticmethod
|
|
1460
|
+
def getExceptionResultIndicatorValue():
|
|
1461
|
+
return "NULL"
|
|
1462
|
+
|
|
1463
|
+
def getNoSequenceSlotAccessTestCode(self, type_name):
|
|
1464
|
+
return "%s->tp_as_sequence == NULL" % type_name
|
|
1465
|
+
|
|
1466
|
+
@classmethod
|
|
1467
|
+
def getDualValidityCheckCode(cls, value_choice, operand):
|
|
1468
|
+
# Virtual method, pylint: disable=unused-argument
|
|
1469
|
+
assert value_choice == "C", value_choice
|
|
1470
|
+
return "false"
|
|
1471
|
+
|
|
1472
|
+
|
|
1473
|
+
object_desc = ObjectDesc()
|
|
1474
|
+
|
|
1475
|
+
|
|
1476
|
+
class ConcreteCTypeBase(TypeDescBase):
|
|
1477
|
+
"""Base class for non-Python (C) concrete types."""
|
|
1478
|
+
|
|
1479
|
+
def hasSlot(self, slot):
|
|
1480
|
+
return False
|
|
1481
|
+
|
|
1482
|
+
def getNoSequenceSlotAccessTestCode(self, type_name):
|
|
1483
|
+
assert False, self
|
|
1484
|
+
|
|
1485
|
+
def getNewStyleNumberTypeCheckExpression(self, operand):
|
|
1486
|
+
# We don't have that.
|
|
1487
|
+
assert False, self
|
|
1488
|
+
|
|
1489
|
+
@classmethod
|
|
1490
|
+
def hasReferenceCounting(cls):
|
|
1491
|
+
return False
|
|
1492
|
+
|
|
1493
|
+
@staticmethod
|
|
1494
|
+
def hasPreferredSlot(right, slot):
|
|
1495
|
+
return False
|
|
1496
|
+
|
|
1497
|
+
@classmethod
|
|
1498
|
+
def isDualType(cls):
|
|
1499
|
+
return False
|
|
1500
|
+
|
|
1501
|
+
@classmethod
|
|
1502
|
+
def getDualValidityCheckCode(cls, value_choice, operand):
|
|
1503
|
+
# Virtual method, pylint: disable=unused-argument
|
|
1504
|
+
assert value_choice == "C", value_choice
|
|
1505
|
+
return "true"
|
|
1506
|
+
|
|
1507
|
+
def getDualType(self, value_choice):
|
|
1508
|
+
assert value_choice == "C", value_choice
|
|
1509
|
+
return self
|
|
1510
|
+
|
|
1511
|
+
@classmethod
|
|
1512
|
+
def getDualTypeAccessCode(cls, value_choice, operand):
|
|
1513
|
+
assert value_choice == "C", (value_choice, cls)
|
|
1514
|
+
return operand
|
|
1515
|
+
|
|
1516
|
+
|
|
1517
|
+
class CLongDesc(ConcreteCTypeBase):
|
|
1518
|
+
type_name = "clong"
|
|
1519
|
+
type_desc = "C platform long value"
|
|
1520
|
+
type_decl = "long"
|
|
1521
|
+
|
|
1522
|
+
@classmethod
|
|
1523
|
+
def getCheckValueCode(cls, operand):
|
|
1524
|
+
return ""
|
|
1525
|
+
|
|
1526
|
+
@classmethod
|
|
1527
|
+
def getTypeValueExpression(cls, operand):
|
|
1528
|
+
return "NULL"
|
|
1529
|
+
|
|
1530
|
+
@classmethod
|
|
1531
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1532
|
+
return "0"
|
|
1533
|
+
|
|
1534
|
+
@staticmethod
|
|
1535
|
+
def getAsLongValueExpression(operand):
|
|
1536
|
+
return operand
|
|
1537
|
+
|
|
1538
|
+
@staticmethod
|
|
1539
|
+
def getAsObjectValueExpression(operand):
|
|
1540
|
+
return "Nuitka_PyLong_FromLong(%s)" % operand
|
|
1541
|
+
|
|
1542
|
+
@staticmethod
|
|
1543
|
+
def releaseAsObjectValueStatement(operand):
|
|
1544
|
+
return "Py_DECREF(%s);" % operand
|
|
1545
|
+
|
|
1546
|
+
@staticmethod
|
|
1547
|
+
def getLongValueSizeExpression(operand):
|
|
1548
|
+
return "%s_size" % operand
|
|
1549
|
+
|
|
1550
|
+
@staticmethod
|
|
1551
|
+
def getLongValueIsNegativeTestExpression(operand):
|
|
1552
|
+
return "%s_is_negative" % operand
|
|
1553
|
+
|
|
1554
|
+
@staticmethod
|
|
1555
|
+
def getLongValueDigitCountExpression(operand):
|
|
1556
|
+
return "%s_digit_count" % operand
|
|
1557
|
+
|
|
1558
|
+
@staticmethod
|
|
1559
|
+
def getLongValueDigitExpression(operand, index):
|
|
1560
|
+
return "%s_digits[%s]" % (operand, index)
|
|
1561
|
+
|
|
1562
|
+
@staticmethod
|
|
1563
|
+
def getLongValueDigitsPointerExpression(operand):
|
|
1564
|
+
return "%s_digits" % operand
|
|
1565
|
+
|
|
1566
|
+
@staticmethod
|
|
1567
|
+
def getLongValueMediumValueExpression(operand):
|
|
1568
|
+
# spell-checker: disable=sdigit
|
|
1569
|
+
return "(sdigit)%s" % (operand)
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
c_long_desc = CLongDesc()
|
|
1573
|
+
|
|
1574
|
+
|
|
1575
|
+
class CDigitDesc(CLongDesc):
|
|
1576
|
+
type_name = "digit"
|
|
1577
|
+
type_desc = "C platform digit value for long Python objects"
|
|
1578
|
+
type_decl = "long"
|
|
1579
|
+
|
|
1580
|
+
@classmethod
|
|
1581
|
+
def getCheckValueCode(cls, operand):
|
|
1582
|
+
return "assert(Py_ABS(%s) < (1 << PyLong_SHIFT));" % operand
|
|
1583
|
+
|
|
1584
|
+
@staticmethod
|
|
1585
|
+
def getAsLongValueExpression(operand):
|
|
1586
|
+
return "(long)(%s)" % operand
|
|
1587
|
+
|
|
1588
|
+
@staticmethod
|
|
1589
|
+
def getLongValueDigitCountExpression(operand):
|
|
1590
|
+
# Can be 0 or 1.
|
|
1591
|
+
return "(%s == 0 ? 0 : 1)" % operand
|
|
1592
|
+
|
|
1593
|
+
@staticmethod
|
|
1594
|
+
def getLongValueSizeExpression(operand):
|
|
1595
|
+
return (
|
|
1596
|
+
"(Py_ssize_t)((%(operand)s == 0) ? 0 : ((%(operand)s < 0 ) ? -1 : 1))"
|
|
1597
|
+
% {"operand": operand}
|
|
1598
|
+
)
|
|
1599
|
+
|
|
1600
|
+
@staticmethod
|
|
1601
|
+
def getLongValueIsNegativeTestExpression(operand):
|
|
1602
|
+
return "%s < 0" % operand
|
|
1603
|
+
|
|
1604
|
+
@staticmethod
|
|
1605
|
+
def getLongValueDigitExpression(operand, index):
|
|
1606
|
+
return "(digit)Py_ABS(%s)" % operand
|
|
1607
|
+
|
|
1608
|
+
@staticmethod
|
|
1609
|
+
def getLongValueDigitsPointerExpression(operand):
|
|
1610
|
+
return "(digit *)&%s" % operand
|
|
1611
|
+
|
|
1612
|
+
|
|
1613
|
+
c_digit_desc = CDigitDesc()
|
|
1614
|
+
|
|
1615
|
+
|
|
1616
|
+
class CBoolDesc(ConcreteCTypeBase):
|
|
1617
|
+
type_name = "cbool"
|
|
1618
|
+
type_desc = "C platform bool value"
|
|
1619
|
+
type_decl = "bool"
|
|
1620
|
+
|
|
1621
|
+
@classmethod
|
|
1622
|
+
def getCheckValueCode(cls, operand):
|
|
1623
|
+
return ""
|
|
1624
|
+
|
|
1625
|
+
@classmethod
|
|
1626
|
+
def getTypeValueExpression(cls, operand):
|
|
1627
|
+
return "NULL"
|
|
1628
|
+
|
|
1629
|
+
@classmethod
|
|
1630
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1631
|
+
return "0"
|
|
1632
|
+
|
|
1633
|
+
@staticmethod
|
|
1634
|
+
def getAsLongValueExpression(operand):
|
|
1635
|
+
return operand
|
|
1636
|
+
|
|
1637
|
+
@staticmethod
|
|
1638
|
+
def getAsObjectValueExpression(operand):
|
|
1639
|
+
return "BOOL_FROM(%s)" % operand
|
|
1640
|
+
|
|
1641
|
+
@staticmethod
|
|
1642
|
+
def getToValueFromBoolExpression(operand):
|
|
1643
|
+
return operand
|
|
1644
|
+
|
|
1645
|
+
@staticmethod
|
|
1646
|
+
def getToValueFromObjectExpression(operand):
|
|
1647
|
+
return "CHECK_IF_TRUE(%s) == 1" % operand
|
|
1648
|
+
|
|
1649
|
+
@staticmethod
|
|
1650
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
1651
|
+
return ""
|
|
1652
|
+
|
|
1653
|
+
@staticmethod
|
|
1654
|
+
def getExceptionResultIndicatorValue():
|
|
1655
|
+
return "false"
|
|
1656
|
+
|
|
1657
|
+
|
|
1658
|
+
c_bool_desc = CBoolDesc()
|
|
1659
|
+
|
|
1660
|
+
|
|
1661
|
+
class NBoolDesc(ConcreteCTypeBase):
|
|
1662
|
+
type_name = "nbool"
|
|
1663
|
+
type_desc = "Nuitka C bool value"
|
|
1664
|
+
type_decl = "nuitka_bool"
|
|
1665
|
+
|
|
1666
|
+
@classmethod
|
|
1667
|
+
def getCheckValueCode(cls, operand):
|
|
1668
|
+
return ""
|
|
1669
|
+
|
|
1670
|
+
@classmethod
|
|
1671
|
+
def getTypeValueExpression(cls, operand):
|
|
1672
|
+
return "NULL"
|
|
1673
|
+
|
|
1674
|
+
@classmethod
|
|
1675
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1676
|
+
return "0"
|
|
1677
|
+
|
|
1678
|
+
@staticmethod
|
|
1679
|
+
def getAsLongValueExpression(operand):
|
|
1680
|
+
return operand
|
|
1681
|
+
|
|
1682
|
+
@staticmethod
|
|
1683
|
+
def getAsObjectValueExpression(operand):
|
|
1684
|
+
return "BOOL_FROM(%s)" % operand
|
|
1685
|
+
|
|
1686
|
+
@staticmethod
|
|
1687
|
+
def getToValueFromBoolExpression(operand):
|
|
1688
|
+
return "%s ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE" % operand
|
|
1689
|
+
|
|
1690
|
+
@classmethod
|
|
1691
|
+
def getToValueFromObjectExpression(cls, operand):
|
|
1692
|
+
# TODO: Seems wrong, int return values only happen to match nuitka_bool here
|
|
1693
|
+
return cls.getToValueFromBoolExpression("CHECK_IF_TRUE(%s)" % operand)
|
|
1694
|
+
|
|
1695
|
+
@staticmethod
|
|
1696
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
1697
|
+
return ""
|
|
1698
|
+
|
|
1699
|
+
@staticmethod
|
|
1700
|
+
def getExceptionResultIndicatorValue():
|
|
1701
|
+
return "NUITKA_BOOL_EXCEPTION"
|
|
1702
|
+
|
|
1703
|
+
|
|
1704
|
+
n_bool_desc = NBoolDesc()
|
|
1705
|
+
|
|
1706
|
+
|
|
1707
|
+
class DualTypeBase(ConcreteCTypeBase):
|
|
1708
|
+
@classmethod
|
|
1709
|
+
def getDualValidityCheckCode(cls, value_choice, operand):
|
|
1710
|
+
if value_choice == "C":
|
|
1711
|
+
helper = "IS_%s_C_VALUE_VALID" % cls.type_name.upper()
|
|
1712
|
+
elif value_choice == "Python":
|
|
1713
|
+
helper = "IS_%s_OBJECT_VALUE_VALID" % cls.type_name.upper()
|
|
1714
|
+
else:
|
|
1715
|
+
assert False
|
|
1716
|
+
|
|
1717
|
+
return "%s(%s)" % (helper, operand)
|
|
1718
|
+
|
|
1719
|
+
@classmethod
|
|
1720
|
+
def getDualType(cls, value_choice):
|
|
1721
|
+
if value_choice == "C":
|
|
1722
|
+
return cls.type_dual_types[1]
|
|
1723
|
+
elif value_choice == "Python":
|
|
1724
|
+
return cls.type_dual_types[0]
|
|
1725
|
+
else:
|
|
1726
|
+
assert False
|
|
1727
|
+
|
|
1728
|
+
@classmethod
|
|
1729
|
+
def getDualTypeAccessCode(cls, value_choice, operand):
|
|
1730
|
+
if value_choice == "C":
|
|
1731
|
+
return "%s->c_value" % operand
|
|
1732
|
+
elif value_choice == "Python":
|
|
1733
|
+
return "%s->python_value" % operand
|
|
1734
|
+
else:
|
|
1735
|
+
assert False
|
|
1736
|
+
|
|
1737
|
+
@classmethod
|
|
1738
|
+
def getSetDualValueCode(cls, value_choice, target, value):
|
|
1739
|
+
if value_choice == "C":
|
|
1740
|
+
helper = "SET_%s_C_VALUE" % cls.type_name.upper()
|
|
1741
|
+
elif value_choice == "Python":
|
|
1742
|
+
helper = "SET_%s_OBJECT_VALUE" % cls.type_name.upper()
|
|
1743
|
+
else:
|
|
1744
|
+
assert False
|
|
1745
|
+
|
|
1746
|
+
return "%s(%s, %s);" % (helper, target, value)
|
|
1747
|
+
|
|
1748
|
+
@classmethod
|
|
1749
|
+
def isDualType(cls):
|
|
1750
|
+
return True
|
|
1751
|
+
|
|
1752
|
+
@classmethod
|
|
1753
|
+
def getDualTypeEnsurePythonObjectCode(cls, operand):
|
|
1754
|
+
return "ENFORCE_%s_OBJECT_VALUE(%s);" % (cls.type_name.upper(), operand)
|
|
1755
|
+
|
|
1756
|
+
|
|
1757
|
+
class NILongDesc(DualTypeBase):
|
|
1758
|
+
type_name = "nilong"
|
|
1759
|
+
type_desc = "Nuitka int/long/C long value"
|
|
1760
|
+
type_decl = "nuitka_ilong *"
|
|
1761
|
+
|
|
1762
|
+
type_dual_types = long_desc, c_long_desc
|
|
1763
|
+
|
|
1764
|
+
@classmethod
|
|
1765
|
+
def getCheckValueCode(cls, operand):
|
|
1766
|
+
return "CHECK_NILONG_OBJECT(%s);" % operand
|
|
1767
|
+
|
|
1768
|
+
@classmethod
|
|
1769
|
+
def getTypeValueExpression(cls, operand):
|
|
1770
|
+
assert False
|
|
1771
|
+
return "NULL"
|
|
1772
|
+
|
|
1773
|
+
@classmethod
|
|
1774
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1775
|
+
return "0"
|
|
1776
|
+
|
|
1777
|
+
@staticmethod
|
|
1778
|
+
def getAsLongValueExpression(operand):
|
|
1779
|
+
return "GET_NILONG_C_VALUE(%s)" % operand
|
|
1780
|
+
|
|
1781
|
+
@staticmethod
|
|
1782
|
+
def getAsObjectValueExpression(operand):
|
|
1783
|
+
return "GET_NILONG_OBJECT_VALUE(%s)" % operand
|
|
1784
|
+
|
|
1785
|
+
@staticmethod
|
|
1786
|
+
def getToValueFromBoolExpression(operand):
|
|
1787
|
+
assert False
|
|
1788
|
+
return "%s ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE" % operand
|
|
1789
|
+
|
|
1790
|
+
@classmethod
|
|
1791
|
+
def getToValueFromObjectExpression(cls, operand):
|
|
1792
|
+
# TODO: Seems wrong, int return values only happen to match nuitka_bool here
|
|
1793
|
+
return cls.getToValueFromBoolExpression("CHECK_IF_TRUE(%s)" % operand)
|
|
1794
|
+
|
|
1795
|
+
@staticmethod
|
|
1796
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
1797
|
+
assert False
|
|
1798
|
+
return ""
|
|
1799
|
+
|
|
1800
|
+
@staticmethod
|
|
1801
|
+
def getExceptionResultIndicatorValue():
|
|
1802
|
+
assert False
|
|
1803
|
+
return "NUITKA_BOOL_EXCEPTION"
|
|
1804
|
+
|
|
1805
|
+
|
|
1806
|
+
n_ilong_desc = NILongDesc()
|
|
1807
|
+
|
|
1808
|
+
|
|
1809
|
+
class NVoidDesc(ConcreteCTypeBase):
|
|
1810
|
+
type_name = "nvoid"
|
|
1811
|
+
type_desc = "Nuitka C void value"
|
|
1812
|
+
type_decl = "nuitka_void"
|
|
1813
|
+
|
|
1814
|
+
@classmethod
|
|
1815
|
+
def getCheckValueCode(cls, operand):
|
|
1816
|
+
return ""
|
|
1817
|
+
|
|
1818
|
+
@classmethod
|
|
1819
|
+
def getTypeValueExpression(cls, operand):
|
|
1820
|
+
return "NULL"
|
|
1821
|
+
|
|
1822
|
+
@classmethod
|
|
1823
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1824
|
+
return "0"
|
|
1825
|
+
|
|
1826
|
+
@staticmethod
|
|
1827
|
+
def getAsLongValueExpression(operand):
|
|
1828
|
+
assert False
|
|
1829
|
+
|
|
1830
|
+
return operand
|
|
1831
|
+
|
|
1832
|
+
@staticmethod
|
|
1833
|
+
def getAsObjectValueExpression(operand):
|
|
1834
|
+
assert False
|
|
1835
|
+
|
|
1836
|
+
return "BOOL_FROM(%s)" % operand
|
|
1837
|
+
|
|
1838
|
+
@staticmethod
|
|
1839
|
+
def getToValueFromBoolExpression(operand):
|
|
1840
|
+
# All values are the same, pylint: disable=unused-argument
|
|
1841
|
+
return "NUITKA_VOID_OK"
|
|
1842
|
+
|
|
1843
|
+
@classmethod
|
|
1844
|
+
def getToValueFromObjectExpression(cls, operand):
|
|
1845
|
+
# All values are the same, pylint: disable=unused-argument
|
|
1846
|
+
return "NUITKA_VOID_OK"
|
|
1847
|
+
|
|
1848
|
+
@staticmethod
|
|
1849
|
+
def getTakeReferenceStatement(operand, immortal):
|
|
1850
|
+
return ""
|
|
1851
|
+
|
|
1852
|
+
@staticmethod
|
|
1853
|
+
def getExceptionResultIndicatorValue():
|
|
1854
|
+
return "NUITKA_VOID_EXCEPTION"
|
|
1855
|
+
|
|
1856
|
+
|
|
1857
|
+
nvoid_desc = NVoidDesc()
|
|
1858
|
+
|
|
1859
|
+
|
|
1860
|
+
class CFloatDesc(ConcreteCTypeBase):
|
|
1861
|
+
type_name = "cfloat"
|
|
1862
|
+
type_desc = "C platform float value"
|
|
1863
|
+
type_decl = "double"
|
|
1864
|
+
|
|
1865
|
+
@classmethod
|
|
1866
|
+
def getCheckValueCode(cls, operand):
|
|
1867
|
+
return ""
|
|
1868
|
+
|
|
1869
|
+
@classmethod
|
|
1870
|
+
def getTypeValueExpression(cls, operand):
|
|
1871
|
+
return "NULL"
|
|
1872
|
+
|
|
1873
|
+
@classmethod
|
|
1874
|
+
def getNewStyleNumberTypeCheckExpression(cls, operand):
|
|
1875
|
+
return "0"
|
|
1876
|
+
|
|
1877
|
+
@staticmethod
|
|
1878
|
+
def getAsLongValueExpression(operand):
|
|
1879
|
+
return operand
|
|
1880
|
+
|
|
1881
|
+
@staticmethod
|
|
1882
|
+
def getAsDoubleValueExpression(operand):
|
|
1883
|
+
return operand
|
|
1884
|
+
|
|
1885
|
+
@staticmethod
|
|
1886
|
+
def getAsObjectValueExpression(operand):
|
|
1887
|
+
return "MAKE_FLOAT_FROM_DOUBLE(%s)" % operand
|
|
1888
|
+
|
|
1889
|
+
@staticmethod
|
|
1890
|
+
def releaseAsObjectValueStatement(operand):
|
|
1891
|
+
return "Py_DECREF(%s);" % operand
|
|
1892
|
+
|
|
1893
|
+
|
|
1894
|
+
c_float_desc = CFloatDesc()
|
|
1895
|
+
|
|
1896
|
+
|
|
1897
|
+
related_types = {}
|
|
1898
|
+
|
|
1899
|
+
|
|
1900
|
+
def _addRelatedTypes(type_desc_1, type_desc_2):
|
|
1901
|
+
if type_desc_1 not in related_types:
|
|
1902
|
+
related_types[type_desc_1] = set()
|
|
1903
|
+
if type_desc_2 not in related_types:
|
|
1904
|
+
related_types[type_desc_2] = set()
|
|
1905
|
+
|
|
1906
|
+
related_types[type_desc_1].add(type_desc_2)
|
|
1907
|
+
related_types[type_desc_2].add(type_desc_1)
|
|
1908
|
+
|
|
1909
|
+
|
|
1910
|
+
_addRelatedTypes(int_desc, c_long_desc)
|
|
1911
|
+
_addRelatedTypes(long_desc, c_digit_desc)
|
|
1912
|
+
_addRelatedTypes(long_desc, c_long_desc)
|
|
1913
|
+
_addRelatedTypes(float_desc, c_float_desc)
|
|
1914
|
+
|
|
1915
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1916
|
+
# integrates with CPython, but also works on its own.
|
|
1917
|
+
#
|
|
1918
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
1919
|
+
# you may not use this file except in compliance with the License.
|
|
1920
|
+
# You may obtain a copy of the License at
|
|
1921
|
+
#
|
|
1922
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
1923
|
+
#
|
|
1924
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
1925
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
1926
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1927
|
+
# See the License for the specific language governing permissions and
|
|
1928
|
+
# limitations under the License.
|