Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-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.

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,33 +1,34 @@
1
- # Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- #
3
- # Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- # integrates with CPython, but also works on its own.
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
1
+ # Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
18
4
  # We are not avoiding these in generated code at all
19
- # pylint: disable=I0021,too-many-lines
20
- # pylint: disable=I0021,line-too-long
21
- # pylint: disable=I0021,too-many-instance-attributes
22
- # pylint: disable=I0021,too-many-return-statements
5
+ # pylint: disable=I0021,line-too-long,too-many-instance-attributes,too-many-lines
6
+ # pylint: disable=I0021,too-many-arguments,too-many-return-statements,too-many-statements
23
7
 
24
8
 
25
9
  """Children having mixins
26
10
 
27
11
  WARNING, this code is GENERATED. Modify the template ChildrenHavingMixin.py.j2 instead!
28
12
 
29
- spell-checker: ignore append capitalize casefold center clear copy count decode encode endswith expandtabs extend find format formatmap fromkeys get haskey index insert isalnum isalpha isascii isdecimal isdigit isidentifier islower isnumeric isprintable isspace istitle isupper items iteritems iterkeys itervalues join keys ljust lower lstrip maketrans partition pop popitem prepare remove replace reverse rfind rindex rjust rpartition rsplit rstrip setdefault sort split splitlines startswith strip swapcase title translate update upper values viewitems viewkeys viewvalues zfill
30
- spell-checker: ignore args chars count default delete encoding end errors fillchar index item iterable keepends key kwargs maxsplit new old pairs prefix sep start stop sub suffix table tabsize value width
13
+ spell-checker: ignore __prepare__ append args autograph capitalize casefold center chars
14
+ spell-checker: ignore clear copy count decode default delete dist distribution_name encode
15
+ spell-checker: ignore encoding end endswith errors exit_code expandtabs
16
+ spell-checker: ignore experimental_attributes experimental_autograph_options
17
+ spell-checker: ignore experimental_compile experimental_follow_type_hints
18
+ spell-checker: ignore experimental_implements experimental_relax_shapes extend fillchar
19
+ spell-checker: ignore find format format_map formatmap fromkeys func get group handle
20
+ spell-checker: ignore has_key haskey index input_signature insert isalnum isalpha isascii
21
+ spell-checker: ignore isdecimal isdigit isidentifier islower isnumeric isprintable isspace
22
+ spell-checker: ignore istitle isupper item items iterable iteritems iterkeys itervalues
23
+ spell-checker: ignore jit_compile join keepends key keys kwargs ljust lower lstrip
24
+ spell-checker: ignore maketrans maxsplit mode name new old p package
25
+ spell-checker: ignore package_or_requirement pairs partition path pop popitem prefix
26
+ spell-checker: ignore prepare reduce_retracing remove replace resource resource_name
27
+ spell-checker: ignore reverse rfind rindex rjust rpartition rsplit rstrip s sep setdefault
28
+ spell-checker: ignore sort split splitlines start startswith stop strip sub suffix
29
+ spell-checker: ignore swapcase table tabsize title translate update upper use_errno
30
+ spell-checker: ignore use_last_error value values viewitems viewkeys viewvalues width
31
+ spell-checker: ignore winmode zfill
31
32
  """
32
33
 
33
34
 
