python-cc 0.1.0__py3-none-any.whl → 0.1.1__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 (165) hide show
  1. pcc/__init__.py +26 -2
  2. pcc/__main__.py +5 -3
  3. pcc/backend/__init__.py +8 -0
  4. pcc/backend/self_backend.py +6 -1837
  5. pcc/backend/self_backend_aarch64_darwin.py +189 -0
  6. pcc/backend/self_backend_aarch64_darwin_abi.py +150 -0
  7. pcc/backend/self_backend_aarch64_darwin_addr.py +106 -0
  8. pcc/backend/self_backend_aarch64_darwin_calls.py +1517 -0
  9. pcc/backend/self_backend_aarch64_darwin_compute.py +832 -0
  10. pcc/backend/self_backend_aarch64_darwin_data.py +180 -0
  11. pcc/backend/self_backend_aarch64_darwin_flow.py +153 -0
  12. pcc/backend/self_backend_aarch64_darwin_materialize.py +636 -0
  13. pcc/backend/self_backend_aarch64_darwin_mem.py +82 -0
  14. pcc/backend/self_backend_aarch64_darwin_memory.py +132 -0
  15. pcc/backend/self_backend_aarch64_darwin_ops.py +302 -0
  16. pcc/backend/self_backend_aarch64_darwin_prologue.py +50 -0
  17. pcc/backend/self_backend_aarch64_darwin_regs.py +117 -0
  18. pcc/backend/self_backend_aarch64_darwin_returns.py +55 -0
  19. pcc/backend/self_backend_aarch64_darwin_slots.py +272 -0
  20. pcc/backend/self_backend_aarch64_darwin_symbols.py +26 -0
  21. pcc/backend/self_backend_aarch64_darwin_terminators.py +113 -0
  22. pcc/backend/self_backend_analysis.py +186 -0
  23. pcc/backend/self_backend_dispatch.py +28 -0
  24. pcc/backend/self_backend_emit.py +26 -0
  25. pcc/backend/self_backend_instruction_dispatch.py +30 -0
  26. pcc/backend/self_backend_ir.py +289 -0
  27. pcc/backend/self_backend_module_symbols.py +35 -0
  28. pcc/backend/self_backend_parse.py +1944 -0
  29. pcc/backend/self_backend_prepare.py +52 -0
  30. pcc/backend/self_backend_stackprep.py +188 -0
  31. pcc/backend/self_backend_target_match.py +20 -0
  32. pcc/backend/self_backend_targets.py +63 -0
  33. pcc/backend/self_backend_terminator_dispatch.py +48 -0
  34. pcc/backend/self_backend_x86_64_linux.py +1148 -0
  35. pcc/backend/self_backend_x86_64_linux_data.py +166 -0
  36. pcc/cli_bootstrap.py +312 -0
  37. pcc/cli_core.py +1168 -0
  38. pcc/codegen/c_codegen.py +430 -50
  39. pcc/evaluater/c_evaluator.py +134 -21
  40. pcc/extern/__init__.py +20 -0
  41. pcc/ir_passes/loop_distribute.py +11 -230
  42. pcc/ir_passes/loop_vectorize.py +11 -277
  43. pcc/ir_passes/simple_loop_unswitch.py +11 -225
  44. pcc/ir_passes/slp_vectorizer.py +11 -185
  45. pcc/lex/c_lexer.py +2 -2
  46. pcc/llvm_capi/compat.py +2 -2
  47. pcc/llvm_capi/ir.py +557 -84
  48. pcc/parse/py_lex.py +21 -27
  49. pcc/parse/py_lift.py +155 -70
  50. pcc/parse/py_parse.py +307 -45
  51. pcc/passes/llvm_python_registry.ll +4610 -0
  52. pcc/passes/llvm_python_registry.py +15 -15
  53. pcc/pcc.py +233 -509
  54. pcc/ply/lex.py +3 -8
  55. pcc/ply/yacc.py +10 -7
  56. pcc/py_frontend/codegen/class_gen.py +354 -148
  57. pcc/py_frontend/codegen/layer1.py +15264 -3654
  58. pcc/py_frontend/codegen/marshal.py +79 -9
  59. pcc/py_frontend/codegen/runtime_abi.py +120 -29
  60. pcc/py_frontend/export_meta.py +101 -0
  61. pcc/py_frontend/parser.py +16 -5
  62. pcc/py_frontend/pipeline.py +1687 -207
  63. pcc/py_frontend/py_ast.py +1 -0
  64. pcc/py_frontend/type_infer.py +633 -59
  65. pcc/py_frontend/types.py +122 -13
  66. pcc/py_runtime/Makefile +121 -13
  67. pcc/py_runtime/include/py_runtime.h +259 -30
  68. pcc/py_runtime/py/py_class.py +796 -0
  69. pcc/py_runtime/py/py_dict.py +395 -0
  70. pcc/py_runtime/py/py_exc_match.py +77 -0
  71. pcc/py_runtime/py/py_exc_objects.py +162 -0
  72. pcc/py_runtime/py/py_exc_table.py +84 -0
  73. pcc/py_runtime/py/py_exc_tls.py +165 -0
  74. pcc/py_runtime/py/py_exc_traceback.py +191 -0
  75. pcc/py_runtime/py/py_int.py +178 -0
  76. pcc/py_runtime/py/py_int_addsub.py +153 -0
  77. pcc/py_runtime/py/py_int_bigint_convert.py +52 -0
  78. pcc/py_runtime/py/py_int_bigint_pow.py +67 -0
  79. pcc/py_runtime/py/py_int_bitwise.py +142 -0
  80. pcc/py_runtime/py/py_int_convert.py +74 -0
  81. pcc/py_runtime/py/py_int_core.py +300 -0
  82. pcc/py_runtime/py/py_int_decimal.py +193 -0
  83. pcc/py_runtime/py/py_int_mul.py +83 -0
  84. pcc/py_runtime/py/py_int_ops.py +351 -0
  85. pcc/py_runtime/py/py_int_parse.py +164 -0
  86. pcc/py_runtime/py/py_int_shift.py +159 -0
  87. pcc/py_runtime/py/py_list.py +474 -0
  88. pcc/py_runtime/py/py_obj.py +144 -0
  89. pcc/py_runtime/py/py_obj_dealloc.py +95 -0
  90. pcc/py_runtime/py/py_obj_gc.py +43 -0
  91. pcc/py_runtime/py/py_obj_ops_compare.py +466 -0
  92. pcc/py_runtime/py/py_obj_ops_dispatch.py +378 -0
  93. pcc/py_runtime/py/py_obj_stubs.py +109 -0
  94. pcc/py_runtime/py/py_os_env.py +114 -0
  95. pcc/py_runtime/py/py_os_path.py +324 -0
  96. pcc/py_runtime/py/py_print_fmt.py +251 -0
  97. pcc/py_runtime/py/py_print_sys.py +73 -0
  98. pcc/py_runtime/py/py_process.py +68 -0
  99. pcc/py_runtime/py/py_set.py +236 -0
  100. pcc/py_runtime/py/py_str.py +45 -0
  101. pcc/py_runtime/py/py_str_accessors.py +1265 -0
  102. pcc/py_runtime/py/py_substrate.py +401 -0
  103. pcc/py_runtime/py/py_tuple.py +221 -0
  104. pcc/py_runtime/py/py_tuple_spike.py +111 -0
  105. pcc/py_runtime/src/py_class.c +89 -2
  106. pcc/py_runtime/src/py_dict.c +2 -2
  107. pcc/py_runtime/src/py_dunder.c +42 -0
  108. pcc/py_runtime/src/py_exc_match.c +41 -0
  109. pcc/py_runtime/src/py_exc_objects.c +105 -0
  110. pcc/py_runtime/src/py_exc_table.c +48 -0
  111. pcc/py_runtime/src/py_exc_tls.c +147 -0
  112. pcc/py_runtime/src/py_exc_traceback.c +92 -0
  113. pcc/py_runtime/src/py_file.c +127 -0
  114. pcc/py_runtime/src/py_int.c +24 -924
  115. pcc/py_runtime/src/py_int_addsub.c +109 -0
  116. pcc/py_runtime/src/py_int_bigint_convert.c +34 -0
  117. pcc/py_runtime/src/py_int_bigint_pow.c +59 -0
  118. pcc/py_runtime/src/py_int_bitwise.c +97 -0
  119. pcc/py_runtime/src/py_int_convert.c +23 -0
  120. pcc/py_runtime/src/py_int_core.c +155 -0
  121. pcc/py_runtime/src/py_int_decimal.c +156 -0
  122. pcc/py_runtime/src/py_int_mul.c +38 -0
  123. pcc/py_runtime/src/py_int_ops.c +264 -0
  124. pcc/py_runtime/src/py_int_parse.c +83 -0
  125. pcc/py_runtime/src/py_int_shift.c +137 -0
  126. pcc/py_runtime/src/py_internal.h +37 -12
  127. pcc/py_runtime/src/py_libpython.c +830 -6
  128. pcc/py_runtime/src/py_list.c +22 -18
  129. pcc/py_runtime/src/py_obj.c +19 -146
  130. pcc/py_runtime/src/py_obj_dealloc.c +82 -0
  131. pcc/py_runtime/src/py_obj_gc.c +29 -0
  132. pcc/py_runtime/src/py_obj_ops_compare.c +285 -0
  133. pcc/py_runtime/src/py_obj_ops_dispatch.c +190 -0
  134. pcc/py_runtime/src/py_obj_stubs.c +27 -6
  135. pcc/py_runtime/src/py_os_env.c +73 -0
  136. pcc/py_runtime/src/py_os_path.c +290 -0
  137. pcc/py_runtime/src/py_os_substrate.c +152 -0
  138. pcc/py_runtime/src/{py_print.c → py_print_fmt.c} +76 -36
  139. pcc/py_runtime/src/py_print_sys.c +40 -0
  140. pcc/py_runtime/src/py_process.c +48 -0
  141. pcc/py_runtime/src/py_process_substrate.c +476 -0
  142. pcc/py_runtime/src/py_set.c +7 -8
  143. pcc/py_runtime/src/py_str.c +14 -795
  144. pcc/py_runtime/src/py_str_accessors.c +897 -0
  145. pcc/py_runtime/src/py_substrate.c +327 -0
  146. pcc/py_runtime/src/py_tuple.c +100 -0
  147. pcc/py_stdlib/dataclasses.py +70 -37
  148. pcc/py_stdlib/itertools.py +2 -2
  149. pcc/py_stdlib/sys.py +16 -2
  150. pcc/stdlib/__init__.py +21 -0
  151. pcc/stdlib/_float_bits.py +127 -0
  152. pcc/stdlib/struct.py +154 -0
  153. pcc/unsafe/__init__.py +190 -0
  154. python_cc-0.1.1.dist-info/METADATA +985 -0
  155. {python_cc-0.1.0.dist-info → python_cc-0.1.1.dist-info}/RECORD +159 -57
  156. python_cc-0.1.1.dist-info/entry_points.txt +2 -0
  157. utils/fake_libc_include/stdlib.h +4 -0
  158. pcc/py_runtime/libpy_runtime.a +0 -0
  159. pcc/py_runtime/src/py_exc.c +0 -441
  160. pcc/py_runtime/src/py_obj_ops.c +0 -452
  161. pcc/py_stdlib/copy.ll +0 -847
  162. python_cc-0.1.0.dist-info/METADATA +0 -660
  163. python_cc-0.1.0.dist-info/entry_points.txt +0 -2
  164. {python_cc-0.1.0.dist-info → python_cc-0.1.1.dist-info}/WHEEL +0 -0
  165. {python_cc-0.1.0.dist-info → python_cc-0.1.1.dist-info}/licenses/LICENSE +0 -0
