@tishlang/tish-format 1.0.12 → 2.0.1

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 (189) hide show
  1. package/Cargo.toml +51 -0
  2. package/LICENSE +13 -0
  3. package/bin/tish-format +0 -0
  4. package/crates/js_to_tish/Cargo.toml +11 -0
  5. package/crates/js_to_tish/README.md +18 -0
  6. package/crates/js_to_tish/src/error.rs +55 -0
  7. package/crates/js_to_tish/src/lib.rs +11 -0
  8. package/crates/js_to_tish/src/span_util.rs +35 -0
  9. package/crates/js_to_tish/src/transform/expr.rs +611 -0
  10. package/crates/js_to_tish/src/transform/stmt.rs +503 -0
  11. package/crates/js_to_tish/src/transform.rs +60 -0
  12. package/crates/tish/Cargo.toml +62 -0
  13. package/crates/tish/build.rs +21 -0
  14. package/crates/tish/src/cargo_native_registry.rs +32 -0
  15. package/crates/tish/src/cli_help.rs +576 -0
  16. package/crates/tish/src/main.rs +853 -0
  17. package/crates/tish/src/repl_completion.rs +199 -0
  18. package/crates/tish/tests/cargo_example_compile.rs +67 -0
  19. package/crates/tish/tests/error_source_location.rs +36 -0
  20. package/crates/tish/tests/fixtures/cargo_example_project/Cargo.toml +3 -0
  21. package/crates/tish/tests/fixtures/cargo_example_project/crates/demo-shim/Cargo.toml +11 -0
  22. package/crates/tish/tests/fixtures/cargo_example_project/crates/demo-shim/src/lib.rs +12 -0
  23. package/crates/tish/tests/fixtures/cargo_example_project/package.json +10 -0
  24. package/crates/tish/tests/fixtures/cargo_example_project/src/main.tish +3 -0
  25. package/crates/tish/tests/fixtures/runtime_error_location.tish +5 -0
  26. package/crates/tish/tests/fixtures/trycatch_runtime_errors.tish +15 -0
  27. package/crates/tish/tests/fixtures/tty_capability.tish +9 -0
  28. package/crates/tish/tests/integration_test.rs +1406 -0
  29. package/crates/tish/tests/run_optimize_stdout_parity.rs +50 -0
  30. package/crates/tish/tests/shortcircuit.rs +65 -0
  31. package/crates/tish/tests/trycatch_runtime_errors.rs +45 -0
  32. package/crates/tish/tests/tty_capability.rs +43 -0
  33. package/crates/tish_ast/Cargo.toml +9 -0
  34. package/crates/tish_ast/src/ast.rs +649 -0
  35. package/crates/tish_ast/src/lib.rs +5 -0
  36. package/crates/tish_build_utils/Cargo.toml +11 -0
  37. package/crates/tish_build_utils/src/lib.rs +577 -0
  38. package/crates/tish_builtins/Cargo.toml +22 -0
  39. package/crates/tish_builtins/src/array.rs +803 -0
  40. package/crates/tish_builtins/src/collections.rs +481 -0
  41. package/crates/tish_builtins/src/construct.rs +199 -0
  42. package/crates/tish_builtins/src/date.rs +538 -0
  43. package/crates/tish_builtins/src/globals.rs +293 -0
  44. package/crates/tish_builtins/src/helpers.rs +35 -0
  45. package/crates/tish_builtins/src/iterator.rs +129 -0
  46. package/crates/tish_builtins/src/lib.rs +21 -0
  47. package/crates/tish_builtins/src/math.rs +89 -0
  48. package/crates/tish_builtins/src/number.rs +96 -0
  49. package/crates/tish_builtins/src/object.rs +36 -0
  50. package/crates/tish_builtins/src/string.rs +646 -0
  51. package/crates/tish_builtins/src/symbol.rs +83 -0
  52. package/crates/tish_builtins/src/typedarrays.rs +298 -0
  53. package/crates/tish_bytecode/Cargo.toml +17 -0
  54. package/crates/tish_bytecode/src/chunk.rs +164 -0
  55. package/crates/tish_bytecode/src/compiler.rs +2604 -0
  56. package/crates/tish_bytecode/src/encoding.rs +102 -0
  57. package/crates/tish_bytecode/src/lib.rs +20 -0
  58. package/crates/tish_bytecode/src/opcode.rs +185 -0
  59. package/crates/tish_bytecode/src/peephole.rs +189 -0
  60. package/crates/tish_bytecode/src/serialize.rs +193 -0
  61. package/crates/tish_bytecode/tests/break_continue_bytecode.rs +44 -0
  62. package/crates/tish_bytecode/tests/constant_folding.rs +84 -0
  63. package/crates/tish_bytecode/tests/sort_optimization.rs +31 -0
  64. package/crates/tish_compile/Cargo.toml +27 -0
  65. package/crates/tish_compile/src/check.rs +774 -0
  66. package/crates/tish_compile/src/codegen.rs +7317 -0
  67. package/crates/tish_compile/src/infer.rs +1681 -0
  68. package/crates/tish_compile/src/lib.rs +206 -0
  69. package/crates/tish_compile/src/resolve.rs +1951 -0
  70. package/crates/tish_compile/src/types.rs +605 -0
  71. package/crates/tish_compile_js/Cargo.toml +18 -0
  72. package/crates/tish_compile_js/examples/jsx_vdom_smoke.tish +8 -0
  73. package/crates/tish_compile_js/src/codegen.rs +938 -0
  74. package/crates/tish_compile_js/src/error.rs +20 -0
  75. package/crates/tish_compile_js/src/lib.rs +26 -0
  76. package/crates/tish_compile_js/src/tests_jsx.rs +414 -0
  77. package/crates/tish_compiler_wasm/Cargo.toml +21 -0
  78. package/crates/tish_compiler_wasm/src/lib.rs +57 -0
  79. package/crates/tish_compiler_wasm/src/resolve_virtual.rs +473 -0
  80. package/crates/tish_core/Cargo.toml +32 -0
  81. package/crates/tish_core/src/console_style.rs +170 -0
  82. package/crates/tish_core/src/json.rs +430 -0
  83. package/crates/tish_core/src/lib.rs +20 -0
  84. package/crates/tish_core/src/macros.rs +36 -0
  85. package/crates/tish_core/src/shape.rs +85 -0
  86. package/crates/tish_core/src/uri.rs +118 -0
  87. package/crates/tish_core/src/value.rs +1350 -0
  88. package/crates/tish_core/src/vmref.rs +183 -0
  89. package/crates/tish_cranelift/Cargo.toml +19 -0
  90. package/crates/tish_cranelift/src/lib.rs +43 -0
  91. package/crates/tish_cranelift/src/link.rs +130 -0
  92. package/crates/tish_cranelift/src/lower.rs +85 -0
  93. package/crates/tish_cranelift_runtime/Cargo.toml +26 -0
  94. package/crates/tish_cranelift_runtime/src/lib.rs +45 -0
  95. package/crates/tish_eval/Cargo.toml +51 -0
  96. package/crates/tish_eval/src/eval.rs +4265 -0
  97. package/crates/tish_eval/src/http.rs +191 -0
  98. package/crates/tish_eval/src/lib.rs +99 -0
  99. package/crates/tish_eval/src/natives.rs +551 -0
  100. package/crates/tish_eval/src/promise.rs +179 -0
  101. package/crates/tish_eval/src/regex.rs +299 -0
  102. package/crates/tish_eval/src/timers.rs +120 -0
  103. package/crates/tish_eval/src/value.rs +336 -0
  104. package/crates/tish_eval/src/value_convert.rs +117 -0
  105. package/crates/tish_ffi/Cargo.toml +26 -0
  106. package/crates/tish_ffi/src/lib.rs +518 -0
  107. package/crates/tish_ffi/tests/fixtures/testmod/Cargo.toml +18 -0
  108. package/crates/tish_ffi/tests/fixtures/testmod/src/lib.rs +46 -0
  109. package/crates/tish_ffi/tests/loader.rs +65 -0
  110. package/crates/tish_fmt/Cargo.toml +16 -0
  111. package/crates/tish_fmt/src/bin/tish-fmt.rs +41 -0
  112. package/crates/tish_fmt/src/lib.rs +2157 -0
  113. package/crates/tish_jsx_web/Cargo.toml +9 -0
  114. package/crates/tish_jsx_web/README.md +5 -0
  115. package/crates/tish_jsx_web/src/lib.rs +2 -0
  116. package/crates/tish_lexer/Cargo.toml +9 -0
  117. package/crates/tish_lexer/src/lib.rs +1104 -0
  118. package/crates/tish_lexer/src/token.rs +170 -0
  119. package/crates/tish_lint/Cargo.toml +18 -0
  120. package/crates/tish_lint/src/bin/tish-lint.rs +195 -0
  121. package/crates/tish_lint/src/lib.rs +281 -0
  122. package/crates/tish_llvm/Cargo.toml +13 -0
  123. package/crates/tish_llvm/src/lib.rs +115 -0
  124. package/crates/tish_lsp/Cargo.toml +25 -0
  125. package/crates/tish_lsp/README.md +26 -0
  126. package/crates/tish_lsp/src/builtin_goto.rs +362 -0
  127. package/crates/tish_lsp/src/import_goto.rs +564 -0
  128. package/crates/tish_lsp/src/main.rs +1459 -0
  129. package/crates/tish_native/Cargo.toml +16 -0
  130. package/crates/tish_native/src/build.rs +481 -0
  131. package/crates/tish_native/src/config.rs +48 -0
  132. package/crates/tish_native/src/lib.rs +416 -0
  133. package/crates/tish_opt/Cargo.toml +13 -0
  134. package/crates/tish_opt/src/lib.rs +1046 -0
  135. package/crates/tish_parser/Cargo.toml +11 -0
  136. package/crates/tish_parser/src/lib.rs +386 -0
  137. package/crates/tish_parser/src/parser.rs +2726 -0
  138. package/crates/tish_pg/Cargo.toml +34 -0
  139. package/crates/tish_pg/README.md +38 -0
  140. package/crates/tish_pg/src/error.rs +52 -0
  141. package/crates/tish_pg/src/lib.rs +955 -0
  142. package/crates/tish_resolve/Cargo.toml +13 -0
  143. package/crates/tish_resolve/src/lib.rs +3601 -0
  144. package/crates/tish_resolve/src/pos.rs +141 -0
  145. package/crates/tish_runtime/Cargo.toml +100 -0
  146. package/crates/tish_runtime/src/http.rs +1347 -0
  147. package/crates/tish_runtime/src/http_fetch.rs +492 -0
  148. package/crates/tish_runtime/src/http_hyper.rs +441 -0
  149. package/crates/tish_runtime/src/http_prefork.rs +189 -0
  150. package/crates/tish_runtime/src/lib.rs +1447 -0
  151. package/crates/tish_runtime/src/native_promise.rs +15 -0
  152. package/crates/tish_runtime/src/promise.rs +558 -0
  153. package/crates/tish_runtime/src/promise_io.rs +38 -0
  154. package/crates/tish_runtime/src/timers.rs +172 -0
  155. package/crates/tish_runtime/src/tty.rs +226 -0
  156. package/crates/tish_runtime/src/ws.rs +778 -0
  157. package/crates/tish_runtime/tests/fetch_readable_stream.rs +102 -0
  158. package/crates/tish_ui/Cargo.toml +17 -0
  159. package/crates/tish_ui/src/jsx.rs +692 -0
  160. package/crates/tish_ui/src/lib.rs +20 -0
  161. package/crates/tish_ui/src/runtime/hooks.rs +573 -0
  162. package/crates/tish_ui/src/runtime/mod.rs +183 -0
  163. package/crates/tish_vm/Cargo.toml +60 -0
  164. package/crates/tish_vm/src/jit.rs +1050 -0
  165. package/crates/tish_vm/src/lib.rs +41 -0
  166. package/crates/tish_vm/src/vm.rs +3536 -0
  167. package/crates/tish_vm/tests/concurrent_shared_state.rs +140 -0
  168. package/crates/tish_vm/tests/fixtures/or_string_cmd.tish +2 -0
  169. package/crates/tish_vm/tests/lexical_scope_declare.rs +34 -0
  170. package/crates/tish_vm/tests/peephole_jump_chain_logical_or.rs +150 -0
  171. package/crates/tish_wasm/Cargo.toml +15 -0
  172. package/crates/tish_wasm/src/lib.rs +428 -0
  173. package/crates/tish_wasm_runtime/Cargo.toml +37 -0
  174. package/crates/tish_wasm_runtime/src/gpu.rs +429 -0
  175. package/crates/tish_wasm_runtime/src/lib.rs +42 -0
  176. package/crates/tishlang_cargo_bindgen/Cargo.toml +26 -0
  177. package/crates/tishlang_cargo_bindgen/src/classify.rs +261 -0
  178. package/crates/tishlang_cargo_bindgen/src/discover.rs +125 -0
  179. package/crates/tishlang_cargo_bindgen/src/infer.rs +382 -0
  180. package/crates/tishlang_cargo_bindgen/src/lib.rs +349 -0
  181. package/crates/tishlang_cargo_bindgen/src/main.rs +167 -0
  182. package/crates/tishlang_cargo_bindgen/src/metadata.rs +117 -0
  183. package/justfile +276 -0
  184. package/package.json +2 -2
  185. package/platform/darwin-arm64/tish-fmt +0 -0
  186. package/platform/darwin-x64/tish-fmt +0 -0
  187. package/platform/linux-arm64/tish-fmt +0 -0
  188. package/platform/linux-x64/tish-fmt +0 -0
  189. package/platform/win32-x64/tish-fmt.exe +0 -0