@@ -47,6 +48,7 @@ class ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin(object
47
48
 
48
49
  # This is generated for use in
49
50
  # CompiledPythonModule
51
+ # CompiledPythonNamespacePackage
50
52
  # CompiledPythonPackage
51
53
  # PythonMainModule
52
54
 
@@ -141,9 +143,9 @@ class ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin(object
141
143
  """
142
144
 
143
145
  values = {
144
- "body": self.subnode_body.makeClone()
145
- if self.subnode_body is not None
146
- else None,
146
+ "body": (
147
+ self.subnode_body.makeClone() if self.subnode_body is not None else None
148
+ ),
147
149
  "functions": tuple(v.makeClone() for v in self.subnode_functions),
148
150
  }
149
151
 
@@ -176,6 +178,9 @@ class ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin(object
176
178
  ChildrenCompiledPythonModuleMixin = (
177
179
  ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin
178
180
  )
181
+ ChildrenCompiledPythonNamespacePackageMixin = (
182
+ ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin
183
+ )
179
184
  ChildrenCompiledPythonPackageMixin = (
180
185
  ModuleChildrenHavingBodyOptionalStatementsOrNoneFunctionsTupleMixin
181
186
  )
@@ -281,8 +286,9 @@ class ChildHavingBodyOptionalMixin(object):
281
286
 
282
287
  # This is generated for use in
283
288
  # ExpressionAsyncgenObjectBody
284
- # ExpressionClassBodyP2
285
- # ExpressionClassBodyP3
289
+ # ExpressionClassDictBody
290
+ # ExpressionClassDictBodyP2
291
+ # ExpressionClassMappingBody
286
292
  # ExpressionCoroutineObjectBody
287
293
  # ExpressionFunctionBody
288
294
  # ExpressionFunctionPureBody
@@ -343,9 +349,9 @@ class ChildHavingBodyOptionalMixin(object):
343
349
  """
344
350
 
345
351
  values = {
346
- "body": self.subnode_body.makeClone()
347
- if self.subnode_body is not None
348
- else None,
352
+ "body": (
353
+ self.subnode_body.makeClone() if self.subnode_body is not None else None
354
+ ),
349
355
  }
350
356
 
351
357
  values.update(self.getDetails())
@@ -395,8 +401,9 @@ class ChildHavingBodyOptionalMixin(object):
395
401
 
396
402
  # Assign the names that are easier to import with a stable name.
397
403
  ChildrenExpressionAsyncgenObjectBodyMixin = ChildHavingBodyOptionalMixin
398
- ChildrenExpressionClassBodyP2Mixin = ChildHavingBodyOptionalMixin
399
- ChildrenExpressionClassBodyP3Mixin = ChildHavingBodyOptionalMixin
404
+ ChildrenExpressionClassDictBodyMixin = ChildHavingBodyOptionalMixin
405
+ ChildrenExpressionClassDictBodyP2Mixin = ChildHavingBodyOptionalMixin
406
+ ChildrenExpressionClassMappingBodyMixin = ChildHavingBodyOptionalMixin
400
407
  ChildrenExpressionCoroutineObjectBodyMixin = ChildHavingBodyOptionalMixin
401
408
  ChildrenExpressionFunctionBodyMixin = ChildHavingBodyOptionalMixin
402
409
  ChildrenExpressionFunctionPureBodyMixin = ChildHavingBodyOptionalMixin
@@ -4828,12 +4835,16 @@ class ChildrenHavingDefaultsTupleKwDefaultsOptionalAnnotationsOptionalFunctionRe
4828
4835
 
4829
4836
  values = {
4830
4837
  "defaults": tuple(v.makeClone() for v in self.subnode_defaults),
4831
- "kw_defaults": self.subnode_kw_defaults.makeClone()
4832
- if self.subnode_kw_defaults is not None
4833
- else None,
4834
- "annotations": self.subnode_annotations.makeClone()
4835
- if self.subnode_annotations is not None
4836
- else None,
4838
+ "kw_defaults": (
4839
+ self.subnode_kw_defaults.makeClone()
4840
+ if self.subnode_kw_defaults is not None
4841
+ else None
4842
+ ),
4843
+ "annotations": (
4844
+ self.subnode_annotations.makeClone()
4845
+ if self.subnode_annotations is not None
4846
+ else None
4847
+ ),
4837
4848
  "function_ref": self.subnode_function_ref.makeClone(),
4838
4849
  }
4839
4850
 
@@ -6068,7 +6079,7 @@ ChildrenExpressionMakeSetLiteralMixin = ChildHavingElementsTupleMixin
6068
6079
  ChildrenExpressionMakeTupleMixin = ChildHavingElementsTupleMixin
6069
6080
 
6070
6081
 
6071
- class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6082
+ class ChildHavingExceptionTypeMixin(object):
6072
6083
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6073
6084
  __slots__ = ()
6074
6085
 
@@ -6078,23 +6089,15 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6078
6089
  def __init__(
6079
6090
  self,
6080
6091
  exception_type,
6081
- exception_value,
6082
6092
  ):
6083
6093
  exception_type.parent = self
6084
6094
 
6085
6095
  self.subnode_exception_type = exception_type
6086
6096
 
6087
- exception_value.parent = self
6088
-
6089
- self.subnode_exception_value = exception_value
6090
-
6091
6097
  def getVisitableNodes(self):
6092
6098
  """The visitable nodes, with tuple values flattened."""
6093
6099
 
6094
- return (
6095
- self.subnode_exception_type,
6096
- self.subnode_exception_value,
6097
- )
6100
+ return (self.subnode_exception_type,)
6098
6101
 
6099
6102
  def getVisitableNodesNamed(self):
6100
6103
  """Named children dictionary.
@@ -6102,10 +6105,7 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6102
6105
  For use in cloning nodes, debugging and XML output.
6103
6106
  """
6104
6107
 
6105
- return (
6106
- ("exception_type", self.subnode_exception_type),
6107
- ("exception_value", self.subnode_exception_value),
6108
- )
6108
+ return (("exception_type", self.subnode_exception_type),)
6109
6109
 
6110
6110
  def replaceChild(self, old_node, new_node):
6111
6111
  value = self.subnode_exception_type
@@ -6116,11 +6116,101 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6116
6116
 
6117
6117
  return
6118
6118
 
6119
- value = self.subnode_exception_value
6119
+ raise AssertionError("Didn't find child", old_node, "in", self)
6120
+
6121
+ def getCloneArgs(self):
6122
+ """Get clones of all children to pass for a new node.
6123
+
6124
+ Needs to make clones of child nodes too.
6125
+ """
6126
+
6127
+ values = {
6128
+ "exception_type": self.subnode_exception_type.makeClone(),
6129
+ }
6130
+
6131
+ values.update(self.getDetails())
6132
+
6133
+ return values
6134
+
6135
+ def finalize(self):
6136
+ del self.parent
6137
+
6138
+ self.subnode_exception_type.finalize()
6139
+ del self.subnode_exception_type
6140
+
6141
+ def computeExpressionRaw(self, trace_collection):
6142
+ """Compute an expression.
6143
+
6144
+ Default behavior is to just visit the child expressions first, and
6145
+ then the node "computeExpression". For a few cases this needs to
6146
+ be overloaded, e.g. conditional expressions.
6147
+ """
6148
+
6149
+ # First apply the sub-expression, as they it's evaluated before.
6150
+ expression = trace_collection.onExpression(self.subnode_exception_type)
6151
+
6152
+ if expression.willRaiseAnyException():
6153
+ return (
6154
+ expression,
6155
+ "new_raise",
6156
+ lambda: "For '%s' the child expression '%s' will raise."
6157
+ % (self.getChildNameNice(), expression.getChildNameNice()),
6158
+ )
6159
+
6160
+ # Then ask ourselves to work on it.
6161
+ return self.computeExpression(trace_collection)
6162
+
6163
+ def collectVariableAccesses(self, emit_read, emit_write):
6164
+ """Collect variable reads and writes of child nodes."""
6165
+
6166
+ self.subnode_exception_type.collectVariableAccesses(emit_read, emit_write)
6167
+
6168
+
6169
+ # Assign the names that are easier to import with a stable name.
6170
+ ChildrenExpressionRaiseExceptionMixin = ChildHavingExceptionTypeMixin
6171
+
6172
+
6173
+ class ChildHavingExitCodeOptionalMixin(object):
6174
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6175
+ __slots__ = ()
6176
+
6177
+ # This is generated for use in
6178
+ # ExpressionSysExit
6179
+
6180
+ def __init__(
6181
+ self,
6182
+ exit_code,
6183
+ ):
6184
+ if exit_code is not None:
6185
+ exit_code.parent = self
6186
+
6187
+ self.subnode_exit_code = exit_code
6188
+
6189
+ def getVisitableNodes(self):
6190
+ """The visitable nodes, with tuple values flattened."""
6191
+
6192
+ value = self.subnode_exit_code
6193
+
6194
+ if value is None:
6195
+ return ()
6196
+ else:
6197
+ return (value,)
6198
+
6199
+ def getVisitableNodesNamed(self):
6200
+ """Named children dictionary.
6201
+
6202
+ For use in cloning nodes, debugging and XML output.
6203
+ """
6204
+
6205
+ return (("exit_code", self.subnode_exit_code),)
6206
+
6207
+ def replaceChild(self, old_node, new_node):
6208
+ value = self.subnode_exit_code
6120
6209
  if old_node is value:
6121
- new_node.parent = self
6210
+ if new_node is not None:
6211
+ new_node.parent = self
6122
6212
 
6123
- self.subnode_exception_value = new_node
6213
+ self.subnode_exit_code = new_node
6124
6214
 
6125
6215
  return
6126
6216
 
@@ -6133,8 +6223,11 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6133
6223
  """
6134
6224
 
6135
6225
  values = {
6136
- "exception_type": self.subnode_exception_type.makeClone(),
6137
- "exception_value": self.subnode_exception_value.makeClone(),
6226
+ "exit_code": (
6227
+ self.subnode_exit_code.makeClone()
6228
+ if self.subnode_exit_code is not None
6229
+ else None
6230
+ ),
6138
6231
  }
6139
6232
 
6140
6233
  values.update(self.getDetails())
@@ -6144,10 +6237,9 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6144
6237
  def finalize(self):
6145
6238
  del self.parent
6146
6239
 
6147
- self.subnode_exception_type.finalize()
6148
- del self.subnode_exception_type
6149
- self.subnode_exception_value.finalize()
6150
- del self.subnode_exception_value
6240
+ if self.subnode_exit_code is not None:
6241
+ self.subnode_exit_code.finalize()
6242
+ del self.subnode_exit_code
6151
6243
 
6152
6244
  def computeExpressionRaw(self, trace_collection):
6153
6245
  """Compute an expression.
@@ -6157,22 +6249,15 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6157
6249
  be overloaded, e.g. conditional expressions.
6158
6250
  """
6159
6251
 
6160
- # First apply the sub-expressions, as they are evaluated before
6161
- # the actual operation.
6162
- for count, sub_expression in enumerate(self.getVisitableNodes()):
6163
- expression = trace_collection.onExpression(sub_expression)
6164
-
6165
- if expression.willRaiseAnyException():
6166
- sub_expressions = self.getVisitableNodes()
6252
+ # First apply the sub-expression, as they it's evaluated before.
6253
+ expression = self.subnode_exit_code
6167
6254
 
6168
- wrapped_expression = wrapExpressionWithSideEffects(
6169
- side_effects=sub_expressions[:count],
6170
- old_node=sub_expression,
6171
- new_node=expression,
6172
- )
6255
+ if expression is not None:
6256
+ expression = trace_collection.onExpression(expression)
6173
6257
 
6258
+ if expression.willRaiseAnyException():
6174
6259
  return (
6175
- wrapped_expression,
6260
+ expression,
6176
6261
  "new_raise",
6177
6262
  lambda: "For '%s' the child expression '%s' will raise."
6178
6263
  % (self.getChildNameNice(), expression.getChildNameNice()),
@@ -6184,12 +6269,14 @@ class ChildrenHavingExceptionTypeExceptionValueMixin(object):
6184
6269
  def collectVariableAccesses(self, emit_read, emit_write):
6185
6270
  """Collect variable reads and writes of child nodes."""
6186
6271
 
6187
- self.subnode_exception_type.collectVariableAccesses(emit_read, emit_write)
6188
- self.subnode_exception_value.collectVariableAccesses(emit_read, emit_write)
6272
+ subnode_exit_code = self.subnode_exit_code
6273
+
6274
+ if subnode_exit_code is not None:
6275
+ self.subnode_exit_code.collectVariableAccesses(emit_read, emit_write)
6189
6276
 
6190
6277
 
6191
6278
  # Assign the names that are easier to import with a stable name.
6192
- ChildrenExpressionRaiseExceptionMixin = ChildrenHavingExceptionTypeExceptionValueMixin
6279
+ ChildrenExpressionSysExitMixin = ChildHavingExitCodeOptionalMixin
6193
6280
 
6194
6281
 
6195
6282
  class ChildHavingExpressionMixin(object):
@@ -6384,10 +6471,9 @@ class ChildHavingExpressionMixin(object):
6384
6471
  # ExpressionAttributeLookupStrUpper
6385
6472
  # ExpressionAttributeLookupStrZfill
6386
6473
  # ExpressionAttributeLookupTypePrepare
6387
- # ExpressionMatchArgs
6388
6474
  # ExpressionYield
6389
6475
  # ExpressionYieldFrom
6390
- # ExpressionYieldFromWaitable
6476
+ # ExpressionYieldFromAwaitable
6391
6477
 
6392
6478
  def __init__(
6393
6479
  self,
@@ -6657,10 +6743,9 @@ ChildrenExpressionAttributeLookupStrTranslateMixin = ChildHavingExpressionMixin
6657
6743
  ChildrenExpressionAttributeLookupStrUpperMixin = ChildHavingExpressionMixin
6658
6744
  ChildrenExpressionAttributeLookupStrZfillMixin = ChildHavingExpressionMixin
6659
6745
  ChildrenExpressionAttributeLookupTypePrepareMixin = ChildHavingExpressionMixin
6660
- ChildrenExpressionMatchArgsMixin = ChildHavingExpressionMixin
6661
6746
  ChildrenExpressionYieldMixin = ChildHavingExpressionMixin
6662
6747
  ChildrenExpressionYieldFromMixin = ChildHavingExpressionMixin
6663
- ChildrenExpressionYieldFromWaitableMixin = ChildHavingExpressionMixin
6748
+ ChildrenExpressionYieldFromAwaitableMixin = ChildHavingExpressionMixin
6664
6749
 
6665
6750
 
6666
6751
  class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
@@ -6760,12 +6845,16 @@ class ChildrenHavingExpressionLowerAutoNoneUpperAutoNoneMixin(object):
6760
6845
 
6761
6846
  values = {
6762
6847
  "expression": self.subnode_expression.makeClone(),
6763
- "lower": self.subnode_lower.makeClone()
6764
- if self.subnode_lower is not None
6765
- else None,
6766
- "upper": self.subnode_upper.makeClone()
6767
- if self.subnode_upper is not None
6768
- else None,
6848
+ "lower": (
6849
+ self.subnode_lower.makeClone()
6850
+ if self.subnode_lower is not None
6851
+ else None
6852
+ ),
6853
+ "upper": (
6854
+ self.subnode_upper.makeClone()
6855
+ if self.subnode_upper is not None
6856
+ else None
6857
+ ),
6769
6858
  }
6770
6859
 
6771
6860
  values.update(self.getDetails())
@@ -6836,6 +6925,130 @@ ChildrenExpressionSliceLookupMixin = (
6836
6925
  )
6837
6926
 
6838
6927
 
6928
+ class ChildrenHavingExpressionMatchTypeMixin(object):
6929
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6930
+ __slots__ = ()
6931
+
6932
+ # This is generated for use in
6933
+ # ExpressionMatchArgs
6934
+
6935
+ def __init__(
6936
+ self,
6937
+ expression,
6938
+ match_type,
6939
+ ):
6940
+ expression.parent = self
6941
+
6942
+ self.subnode_expression = expression
6943
+
6944
+ match_type.parent = self
6945
+
6946
+ self.subnode_match_type = match_type
6947
+
6948
+ def getVisitableNodes(self):
6949
+ """The visitable nodes, with tuple values flattened."""
6950
+
6951
+ return (
6952
+ self.subnode_expression,
6953
+ self.subnode_match_type,
6954
+ )
6955
+
6956
+ def getVisitableNodesNamed(self):
6957
+ """Named children dictionary.
6958
+
6959
+ For use in cloning nodes, debugging and XML output.
6960
+ """
6961
+
6962
+ return (
6963
+ ("expression", self.subnode_expression),
6964
+ ("match_type", self.subnode_match_type),
6965
+ )
6966
+
6967
+ def replaceChild(self, old_node, new_node):
6968
+ value = self.subnode_expression
6969
+ if old_node is value:
6970
+ new_node.parent = self
6971
+
6972
+ self.subnode_expression = new_node
6973
+
6974
+ return
6975
+
6976
+ value = self.subnode_match_type
6977
+ if old_node is value:
6978
+ new_node.parent = self
6979
+
6980
+ self.subnode_match_type = new_node
6981
+
6982
+ return
6983
+
6984
+ raise AssertionError("Didn't find child", old_node, "in", self)
6985
+
6986
+ def getCloneArgs(self):
6987
+ """Get clones of all children to pass for a new node.
6988
+
6989
+ Needs to make clones of child nodes too.
6990
+ """
6991
+
6992
+ values = {
6993
+ "expression": self.subnode_expression.makeClone(),
6994
+ "match_type": self.subnode_match_type.makeClone(),
6995
+ }
6996
+
6997
+ values.update(self.getDetails())
6998
+
6999
+ return values
7000
+
7001
+ def finalize(self):
7002
+ del self.parent
7003
+
7004
+ self.subnode_expression.finalize()
7005
+ del self.subnode_expression
7006
+ self.subnode_match_type.finalize()
7007
+ del self.subnode_match_type
7008
+
7009
+ def computeExpressionRaw(self, trace_collection):
7010
+ """Compute an expression.
7011
+
7012
+ Default behavior is to just visit the child expressions first, and
7013
+ then the node "computeExpression". For a few cases this needs to
7014
+ be overloaded, e.g. conditional expressions.
7015
+ """
7016
+
7017
+ # First apply the sub-expressions, as they are evaluated before
7018
+ # the actual operation.
7019
+ for count, sub_expression in enumerate(self.getVisitableNodes()):
7020
+ expression = trace_collection.onExpression(sub_expression)
7021
+
7022
+ if expression.willRaiseAnyException():
7023
+ sub_expressions = self.getVisitableNodes()
7024
+
7025
+ wrapped_expression = wrapExpressionWithSideEffects(
7026
+ side_effects=sub_expressions[:count],
7027
+ old_node=sub_expression,
7028
+ new_node=expression,
7029
+ )
7030
+
7031
+ return (
7032
+ wrapped_expression,
7033
+ "new_raise",
7034
+ lambda: "For '%s' the child expression '%s' will raise."
7035
+ % (self.getChildNameNice(), expression.getChildNameNice()),
7036
+ )
7037
+
7038
+ # Then ask ourselves to work on it.
7039
+ return self.computeExpression(trace_collection)
7040
+
7041
+ def collectVariableAccesses(self, emit_read, emit_write):
7042
+ """Collect variable reads and writes of child nodes."""
7043
+
7044
+ self.subnode_expression.collectVariableAccesses(emit_read, emit_write)
7045
+ self.subnode_match_type.collectVariableAccesses(emit_read, emit_write)
7046
+
7047
+
7048
+ # Assign the names that are easier to import with a stable name.
7049
+ ChildrenExpressionMatchArgsMixin = ChildrenHavingExpressionMatchTypeMixin
7050
+
7051
+
6839
7052
  class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
6840
7053
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
6841
7054
  __slots__ = ()
@@ -6924,9 +7137,11 @@ class ChildrenHavingExpressionNameDefaultOptionalMixin(object):
6924
7137
  values = {
6925
7138
  "expression": self.subnode_expression.makeClone(),
6926
7139
  "name": self.subnode_name.makeClone(),
6927
- "default": self.subnode_default.makeClone()
6928
- if self.subnode_default is not None
6929
- else None,
7140
+ "default": (
7141
+ self.subnode_default.makeClone()
7142
+ if self.subnode_default is not None
7143
+ else None
7144
+ ),
6930
7145
  }
6931
7146
 
6932
7147
  values.update(self.getDetails())
@@ -7139,7 +7354,7 @@ class ChildrenHavingExpressionSubscriptMixin(object):
7139
7354
  __slots__ = ()
7140
7355
 
7141
7356
  # This is generated for use in
7142
- # ExpressionSubscriptCheck
7357
+ # ExpressionMatchSubscriptCheck
7143
7358
  # ExpressionSubscriptLookup
7144
7359
  # ExpressionSubscriptLookupForUnpack
7145
7360
 
@@ -7257,7 +7472,7 @@ class ChildrenHavingExpressionSubscriptMixin(object):
7257
7472
 
7258
7473
 
7259
7474
  # Assign the names that are easier to import with a stable name.
7260
- ChildrenExpressionSubscriptCheckMixin = ChildrenHavingExpressionSubscriptMixin
7475
+ ChildrenExpressionMatchSubscriptCheckMixin = ChildrenHavingExpressionSubscriptMixin
7261
7476
  ChildrenExpressionSubscriptLookupMixin = ChildrenHavingExpressionSubscriptMixin
7262
7477
  ChildrenExpressionSubscriptLookupForUnpackMixin = ChildrenHavingExpressionSubscriptMixin
7263
7478
 
@@ -7448,12 +7663,14 @@ class ChildrenHavingFilenameModeOptionalBufferingOptionalMixin(object):
7448
7663
 
7449
7664
  values = {
7450
7665
  "filename": self.subnode_filename.makeClone(),
7451
- "mode": self.subnode_mode.makeClone()
7452
- if self.subnode_mode is not None
7453
- else None,
7454
- "buffering": self.subnode_buffering.makeClone()
7455
- if self.subnode_buffering is not None
7456
- else None,
7666
+ "mode": (
7667
+ self.subnode_mode.makeClone() if self.subnode_mode is not None else None
7668
+ ),
7669
+ "buffering": (
7670
+ self.subnode_buffering.makeClone()
7671
+ if self.subnode_buffering is not None
7672
+ else None
7673
+ ),
7457
7674
  }
7458
7675
 
7459
7676
  values.update(self.getDetails())
@@ -7724,27 +7941,39 @@ class ChildrenHavingFilenameModeOptionalBufferingOptionalEncodingOptionalErrorsO
7724
7941
 
7725
7942
  values = {
7726
7943
  "filename": self.subnode_filename.makeClone(),
7727
- "mode": self.subnode_mode.makeClone()
7728
- if self.subnode_mode is not None
7729
- else None,
7730
- "buffering": self.subnode_buffering.makeClone()
7731
- if self.subnode_buffering is not None
7732
- else None,
7733
- "encoding": self.subnode_encoding.makeClone()
7734
- if self.subnode_encoding is not None
7735
- else None,
7736
- "errors": self.subnode_errors.makeClone()
7737
- if self.subnode_errors is not None
7738
- else None,
7739
- "newline": self.subnode_newline.makeClone()
7740
- if self.subnode_newline is not None
7741
- else None,
7742
- "closefd": self.subnode_closefd.makeClone()
7743
- if self.subnode_closefd is not None
7744
- else None,
7745
- "opener": self.subnode_opener.makeClone()
7746
- if self.subnode_opener is not None
7747
- else None,
7944
+ "mode": (
7945
+ self.subnode_mode.makeClone() if self.subnode_mode is not None else None
7946
+ ),
7947
+ "buffering": (
7948
+ self.subnode_buffering.makeClone()
7949
+ if self.subnode_buffering is not None
7950
+ else None
7951
+ ),
7952
+ "encoding": (
7953
+ self.subnode_encoding.makeClone()
7954
+ if self.subnode_encoding is not None
7955
+ else None
7956
+ ),
7957
+ "errors": (
7958
+ self.subnode_errors.makeClone()
7959
+ if self.subnode_errors is not None
7960
+ else None
7961
+ ),
7962
+ "newline": (
7963
+ self.subnode_newline.makeClone()
7964
+ if self.subnode_newline is not None
7965
+ else None
7966
+ ),
7967
+ "closefd": (
7968
+ self.subnode_closefd.makeClone()
7969
+ if self.subnode_closefd is not None
7970
+ else None
7971
+ ),
7972
+ "opener": (
7973
+ self.subnode_opener.makeClone()
7974
+ if self.subnode_opener is not None
7975
+ else None
7976
+ ),
7748
7977
  }
7749
7978
 
7750
7979
  values.update(self.getDetails())
@@ -7848,30 +8077,503 @@ class ChildrenHavingFilenameModeOptionalBufferingOptionalEncodingOptionalErrorsO
7848
8077
  ChildrenExpressionBuiltinOpenP3Mixin = ChildrenHavingFilenameModeOptionalBufferingOptionalEncodingOptionalErrorsOptionalNewlineOptionalClosefdOptionalOpenerOptionalMixin
7849
8078
 
7850
8079
 
7851
- class ChildrenHavingFunctionValuesTupleMixin(object):
8080
+ class ChildrenHavingFuncOptionalInputSignatureOptionalAutographOptionalJitCompileOptionalReduceRetracingOptionalExperimentalImplementsOptionalExperimentalAutographOptionsOptionalExperimentalAttributesOptionalExperimentalRelaxShapesOptionalExperimentalCompileOptionalExperimentalFollowTypeHintsOptionalMixin(
8081
+ object
8082
+ ):
7852
8083
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
7853
8084
  __slots__ = ()
7854
8085
 
7855
8086
  # This is generated for use in
7856
- # ExpressionFunctionCall
8087
+ # ExpressionTensorflowFunction
8088
+ # ExpressionTensorflowFunctionCall
7857
8089
 
7858
8090
  def __init__(
7859
8091
  self,
7860
- function,
7861
- values,
8092
+ func,
8093
+ input_signature,
8094
+ autograph,
8095
+ jit_compile,
8096
+ reduce_retracing,
8097
+ experimental_implements,
8098
+ experimental_autograph_options,
8099
+ experimental_attributes,
8100
+ experimental_relax_shapes,
8101
+ experimental_compile,
8102
+ experimental_follow_type_hints,
7862
8103
  ):
7863
- function.parent = self
8104
+ if func is not None:
8105
+ func.parent = self
7864
8106
 
7865
- self.subnode_function = function
8107
+ self.subnode_func = func
7866
8108
 
7867
- assert type(values) is tuple
8109
+ if input_signature is not None:
8110
+ input_signature.parent = self
7868
8111
 
7869
- for val in values:
7870
- val.parent = self
8112
+ self.subnode_input_signature = input_signature
7871
8113
 
7872
- self.subnode_values = values
8114
+ if autograph is not None:
8115
+ autograph.parent = self
7873
8116
 
7874
- def getVisitableNodes(self):
8117
+ self.subnode_autograph = autograph
8118
+
8119
+ if jit_compile is not None:
8120
+ jit_compile.parent = self
8121
+
8122
+ self.subnode_jit_compile = jit_compile
8123
+
8124
+ if reduce_retracing is not None:
8125
+ reduce_retracing.parent = self
8126
+
8127
+ self.subnode_reduce_retracing = reduce_retracing
8128
+
8129
+ if experimental_implements is not None:
8130
+ experimental_implements.parent = self
8131
+
8132
+ self.subnode_experimental_implements = experimental_implements
8133
+
8134
+ if experimental_autograph_options is not None:
8135
+ experimental_autograph_options.parent = self
8136
+
8137
+ self.subnode_experimental_autograph_options = experimental_autograph_options
8138
+
8139
+ if experimental_attributes is not None:
8140
+ experimental_attributes.parent = self
8141
+
8142
+ self.subnode_experimental_attributes = experimental_attributes
8143
+
8144
+ if experimental_relax_shapes is not None:
8145
+ experimental_relax_shapes.parent = self
8146
+
8147
+ self.subnode_experimental_relax_shapes = experimental_relax_shapes
8148
+
8149
+ if experimental_compile is not None:
8150
+ experimental_compile.parent = self
8151
+
8152
+ self.subnode_experimental_compile = experimental_compile
8153
+
8154
+ if experimental_follow_type_hints is not None:
8155
+ experimental_follow_type_hints.parent = self
8156
+
8157
+ self.subnode_experimental_follow_type_hints = experimental_follow_type_hints
8158
+
8159
+ def getVisitableNodes(self):
8160
+ """The visitable nodes, with tuple values flattened."""
8161
+
8162
+ result = []
8163
+ value = self.subnode_func
8164
+ if value is None:
8165
+ pass
8166
+ else:
8167
+ result.append(value)
8168
+ value = self.subnode_input_signature
8169
+ if value is None:
8170
+ pass
8171
+ else:
8172
+ result.append(value)
8173
+ value = self.subnode_autograph
8174
+ if value is None:
8175
+ pass
8176
+ else:
8177
+ result.append(value)
8178
+ value = self.subnode_jit_compile
8179
+ if value is None:
8180
+ pass
8181
+ else:
8182
+ result.append(value)
8183
+ value = self.subnode_reduce_retracing
8184
+ if value is None:
8185
+ pass
8186
+ else:
8187
+ result.append(value)
8188
+ value = self.subnode_experimental_implements
8189
+ if value is None:
8190
+ pass
8191
+ else:
8192
+ result.append(value)
8193
+ value = self.subnode_experimental_autograph_options
8194
+ if value is None:
8195
+ pass
8196
+ else:
8197
+ result.append(value)
8198
+ value = self.subnode_experimental_attributes
8199
+ if value is None:
8200
+ pass
8201
+ else:
8202
+ result.append(value)
8203
+ value = self.subnode_experimental_relax_shapes
8204
+ if value is None:
8205
+ pass
8206
+ else:
8207
+ result.append(value)
8208
+ value = self.subnode_experimental_compile
8209
+ if value is None:
8210
+ pass
8211
+ else:
8212
+ result.append(value)
8213
+ value = self.subnode_experimental_follow_type_hints
8214
+ if value is None:
8215
+ pass
8216
+ else:
8217
+ result.append(value)
8218
+ return tuple(result)
8219
+
8220
+ def getVisitableNodesNamed(self):
8221
+ """Named children dictionary.
8222
+
8223
+ For use in cloning nodes, debugging and XML output.
8224
+ """
8225
+
8226
+ return (
8227
+ ("func", self.subnode_func),
8228
+ ("input_signature", self.subnode_input_signature),
8229
+ ("autograph", self.subnode_autograph),
8230
+ ("jit_compile", self.subnode_jit_compile),
8231
+ ("reduce_retracing", self.subnode_reduce_retracing),
8232
+ ("experimental_implements", self.subnode_experimental_implements),
8233
+ (
8234
+ "experimental_autograph_options",
8235
+ self.subnode_experimental_autograph_options,
8236
+ ),
8237
+ ("experimental_attributes", self.subnode_experimental_attributes),
8238
+ ("experimental_relax_shapes", self.subnode_experimental_relax_shapes),
8239
+ ("experimental_compile", self.subnode_experimental_compile),
8240
+ (
8241
+ "experimental_follow_type_hints",
8242
+ self.subnode_experimental_follow_type_hints,
8243
+ ),
8244
+ )
8245
+
8246
+ def replaceChild(self, old_node, new_node):
8247
+ value = self.subnode_func
8248
+ if old_node is value:
8249
+ if new_node is not None:
8250
+ new_node.parent = self
8251
+
8252
+ self.subnode_func = new_node
8253
+
8254
+ return
8255
+
8256
+ value = self.subnode_input_signature
8257
+ if old_node is value:
8258
+ if new_node is not None:
8259
+ new_node.parent = self
8260
+
8261
+ self.subnode_input_signature = new_node
8262
+
8263
+ return
8264
+
8265
+ value = self.subnode_autograph
8266
+ if old_node is value:
8267
+ if new_node is not None:
8268
+ new_node.parent = self
8269
+
8270
+ self.subnode_autograph = new_node
8271
+
8272
+ return
8273
+
8274
+ value = self.subnode_jit_compile
8275
+ if old_node is value:
8276
+ if new_node is not None:
8277
+ new_node.parent = self
8278
+
8279
+ self.subnode_jit_compile = new_node
8280
+
8281
+ return
8282
+
8283
+ value = self.subnode_reduce_retracing
8284
+ if old_node is value:
8285
+ if new_node is not None:
8286
+ new_node.parent = self
8287
+
8288
+ self.subnode_reduce_retracing = new_node
8289
+
8290
+ return
8291
+
8292
+ value = self.subnode_experimental_implements
8293
+ if old_node is value:
8294
+ if new_node is not None:
8295
+ new_node.parent = self
8296
+
8297
+ self.subnode_experimental_implements = new_node
8298
+
8299
+ return
8300
+
8301
+ value = self.subnode_experimental_autograph_options
8302
+ if old_node is value:
8303
+ if new_node is not None:
8304
+ new_node.parent = self
8305
+
8306
+ self.subnode_experimental_autograph_options = new_node
8307
+
8308
+ return
8309
+
8310
+ value = self.subnode_experimental_attributes
8311
+ if old_node is value:
8312
+ if new_node is not None:
8313
+ new_node.parent = self
8314
+
8315
+ self.subnode_experimental_attributes = new_node
8316
+
8317
+ return
8318
+
8319
+ value = self.subnode_experimental_relax_shapes
8320
+ if old_node is value:
8321
+ if new_node is not None:
8322
+ new_node.parent = self
8323
+
8324
+ self.subnode_experimental_relax_shapes = new_node
8325
+
8326
+ return
8327
+
8328
+ value = self.subnode_experimental_compile
8329
+ if old_node is value:
8330
+ if new_node is not None:
8331
+ new_node.parent = self
8332
+
8333
+ self.subnode_experimental_compile = new_node
8334
+
8335
+ return
8336
+
8337
+ value = self.subnode_experimental_follow_type_hints
8338
+ if old_node is value:
8339
+ if new_node is not None:
8340
+ new_node.parent = self
8341
+
8342
+ self.subnode_experimental_follow_type_hints = new_node
8343
+
8344
+ return
8345
+
8346
+ raise AssertionError("Didn't find child", old_node, "in", self)
8347
+
8348
+ def getCloneArgs(self):
8349
+ """Get clones of all children to pass for a new node.
8350
+
8351
+ Needs to make clones of child nodes too.
8352
+ """
8353
+
8354
+ values = {
8355
+ "func": (
8356
+ self.subnode_func.makeClone() if self.subnode_func is not None else None
8357
+ ),
8358
+ "input_signature": (
8359
+ self.subnode_input_signature.makeClone()
8360
+ if self.subnode_input_signature is not None
8361
+ else None
8362
+ ),
8363
+ "autograph": (
8364
+ self.subnode_autograph.makeClone()
8365
+ if self.subnode_autograph is not None
8366
+ else None
8367
+ ),
8368
+ "jit_compile": (
8369
+ self.subnode_jit_compile.makeClone()
8370
+ if self.subnode_jit_compile is not None
8371
+ else None
8372
+ ),
8373
+ "reduce_retracing": (
8374
+ self.subnode_reduce_retracing.makeClone()
8375
+ if self.subnode_reduce_retracing is not None
8376
+ else None
8377
+ ),
8378
+ "experimental_implements": (
8379
+ self.subnode_experimental_implements.makeClone()
8380
+ if self.subnode_experimental_implements is not None
8381
+ else None
8382
+ ),
8383
+ "experimental_autograph_options": (
8384
+ self.subnode_experimental_autograph_options.makeClone()
8385
+ if self.subnode_experimental_autograph_options is not None
8386
+ else None
8387
+ ),
8388
+ "experimental_attributes": (
8389
+ self.subnode_experimental_attributes.makeClone()
8390
+ if self.subnode_experimental_attributes is not None
8391
+ else None
8392
+ ),
8393
+ "experimental_relax_shapes": (
8394
+ self.subnode_experimental_relax_shapes.makeClone()
8395
+ if self.subnode_experimental_relax_shapes is not None
8396
+ else None
8397
+ ),
8398
+ "experimental_compile": (
8399
+ self.subnode_experimental_compile.makeClone()
8400
+ if self.subnode_experimental_compile is not None
8401
+ else None
8402
+ ),
8403
+ "experimental_follow_type_hints": (
8404
+ self.subnode_experimental_follow_type_hints.makeClone()
8405
+ if self.subnode_experimental_follow_type_hints is not None
8406
+ else None
8407
+ ),
8408
+ }
8409
+
8410
+ values.update(self.getDetails())
8411
+
8412
+ return values
8413
+
8414
+ def finalize(self):
8415
+ del self.parent
8416
+
8417
+ if self.subnode_func is not None:
8418
+ self.subnode_func.finalize()
8419
+ del self.subnode_func
8420
+ if self.subnode_input_signature is not None:
8421
+ self.subnode_input_signature.finalize()
8422
+ del self.subnode_input_signature
8423
+ if self.subnode_autograph is not None:
8424
+ self.subnode_autograph.finalize()
8425
+ del self.subnode_autograph
8426
+ if self.subnode_jit_compile is not None:
8427
+ self.subnode_jit_compile.finalize()
8428
+ del self.subnode_jit_compile
8429
+ if self.subnode_reduce_retracing is not None:
8430
+ self.subnode_reduce_retracing.finalize()
8431
+ del self.subnode_reduce_retracing
8432
+ if self.subnode_experimental_implements is not None:
8433
+ self.subnode_experimental_implements.finalize()
8434
+ del self.subnode_experimental_implements
8435
+ if self.subnode_experimental_autograph_options is not None:
8436
+ self.subnode_experimental_autograph_options.finalize()
8437
+ del self.subnode_experimental_autograph_options
8438
+ if self.subnode_experimental_attributes is not None:
8439
+ self.subnode_experimental_attributes.finalize()
8440
+ del self.subnode_experimental_attributes
8441
+ if self.subnode_experimental_relax_shapes is not None:
8442
+ self.subnode_experimental_relax_shapes.finalize()
8443
+ del self.subnode_experimental_relax_shapes
8444
+ if self.subnode_experimental_compile is not None:
8445
+ self.subnode_experimental_compile.finalize()
8446
+ del self.subnode_experimental_compile
8447
+ if self.subnode_experimental_follow_type_hints is not None:
8448
+ self.subnode_experimental_follow_type_hints.finalize()
8449
+ del self.subnode_experimental_follow_type_hints
8450
+
8451
+ def computeExpressionRaw(self, trace_collection):
8452
+ """Compute an expression.
8453
+
8454
+ Default behavior is to just visit the child expressions first, and
8455
+ then the node "computeExpression". For a few cases this needs to
8456
+ be overloaded, e.g. conditional expressions.
8457
+ """
8458
+
8459
+ # First apply the sub-expressions, as they are evaluated before
8460
+ # the actual operation.
8461
+ for count, sub_expression in enumerate(self.getVisitableNodes()):
8462
+ expression = trace_collection.onExpression(sub_expression)
8463
+
8464
+ if expression.willRaiseAnyException():
8465
+ sub_expressions = self.getVisitableNodes()
8466
+
8467
+ wrapped_expression = wrapExpressionWithSideEffects(
8468
+ side_effects=sub_expressions[:count],
8469
+ old_node=sub_expression,
8470
+ new_node=expression,
8471
+ )
8472
+
8473
+ return (
8474
+ wrapped_expression,
8475
+ "new_raise",
8476
+ lambda: "For '%s' the child expression '%s' will raise."
8477
+ % (self.getChildNameNice(), expression.getChildNameNice()),
8478
+ )
8479
+
8480
+ # Then ask ourselves to work on it.
8481
+ return self.computeExpression(trace_collection)
8482
+
8483
+ def collectVariableAccesses(self, emit_read, emit_write):
8484
+ """Collect variable reads and writes of child nodes."""
8485
+
8486
+ subnode_func = self.subnode_func
8487
+
8488
+ if subnode_func is not None:
8489
+ self.subnode_func.collectVariableAccesses(emit_read, emit_write)
8490
+ subnode_input_signature = self.subnode_input_signature
8491
+
8492
+ if subnode_input_signature is not None:
8493
+ self.subnode_input_signature.collectVariableAccesses(emit_read, emit_write)
8494
+ subnode_autograph = self.subnode_autograph
8495
+
8496
+ if subnode_autograph is not None:
8497
+ self.subnode_autograph.collectVariableAccesses(emit_read, emit_write)
8498
+ subnode_jit_compile = self.subnode_jit_compile
8499
+
8500
+ if subnode_jit_compile is not None:
8501
+ self.subnode_jit_compile.collectVariableAccesses(emit_read, emit_write)
8502
+ subnode_reduce_retracing = self.subnode_reduce_retracing
8503
+
8504
+ if subnode_reduce_retracing is not None:
8505
+ self.subnode_reduce_retracing.collectVariableAccesses(emit_read, emit_write)
8506
+ subnode_experimental_implements = self.subnode_experimental_implements
8507
+
8508
+ if subnode_experimental_implements is not None:
8509
+ self.subnode_experimental_implements.collectVariableAccesses(
8510
+ emit_read, emit_write
8511
+ )
8512
+ subnode_experimental_autograph_options = (
8513
+ self.subnode_experimental_autograph_options
8514
+ )
8515
+
8516
+ if subnode_experimental_autograph_options is not None:
8517
+ self.subnode_experimental_autograph_options.collectVariableAccesses(
8518
+ emit_read, emit_write
8519
+ )
8520
+ subnode_experimental_attributes = self.subnode_experimental_attributes
8521
+
8522
+ if subnode_experimental_attributes is not None:
8523
+ self.subnode_experimental_attributes.collectVariableAccesses(
8524
+ emit_read, emit_write
8525
+ )
8526
+ subnode_experimental_relax_shapes = self.subnode_experimental_relax_shapes
8527
+
8528
+ if subnode_experimental_relax_shapes is not None:
8529
+ self.subnode_experimental_relax_shapes.collectVariableAccesses(
8530
+ emit_read, emit_write
8531
+ )
8532
+ subnode_experimental_compile = self.subnode_experimental_compile
8533
+
8534
+ if subnode_experimental_compile is not None:
8535
+ self.subnode_experimental_compile.collectVariableAccesses(
8536
+ emit_read, emit_write
8537
+ )
8538
+ subnode_experimental_follow_type_hints = (
8539
+ self.subnode_experimental_follow_type_hints
8540
+ )
8541
+
8542
+ if subnode_experimental_follow_type_hints is not None:
8543
+ self.subnode_experimental_follow_type_hints.collectVariableAccesses(
8544
+ emit_read, emit_write
8545
+ )
8546
+
8547
+
8548
+ # Assign the names that are easier to import with a stable name.
8549
+ ChildrenExpressionTensorflowFunctionMixin = ChildrenHavingFuncOptionalInputSignatureOptionalAutographOptionalJitCompileOptionalReduceRetracingOptionalExperimentalImplementsOptionalExperimentalAutographOptionsOptionalExperimentalAttributesOptionalExperimentalRelaxShapesOptionalExperimentalCompileOptionalExperimentalFollowTypeHintsOptionalMixin
8550
+ ChildrenExpressionTensorflowFunctionCallMixin = ChildrenHavingFuncOptionalInputSignatureOptionalAutographOptionalJitCompileOptionalReduceRetracingOptionalExperimentalImplementsOptionalExperimentalAutographOptionsOptionalExperimentalAttributesOptionalExperimentalRelaxShapesOptionalExperimentalCompileOptionalExperimentalFollowTypeHintsOptionalMixin
8551
+
8552
+
8553
+ class ChildrenHavingFunctionValuesTupleMixin(object):
8554
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
8555
+ __slots__ = ()
8556
+
8557
+ # This is generated for use in
8558
+ # ExpressionFunctionCall
8559
+
8560
+ def __init__(
8561
+ self,
8562
+ function,
8563
+ values,
8564
+ ):
8565
+ function.parent = self
8566
+
8567
+ self.subnode_function = function
8568
+
8569
+ assert type(values) is tuple
8570
+
8571
+ for val in values:
8572
+ val.parent = self
8573
+
8574
+ self.subnode_values = values
8575
+
8576
+ def getVisitableNodes(self):
7875
8577
  """The visitable nodes, with tuple values flattened."""
7876
8578
 
7877
8579
  result = []
@@ -8146,9 +8848,9 @@ class ChildrenHavingGroupNameOptionalMixin(object):
8146
8848
 
8147
8849
  values = {
8148
8850
  "group": self.subnode_group.makeClone(),
8149
- "name": self.subnode_name.makeClone()
8150
- if self.subnode_name is not None
8151
- else None,
8851
+ "name": (
8852
+ self.subnode_name.makeClone() if self.subnode_name is not None else None
8853
+ ),
8152
8854
  }
8153
8855
 
8154
8856
  values.update(self.getDetails())
@@ -9047,13 +9749,17 @@ class ChildrenHavingKwDefaultsOptionalDefaultsTupleAnnotationsOptionalFunctionRe
9047
9749
  """
9048
9750
 
9049
9751
  values = {
9050
- "kw_defaults": self.subnode_kw_defaults.makeClone()
9051
- if self.subnode_kw_defaults is not None
9052
- else None,
9752
+ "kw_defaults": (
9753
+ self.subnode_kw_defaults.makeClone()
9754
+ if self.subnode_kw_defaults is not None
9755
+ else None
9756
+ ),
9053
9757
  "defaults": tuple(v.makeClone() for v in self.subnode_defaults),
9054
- "annotations": self.subnode_annotations.makeClone()
9055
- if self.subnode_annotations is not None
9056
- else None,
9758
+ "annotations": (
9759
+ self.subnode_annotations.makeClone()
9760
+ if self.subnode_annotations is not None
9761
+ else None
9762
+ ),
9057
9763
  "function_ref": self.subnode_function_ref.makeClone(),
9058
9764
  }
9059
9765
 
@@ -9907,9 +10613,9 @@ class ChildrenHavingListArgKeyOptionalReverseMixin(object):
9907
10613
 
9908
10614
  values = {
9909
10615
  "list_arg": self.subnode_list_arg.makeClone(),
9910
- "key": self.subnode_key.makeClone()
9911
- if self.subnode_key is not None
9912
- else None,
10616
+ "key": (
10617
+ self.subnode_key.makeClone() if self.subnode_key is not None else None
10618
+ ),
9913
10619
  "reverse": self.subnode_reverse.makeClone(),
9914
10620
  }
9915
10621
 
@@ -11131,18 +11837,26 @@ class ChildrenHavingNameGlobalsArgOptionalLocalsArgOptionalFromlistOptionalLevel
11131
11837
 
11132
11838
  values = {
11133
11839
  "name": self.subnode_name.makeClone(),
11134
- "globals_arg": self.subnode_globals_arg.makeClone()
11135
- if self.subnode_globals_arg is not None
11136
- else None,
11137
- "locals_arg": self.subnode_locals_arg.makeClone()
11138
- if self.subnode_locals_arg is not None
11139
- else None,
11140
- "fromlist": self.subnode_fromlist.makeClone()
11141
- if self.subnode_fromlist is not None
11142
- else None,
11143
- "level": self.subnode_level.makeClone()
11144
- if self.subnode_level is not None
11145
- else None,
11840
+ "globals_arg": (
11841
+ self.subnode_globals_arg.makeClone()
11842
+ if self.subnode_globals_arg is not None
11843
+ else None
11844
+ ),
11845
+ "locals_arg": (
11846
+ self.subnode_locals_arg.makeClone()
11847
+ if self.subnode_locals_arg is not None
11848
+ else None
11849
+ ),
11850
+ "fromlist": (
11851
+ self.subnode_fromlist.makeClone()
11852
+ if self.subnode_fromlist is not None
11853
+ else None
11854
+ ),
11855
+ "level": (
11856
+ self.subnode_level.makeClone()
11857
+ if self.subnode_level is not None
11858
+ else None
11859
+ ),
11146
11860
  }
11147
11861
 
11148
11862
  values.update(self.getDetails())
@@ -11225,7 +11939,7 @@ class ChildrenHavingNameGlobalsArgOptionalLocalsArgOptionalFromlistOptionalLevel
11225
11939
  ChildrenExpressionBuiltinImportMixin = ChildrenHavingNameGlobalsArgOptionalLocalsArgOptionalFromlistOptionalLevelOptionalMixin
11226
11940
 
11227
11941
 
11228
- class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOptionalMixin(
11942
+ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLastErrorOptionalMixin(
11229
11943
  object
11230
11944
  ):
11231
11945
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
@@ -11240,7 +11954,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11240
11954
  mode,
11241
11955
  handle,
11242
11956
  use_errno,
11243
- use_lasterror,
11957
+ use_last_error,
11244
11958
  ):
11245
11959
  name.parent = self
11246
11960
 
@@ -11261,10 +11975,10 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11261
11975
 
11262
11976
  self.subnode_use_errno = use_errno
11263
11977
 
11264
- if use_lasterror is not None:
11265
- use_lasterror.parent = self
11978
+ if use_last_error is not None:
11979
+ use_last_error.parent = self
11266
11980
 
11267
- self.subnode_use_lasterror = use_lasterror
11981
+ self.subnode_use_last_error = use_last_error
11268
11982
 
11269
11983
  def getVisitableNodes(self):
11270
11984
  """The visitable nodes, with tuple values flattened."""
@@ -11286,7 +12000,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11286
12000
  pass
11287
12001
  else:
11288
12002
  result.append(value)
11289
- value = self.subnode_use_lasterror
12003
+ value = self.subnode_use_last_error
11290
12004
  if value is None:
11291
12005
  pass
11292
12006
  else:
@@ -11304,7 +12018,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11304
12018
  ("mode", self.subnode_mode),
11305
12019
  ("handle", self.subnode_handle),
11306
12020
  ("use_errno", self.subnode_use_errno),
11307
- ("use_lasterror", self.subnode_use_lasterror),
12021
+ ("use_last_error", self.subnode_use_last_error),
11308
12022
  )
11309
12023
 
11310
12024
  def replaceChild(self, old_node, new_node):
@@ -11343,12 +12057,12 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11343
12057
 
11344
12058
  return
11345
12059
 
11346
- value = self.subnode_use_lasterror
12060
+ value = self.subnode_use_last_error
11347
12061
  if old_node is value:
11348
12062
  if new_node is not None:
11349
12063
  new_node.parent = self
11350
12064
 
11351
- self.subnode_use_lasterror = new_node
12065
+ self.subnode_use_last_error = new_node
11352
12066
 
11353
12067
  return
11354
12068
 
@@ -11362,18 +12076,24 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11362
12076
 
11363
12077
  values = {
11364
12078
  "name": self.subnode_name.makeClone(),
11365
- "mode": self.subnode_mode.makeClone()
11366
- if self.subnode_mode is not None
11367
- else None,
11368
- "handle": self.subnode_handle.makeClone()
11369
- if self.subnode_handle is not None
11370
- else None,
11371
- "use_errno": self.subnode_use_errno.makeClone()
11372
- if self.subnode_use_errno is not None
11373
- else None,
11374
- "use_lasterror": self.subnode_use_lasterror.makeClone()
11375
- if self.subnode_use_lasterror is not None
11376
- else None,
12079
+ "mode": (
12080
+ self.subnode_mode.makeClone() if self.subnode_mode is not None else None
12081
+ ),
12082
+ "handle": (
12083
+ self.subnode_handle.makeClone()
12084
+ if self.subnode_handle is not None
12085
+ else None
12086
+ ),
12087
+ "use_errno": (
12088
+ self.subnode_use_errno.makeClone()
12089
+ if self.subnode_use_errno is not None
12090
+ else None
12091
+ ),
12092
+ "use_last_error": (
12093
+ self.subnode_use_last_error.makeClone()
12094
+ if self.subnode_use_last_error is not None
12095
+ else None
12096
+ ),
11377
12097
  }
11378
12098
 
11379
12099
  values.update(self.getDetails())
@@ -11394,9 +12114,9 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11394
12114
  if self.subnode_use_errno is not None:
11395
12115
  self.subnode_use_errno.finalize()
11396
12116
  del self.subnode_use_errno
11397
- if self.subnode_use_lasterror is not None:
11398
- self.subnode_use_lasterror.finalize()
11399
- del self.subnode_use_lasterror
12117
+ if self.subnode_use_last_error is not None:
12118
+ self.subnode_use_last_error.finalize()
12119
+ del self.subnode_use_last_error
11400
12120
 
11401
12121
  def computeExpressionRaw(self, trace_collection):
11402
12122
  """Compute an expression.
@@ -11446,17 +12166,17 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11446
12166
 
11447
12167
  if subnode_use_errno is not None:
11448
12168
  self.subnode_use_errno.collectVariableAccesses(emit_read, emit_write)
11449
- subnode_use_lasterror = self.subnode_use_lasterror
12169
+ subnode_use_last_error = self.subnode_use_last_error
11450
12170
 
11451
- if subnode_use_lasterror is not None:
11452
- self.subnode_use_lasterror.collectVariableAccesses(emit_read, emit_write)
12171
+ if subnode_use_last_error is not None:
12172
+ self.subnode_use_last_error.collectVariableAccesses(emit_read, emit_write)
11453
12173
 
11454
12174
 
11455
12175
  # Assign the names that are easier to import with a stable name.
11456
- ChildrenExpressionCtypesCdllMixin = ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOptionalMixin
12176
+ ChildrenExpressionCtypesCdllMixin = ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLastErrorOptionalMixin
11457
12177
 
11458
12178
 
11459
- class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOptionalWinmodeOptionalMixin(
12179
+ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLastErrorOptionalWinmodeOptionalMixin(
11460
12180
  object
11461
12181
  ):
11462
12182
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
@@ -11471,7 +12191,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11471
12191
  mode,
11472
12192
  handle,
11473
12193
  use_errno,
11474
- use_lasterror,
12194
+ use_last_error,
11475
12195
  winmode,
11476
12196
  ):
11477
12197
  name.parent = self
@@ -11493,10 +12213,10 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11493
12213
 
11494
12214
  self.subnode_use_errno = use_errno
11495
12215
 
11496
- if use_lasterror is not None:
11497
- use_lasterror.parent = self
12216
+ if use_last_error is not None:
12217
+ use_last_error.parent = self
11498
12218
 
11499
- self.subnode_use_lasterror = use_lasterror
12219
+ self.subnode_use_last_error = use_last_error
11500
12220
 
11501
12221
  if winmode is not None:
11502
12222
  winmode.parent = self
@@ -11523,7 +12243,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11523
12243
  pass
11524
12244
  else:
11525
12245
  result.append(value)
11526
- value = self.subnode_use_lasterror
12246
+ value = self.subnode_use_last_error
11527
12247
  if value is None:
11528
12248
  pass
11529
12249
  else:
@@ -11546,7 +12266,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11546
12266
  ("mode", self.subnode_mode),
11547
12267
  ("handle", self.subnode_handle),
11548
12268
  ("use_errno", self.subnode_use_errno),
11549
- ("use_lasterror", self.subnode_use_lasterror),
12269
+ ("use_last_error", self.subnode_use_last_error),
11550
12270
  ("winmode", self.subnode_winmode),
11551
12271
  )
11552
12272
 
@@ -11586,12 +12306,12 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11586
12306
 
11587
12307
  return
11588
12308
 
11589
- value = self.subnode_use_lasterror
12309
+ value = self.subnode_use_last_error
11590
12310
  if old_node is value:
11591
12311
  if new_node is not None:
11592
12312
  new_node.parent = self
11593
12313
 
11594
- self.subnode_use_lasterror = new_node
12314
+ self.subnode_use_last_error = new_node
11595
12315
 
11596
12316
  return
11597
12317
 
@@ -11614,21 +12334,29 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11614
12334
 
11615
12335
  values = {
11616
12336
  "name": self.subnode_name.makeClone(),
11617
- "mode": self.subnode_mode.makeClone()
11618
- if self.subnode_mode is not None
11619
- else None,
11620
- "handle": self.subnode_handle.makeClone()
11621
- if self.subnode_handle is not None
11622
- else None,
11623
- "use_errno": self.subnode_use_errno.makeClone()
11624
- if self.subnode_use_errno is not None
11625
- else None,
11626
- "use_lasterror": self.subnode_use_lasterror.makeClone()
11627
- if self.subnode_use_lasterror is not None
11628
- else None,
11629
- "winmode": self.subnode_winmode.makeClone()
11630
- if self.subnode_winmode is not None
11631
- else None,
12337
+ "mode": (
12338
+ self.subnode_mode.makeClone() if self.subnode_mode is not None else None
12339
+ ),
12340
+ "handle": (
12341
+ self.subnode_handle.makeClone()
12342
+ if self.subnode_handle is not None
12343
+ else None
12344
+ ),
12345
+ "use_errno": (
12346
+ self.subnode_use_errno.makeClone()
12347
+ if self.subnode_use_errno is not None
12348
+ else None
12349
+ ),
12350
+ "use_last_error": (
12351
+ self.subnode_use_last_error.makeClone()
12352
+ if self.subnode_use_last_error is not None
12353
+ else None
12354
+ ),
12355
+ "winmode": (
12356
+ self.subnode_winmode.makeClone()
12357
+ if self.subnode_winmode is not None
12358
+ else None
12359
+ ),
11632
12360
  }
11633
12361
 
11634
12362
  values.update(self.getDetails())
@@ -11649,9 +12377,9 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11649
12377
  if self.subnode_use_errno is not None:
11650
12378
  self.subnode_use_errno.finalize()
11651
12379
  del self.subnode_use_errno
11652
- if self.subnode_use_lasterror is not None:
11653
- self.subnode_use_lasterror.finalize()
11654
- del self.subnode_use_lasterror
12380
+ if self.subnode_use_last_error is not None:
12381
+ self.subnode_use_last_error.finalize()
12382
+ del self.subnode_use_last_error
11655
12383
  if self.subnode_winmode is not None:
11656
12384
  self.subnode_winmode.finalize()
11657
12385
  del self.subnode_winmode
@@ -11704,10 +12432,10 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11704
12432
 
11705
12433
  if subnode_use_errno is not None:
11706
12434
  self.subnode_use_errno.collectVariableAccesses(emit_read, emit_write)
11707
- subnode_use_lasterror = self.subnode_use_lasterror
12435
+ subnode_use_last_error = self.subnode_use_last_error
11708
12436
 
11709
- if subnode_use_lasterror is not None:
11710
- self.subnode_use_lasterror.collectVariableAccesses(emit_read, emit_write)
12437
+ if subnode_use_last_error is not None:
12438
+ self.subnode_use_last_error.collectVariableAccesses(emit_read, emit_write)
11711
12439
  subnode_winmode = self.subnode_winmode
11712
12440
 
11713
12441
  if subnode_winmode is not None:
@@ -11715,7 +12443,7 @@ class ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOp
11715
12443
 
11716
12444
 
11717
12445
  # Assign the names that are easier to import with a stable name.
11718
- ChildrenExpressionCtypesCdllMixin = ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLasterrorOptionalWinmodeOptionalMixin
12446
+ ChildrenExpressionCtypesCdllMixin = ChildrenHavingNameModeOptionalHandleOptionalUseErrnoOptionalUseLastErrorOptionalWinmodeOptionalMixin
11719
12447
 
11720
12448
 
11721
12449
  class ChildrenHavingNamePackageOptionalMixin(object):
@@ -11790,9 +12518,11 @@ class ChildrenHavingNamePackageOptionalMixin(object):
11790
12518
 
11791
12519
  values = {
11792
12520
  "name": self.subnode_name.makeClone(),
11793
- "package": self.subnode_package.makeClone()
11794
- if self.subnode_package is not None
11795
- else None,
12521
+ "package": (
12522
+ self.subnode_package.makeClone()
12523
+ if self.subnode_package is not None
12524
+ else None
12525
+ ),
11796
12526
  }
11797
12527
 
11798
12528
  values.update(self.getDetails())
@@ -11963,6 +12693,7 @@ class ChildHavingPMixin(object):
11963
12693
 
11964
12694
  # This is generated for use in
11965
12695
  # ExpressionOsPathBasename
12696
+ # ExpressionOsPathDirname
11966
12697
 
11967
12698
  def __init__(
11968
12699
  self,
@@ -12046,6 +12777,7 @@ class ChildHavingPMixin(object):
12046
12777
 
12047
12778
  # Assign the names that are easier to import with a stable name.
12048
12779
  ChildrenExpressionOsPathBasenameMixin = ChildHavingPMixin
12780
+ ChildrenExpressionOsPathDirnameMixin = ChildHavingPMixin
12049
12781
 
12050
12782
 
12051
12783
  class ChildHavingPackageMixin(object):
@@ -12397,12 +13129,16 @@ class ChildrenHavingPackageResourceEncodingOptionalErrorsOptionalMixin(object):
12397
13129
  values = {
12398
13130
  "package": self.subnode_package.makeClone(),
12399
13131
  "resource": self.subnode_resource.makeClone(),
12400
- "encoding": self.subnode_encoding.makeClone()
12401
- if self.subnode_encoding is not None
12402
- else None,
12403
- "errors": self.subnode_errors.makeClone()
12404
- if self.subnode_errors is not None
12405
- else None,
13132
+ "encoding": (
13133
+ self.subnode_encoding.makeClone()
13134
+ if self.subnode_encoding is not None
13135
+ else None
13136
+ ),
13137
+ "errors": (
13138
+ self.subnode_errors.makeClone()
13139
+ if self.subnode_errors is not None
13140
+ else None
13141
+ ),
12406
13142
  }
12407
13143
 
12408
13144
  values.update(self.getDetails())
@@ -12872,6 +13608,7 @@ class ChildHavingPathMixin(object):
12872
13608
  # ExpressionOsPathExists
12873
13609
  # ExpressionOsPathIsdir
12874
13610
  # ExpressionOsPathIsfile
13611
+ # ExpressionOsPathNormpath
12875
13612
 
12876
13613
  def __init__(
12877
13614
  self,
@@ -12958,6 +13695,7 @@ ChildrenExpressionOsPathAbspathMixin = ChildHavingPathMixin
12958
13695
  ChildrenExpressionOsPathExistsMixin = ChildHavingPathMixin
12959
13696
  ChildrenExpressionOsPathIsdirMixin = ChildHavingPathMixin
12960
13697
  ChildrenExpressionOsPathIsfileMixin = ChildHavingPathMixin
13698
+ ChildrenExpressionOsPathNormpathMixin = ChildHavingPathMixin
12961
13699
 
12962
13700
 
12963
13701
  class ChildHavingPathOptionalMixin(object):
@@ -12974,17 +13712,297 @@ class ChildHavingPathOptionalMixin(object):
12974
13712
  if path is not None:
12975
13713
  path.parent = self
12976
13714
 
12977
- self.subnode_path = path
13715
+ self.subnode_path = path
13716
+
13717
+ def getVisitableNodes(self):
13718
+ """The visitable nodes, with tuple values flattened."""
13719
+
13720
+ value = self.subnode_path
13721
+
13722
+ if value is None:
13723
+ return ()
13724
+ else:
13725
+ return (value,)
13726
+
13727
+ def getVisitableNodesNamed(self):
13728
+ """Named children dictionary.
13729
+
13730
+ For use in cloning nodes, debugging and XML output.
13731
+ """
13732
+
13733
+ return (("path", self.subnode_path),)
13734
+
13735
+ def replaceChild(self, old_node, new_node):
13736
+ value = self.subnode_path
13737
+ if old_node is value:
13738
+ if new_node is not None:
13739
+ new_node.parent = self
13740
+
13741
+ self.subnode_path = new_node
13742
+
13743
+ return
13744
+
13745
+ raise AssertionError("Didn't find child", old_node, "in", self)
13746
+
13747
+ def getCloneArgs(self):
13748
+ """Get clones of all children to pass for a new node.
13749
+
13750
+ Needs to make clones of child nodes too.
13751
+ """
13752
+
13753
+ values = {
13754
+ "path": (
13755
+ self.subnode_path.makeClone() if self.subnode_path is not None else None
13756
+ ),
13757
+ }
13758
+
13759
+ values.update(self.getDetails())
13760
+
13761
+ return values
13762
+
13763
+ def finalize(self):
13764
+ del self.parent
13765
+
13766
+ if self.subnode_path is not None:
13767
+ self.subnode_path.finalize()
13768
+ del self.subnode_path
13769
+
13770
+ def computeExpressionRaw(self, trace_collection):
13771
+ """Compute an expression.
13772
+
13773
+ Default behavior is to just visit the child expressions first, and
13774
+ then the node "computeExpression". For a few cases this needs to
13775
+ be overloaded, e.g. conditional expressions.
13776
+ """
13777
+
13778
+ # First apply the sub-expression, as they it's evaluated before.
13779
+ expression = self.subnode_path
13780
+
13781
+ if expression is not None:
13782
+ expression = trace_collection.onExpression(expression)
13783
+
13784
+ if expression.willRaiseAnyException():
13785
+ return (
13786
+ expression,
13787
+ "new_raise",
13788
+ lambda: "For '%s' the child expression '%s' will raise."
13789
+ % (self.getChildNameNice(), expression.getChildNameNice()),
13790
+ )
13791
+
13792
+ # Then ask ourselves to work on it.
13793
+ return self.computeExpression(trace_collection)
13794
+
13795
+ def collectVariableAccesses(self, emit_read, emit_write):
13796
+ """Collect variable reads and writes of child nodes."""
13797
+
13798
+ subnode_path = self.subnode_path
13799
+
13800
+ if subnode_path is not None:
13801
+ self.subnode_path.collectVariableAccesses(emit_read, emit_write)
13802
+
13803
+
13804
+ # Assign the names that are easier to import with a stable name.
13805
+ ChildrenExpressionOsListdirMixin = ChildHavingPathOptionalMixin
13806
+
13807
+
13808
+ class ChildrenHavingPathOptionalDirFdOptionalMixin(object):
13809
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
13810
+ __slots__ = ()
13811
+
13812
+ # This is generated for use in
13813
+ # ExpressionOsLstat
13814
+
13815
+ def __init__(
13816
+ self,
13817
+ path,
13818
+ dir_fd,
13819
+ ):
13820
+ if path is not None:
13821
+ path.parent = self
13822
+
13823
+ self.subnode_path = path
13824
+
13825
+ if dir_fd is not None:
13826
+ dir_fd.parent = self
13827
+
13828
+ self.subnode_dir_fd = dir_fd
13829
+
13830
+ def getVisitableNodes(self):
13831
+ """The visitable nodes, with tuple values flattened."""
13832
+
13833
+ result = []
13834
+ value = self.subnode_path
13835
+ if value is None:
13836
+ pass
13837
+ else:
13838
+ result.append(value)
13839
+ value = self.subnode_dir_fd
13840
+ if value is None:
13841
+ pass
13842
+ else:
13843
+ result.append(value)
13844
+ return tuple(result)
13845
+
13846
+ def getVisitableNodesNamed(self):
13847
+ """Named children dictionary.
13848
+
13849
+ For use in cloning nodes, debugging and XML output.
13850
+ """
13851
+
13852
+ return (
13853
+ ("path", self.subnode_path),
13854
+ ("dir_fd", self.subnode_dir_fd),
13855
+ )
13856
+
13857
+ def replaceChild(self, old_node, new_node):
13858
+ value = self.subnode_path
13859
+ if old_node is value:
13860
+ if new_node is not None:
13861
+ new_node.parent = self
13862
+
13863
+ self.subnode_path = new_node
13864
+
13865
+ return
13866
+
13867
+ value = self.subnode_dir_fd
13868
+ if old_node is value:
13869
+ if new_node is not None:
13870
+ new_node.parent = self
13871
+
13872
+ self.subnode_dir_fd = new_node
13873
+
13874
+ return
13875
+
13876
+ raise AssertionError("Didn't find child", old_node, "in", self)
13877
+
13878
+ def getCloneArgs(self):
13879
+ """Get clones of all children to pass for a new node.
13880
+
13881
+ Needs to make clones of child nodes too.
13882
+ """
13883
+
13884
+ values = {
13885
+ "path": (
13886
+ self.subnode_path.makeClone() if self.subnode_path is not None else None
13887
+ ),
13888
+ "dir_fd": (
13889
+ self.subnode_dir_fd.makeClone()
13890
+ if self.subnode_dir_fd is not None
13891
+ else None
13892
+ ),
13893
+ }
13894
+
13895
+ values.update(self.getDetails())
13896
+
13897
+ return values
13898
+
13899
+ def finalize(self):
13900
+ del self.parent
13901
+
13902
+ if self.subnode_path is not None:
13903
+ self.subnode_path.finalize()
13904
+ del self.subnode_path
13905
+ if self.subnode_dir_fd is not None:
13906
+ self.subnode_dir_fd.finalize()
13907
+ del self.subnode_dir_fd
13908
+
13909
+ def computeExpressionRaw(self, trace_collection):
13910
+ """Compute an expression.
13911
+
13912
+ Default behavior is to just visit the child expressions first, and
13913
+ then the node "computeExpression". For a few cases this needs to
13914
+ be overloaded, e.g. conditional expressions.
13915
+ """
13916
+
13917
+ # First apply the sub-expressions, as they are evaluated before
13918
+ # the actual operation.
13919
+ for count, sub_expression in enumerate(self.getVisitableNodes()):
13920
+ expression = trace_collection.onExpression(sub_expression)
13921
+
13922
+ if expression.willRaiseAnyException():
13923
+ sub_expressions = self.getVisitableNodes()
13924
+
13925
+ wrapped_expression = wrapExpressionWithSideEffects(
13926
+ side_effects=sub_expressions[:count],
13927
+ old_node=sub_expression,
13928
+ new_node=expression,
13929
+ )
13930
+
13931
+ return (
13932
+ wrapped_expression,
13933
+ "new_raise",
13934
+ lambda: "For '%s' the child expression '%s' will raise."
13935
+ % (self.getChildNameNice(), expression.getChildNameNice()),
13936
+ )
13937
+
13938
+ # Then ask ourselves to work on it.
13939
+ return self.computeExpression(trace_collection)
13940
+
13941
+ def collectVariableAccesses(self, emit_read, emit_write):
13942
+ """Collect variable reads and writes of child nodes."""
13943
+
13944
+ subnode_path = self.subnode_path
13945
+
13946
+ if subnode_path is not None:
13947
+ self.subnode_path.collectVariableAccesses(emit_read, emit_write)
13948
+ subnode_dir_fd = self.subnode_dir_fd
13949
+
13950
+ if subnode_dir_fd is not None:
13951
+ self.subnode_dir_fd.collectVariableAccesses(emit_read, emit_write)
13952
+
13953
+
13954
+ # Assign the names that are easier to import with a stable name.
13955
+ ChildrenExpressionOsLstatMixin = ChildrenHavingPathOptionalDirFdOptionalMixin
13956
+
13957
+
13958
+ class ChildrenHavingPathOptionalDirFdOptionalFollowSymlinksOptionalMixin(object):
13959
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
13960
+ __slots__ = ()
13961
+
13962
+ # This is generated for use in
13963
+ # ExpressionOsStat
13964
+
13965
+ def __init__(
13966
+ self,
13967
+ path,
13968
+ dir_fd,
13969
+ follow_symlinks,
13970
+ ):
13971
+ if path is not None:
13972
+ path.parent = self
13973
+
13974
+ self.subnode_path = path
13975
+
13976
+ if dir_fd is not None:
13977
+ dir_fd.parent = self
13978
+
13979
+ self.subnode_dir_fd = dir_fd
13980
+
13981
+ if follow_symlinks is not None:
13982
+ follow_symlinks.parent = self
13983
+
13984
+ self.subnode_follow_symlinks = follow_symlinks
12978
13985
 
12979
13986
  def getVisitableNodes(self):
12980
13987
  """The visitable nodes, with tuple values flattened."""
12981
13988
 
13989
+ result = []
12982
13990
  value = self.subnode_path
12983
-
12984
13991
  if value is None:
12985
- return ()
13992
+ pass
12986
13993
  else:
12987
- return (value,)
13994
+ result.append(value)
13995
+ value = self.subnode_dir_fd
13996
+ if value is None:
13997
+ pass
13998
+ else:
13999
+ result.append(value)
14000
+ value = self.subnode_follow_symlinks
14001
+ if value is None:
14002
+ pass
14003
+ else:
14004
+ result.append(value)
14005
+ return tuple(result)
12988
14006
 
12989
14007
  def getVisitableNodesNamed(self):
12990
14008
  """Named children dictionary.
@@ -12992,7 +14010,11 @@ class ChildHavingPathOptionalMixin(object):
12992
14010
  For use in cloning nodes, debugging and XML output.
12993
14011
  """
12994
14012
 
12995
- return (("path", self.subnode_path),)
14013
+ return (
14014
+ ("path", self.subnode_path),
14015
+ ("dir_fd", self.subnode_dir_fd),
14016
+ ("follow_symlinks", self.subnode_follow_symlinks),
14017
+ )
12996
14018
 
12997
14019
  def replaceChild(self, old_node, new_node):
12998
14020
  value = self.subnode_path
@@ -13004,6 +14026,24 @@ class ChildHavingPathOptionalMixin(object):
13004
14026
 
13005
14027
  return
13006
14028
 
14029
+ value = self.subnode_dir_fd
14030
+ if old_node is value:
14031
+ if new_node is not None:
14032
+ new_node.parent = self
14033
+
14034
+ self.subnode_dir_fd = new_node
14035
+
14036
+ return
14037
+
14038
+ value = self.subnode_follow_symlinks
14039
+ if old_node is value:
14040
+ if new_node is not None:
14041
+ new_node.parent = self
14042
+
14043
+ self.subnode_follow_symlinks = new_node
14044
+
14045
+ return
14046
+
13007
14047
  raise AssertionError("Didn't find child", old_node, "in", self)
13008
14048
 
13009
14049
  def getCloneArgs(self):
@@ -13013,9 +14053,19 @@ class ChildHavingPathOptionalMixin(object):
13013
14053
  """
13014
14054
 
13015
14055
  values = {
13016
- "path": self.subnode_path.makeClone()
13017
- if self.subnode_path is not None
13018
- else None,
14056
+ "path": (
14057
+ self.subnode_path.makeClone() if self.subnode_path is not None else None
14058
+ ),
14059
+ "dir_fd": (
14060
+ self.subnode_dir_fd.makeClone()
14061
+ if self.subnode_dir_fd is not None
14062
+ else None
14063
+ ),
14064
+ "follow_symlinks": (
14065
+ self.subnode_follow_symlinks.makeClone()
14066
+ if self.subnode_follow_symlinks is not None
14067
+ else None
14068
+ ),
13019
14069
  }
13020
14070
 
13021
14071
  values.update(self.getDetails())
@@ -13028,6 +14078,12 @@ class ChildHavingPathOptionalMixin(object):
13028
14078
  if self.subnode_path is not None:
13029
14079
  self.subnode_path.finalize()
13030
14080
  del self.subnode_path
14081
+ if self.subnode_dir_fd is not None:
14082
+ self.subnode_dir_fd.finalize()
14083
+ del self.subnode_dir_fd
14084
+ if self.subnode_follow_symlinks is not None:
14085
+ self.subnode_follow_symlinks.finalize()
14086
+ del self.subnode_follow_symlinks
13031
14087
 
13032
14088
  def computeExpressionRaw(self, trace_collection):
13033
14089
  """Compute an expression.
@@ -13037,15 +14093,22 @@ class ChildHavingPathOptionalMixin(object):
13037
14093
  be overloaded, e.g. conditional expressions.
13038
14094
  """
13039
14095
 
13040
- # First apply the sub-expression, as they it's evaluated before.
13041
- expression = self.subnode_path
13042
-
13043
- if expression is not None:
13044
- expression = trace_collection.onExpression(expression)
14096
+ # First apply the sub-expressions, as they are evaluated before
14097
+ # the actual operation.
14098
+ for count, sub_expression in enumerate(self.getVisitableNodes()):
14099
+ expression = trace_collection.onExpression(sub_expression)
13045
14100
 
13046
14101
  if expression.willRaiseAnyException():
14102
+ sub_expressions = self.getVisitableNodes()
14103
+
14104
+ wrapped_expression = wrapExpressionWithSideEffects(
14105
+ side_effects=sub_expressions[:count],
14106
+ old_node=sub_expression,
14107
+ new_node=expression,
14108
+ )
14109
+
13047
14110
  return (
13048
- expression,
14111
+ wrapped_expression,
13049
14112
  "new_raise",
13050
14113
  lambda: "For '%s' the child expression '%s' will raise."
13051
14114
  % (self.getChildNameNice(), expression.getChildNameNice()),
@@ -13061,10 +14124,20 @@ class ChildHavingPathOptionalMixin(object):
13061
14124
 
13062
14125
  if subnode_path is not None:
13063
14126
  self.subnode_path.collectVariableAccesses(emit_read, emit_write)
14127
+ subnode_dir_fd = self.subnode_dir_fd
14128
+
14129
+ if subnode_dir_fd is not None:
14130
+ self.subnode_dir_fd.collectVariableAccesses(emit_read, emit_write)
14131
+ subnode_follow_symlinks = self.subnode_follow_symlinks
14132
+
14133
+ if subnode_follow_symlinks is not None:
14134
+ self.subnode_follow_symlinks.collectVariableAccesses(emit_read, emit_write)
13064
14135
 
13065
14136
 
13066
14137
  # Assign the names that are easier to import with a stable name.
13067
- ChildrenExpressionOsListdirMixin = ChildHavingPathOptionalMixin
14138
+ ChildrenExpressionOsStatMixin = (
14139
+ ChildrenHavingPathOptionalDirFdOptionalFollowSymlinksOptionalMixin
14140
+ )
13068
14141
 
13069
14142
 
13070
14143
  class ChildrenHavingPosArgOptionalPairsTupleMixin(object):
@@ -13146,9 +14219,11 @@ class ChildrenHavingPosArgOptionalPairsTupleMixin(object):
13146
14219
  """
13147
14220
 
13148
14221
  values = {
13149
- "pos_arg": self.subnode_pos_arg.makeClone()
13150
- if self.subnode_pos_arg is not None
13151
- else None,
14222
+ "pos_arg": (
14223
+ self.subnode_pos_arg.makeClone()
14224
+ if self.subnode_pos_arg is not None
14225
+ else None
14226
+ ),
13152
14227
  "pairs": tuple(v.makeClone() for v in self.subnode_pairs),
13153
14228
  }
13154
14229
 
@@ -13284,9 +14359,9 @@ class ChildrenHavingRealOptionalImagMixin(object):
13284
14359
  """
13285
14360
 
13286
14361
  values = {
13287
- "real": self.subnode_real.makeClone()
13288
- if self.subnode_real is not None
13289
- else None,
14362
+ "real": (
14363
+ self.subnode_real.makeClone() if self.subnode_real is not None else None
14364
+ ),
13290
14365
  "imag": self.subnode_imag.makeClone(),
13291
14366
  }
13292
14367
 
@@ -14284,15 +15359,21 @@ class ChildrenHavingSourceFilenameModeFlagsOptionalDontInheritOptionalOptimizeOp
14284
15359
  "source": self.subnode_source.makeClone(),
14285
15360
  "filename": self.subnode_filename.makeClone(),
14286
15361
  "mode": self.subnode_mode.makeClone(),
14287
- "flags": self.subnode_flags.makeClone()
14288
- if self.subnode_flags is not None
14289
- else None,
14290
- "dont_inherit": self.subnode_dont_inherit.makeClone()
14291
- if self.subnode_dont_inherit is not None
14292
- else None,
14293
- "optimize": self.subnode_optimize.makeClone()
14294
- if self.subnode_optimize is not None
14295
- else None,
15362
+ "flags": (
15363
+ self.subnode_flags.makeClone()
15364
+ if self.subnode_flags is not None
15365
+ else None
15366
+ ),
15367
+ "dont_inherit": (
15368
+ self.subnode_dont_inherit.makeClone()
15369
+ if self.subnode_dont_inherit is not None
15370
+ else None
15371
+ ),
15372
+ "optimize": (
15373
+ self.subnode_optimize.makeClone()
15374
+ if self.subnode_optimize is not None
15375
+ else None
15376
+ ),
14296
15377
  }
14297
15378
 
14298
15379
  values.update(self.getDetails())
@@ -14625,9 +15706,11 @@ class ChildrenHavingSourceCodeGlobalsArgLocalsArgClosureOptionalMixin(object):
14625
15706
  "source_code": self.subnode_source_code.makeClone(),
14626
15707
  "globals_arg": self.subnode_globals_arg.makeClone(),
14627
15708
  "locals_arg": self.subnode_locals_arg.makeClone(),
14628
- "closure": self.subnode_closure.makeClone()
14629
- if self.subnode_closure is not None
14630
- else None,
15709
+ "closure": (
15710
+ self.subnode_closure.makeClone()
15711
+ if self.subnode_closure is not None
15712
+ else None
15713
+ ),
14631
15714
  }
