AOT: run -main with *ns* = user, matching clojure.main
A built binary loaded each namespace with (set-chez-ns! <ns>) and no restore, so -main ran with *ns* left at the entry ns. clojure.main (and interpreted joltc) run -main with *ns* = user, where a runtime (resolve 'alias/sym) is nil because the alias lives in the entry ns, not user. Reset the current ns to user in the launcher before -main so a compiled binary matches. build-smoke asserts it via a separate two-namespace app (kept apart from the tree-shake app — a `resolve` defeats tree-shaking).
This commit is contained in:
parent
79002526bb
commit
94d3bcca20
2 changed files with 28 additions and 0 deletions
|
|
@ -580,6 +580,12 @@
|
|||
;; render an uncaught throw (+ Clojure backtrace) instead
|
||||
;; of Chez's opaque dump, then exit non-zero.
|
||||
" (guard (v (#t (jolt-report-throwable v (current-error-port)) (exit 1)))\n"
|
||||
;; Loading the app left the current ns at the entry ns; reset
|
||||
;; it to `user` before -main, matching clojure.main (*ns* is
|
||||
;; `user` when a `-m` -main runs, so a runtime resolve of an
|
||||
;; aliased symbol behaves the same as on the JVM / interpreted
|
||||
;; joltc, not off the entry ns's alias table).
|
||||
" (set-chez-ns! \"user\")\n"
|
||||
" (when (and maincell (var-cell-defined? maincell))\n"
|
||||
" (apply jolt-invoke (var-cell-root maincell) args))))\n"
|
||||
" (exit 0)))\n"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue