Chez Phase 1 (increment 3h): host-interop method-call emit
(.method target arg*) now analyzes to a :host-call IR node instead of punting at analyze. The Chez back end lowers it to a jolt-host-call dispatch for the methods the RT shims (.write -> port display, .isDirectory -> file-directory?, .listFiles -> directory-list); any other method stays out of subset (clean emit-time reject, so it can't read as a compiled-but-broken corpus divergence). The Janet back end punts ALL :host-call to the interpreter, same shape as letfn: compiles on Chez, interprets on Janet, zero change to the main language. Closes the io tier's print-method defmethods and file-seq: prelude emit reach 348 -> 354/355 (50-io 20/20). The one remaining gap is the regex literal in parse-uuid (needs a regex engine on Chez; deferred). emit-test 122/122; Chez subset 672/672, 0 divergences; full gate green.
This commit is contained in:
parent
0f7d2753a8
commit
b1cdfd1c9b
9 changed files with 96 additions and 13 deletions
|
|
@ -777,6 +777,10 @@
|
|||
:map (emit-map ctx node)
|
||||
:set (emit-set ctx node)
|
||||
:quote ['quote (node :form)]
|
||||
# host interop (.method target ...): the back end doesn't model interop —
|
||||
# punt to the interpreter, exactly as the analyzer used to before producing
|
||||
# a :host-call node (the Chez back end lowers it instead).
|
||||
:host-call (error "jolt/uncompilable: host method call")
|
||||
(error (string "backend: unhandled op " (node :op))))))
|
||||
|
||||
(defn emit-ir
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue