tpy-lang 0.3.0.dev0__py3-none-any.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.
Files changed (333) hide show
  1. tpy_lang-0.3.0.dev0.dist-info/METADATA +151 -0
  2. tpy_lang-0.3.0.dev0.dist-info/RECORD +333 -0
  3. tpy_lang-0.3.0.dev0.dist-info/WHEEL +4 -0
  4. tpy_lang-0.3.0.dev0.dist-info/entry_points.txt +3 -0
  5. tpyc/__init__.py +104 -0
  6. tpyc/__main__.py +6 -0
  7. tpyc/_buildinfo.py +1 -0
  8. tpyc/_data/docs/LANGUAGE_FEATURES.md +6278 -0
  9. tpyc/_data/docs/STDLIB_ROADMAP.md +1258 -0
  10. tpyc/_data/docs/TPY_FOR_AGENTS.md +556 -0
  11. tpyc/_data/lib/tpy/_bindings/__init__.py +6 -0
  12. tpyc/_data/lib/tpy/_bindings/pcre2.py +173 -0
  13. tpyc/_data/lib/tpy/_bindings/posix_socket.py +161 -0
  14. tpyc/_data/lib/tpy/_functools_macros.py +80 -0
  15. tpyc/_data/lib/tpy/_macro_helpers.py +161 -0
  16. tpyc/_data/lib/tpy/argparse.py +2062 -0
  17. tpyc/_data/lib/tpy/asyncio/__init__.py +744 -0
  18. tpyc/_data/lib/tpy/asyncio/_executor.py +515 -0
  19. tpyc/_data/lib/tpy/base64.py +410 -0
  20. tpyc/_data/lib/tpy/bisect.py +39 -0
  21. tpyc/_data/lib/tpy/builtins.py +38 -0
  22. tpyc/_data/lib/tpy/dataclasses.py +354 -0
  23. tpyc/_data/lib/tpy/enum.py +23 -0
  24. tpyc/_data/lib/tpy/functools.py +33 -0
  25. tpyc/_data/lib/tpy/hashlib.py +206 -0
  26. tpyc/_data/lib/tpy/heapq.py +118 -0
  27. tpyc/_data/lib/tpy/io.py +395 -0
  28. tpyc/_data/lib/tpy/json.py +221 -0
  29. tpyc/_data/lib/tpy/math.py +406 -0
  30. tpyc/_data/lib/tpy/random.py +597 -0
  31. tpyc/_data/lib/tpy/re.py +467 -0
  32. tpyc/_data/lib/tpy/socket.py +379 -0
  33. tpyc/_data/lib/tpy/struct.py +178 -0
  34. tpyc/_data/lib/tpy/sys.py +40 -0
  35. tpyc/_data/lib/tpy/time.py +39 -0
  36. tpyc/_data/lib/tpy/tpy/__init__.py +78 -0
  37. tpyc/_data/lib/tpy/tpy/_bootstrap/__init__.py +10 -0
  38. tpyc/_data/lib/tpy/tpy/_bootstrap/_decorators.py +37 -0
  39. tpyc/_data/lib/tpy/tpy/_bootstrap/_extern.py +64 -0
  40. tpyc/_data/lib/tpy/tpy/_builtins/__init__.py +11 -0
  41. tpyc/_data/lib/tpy/tpy/_builtins/_bytes.py +378 -0
  42. tpyc/_data/lib/tpy/tpy/_builtins/_dict.py +151 -0
  43. tpyc/_data/lib/tpy/tpy/_builtins/_exceptions.py +125 -0
  44. tpyc/_data/lib/tpy/tpy/_builtins/_funcs.py +681 -0
  45. tpyc/_data/lib/tpy/tpy/_builtins/_io.py +97 -0
  46. tpyc/_data/lib/tpy/tpy/_builtins/_list.py +127 -0
  47. tpyc/_data/lib/tpy/tpy/_builtins/_range.py +52 -0
  48. tpyc/_data/lib/tpy/tpy/_builtins/_set.py +139 -0
  49. tpyc/_data/lib/tpy/tpy/_builtins/_super.py +11 -0
  50. tpyc/_data/lib/tpy/tpy/_builtins/_types.py +661 -0
  51. tpyc/_data/lib/tpy/tpy/_core/__init__.py +23 -0
  52. tpyc/_data/lib/tpy/tpy/_core/_bytes_view.py +129 -0
  53. tpyc/_data/lib/tpy/tpy/_core/_containers.py +137 -0
  54. tpyc/_data/lib/tpy/tpy/_core/_functions.py +40 -0
  55. tpyc/_data/lib/tpy/tpy/_core/_types.py +2061 -0
  56. tpyc/_data/lib/tpy/tpy/_typing/__init__.py +77 -0
  57. tpyc/_data/lib/tpy/tpy/_version.py +29 -0
  58. tpyc/_data/lib/tpy/tpy/bits.py +28 -0
  59. tpyc/_data/lib/tpy/tpy/coro/__init__.py +127 -0
  60. tpyc/_data/lib/tpy/tpy/extern.py +8 -0
  61. tpyc/_data/lib/tpy/tpy/mem.py +49 -0
  62. tpyc/_data/lib/tpy/tpy/unsafe.py +195 -0
  63. tpyc/_data/lib/tpy/tpy/version.py +21 -0
  64. tpyc/_data/lib/tpy/typing.py +13 -0
  65. tpyc/_data/runtime/cpp/include/tpy/any.hpp +461 -0
  66. tpyc/_data/runtime/cpp/include/tpy/as_ostream.hpp +117 -0
  67. tpyc/_data/runtime/cpp/include/tpy/async.hpp +76 -0
  68. tpyc/_data/runtime/cpp/include/tpy/bigint.hpp +1343 -0
  69. tpyc/_data/runtime/cpp/include/tpy/builtins.hpp +400 -0
  70. tpyc/_data/runtime/cpp/include/tpy/bytes_ops.hpp +469 -0
  71. tpyc/_data/runtime/cpp/include/tpy/container_ops.hpp +487 -0
  72. tpyc/_data/runtime/cpp/include/tpy/copy_iter.hpp +82 -0
  73. tpyc/_data/runtime/cpp/include/tpy/core.hpp +558 -0
  74. tpyc/_data/runtime/cpp/include/tpy/dict_ops.hpp +289 -0
  75. tpyc/_data/runtime/cpp/include/tpy/dunder.hpp +750 -0
  76. tpyc/_data/runtime/cpp/include/tpy/dynamic.hpp +44 -0
  77. tpyc/_data/runtime/cpp/include/tpy/enum.hpp +40 -0
  78. tpyc/_data/runtime/cpp/include/tpy/file.hpp +245 -0
  79. tpyc/_data/runtime/cpp/include/tpy/fixed_int.hpp +317 -0
  80. tpyc/_data/runtime/cpp/include/tpy/format.hpp +954 -0
  81. tpyc/_data/runtime/cpp/include/tpy/frame_slot.hpp +120 -0
  82. tpyc/_data/runtime/cpp/include/tpy/generator.hpp +47 -0
  83. tpyc/_data/runtime/cpp/include/tpy/iterable_ops.hpp +122 -0
  84. tpyc/_data/runtime/cpp/include/tpy/itertools.hpp +749 -0
  85. tpyc/_data/runtime/cpp/include/tpy/next_iter.hpp +82 -0
  86. tpyc/_data/runtime/cpp/include/tpy/ordered_map.hpp +518 -0
  87. tpyc/_data/runtime/cpp/include/tpy/ordered_set.hpp +337 -0
  88. tpyc/_data/runtime/cpp/include/tpy/own_iter.hpp +54 -0
  89. tpyc/_data/runtime/cpp/include/tpy/pascal_graph_sdl.hpp +192 -0
  90. tpyc/_data/runtime/cpp/include/tpy/printing.hpp +302 -0
  91. tpyc/_data/runtime/cpp/include/tpy/protocols.hpp +61 -0
  92. tpyc/_data/runtime/cpp/include/tpy/range.hpp +115 -0
  93. tpyc/_data/runtime/cpp/include/tpy/ranges.hpp +212 -0
  94. tpyc/_data/runtime/cpp/include/tpy/set_ops.hpp +265 -0
  95. tpyc/_data/runtime/cpp/include/tpy/slice.hpp +47 -0
  96. tpyc/_data/runtime/cpp/include/tpy/span_iter.hpp +42 -0
  97. tpyc/_data/runtime/cpp/include/tpy/stdlib/math.hpp +41 -0
  98. tpyc/_data/runtime/cpp/include/tpy/stdlib/pcre2_h.hpp +96 -0
  99. tpyc/_data/runtime/cpp/include/tpy/stdlib/random.hpp +25 -0
  100. tpyc/_data/runtime/cpp/include/tpy/stdlib/socket_h.hpp +145 -0
  101. tpyc/_data/runtime/cpp/include/tpy/stdlib/time.hpp +62 -0
  102. tpyc/_data/runtime/cpp/include/tpy/system.hpp +121 -0
  103. tpyc/_data/runtime/cpp/include/tpy/throwable.hpp +55 -0
  104. tpyc/_data/runtime/cpp/include/tpy/tpy.hpp +156 -0
  105. tpyc/_data/runtime/cpp/include/tpy/type_name.hpp +77 -0
  106. tpyc/_data/runtime/cpp/include/tpy/type_traits.hpp +240 -0
  107. tpyc/_data/runtime/cpp/include/tpy/uninit_array_storage.hpp +250 -0
  108. tpyc/_data/runtime/cpp/include/tpy/uninit_heap_storage.hpp +277 -0
  109. tpyc/_data/runtime/cpp/include/tpy/varargs.hpp +174 -0
  110. tpyc/_data/runtime/cpp/include/tpy/variant_ref.hpp +118 -0
  111. tpyc/_data/runtime/cpp/src/stdlib/socket_impl.cpp +104 -0
  112. tpyc/_data/runtime/cpp/third_party/README.md +58 -0
  113. tpyc/_data/runtime/cpp/third_party/pcre2/AUTHORS +36 -0
  114. tpyc/_data/runtime/cpp/third_party/pcre2/CMakeLists.txt +1233 -0
  115. tpyc/_data/runtime/cpp/third_party/pcre2/COPYING +5 -0
  116. tpyc/_data/runtime/cpp/third_party/pcre2/ChangeLog +3097 -0
  117. tpyc/_data/runtime/cpp/third_party/pcre2/HACKING +853 -0
  118. tpyc/_data/runtime/cpp/third_party/pcre2/INSTALL +368 -0
  119. tpyc/_data/runtime/cpp/third_party/pcre2/LICENCE +94 -0
  120. tpyc/_data/runtime/cpp/third_party/pcre2/NEWS +492 -0
  121. tpyc/_data/runtime/cpp/third_party/pcre2/NON-AUTOTOOLS-BUILD +430 -0
  122. tpyc/_data/runtime/cpp/third_party/pcre2/README +956 -0
  123. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  124. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindEditline.cmake +16 -0
  125. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  126. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindReadline.cmake +29 -0
  127. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config-version.cmake.in +15 -0
  128. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config.cmake.in +148 -0
  129. tpyc/_data/runtime/cpp/third_party/pcre2/config-cmake.h.in +56 -0
  130. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-16.pc.in +13 -0
  131. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-32.pc.in +13 -0
  132. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-8.pc.in +13 -0
  133. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-posix.pc.in +13 -0
  134. tpyc/_data/runtime/cpp/third_party/pcre2/pcre2-config.in +121 -0
  135. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h +483 -0
  136. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.generic +483 -0
  137. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.in +460 -0
  138. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h +1010 -0
  139. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.generic +1010 -0
  140. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.in +1010 -0
  141. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_auto_possess.c +1371 -0
  142. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c +196 -0
  143. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c.dist +196 -0
  144. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chkdint.c +96 -0
  145. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_compile.c +11001 -0
  146. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_config.c +252 -0
  147. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_context.c +510 -0
  148. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_convert.c +1189 -0
  149. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dfa_match.c +4119 -0
  150. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dftables.c +297 -0
  151. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_error.c +345 -0
  152. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_extuni.c +162 -0
  153. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_find_bracket.c +219 -0
  154. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_fuzzsupport.c +792 -0
  155. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_internal.h +2084 -0
  156. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_intmodedep.h +940 -0
  157. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_compile.c +14972 -0
  158. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_match.c +200 -0
  159. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_misc.c +234 -0
  160. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_neon_inc.h +354 -0
  161. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_simd_inc.h +2355 -0
  162. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_test.c +2528 -0
  163. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_maketables.c +165 -0
  164. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match.c +7777 -0
  165. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match_data.c +185 -0
  166. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_newline.c +243 -0
  167. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ord2utf.c +120 -0
  168. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_pattern_info.c +432 -0
  169. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_printint.c +886 -0
  170. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_script_run.c +344 -0
  171. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_serialize.c +286 -0
  172. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_string_utils.c +237 -0
  173. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_study.c +1915 -0
  174. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substitute.c +1009 -0
  175. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substring.c +550 -0
  176. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_tables.c +234 -0
  177. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucd.c +5460 -0
  178. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucp.h +396 -0
  179. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucptables.c +1533 -0
  180. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_valid_utf.c +398 -0
  181. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_xclass.c +308 -0
  182. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2demo.c +497 -0
  183. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2grep.c +4606 -0
  184. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.c +425 -0
  185. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.h +187 -0
  186. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix_test.c +209 -0
  187. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2test.c +9708 -0
  188. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c +137 -0
  189. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c +327 -0
  190. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorFreeBSD.c +89 -0
  191. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorPosix.c +62 -0
  192. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorWindows.c +40 -0
  193. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorNetBSD.c +72 -0
  194. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorPosix.c +172 -0
  195. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorPosix.c +141 -0
  196. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorWindows.c +102 -0
  197. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfig.h +142 -0
  198. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigCPU.h +188 -0
  199. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigInternal.h +907 -0
  200. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.c +3561 -0
  201. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.h +2466 -0
  202. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_32.c +4636 -0
  203. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_64.c +3491 -0
  204. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_T2_32.c +4302 -0
  205. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeLOONGARCH_64.c +3765 -0
  206. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_32.c +472 -0
  207. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_64.c +387 -0
  208. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_common.c +4259 -0
  209. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_32.c +485 -0
  210. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_64.c +719 -0
  211. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_common.c +3161 -0
  212. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_32.c +142 -0
  213. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_64.c +222 -0
  214. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_common.c +3121 -0
  215. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeS390X.c +4526 -0
  216. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_32.c +1685 -0
  217. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_64.c +1398 -0
  218. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_common.c +5001 -0
  219. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitSerialize.c +516 -0
  220. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitUtils.c +344 -0
  221. tpyc/_data/runtime/cpp/third_party/pcre2.sources.txt +54 -0
  222. tpyc/_data/runtime/cpp/third_party/pcre2.vendor.json +7 -0
  223. tpyc/build/__init__.py +7 -0
  224. tpyc/build/pcre2.py +122 -0
  225. tpyc/build/third_party.py +413 -0
  226. tpyc/cli.py +822 -0
  227. tpyc/codegen_cpp/__init__.py +18 -0
  228. tpyc/codegen_cpp/builtins.py +484 -0
  229. tpyc/codegen_cpp/context.py +2064 -0
  230. tpyc/codegen_cpp/expressions.py +5940 -0
  231. tpyc/codegen_cpp/functions.py +1913 -0
  232. tpyc/codegen_cpp/gen_async.py +3258 -0
  233. tpyc/codegen_cpp/gen_generators.py +657 -0
  234. tpyc/codegen_cpp/generator.py +2258 -0
  235. tpyc/codegen_cpp/match.py +1997 -0
  236. tpyc/codegen_cpp/param_const.py +172 -0
  237. tpyc/codegen_cpp/protocols.py +907 -0
  238. tpyc/codegen_cpp/records.py +1654 -0
  239. tpyc/codegen_cpp/resumable_cfg.py +1651 -0
  240. tpyc/codegen_cpp/statements.py +4963 -0
  241. tpyc/codegen_cpp/string_dispatch.py +76 -0
  242. tpyc/codegen_cpp/test_context.py +46 -0
  243. tpyc/codegen_cpp/test_param_const.py +113 -0
  244. tpyc/codegen_cpp/test_resumable_cfg.py +182 -0
  245. tpyc/codegen_cpp/type_resolution.py +53 -0
  246. tpyc/codegen_cpp/types.py +436 -0
  247. tpyc/codegen_cpp/variant_access.py +135 -0
  248. tpyc/coercions.py +749 -0
  249. tpyc/compilation_context.py +57 -0
  250. tpyc/compiler.py +3945 -0
  251. tpyc/cycle_detection.py +358 -0
  252. tpyc/diagnostics.py +135 -0
  253. tpyc/dump_types.py +353 -0
  254. tpyc/frontend_diagnostics.py +47 -0
  255. tpyc/frontend_ir/__init__.py +140 -0
  256. tpyc/frontend_ir/lower.py +1098 -0
  257. tpyc/frontend_ir/nodes.py +718 -0
  258. tpyc/frontend_ir/resolver_adapter.py +151 -0
  259. tpyc/frontend_plugin.py +209 -0
  260. tpyc/install_docs.py +81 -0
  261. tpyc/liveness.py +756 -0
  262. tpyc/macro_api.py +1724 -0
  263. tpyc/macro_loader.py +497 -0
  264. tpyc/module_names.py +64 -0
  265. tpyc/modules/__init__.py +31 -0
  266. tpyc/modules/defs.py +89 -0
  267. tpyc/modules/registry.py +36 -0
  268. tpyc/modules/resolver.py +192 -0
  269. tpyc/modules/type_resolution.py +629 -0
  270. tpyc/namespace.py +172 -0
  271. tpyc/parse/__init__.py +84 -0
  272. tpyc/parse/imports.py +490 -0
  273. tpyc/parse/nodes.py +1732 -0
  274. tpyc/parse/parser.py +4043 -0
  275. tpyc/parse/resolve_refs.py +466 -0
  276. tpyc/parse/type_resolver.py +1060 -0
  277. tpyc/prescan.py +254 -0
  278. tpyc/qnames.py +149 -0
  279. tpyc/repl.py +529 -0
  280. tpyc/repl_backends.py +848 -0
  281. tpyc/sema/__init__.py +21 -0
  282. tpyc/sema/analyzer.py +3625 -0
  283. tpyc/sema/bound_check.py +72 -0
  284. tpyc/sema/builder_trace.py +684 -0
  285. tpyc/sema/calls.py +5406 -0
  286. tpyc/sema/compatibility.py +2107 -0
  287. tpyc/sema/context.py +1243 -0
  288. tpyc/sema/expressions.py +3737 -0
  289. tpyc/sema/flow_facts.py +199 -0
  290. tpyc/sema/init_tracker.py +150 -0
  291. tpyc/sema/list_literals.py +69 -0
  292. tpyc/sema/literal_utils.py +27 -0
  293. tpyc/sema/local_deduction.py +1088 -0
  294. tpyc/sema/macros.py +179 -0
  295. tpyc/sema/match.py +1177 -0
  296. tpyc/sema/method_expansion.py +347 -0
  297. tpyc/sema/methods.py +2197 -0
  298. tpyc/sema/mutation_propagation.py +268 -0
  299. tpyc/sema/narrowing.py +857 -0
  300. tpyc/sema/numeric_lattice.py +160 -0
  301. tpyc/sema/operators.py +402 -0
  302. tpyc/sema/overloads.py +841 -0
  303. tpyc/sema/protocols.py +1209 -0
  304. tpyc/sema/reach_analysis.py +202 -0
  305. tpyc/sema/registration.py +3156 -0
  306. tpyc/sema/scope_tracker.py +193 -0
  307. tpyc/sema/statements.py +4426 -0
  308. tpyc/sema/type_ops.py +1879 -0
  309. tpyc/sema/value_range.py +181 -0
  310. tpyc/symbol_binding.py +259 -0
  311. tpyc/test_c3_mro.py +208 -0
  312. tpyc/test_cli_argv.py +52 -0
  313. tpyc/test_compiler.py +559 -0
  314. tpyc/test_contains_type_param.py +101 -0
  315. tpyc/test_cycle_detection.py +221 -0
  316. tpyc/test_dump_types.py +225 -0
  317. tpyc/test_install_docs.py +65 -0
  318. tpyc/test_local_cpp_form.py +135 -0
  319. tpyc/test_macro_loader.py +76 -0
  320. tpyc/test_method_expansion.py +254 -0
  321. tpyc/test_nominal_identity.py +182 -0
  322. tpyc/test_overloads.py +410 -0
  323. tpyc/test_parse.py +303 -0
  324. tpyc/test_parse_type_ref.py +506 -0
  325. tpyc/test_parse_version_info.py +58 -0
  326. tpyc/test_reach_analysis.py +72 -0
  327. tpyc/test_ref_type.py +216 -0
  328. tpyc/test_send_sync_substitution.py +276 -0
  329. tpyc/test_tuple_mutation_propagation.py +206 -0
  330. tpyc/test_type_def_registry.py +1729 -0
  331. tpyc/test_union_types.py +195 -0
  332. tpyc/type_def_registry.py +975 -0
  333. tpyc/typesys.py +5104 -0