14632
15715
 
14633
15716
  values.update(self.getDetails())
@@ -18535,12 +19618,16 @@ class ChildrenHavingStringEncodingOptionalErrorsOptionalMixin(object):
18535
19618
 
18536
19619
  values = {
18537
19620
  "string": self.subnode_string.makeClone(),
18538
- "encoding": self.subnode_encoding.makeClone()
18539
- if self.subnode_encoding is not None
18540
- else None,
18541
- "errors": self.subnode_errors.makeClone()
18542
- if self.subnode_errors is not None
18543
- else None,
19621
+ "encoding": (
19622
+ self.subnode_encoding.makeClone()
19623
+ if self.subnode_encoding is not None
19624
+ else None
19625
+ ),
19626
+ "errors": (
19627
+ self.subnode_errors.makeClone()
19628
+ if self.subnode_errors is not None
19629
+ else None
19630
+ ),
18544
19631
  }
18545
19632
 
18546
19633
  values.update(self.getDetails())
@@ -18795,12 +19882,14 @@ class ChildrenHavingTypeArgArgsOptionalKwargsOptionalMixin(object):
18795
19882
 
18796
19883
  values = {
18797
19884
  "type_arg": self.subnode_type_arg.makeClone(),
18798
- "args": self.subnode_args.makeClone()
18799
- if self.subnode_args is not None
18800
- else None,
18801
- "kwargs": self.subnode_kwargs.makeClone()
18802
- if self.subnode_kwargs is not None
18803
- else None,
19885
+ "args": (
19886
+ self.subnode_args.makeClone() if self.subnode_args is not None else None
19887
+ ),
19888
+ "kwargs": (
19889
+ self.subnode_kwargs.makeClone()
19890
+ if self.subnode_kwargs is not None
19891
+ else None
19892
+ ),
18804
19893
  }