@@ -0,0 +1,183 @@
1
+ //! UI runtime: `h`, `Fragment`, vnode shapes compatible with Lattish, minimal hooks, and [`Host`].
2
+
3
+ mod hooks;
4
+
5
+ use std::sync::Arc;
6
+
7
+ pub use hooks::{
8
+ alloc_root_id, current_root_id, drop_host_for_root, install_host_for_root,
9
+ install_thread_local_host, native_create_root,
10
+ native_use_effect, native_use_layout_effect, native_use_memo, native_use_ref,
11
+ native_use_state, run_with_current_root,
12
+ schedule_flush,
13
+ unregister_root, unregister_root_hooks_and_effects, with_host_for_root,
14
+ with_thread_local_host, HookState, RootId, LEGACY_ROOT_ID,
15
+ };
16
+
17
+ use tishlang_core::{ObjectMap, Value, VmRef};
18
+
19
+ /// Sentinel string for `Fragment` (native). Full runtimes may also use `Symbol.for("tish.fragment")`
20
+ /// when the global `Symbol` is present; [`is_fragment_tag`] accepts both that registry symbol and
21
+ /// this string for compatibility.
22
+ pub const FRAGMENT_SENTINEL: &str = "__tish_ui_Fragment__";
23
+
24
+ /// `Fragment` marker value for `h(Fragment, null, children)`.
25
+ pub fn fragment_value() -> Value {
26
+ Value::String(FRAGMENT_SENTINEL.into())
27
+ }
28
+
29
+ /// Returns true if `tag` refers to [`fragment_value`].
30
+ pub fn is_fragment_tag(tag: &Value) -> bool {
31
+ match tag {
32
+ Value::String(s) => s.as_str() == FRAGMENT_SENTINEL,
33
+ Value::Symbol(s) => s.registry_key.as_deref() == Some("tish.fragment"),
34
+ _ => false,
35
+ }
36
+ }
37
+
38
+ /// `text(s)` helper — returns string as `Value::String` for JSX text nodes.
39
+ pub fn ui_text(args: &[Value]) -> Value {
40
+ let s = args
41
+ .first()
42
+ .map(|v| v.to_display_string())
43
+ .unwrap_or_default();
44
+ Value::String(s.into())
45
+ }
46
+
47
+ /// Vnode factory: `h(tag, props, children)` (Lattish-compatible shape).
48
+ pub fn ui_h(args: &[Value]) -> Value {
49
+ let tag = args.first().cloned().unwrap_or(Value::Null);
50
+ let props = args.get(1).cloned().unwrap_or(Value::Null);
51
+ let children_arg = args.get(2).cloned().unwrap_or(Value::Null);
52
+
53
+ let children_vec = normalize_children_list(children_arg);
54
+
55
+ if let Value::Function(f) = &tag {
56
+ let mut merged: ObjectMap = if matches!(props, Value::Null) {
57
+ ObjectMap::default()
58
+ } else if let Value::Object(obj) = props {
59
+ // `ObjectData.strings` is an insertion-ordered `PropMap`; `Value::object` takes an
60
+ // `ObjectMap` (`AHashMap`). Copy the entries across (object property order is not
61
+ // observable for a merged props map here).
62
+ obj.borrow()
63
+ .strings
64
+ .iter()
65
+ .map(|(k, v)| (Arc::clone(k), v.clone()))
66
+ .collect()
67
+ } else {
68
+ ObjectMap::default()
69
+ };
70
+ if !children_vec.is_empty() {
71
+ merged.insert(
72
+ Arc::from("children"),
73
+ Value::Array(VmRef::new(children_vec.clone())),
74
+ );
75
+ }
76
+ return f.call(&[Value::object(merged)]);
77
+ }
78
+
79
+ if is_fragment_tag(&tag) {
80
+ return vnode_fragment(children_vec);
81
+ }
82
+
83
+ let tag_str: Arc<str> = match tag {
84
+ Value::String(s) => Arc::from(s.as_str()),
85
+ _ => return Value::Null,
86
+ };
87
+
88
+ vnode_element(tag_str, props, children_vec)
89
+ }
90
+
91
+ fn normalize_children_list(children_arg: Value) -> Vec<Value> {
92
+ match children_arg {
93
+ Value::Null => vec![],
94
+ Value::Array(a) => flatten_vnode_children(&a.borrow()),
95
+ other => vec![other],
96
+ }
97
+ }
98
+
99
+ /// JSX often passes `{items.map(...)}` as one slot in the children array. Treat nested `Value::Array`
100
+ /// like React: splice them into the parent list so hosts never see a raw array vnode.
101
+ fn flatten_vnode_children(items: &[Value]) -> Vec<Value> {
102
+ let mut out = Vec::new();
103
+ for c in items {
104
+ match c {
105
+ Value::Array(inner) => out.extend(flatten_vnode_children(&inner.borrow())),
106
+ Value::Null => {}
107
+ _ => out.push(c.clone()),
108
+ }
109
+ }
110
+ out
111
+ }
112
+
113
+ fn vnode_element(tag: Arc<str>, props: Value, children: Vec<Value>) -> Value {
114
+ let mut m = ObjectMap::default();
115
+ m.insert(Arc::from("tag"), Value::String(tag.as_ref().into()));
116
+ m.insert(
117
+ Arc::from("props"),
118
+ if matches!(props, Value::Null) {
119
+ Value::Null
120
+ } else {
121
+ props
122
+ },
123
+ );
124
+ m.insert(Arc::from("children"), Value::Array(VmRef::new(children)));
125
+ m.insert(Arc::from("_el"), Value::Null);
126
+ Value::object(m)
127
+ }
128
+
129
+ fn vnode_fragment(children: Vec<Value>) -> Value {
130
+ let mut m = ObjectMap::default();
131
+ m.insert(Arc::from("tag"), fragment_value());
132
+ m.insert(Arc::from("props"), Value::Null);
133
+ m.insert(Arc::from("children"), Value::Array(VmRef::new(children)));
134
+ m.insert(Arc::from("_el"), Value::Null);
135
+ Value::object(m)
136
+ }
137
+
138
+ /// Pluggable UI backend (Floem, DOM, SwiftUI, …). Main-thread / single-threaded by default.
139
+ pub trait Host {
140
+ /// Apply a new root vnode (after each render flush).
141
+ fn commit_root(&mut self, vnode: &Value);
142
+ /// Content area width changed (e.g. window resize); default no-op.
143
+ fn content_width_changed(&mut self, _width: f64) {}
144
+ /// Called once from the main queue shortly after the window is ordered on-screen. Split /
145
+ /// sidebar hosts can use this to re-layout when pane bounds were still provisional during the
146
+ /// first commit.
147
+ fn after_window_shown(&mut self) {}
148
+ /// Clear native control target/action (and similar) before the host is dropped — e.g. window close.
149
+ fn detach_native_actions(&mut self) {}
150
+ }
151
+
152
+ /// No-op / test host that only stores the last committed tree.
153
+ #[derive(Default)]
154
+ pub struct HeadlessHost {
155
+ pub last: Option<Value>,
156
+ }
157
+
158
+
159
+ impl Host for HeadlessHost {
160
+ fn commit_root(&mut self, vnode: &Value) {
161
+ self.last = Some(vnode.clone());
162
+ }
163
+ }
164
+
165
+ /// Tag registry hook for future host-specific intrinsic mapping (HTML tag → component kind).
166
+ #[derive(Default)]
167
+ pub struct TagRegistry;
168
+
169
+ impl TagRegistry {
170
+ pub fn new() -> Self {
171
+ Self
172
+ }
173
+ }
174
+
175
+ /// Placeholder for subset CSS / style object interpretation.
176
+ #[derive(Default)]
177
+ pub struct StyleInterpreter;
178
+
179
+ impl StyleInterpreter {
180
+ pub fn new() -> Self {
181
+ Self
182
+ }
183
+ }
@@ -0,0 +1,60 @@
1
+ [package]
2
+ name = "tishlang_vm"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ description = "Bytecode VM for Tish"
6
+
7
+ license-file = { workspace = true }
8
+ repository = { workspace = true }
9
+ [features]
10
+ default = []
11
+ # RegExp needs the runtime's regex impls (regexp_new / regexp_test / regexp_exec and the
12
+ # regex-aware String methods) so the VM routes through the SAME code as the rust backend.
13
+ # Mirror the fs/http pattern: pull in the optional runtime crate + its regex feature.
14
+ regex = ["tishlang_core/regex", "dep:tishlang_runtime", "tishlang_runtime/regex"]
15
+ # Propagate `send-values` so that every native-function closure we build
16
+ # in the VM (array / string / object methods) picks up the right
17
+ # `Rc<dyn Fn>` vs `Arc<dyn Fn + Send + Sync>` wrapper at compile time.
18
+ send-values = ["tishlang_core/send-values", "tishlang_builtins/send-values"]
19
+ # For wasm32 target: use web_sys console for output
20
+ wasm = ["dep:wasm-bindgen"]
21
+ # Built-in modules: fs, http, process (for bytecode LoadNativeExport).
22
+ # `dep:tishlang_runtime` is required so enabling e.g. `http` always activates the optional runtime crate
23
+ # (some Cargo/cache combinations only saw `tishlang_runtime/http` and built VM stubs without http).
24
+ fs = ["dep:tishlang_runtime", "tishlang_runtime/fs"]
25
+ process = ["dep:tishlang_runtime", "tishlang_runtime/process"]
26
+ tty = ["dep:tishlang_runtime", "tishlang_runtime/tty"]
27
+ # Timer globals + `tish:timers` LoadNativeExport (uses tishlang_runtime TLS timer registry).
28
+ timers = ["dep:tishlang_runtime"]
29
+ # Any HTTP build needs Send-safe values so handlers can be dispatched
30
+ # across worker threads or processes. HTTP implies timers (fetch/Promise often pair with setTimeout).
31
+ http = ["dep:tishlang_runtime", "tishlang_runtime/http", "send-values", "timers"]
32
+ # Promise + `tish:http.await` / `Promise` export without the full HTTP client stack (e.g. wasm32-wasip1).
33
+ promise = ["dep:tishlang_runtime", "tishlang_runtime/promise", "send-values"]
34
+ ws = ["dep:tishlang_runtime", "tishlang_runtime/ws"]
35
+
36
+ [dependencies]
37
+ tishlang_ast = { path = "../tish_ast", version = ">=0.1" }
38
+ tishlang_builtins = { path = "../tish_builtins", version = ">=0.1" }
39
+ tishlang_bytecode = { path = "../tish_bytecode", version = ">=0.1" }
40
+ tishlang_core = { path = "../tish_core", version = ">=0.1" }
41
+ tishlang_runtime = { path = "../tish_runtime", version = ">=0.1", optional = true }
42
+ rand = "0.10"
43
+ wasm-bindgen = { version = "0.2", optional = true }
44
+
45
+ [dev-dependencies]
46
+ tishlang_compile = { path = "../tish_compile", version = ">=0.1" }
47
+ tishlang_parser = { path = "../tish_parser", version = ">=0.1" }
48
+ tishlang_opt = { path = "../tish_opt", version = ">=0.1" }
49
+
50
+ [target.'cfg(target_arch = "wasm32")'.dependencies]
51
+ getrandom = { version = "0.4", features = ["wasm_js"] }
52
+
53
+ # Numeric JIT (native codegen slice 1). Not built for wasm — cranelift-jit emits host
54
+ # machine code and cannot target wasm32. The wasm/wasi VM keeps the interpreter path.
55
+ [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
56
+ cranelift = "0.130"
57
+ cranelift-jit = "0.130"
58
+ cranelift-module = "0.130"
59
+ cranelift-native = "0.130"
60
+ stacker = "0.1"