tpyc/dump_types.py ADDED
@@ -0,0 +1,353 @@
1
+ """
2
+ Dump documentation for builtin types in markdown format.
3
+
4
+ Walks the .py stubs under lib/tpy/ and prints a module-by-module summary
5
+ of public classes, protocols, functions, and type aliases. Uses Python's
6
+ ast module -- not tpyc's parser -- because the goal is to show what the
7
+ source says, not to resolve types through sema.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import ast as pyast
13
+ import io
14
+ import re
15
+ from contextlib import redirect_stdout
16
+ from pathlib import Path
17
+
18
+ from . import get_lib_dir
19
+
20
+
21
+ def dump_builtin_types() -> None:
22
+ """Print markdown documentation for all public stubs under lib/tpy/.
23
+
24
+ Covers user-facing API surface: builtins (`tpy`), TPy-native types
25
+ (`tplib.*`), and bundled stdlib modules (`re`, `math`, `argparse`, ...).
26
+ Internal `_bindings.*` raw native layers are excluded.
27
+ """
28
+ print("# TurboPython API Reference\n")
29
+ print(
30
+ "Auto-generated from .py stubs under `lib/tpy/`. Covers builtins, "
31
+ "`tplib.*` TPy-native types, and bundled stdlib modules.\n"
32
+ )
33
+
34
+ # Collect rendered module sections first so we can emit a TOC ahead of
35
+ # them, then print everything. Only modules with public content end up
36
+ # in `sections`.
37
+ lib_dir = get_lib_dir() / "tpy"
38
+ sections: list[tuple[str, str]] = [] # (module_name, rendered_body)
39
+ for py_file in sorted(lib_dir.rglob("*.py")):
40
+ if _should_skip(py_file, lib_dir):
41
+ continue
42
+ rendered = _render_module(py_file, lib_dir)
43
+ if rendered is not None:
44
+ sections.append(rendered)
45
+
46
+ if sections:
47
+ print("## Modules\n")
48
+ for module_name, _ in sections:
49
+ anchor = _gfm_anchor(f"`{module_name}`")
50
+ print(f"- [`{module_name}`](#{anchor})")
51
+ print()
52
+
53
+ for _, body in sections:
54
+ print(body, end="")
55
+
56
+
57
+ # ---------------------------------------------------------------------------
58
+ # Module-level filtering
59
+ # ---------------------------------------------------------------------------
60
+
61
+ # Files that exist but are internal infrastructure, not user-facing API.
62
+ _SKIP_BASENAMES: frozenset[str] = frozenset({
63
+ "_version.py", # compile-time macro module (internal)
64
+ "_macro_helpers.py", # shared helpers for @dataclass-style macros
65
+ })
66
+
67
+ # Top-level packages under lib/tpy/ that are internal implementation details
68
+ # and should never appear in user-facing API docs. `_bindings/` holds raw
69
+ # @native layers (PCRE2, posix sockets) that stdlib modules wrap -- users
70
+ # import the stdlib facade (`re`, `socket`), never the bindings directly.
71
+ _SKIP_TOP_PACKAGES: frozenset[str] = frozenset({
72
+ "_bindings",
73
+ })
74
+
75
+
76
+ def _should_skip(path: Path, lib_dir: Path) -> bool:
77
+ if "__pycache__" in path.parts:
78
+ return True
79
+ if path.name in _SKIP_BASENAMES:
80
+ return True
81
+ rel_parts = path.relative_to(lib_dir).parts
82
+ if rel_parts and rel_parts[0] in _SKIP_TOP_PACKAGES:
83
+ return True
84
+ return False
85
+
86
+
87
+ # ---------------------------------------------------------------------------
88
+ # Per-module dump
89
+ # ---------------------------------------------------------------------------
90
+
91
+
92
+ def _render_module(path: Path, lib_dir: Path) -> tuple[str, str] | None:
93
+ """Render a single module to markdown. Returns (module_name, body) or None
94
+ if the module has no public content worth documenting."""
95
+ source = path.read_text(encoding="utf-8")
96
+ try:
97
+ tree = pyast.parse(source)
98
+ except SyntaxError:
99
+ return None
100
+
101
+ allow = _extract_all_whitelist(tree)
102
+ classes = [n for n in tree.body if isinstance(n, pyast.ClassDef)]
103
+ functions = [n for n in tree.body
104
+ if isinstance(n, (pyast.FunctionDef, pyast.AsyncFunctionDef))]
105
+ type_aliases = [n for n in tree.body if isinstance(n, pyast.TypeAlias)]
106
+ # Typed module-level constants: e.g. `__version__: str = ...` in
107
+ # tpy/version.py. User-visible, surface them like type aliases.
108
+ ann_constants = [n for n in tree.body
109
+ if isinstance(n, pyast.AnnAssign)
110
+ and isinstance(n.target, pyast.Name)]
111
+
112
+ classes = [c for c in classes if _is_public(c.name, allow)]
113
+ functions = [f for f in functions if _is_public(f.name, allow)]
114
+ type_aliases = [t for t in type_aliases
115
+ if isinstance(t.name, pyast.Name) and _is_public(t.name.id, allow)]
116
+ ann_constants = [a for a in ann_constants
117
+ if isinstance(a.target, pyast.Name) and _is_public(a.target.id, allow)]
118
+
119
+ if not (classes or functions or type_aliases or ann_constants):
120
+ return None
121
+
122
+ rel = path.relative_to(lib_dir).as_posix()
123
+ module_name = _path_to_module(rel)
124
+
125
+ buf = io.StringIO()
126
+ with redirect_stdout(buf):
127
+ print(f"## `{module_name}`\n")
128
+ module_doc = _get_docstring(tree)
129
+ if module_doc:
130
+ print(module_doc + "\n")
131
+ for alias in type_aliases:
132
+ _print_type_alias(alias)
133
+ for const in ann_constants:
134
+ _print_ann_constant(const)
135
+ for cls in classes:
136
+ _print_class(cls)
137
+ for fn in functions:
138
+ _print_function(fn)
139
+
140
+ return module_name, buf.getvalue()
141
+
142
+
143
+ def _get_docstring(node: pyast.AST) -> str | None:
144
+ """Return the node's docstring, or None.
145
+
146
+ Applies to modules, classes, and functions -- anything
147
+ pyast.get_docstring accepts. `clean=True` applies inspect.cleandoc
148
+ (dedents + strips leading/trailing blank lines), so we don't need
149
+ further normalisation here.
150
+ """
151
+ if not isinstance(node, (pyast.Module, pyast.ClassDef,
152
+ pyast.FunctionDef, pyast.AsyncFunctionDef)):
153
+ return None
154
+ raw = pyast.get_docstring(node, clean=True)
155
+ return raw or None
156
+
157
+
158
+ def _indent(text: str, prefix: str) -> str:
159
+ """Prefix every line of text; used to render docstrings under list items."""
160
+ return "\n".join(prefix + line if line else line for line in text.splitlines())
161
+
162
+
163
+ # GFM-style anchor derivation: lowercase, strip characters that aren't
164
+ # letters/digits/spaces/hyphens, replace spaces with hyphens. Matches what
165
+ # GitHub / glow / most markdown renderers produce for a header.
166
+ _ANCHOR_STRIP = re.compile(r"[^\w\s-]", flags=re.UNICODE)
167
+
168
+
169
+ def _gfm_anchor(header_text: str) -> str:
170
+ text = header_text.lower()
171
+ text = _ANCHOR_STRIP.sub("", text)
172
+ return text.replace(" ", "-")
173
+
174
+
175
+ def _extract_all_whitelist(tree: pyast.Module) -> frozenset[str] | None:
176
+ """Return the set of names in __all__, or None if __all__ is not defined."""
177
+ for stmt in tree.body:
178
+ if (isinstance(stmt, pyast.Assign)
179
+ and len(stmt.targets) == 1
180
+ and isinstance(stmt.targets[0], pyast.Name)
181
+ and stmt.targets[0].id == "__all__"
182
+ and isinstance(stmt.value, (pyast.List, pyast.Tuple))):
183
+ names: list[str] = []
184
+ for elt in stmt.value.elts:
185
+ if isinstance(elt, pyast.Constant) and isinstance(elt.value, str):
186
+ names.append(elt.value)
187
+ return frozenset(names)
188
+ return None
189
+
190
+
191
+ def _is_public(name: str, allow: frozenset[str] | None) -> bool:
192
+ if allow is not None:
193
+ return name in allow
194
+ # Dunder names (__foo__) are public-by-convention module metadata
195
+ # (e.g. __version__, __all__). Treat them as public here.
196
+ if name.startswith("__") and name.endswith("__"):
197
+ return True
198
+ return not name.startswith("_")
199
+
200
+
201
+ def _path_to_module(rel: str) -> str:
202
+ if rel.endswith("/__init__.py"):
203
+ rel = rel[: -len("/__init__.py")]
204
+ elif rel.endswith(".py"):
205
+ rel = rel[:-3]
206
+ return rel.replace("/", ".")
207
+
208
+
209
+ # ---------------------------------------------------------------------------
210
+ # Printers
211
+ # ---------------------------------------------------------------------------
212
+
213
+
214
+ def _print_type_alias(alias: pyast.TypeAlias) -> None:
215
+ if not isinstance(alias.name, pyast.Name):
216
+ return
217
+ name = alias.name.id
218
+ value = _unparse(alias.value)
219
+ print(f"- type `{name}` = `{value}`\n")
220
+
221
+
222
+ def _print_ann_constant(const: pyast.AnnAssign) -> None:
223
+ """Render a module-level typed constant (e.g. `__version__: str = ...`)."""
224
+ if not isinstance(const.target, pyast.Name):
225
+ return
226
+ name = const.target.id
227
+ annotation = _unparse(const.annotation)
228
+ print(f"- `{name}: {annotation}`\n")
229
+
230
+
231
+ def _print_class(cls: pyast.ClassDef) -> None:
232
+ name = cls.name
233
+ bases = [_unparse(b) for b in cls.bases]
234
+ is_protocol = any("Protocol" in b for b in bases)
235
+ decorators = [_unparse(d) for d in cls.decorator_list]
236
+ suffix = " (protocol)" if is_protocol else ""
237
+
238
+ header_prefix = " ".join(f"@{d}" for d in decorators)
239
+ header_prefix = f"{header_prefix} " if header_prefix else ""
240
+ print(f"### {header_prefix}{name}{suffix}\n")
241
+
242
+ if bases:
243
+ print(f"Extends: `{', '.join(bases)}`\n")
244
+
245
+ doc = _get_docstring(cls)
246
+ if doc:
247
+ print(doc + "\n")
248
+
249
+ methods: list[pyast.FunctionDef | pyast.AsyncFunctionDef] = [
250
+ n for n in cls.body
251
+ if isinstance(n, (pyast.FunctionDef, pyast.AsyncFunctionDef))
252
+ ]
253
+ # All `__init__` overloads go under Constructor; everything else
254
+ # visible goes under Methods.
255
+ inits = [m for m in methods if m.name == "__init__"]
256
+ other_methods = [m for m in methods
257
+ if m.name != "__init__" and _method_is_visible(m)]
258
+
259
+ if inits:
260
+ print("**Constructor:**\n")
261
+ for init in inits:
262
+ _print_callable_item(name, init, is_method=True, skip_self=True)
263
+ print()
264
+
265
+ if other_methods:
266
+ print("**Methods:**\n")
267
+ for m in other_methods:
268
+ _print_callable_item(m.name, m, is_method=True)
269
+ print()
270
+
271
+
272
+ def _method_is_visible(m: pyast.FunctionDef | pyast.AsyncFunctionDef) -> bool:
273
+ # Show dunder methods (__len__, __iter__, __str__, ...) but hide private
274
+ # helpers (_foo) and the __init__ already printed as Constructor.
275
+ if m.name.startswith("__") and m.name.endswith("__"):
276
+ return True
277
+ return not m.name.startswith("_")
278
+
279
+
280
+ def _print_function(fn: pyast.FunctionDef | pyast.AsyncFunctionDef) -> None:
281
+ decorators = [_unparse(d) for d in fn.decorator_list]
282
+ prefix = " ".join(f"@{d}" for d in decorators)
283
+ prefix = f"{prefix} " if prefix else ""
284
+ print(f"### {prefix}{fn.name}()\n")
285
+ _print_callable_item(fn.name, fn)
286
+ print()
287
+
288
+
289
+ def _print_callable_item(
290
+ name: str,
291
+ fn: pyast.FunctionDef | pyast.AsyncFunctionDef,
292
+ *,
293
+ is_method: bool = False,
294
+ skip_self: bool = False,
295
+ ) -> None:
296
+ """Render one list-item line for a callable, with docstring below when
297
+ present. Docstring is indented two spaces so markdown renderers keep it
298
+ as a continuation of the list item. Trailing blank line ensures the
299
+ next list item isn't parsed as a continuation paragraph of this one
300
+ (CommonMark "loose list" requirement once any item has block content).
301
+ """
302
+ sig = _format_function_signature(name, fn, is_method=is_method, skip_self=skip_self)
303
+ print(f"- `{sig}`")
304
+ doc = _get_docstring(fn)
305
+ if doc:
306
+ print()
307
+ print(_indent(doc, " "))
308
+ print()
309
+
310
+
311
+ def _format_function_signature(
312
+ name: str,
313
+ fn: pyast.FunctionDef | pyast.AsyncFunctionDef,
314
+ *,
315
+ is_method: bool = False,
316
+ skip_self: bool = False,
317
+ ) -> str:
318
+ parts: list[str] = []
319
+ args = fn.args
320
+ positional = list(args.posonlyargs) + list(args.args)
321
+ for i, arg in enumerate(positional):
322
+ if skip_self and is_method and i == 0 and arg.arg in ("self", "cls"):
323
+ continue
324
+ parts.append(_format_arg(arg))
325
+ if args.vararg is not None:
326
+ parts.append("*" + _format_arg(args.vararg))
327
+ elif args.kwonlyargs:
328
+ # Bare `*` separator marks the start of keyword-only parameters
329
+ # when there's no *args to absorb positional overflow. Required
330
+ # for correct rendering of e.g. dataclasses.field(*, default, ...).
331
+ parts.append("*")
332
+ for arg in args.kwonlyargs:
333
+ parts.append(_format_arg(arg))
334
+ if args.kwarg is not None:
335
+ parts.append("**" + _format_arg(args.kwarg))
336
+
337
+ ret = _unparse(fn.returns) if fn.returns is not None else "..."
338
+ return f"{name}({', '.join(parts)}) -> {ret}"
339
+
340
+
341
+ def _format_arg(arg: pyast.arg) -> str:
342
+ if arg.annotation is not None:
343
+ return f"{arg.arg}: {_unparse(arg.annotation)}"
344
+ return arg.arg
345
+
346
+
347
+ def _unparse(node: pyast.AST | None) -> str:
348
+ if node is None:
349
+ return "..."
350
+ try:
351
+ return pyast.unparse(node)
352
+ except Exception:
353
+ return "<?>"
@@ -0,0 +1,47 @@
1
+ """Diagnostics envelope for the frontend plugin pipeline.
2
+
3
+ Wraps a regular `Diagnostic` with plugin-frontend-specific category and
4
+ metadata. Kept out of `diagnostics.py` so that core diagnostics stays
5
+ free of plugin coupling.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from dataclasses import dataclass
11
+ from enum import Enum
12
+
13
+ from .diagnostics import Diagnostic
14
+
15
+
16
+ class FrontendDiagnosticCategory(Enum):
17
+ """Why a frontend-pipeline diagnostic was emitted.
18
+
19
+ - PLUGIN_REPORTED: the plugin returned it in FrontendOutput.diagnostics.
20
+ - PLUGIN_IR_INVALID: lowering caught a structural problem in the IR
21
+ (unknown discriminator, missing required field, etc.). Blames the
22
+ plugin with a clear local error.
23
+ - LOWERING_INTERNAL: lowering hit an impossible-state condition
24
+ after structural validation passed. This is a TPy compiler bug,
25
+ not a plugin bug; the renderer prefixes the message with an
26
+ "internal compiler error" banner.
27
+ """
28
+ PLUGIN_REPORTED = "PLUGIN_REPORTED"
29
+ PLUGIN_IR_INVALID = "PLUGIN_IR_INVALID"
30
+ LOWERING_INTERNAL = "LOWERING_INTERNAL"
31
+
32
+
33
+ @dataclass
34
+ class FrontendDiagnostic:
35
+ """Plugin-pipeline envelope around a regular Diagnostic."""
36
+ diagnostic: Diagnostic
37
+ category: FrontendDiagnosticCategory
38
+ plugin_name: str | None = None
39
+ source_language: str | None = None
40
+ plugin_diagnostic_code: str | None = None
41
+
42
+ def format(self, filename: str = "<unknown>") -> str:
43
+ base = self.diagnostic.format(filename)
44
+ if self.category == FrontendDiagnosticCategory.LOWERING_INTERNAL:
45
+ return ("internal compiler error: " + base
46
+ + " (please file an issue)")
47
+ return base
@@ -0,0 +1,140 @@
1
+ """Frontend plugin IR.
2
+
3
+ Plain-dataclass intermediate representation that frontend plugins emit and
4
+ lowering converts into a `TpyModule`. See `docs/FRONTEND_PLUGIN_DESIGN.md`
5
+ for the design contract.
6
+
7
+ M1 scope: only the nodes needed to express a Pascal "Hello, World!"
8
+ program end-to-end. Additional nodes land milestone-by-milestone.
9
+ """
10
+
11
+ from .nodes import (
12
+ API_VERSION,
13
+ Assign,
14
+ Attr,
15
+ BinOp,
16
+ BinOpKind,
17
+ BoolLit,
18
+ Break,
19
+ Call,
20
+ CallableType,
21
+ CmpOpKind,
22
+ Compare,
23
+ Continue,
24
+ Enum,
25
+ EnumValue,
26
+ Expr,
27
+ ExprStmt,
28
+ Field,
29
+ FloatLit,
30
+ ForEach,
31
+ ForRange,
32
+ FrontendDirectives,
33
+ FrontendModule,
34
+ FromImport,
35
+ Function,
36
+ If,
37
+ Import,
38
+ ImportDecl,
39
+ ImportName,
40
+ IntLit,
41
+ IntTypeArg,
42
+ ListLit,
43
+ Loc,
44
+ Match,
45
+ MatchCase,
46
+ MatchClass,
47
+ MatchPattern,
48
+ MatchValue,
49
+ MatchWildcard,
50
+ Name,
51
+ NamedType,
52
+ NoneLit,
53
+ Param,
54
+ PointerType,
55
+ Raise,
56
+ RangeDir,
57
+ Record,
58
+ RepeatUntil,
59
+ Return,
60
+ SetLit,
61
+ StarImport,
62
+ Stmt,
63
+ StrLit,
64
+ Subscript,
65
+ TypeArg,
66
+ TypeExpr,
67
+ TypeTypeArg,
68
+ UnaryOp,
69
+ UnaryOpKind,
70
+ UnionType,
71
+ VarDecl,
72
+ While,
73
+ )
74
+ from .lower import LoweredFrontend, lower_module
75
+
76
+ __all__ = [
77
+ "API_VERSION",
78
+ "Assign",
79
+ "Attr",
80
+ "BinOp",
81
+ "BinOpKind",
82
+ "BoolLit",
83
+ "Break",
84
+ "Call",
85
+ "CallableType",
86
+ "CmpOpKind",
87
+ "Compare",
88
+ "Continue",
89
+ "Enum",
90
+ "EnumValue",
91
+ "Expr",
92
+ "ExprStmt",
93
+ "Field",
94
+ "FloatLit",
95
+ "ForEach",
96
+ "ForRange",
97
+ "FrontendDirectives",
98
+ "FrontendModule",
99
+ "FromImport",
100
+ "Function",
101
+ "If",
102
+ "Import",
103
+ "ImportDecl",
104
+ "ImportName",
105
+ "IntLit",
106
+ "IntTypeArg",
107
+ "ListLit",
108
+ "Loc",
109
+ "LoweredFrontend",
110
+ "Match",
111
+ "MatchCase",
112
+ "MatchClass",
113
+ "MatchPattern",
114
+ "MatchValue",
115
+ "MatchWildcard",
116
+ "Name",
117
+ "NamedType",
118
+ "NoneLit",
119
+ "Param",
120
+ "PointerType",
121
+ "Raise",
122
+ "RangeDir",
123
+ "Record",
124
+ "RepeatUntil",
125
+ "Return",
126
+ "SetLit",
127
+ "StarImport",
128
+ "Stmt",
129
+ "StrLit",
130
+ "Subscript",
131
+ "TypeArg",
132
+ "TypeExpr",
133
+ "TypeTypeArg",
134
+ "UnaryOp",
135
+ "UnaryOpKind",
136
+ "UnionType",
137
+ "VarDecl",
138
+ "While",
139
+ "lower_module",
140
+ ]