18805
19894
 
18806
19895
  values.update(self.getDetails())
@@ -19140,6 +20229,233 @@ class ChildrenHavingTypeNameBasesDictArgMixin(object):
19140
20229
  ChildrenExpressionBuiltinType3Mixin = ChildrenHavingTypeNameBasesDictArgMixin
19141
20230
 
19142
20231
 
20232
+ class ChildHavingTypeParamsMixin(object):
20233
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
20234
+ __slots__ = ()
20235
+
20236
+ # This is generated for use in
20237
+ # ExpressionTypeMakeGeneric
20238
+
20239
+ def __init__(
20240
+ self,
20241
+ type_params,
20242
+ ):
20243
+ type_params.parent = self
20244
+
20245
+ self.subnode_type_params = type_params
20246
+
20247
+ def getVisitableNodes(self):
20248
+ """The visitable nodes, with tuple values flattened."""
20249
+
20250
+ return (self.subnode_type_params,)
20251
+
20252
+ def getVisitableNodesNamed(self):
20253
+ """Named children dictionary.
20254
+
20255
+ For use in cloning nodes, debugging and XML output.
20256
+ """
20257
+
20258
+ return (("type_params", self.subnode_type_params),)
20259
+
20260
+ def replaceChild(self, old_node, new_node):
20261
+ value = self.subnode_type_params
20262
+ if old_node is value:
20263
+ new_node.parent = self
20264
+
20265
+ self.subnode_type_params = new_node
20266
+
20267
+ return
20268
+
20269
+ raise AssertionError("Didn't find child", old_node, "in", self)
20270
+
20271
+ def getCloneArgs(self):
20272
+ """Get clones of all children to pass for a new node.
20273
+
20274
+ Needs to make clones of child nodes too.
20275
+ """
20276
+
20277
+ values = {
20278
+ "type_params": self.subnode_type_params.makeClone(),
20279
+ }
20280
+
20281
+ values.update(self.getDetails())
20282
+
20283
+ return values
20284
+
20285
+ def finalize(self):
20286
+ del self.parent
20287
+
20288
+ self.subnode_type_params.finalize()
20289
+ del self.subnode_type_params
20290
+
20291
+ def computeExpressionRaw(self, trace_collection):
20292
+ """Compute an expression.
20293
+
20294
+ Default behavior is to just visit the child expressions first, and
20295
+ then the node "computeExpression". For a few cases this needs to
20296
+ be overloaded, e.g. conditional expressions.
20297
+ """
20298
+
20299
+ # First apply the sub-expression, as they it's evaluated before.
20300
+ expression = trace_collection.onExpression(self.subnode_type_params)
20301
+
20302
+ if expression.willRaiseAnyException():
20303
+ return (
20304
+ expression,
20305
+ "new_raise",
20306
+ lambda: "For '%s' the child expression '%s' will raise."
20307
+ % (self.getChildNameNice(), expression.getChildNameNice()),
20308
+ )
20309
+
20310
+ # Then ask ourselves to work on it.
20311
+ return self.computeExpression(trace_collection)
20312
+
20313
+ def collectVariableAccesses(self, emit_read, emit_write):
20314
+ """Collect variable reads and writes of child nodes."""
20315
+
20316
+ self.subnode_type_params.collectVariableAccesses(emit_read, emit_write)
20317
+
20318
+
20319
+ # Assign the names that are easier to import with a stable name.
20320
+ ChildrenExpressionTypeMakeGenericMixin = ChildHavingTypeParamsMixin
20321
+
20322
+
20323
+ class ChildrenHavingTypeParamsTupleComputeValueMixin(object):
20324
+ # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
20325
+ __slots__ = ()
20326
+
20327
+ # This is generated for use in
20328
+ # ExpressionTypeAlias
20329
+
20330
+ def __init__(
20331
+ self,
20332
+ type_params,
20333
+ compute_value,
20334
+ ):
20335
+ assert type(type_params) is tuple
20336
+
20337
+ for val in type_params:
20338
+ val.parent = self
20339
+
20340
+ self.subnode_type_params = type_params
20341
+
20342
+ compute_value.parent = self
20343
+
20344
+ self.subnode_compute_value = compute_value
20345
+
20346
+ def getVisitableNodes(self):
20347
+ """The visitable nodes, with tuple values flattened."""
20348
+
20349
+ result = []
20350
+ result.extend(self.subnode_type_params)
20351
+ result.append(self.subnode_compute_value)
20352
+ return tuple(result)
20353
+
20354
+ def getVisitableNodesNamed(self):
20355
+ """Named children dictionary.
20356
+
20357
+ For use in cloning nodes, debugging and XML output.
20358
+ """
20359
+
20360
+ return (
20361
+ ("type_params", self.subnode_type_params),
20362
+ ("compute_value", self.subnode_compute_value),
20363
+ )
20364
+
20365
+ def replaceChild(self, old_node, new_node):
20366
+ value = self.subnode_type_params
20367
+ if old_node in value:
20368
+ if new_node is not None:
20369
+ new_node.parent = self
20370
+
20371
+ self.subnode_type_params = tuple(
20372
+ (val if val is not old_node else new_node) for val in value
20373
+ )
20374
+ else:
20375
+ self.subnode_type_params = tuple(
20376
+ val for val in value if val is not old_node
20377
+ )
20378
+
20379
+ return
20380
+
20381
+ value = self.subnode_compute_value
20382
+ if old_node is value:
20383
+ new_node.parent = self
20384
+
20385
+ self.subnode_compute_value = new_node
20386
+
20387
+ return
20388
+
20389
+ raise AssertionError("Didn't find child", old_node, "in", self)
20390
+
20391
+ def getCloneArgs(self):
20392
+ """Get clones of all children to pass for a new node.
20393
+
20394
+ Needs to make clones of child nodes too.
20395
+ """
20396
+
20397
+ values = {
20398
+ "type_params": tuple(v.makeClone() for v in self.subnode_type_params),
20399
+ "compute_value": self.subnode_compute_value.makeClone(),
20400
+ }
20401
+
20402
+ values.update(self.getDetails())
20403
+
20404
+ return values
20405
+
20406
+ def finalize(self):
20407
+ del self.parent
20408
+
20409
+ for c in self.subnode_type_params:
20410
+ c.finalize()
20411
+ del self.subnode_type_params
20412
+ self.subnode_compute_value.finalize()
20413
+ del self.subnode_compute_value
20414
+
20415
+ def computeExpressionRaw(self, trace_collection):
20416
+ """Compute an expression.
20417
+
20418
+ Default behavior is to just visit the child expressions first, and
20419
+ then the node "computeExpression". For a few cases this needs to
20420
+ be overloaded, e.g. conditional expressions.
20421
+ """
20422
+
20423
+ # First apply the sub-expressions, as they are evaluated before
20424
+ # the actual operation.
20425
+ for count, sub_expression in enumerate(self.getVisitableNodes()):
20426
+ expression = trace_collection.onExpression(sub_expression)
20427
+
20428
+ if expression.willRaiseAnyException():
20429
+ sub_expressions = self.getVisitableNodes()
20430
+
20431
+ wrapped_expression = wrapExpressionWithSideEffects(
20432
+ side_effects=sub_expressions[:count],
20433
+ old_node=sub_expression,
20434
+ new_node=expression,
20435
+ )
20436
+
20437
+ return (
20438
+ wrapped_expression,
20439
+ "new_raise",
20440
+ lambda: "For '%s' the child expression '%s' will raise."
20441
+ % (self.getChildNameNice(), expression.getChildNameNice()),
20442
+ )
20443
+
20444
+ # Then ask ourselves to work on it.
20445
+ return self.computeExpression(trace_collection)
20446
+
20447
+ def collectVariableAccesses(self, emit_read, emit_write):
20448
+ """Collect variable reads and writes of child nodes."""
20449
+
20450
+ for element in self.subnode_type_params:
20451
+ element.collectVariableAccesses(emit_read, emit_write)
20452
+ self.subnode_compute_value.collectVariableAccesses(emit_read, emit_write)
20453
+
20454
+
20455
+ # Assign the names that are easier to import with a stable name.
20456
+ ChildrenExpressionTypeAliasMixin = ChildrenHavingTypeParamsTupleComputeValueMixin
20457
+
20458
+
19143
20459
  class ChildHavingValueMixin(object):
19144
20460
  # Mixins are not allowed to specify slots, pylint: disable=assigning-non-slot
19145
20461
  __slots__ = ()
@@ -19371,9 +20687,11 @@ class ChildrenHavingValueOptionalBaseMixin(object):
19371
20687
  """
19372
20688
 
19373
20689
  values = {
19374
- "value": self.subnode_value.makeClone()
19375
- if self.subnode_value is not None
19376
- else None,
20690
+ "value": (
20691
+ self.subnode_value.makeClone()
20692
+ if self.subnode_value is not None
20693
+ else None
20694
+ ),
19377
20695
  "base": self.subnode_base.makeClone(),
19378
20696
  }
19379
20697
 
@@ -19537,15 +20855,21 @@ class ChildrenHavingValueOptionalEncodingOptionalErrorsOptionalMixin(object):
19537
20855
  """
19538
20856
 
19539
20857
  values = {
19540
- "value": self.subnode_value.makeClone()
19541
- if self.subnode_value is not None
19542
- else None,
19543
- "encoding": self.subnode_encoding.makeClone()
19544
- if self.subnode_encoding is not None
19545
- else None,
19546
- "errors": self.subnode_errors.makeClone()
19547
- if self.subnode_errors is not None
19548
- else None,
20858
+ "value": (
20859
+ self.subnode_value.makeClone()
20860
+ if self.subnode_value is not None
20861
+ else None
20862
+ ),
20863
+ "encoding": (
20864
+ self.subnode_encoding.makeClone()
20865
+ if self.subnode_encoding is not None
20866
+ else None
20867
+ ),
20868
+ "errors": (
20869
+ self.subnode_errors.makeClone()
20870
+ if self.subnode_errors is not None
20871
+ else None
20872
+ ),
19549
20873
  }