pcc/__init__.py CHANGED
@@ -1,3 +1,27 @@
1
- from .api import module, build, BuildArtifact, Module
1
+ """Top-level ``pcc`` package exports.
2
2
 
3
- __all__ = ["module"]
3
+ Keep package import side effects minimal so subpackages such as
4
+ ``pcc.py_frontend`` can be imported without pulling the full C
5
+ evaluator / llvmlite stack into the process.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ __all__ = ["module", "build", "BuildArtifact", "Module"]
10
+
11
+
12
+ def __getattr__(name: str):
13
+ if name in __all__:
14
+ from .api import BuildArtifact, Module, build, module
15
+
16
+ exports = {
17
+ "module": module,
18
+ "build": build,
19
+ "BuildArtifact": BuildArtifact,
20
+ "Module": Module,
21
+ }
22
+ return exports[name]
23
+ raise AttributeError(f"module 'pcc' has no attribute {name!r}")
24
+
25
+
26
+ def __dir__() -> list[str]:
27
+ return sorted(list(globals().keys()) + __all__)
pcc/__main__.py CHANGED
@@ -1,3 +1,5 @@
1
- if __name__ == '__main__':
2
- from .pcc import main
3
- main()
1
+ from pcc.cli_bootstrap import bootstrap_cli_sys_argv_exit
2
+
3
+
4
+ if __name__ == "__main__":
5
+ bootstrap_cli_sys_argv_exit()
pcc/backend/__init__.py CHANGED
@@ -88,6 +88,14 @@ def _normalize_backend_name(value: str | None) -> str:
88
88
  return candidate
89
89
 
90
90
 
91
+ def backend_request_allows_unimplemented(requested: str | None = None) -> bool:
92
+ """Return True when a request explicitly opts into an experimental backend."""
93
+ raw = requested
94
+ if raw is None:
95
+ raw = os.environ.get(_ENV_BACKEND)
96
+ return _normalize_backend_name(raw) == "self"
97
+
98
+
91
99
  def resolve_backend(
92
100
  requested: str | None = None,
93
101
  *,