19550
20874
 
19551
20875
  values.update(self.getDetails())
@@ -19700,9 +21024,11 @@ class ChildrenHavingValueFormatSpecOptionalAutoNoneEmptyStrMixin(object):
19700
21024
 
19701
21025
  values = {
19702
21026
  "value": self.subnode_value.makeClone(),
19703
- "format_spec": self.subnode_format_spec.makeClone()
19704
- if self.subnode_format_spec is not None
19705
- else None,
21027
+ "format_spec": (
21028
+ self.subnode_format_spec.makeClone()
21029
+ if self.subnode_format_spec is not None
21030
+ else None
21031
+ ),
19706
21032
  }
19707
21033
 
19708
21034
  values.update(self.getDetails())
@@ -20009,3 +21335,18 @@ class ChildHavingValuesTupleMixin(object):
20009
21335
 
20010
21336
  # Assign the names that are easier to import with a stable name.
20011
21337
  ChildrenExpressionStringConcatenationMixin = ChildHavingValuesTupleMixin
21338
+
21339
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
21340
+ # integrates with CPython, but also works on its own.
21341
+ #
21342
+ # Licensed under the Apache License, Version 2.0 (the "License");
21343
+ # you may not use this file except in compliance with the License.
21344
+ # You may obtain a copy of the License at
21345
+ #
21346
+ # http://www.apache.org/licenses/LICENSE-2.0
21347
+ #
21348
+ # Unless required by applicable law or agreed to in writing, software
21349
+ # distributed under the License is distributed on an "AS IS" BASIS,
21350
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21351
+ # See the License for the specific language governing permissions and
21352
+ # limitations under the License.