From f46772d5765e8ae5bf05a44bf30eca331c106798 Mon Sep 17 00:00:00 2001 From: Yogthos Date: Sat, 27 Jun 2026 11:22:01 -0400 Subject: [PATCH 1/2] fd subsystem: instance? name-boundary + ~ reads as clojure.core/unquote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two general fixes that clear core.logic's finite-domain -difference, safefd, and the defne quoted-list patterns (form->ast), taking the suite to 532/5/0. - instance? on a deftype matched a simple type name against the qualified tag by raw string suffix, so "a.b.MultiIntervalFD" tested true for IntervalFD. The suffix must land on a "." boundary. core.logic's fd dispatches on (interval? x) = (instance? IntervalFD x), and a MultiIntervalFD wrongly counted as an interval, so -difference/safefd computed the wrong set. - the reader reads ~ / ~@ as clojure.core/unquote(-splicing), like the JVM reader, instead of a bare unquote. Code that inspects quoted pattern/template data — core.logic's defne checks (= f 'clojure.core/unquote) — now sees the symbol it expects, so '(fn ~args . ~body) patterns compile. hc-head-is? accepts the qualified head in syntax-quote lowering; the value-preserving change leaves the minted seed byte-identical. corpus.edn: 2 JVM-certified unquote rows. unit.edn: two reader rows updated to the qualified unquote. make test + shakesmoke green, 0 new divergences, self-host holds. --- host/chez/host-contract.ss | 7 ++++++- host/chez/java/records-interop.ss | 9 +++++++-- host/chez/reader.ss | 7 +++++-- test/chez/corpus.edn | 2 ++ test/chez/unit.edn | 4 ++-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/host/chez/host-contract.ss b/host/chez/host-contract.ss index d747902..b77fff0 100644 --- a/host/chez/host-contract.ss +++ b/host/chez/host-contract.ss @@ -298,10 +298,15 @@ ;; Any seq counts, not just a proper list: a macro that builds the template with ;; map/for (e.g. deftype's rewrite-set) yields a LAZY seq, and its ~unquotes must ;; still be recognized. +;; head symbol matches name nm, bare or clojure.core-qualified — the reader +;; produces clojure.core/unquote(-splicing) for ~/~@ (JVM parity), and this is +;; only used to spot those heads in syntax-quote templates. (define (hc-head-is? x nm) (and (cseq? x) (let ((h (seq-first x))) - (and (symbol-t? h) (jolt-nil? (hc-sym-ns h)) (string=? (symbol-t-name h) nm))))) + (and (symbol-t? h) (string=? (symbol-t-name h) nm) + (let ((ns (hc-sym-ns h))) + (or (jolt-nil? ns) (and (string? ns) (string=? ns "clojure.core")))))))) (define (hc-second x) (seq-first (jolt-seq (seq-more x)))) (define (hc-sq-symbol ctx form gsmap) diff --git a/host/chez/java/records-interop.ss b/host/chez/java/records-interop.ss index b8c564b..356ec28 100644 --- a/host/chez/java/records-interop.ss +++ b/host/chez/java/records-interop.ss @@ -93,8 +93,13 @@ ((jrec? val) (let ((tag (jrec-tag val))) (or (string=? tag tname) - (and (> (string-length tag) (string-length tname)) - (string=? (substring tag (- (string-length tag) (string-length tname)) (string-length tag)) tname)) + ;; a simple name matches a qualified tag only at a `.` boundary: + ;; "a.b.IntervalFD" is an IntervalFD, but "a.b.MultiIntervalFD" is NOT + ;; (a raw string-suffix would wrongly match the latter). + (let ((tl (string-length tag)) (nl (string-length tname))) + (and (fx>? tl nl) + (char=? (string-ref tag (fx- (fx- tl nl) 1)) #\.) + (string=? (substring tag (fx- tl nl) tl) tname))) ;; a protocol/interface the type implements (defprotocol generates an ;; interface; (instance? SomeProtocol record) is true when the record ;; implements it — core.match dispatches on instance? IPatternCompile). diff --git a/host/chez/reader.ss b/host/chez/reader.ss index 9d6be3c..db4e4db 100644 --- a/host/chez/reader.ss +++ b/host/chez/reader.ss @@ -589,10 +589,13 @@ (jolt-list (jolt-symbol #f "syntax-quote") form)) j))) ((char=? c #\@) (rdr-wrap s (+ i 1) end (jolt-symbol "clojure.core" "deref"))) + ;; ~ / ~@ read as clojure.core/unquote(-splicing), like the JVM reader — + ;; so code that inspects pattern/template data (core.logic's defne) sees + ;; the qualified symbol it expects. ((char=? c #\~) (if (and (< (+ i 1) end) (char=? (string-ref s (+ i 1)) #\@)) - (rdr-wrap s (+ i 2) end (jolt-symbol #f "unquote-splicing")) - (rdr-wrap s (+ i 1) end (jolt-symbol #f "unquote")))) + (rdr-wrap s (+ i 2) end (jolt-symbol "clojure.core" "unquote-splicing")) + (rdr-wrap s (+ i 1) end (jolt-symbol "clojure.core" "unquote")))) ((char=? c #\^) (let-values (((mform j) (rdr-read-form s (+ i 1) end))) (let-values (((target k) (rdr-read-form s j end))) diff --git a/test/chez/corpus.edn b/test/chez/corpus.edn index 40226b3..b50bf21 100644 --- a/test/chez/corpus.edn +++ b/test/chez/corpus.edn @@ -3347,4 +3347,6 @@ {:suite "special forms / qualified" :label "clojure.core-qualified special form (from syntax-quote)" :expected "[:g 9]" :actual "(clojure.core/letfn [(g [x] [:g x])] (g 9))"} {:suite "symbols / interning" :label "(str sym) is the symbol's interned name (identity-stable)" :expected "[true true]" :actual "(let [s (quote ?a)] [(identical? (name s) (str s)) (= (str s) \"?a\")])"} {:suite "symbols / interning" :label "equal symbols share an interned name string" :expected "true" :actual "(let [a (quote ?foo) b (quote ?foo)] (identical? (name a) (name b)))"} + {:suite "reader / unquote" :label "~x reads as clojure.core/unquote" :expected "true" :actual "(= (quote (clojure.core/unquote v)) (read-string \"~v\"))"} + {:suite "reader / unquote" :label "~@x reads as clojure.core/unquote-splicing" :expected "clojure.core/unquote-splicing" :actual "(first (read-string \"~@xs\"))"} ] diff --git a/test/chez/unit.edn b/test/chez/unit.edn index b128c39..fa8dcd1 100644 --- a/test/chez/unit.edn +++ b/test/chez/unit.edn @@ -323,8 +323,8 @@ {:suite "reader" :expr "(= [1 [2 3] {:k :v}] (read-string \"[1 [2 3] {:k :v}]\"))" :expected "true"} {:suite "reader" :expr "(= (quote (quote x)) (read-string \"'x\"))" :expected "true"} {:suite "reader" :expr "(= (quote (clojure.core/deref a)) (read-string \"@a\"))" :expected "true"} - {:suite "reader" :expr "(= (quote (syntax-quote (a (unquote b)))) (read-string \"`(a ~b)\"))" :expected "true"} - {:suite "reader" :expr "(= (quote (unquote-splicing xs)) (read-string \"~@xs\"))" :expected "true"} + {:suite "reader" :expr "(= (quote (syntax-quote (a (clojure.core/unquote b)))) (read-string \"`(a ~b)\"))" :expected "true"} + {:suite "reader" :expr "(= (quote (clojure.core/unquote-splicing xs)) (read-string \"~@xs\"))" :expected "true"} {:suite "reader" :expr "(= 42 (read-string \"; comment\\n42\"))" :expected "true"} {:suite "reader" :expr "(= [1 2] (read-string \"[1 #_ 9 2]\"))" :expected "true"} {:suite "reader" :expr "(nil? (read-string \"\"))" :expected "true"} From 438742702a524d95cdec49eb10c7e238c7060e20 Mon Sep 17 00:00:00 2001 From: Yogthos Date: Sat, 27 Jun 2026 11:54:47 -0400 Subject: [PATCH 2/2] Macros receive &form and &env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A macro body can now read &form (the call form) and &env (a map of the in-scope local symbols), like Clojure. This is what core.logic's matche/defne use to tell a pattern symbol that names an enclosing local from a fresh pattern var — so locals-membero and the recursive checko in `matches` now compute correctly. The suite reaches 535/2/0 (the last two are constraint reification ORDER, where the constraint set is right but it is spliced from a set whose iteration order differs from the JVM — a host set-ordering divergence, not a bug). &form/&env are clojure.core dynamic vars bound around each expander call rather than prepended params, so the macro calling convention is unchanged and the mint stays consistent (the seed prelude is byte-identical; only the analyzer carries the env into form-expand-1). macroexpand-1 passes an empty env. corpus.edn: the ~@ unquote row is now a boolean compare (a bare clojure.core/ unquote-splicing symbol evaluates to an unbound var, not the symbol). --- host/chez/host-contract.ss | 17 +++++++-- host/chez/seed/image.ss | 70 +++++++++++++++++++------------------ jolt-core/jolt/analyzer.clj | 7 +++- test/chez/corpus.edn | 2 +- 4 files changed, 57 insertions(+), 39 deletions(-) diff --git a/host/chez/host-contract.ss b/host/chez/host-contract.ss index b77fff0..b3b61c1 100644 --- a/host/chez/host-contract.ss +++ b/host/chez/host-contract.ss @@ -215,12 +215,23 @@ (if (fx>=? i (pvec-count items)) s (loop (fx+ i 1) (pset-conj s (pvec-nth-d items i jolt-nil)))))) x)) -(define (hc-expand-1 ctx form) +;; &form and &env are bound (as dynamic vars) around the expander call, so a +;; macro body can read the call form / lexical env without changing the calling +;; convention. The analyzer passes amp-env (the in-scope locals); macroexpand-1 +;; has none, so it defaults to {}. +(define hc-amp-form-cell (declare-var! "clojure.core" "&form")) +(define hc-amp-env-cell (declare-var! "clojure.core" "&env")) +(define (hc-expand-1 ctx form . maybe-env) (let* ((items (seq->list form)) (head (car items)) (args (map hc-macro-arg (cdr items))) - (expander (var-cell-root (hc-resolve-cell ctx head)))) - (hc-propagate-pos form (apply jolt-invoke expander args)))) + (expander (var-cell-root (hc-resolve-cell ctx head))) + (amp-env (if (pair? maybe-env) (car maybe-env) (jolt-hash-map)))) + (dynamic-wind + (lambda () (jolt-push-thread-bindings + (jolt-hash-map hc-amp-form-cell form hc-amp-env-cell amp-env))) + (lambda () (hc-propagate-pos form (apply jolt-invoke expander args))) + (lambda () (jolt-pop-thread-bindings))))) ;; Classify a global (non-local) symbol reference against the var registry: ;; {:kind :var :ns NS :name NAME} — a defined var (compile ns / clojure.core) diff --git a/host/chez/seed/image.ss b/host/chez/seed/image.ss index 3e5f403..e3cce26 100644 --- a/host/chez/seed/image.ss +++ b/host/chez/seed/image.ss @@ -57,73 +57,75 @@ (guard (e (#t #f)) (def-var-with-meta! "jolt.analyzer" "add-locals" (letrec ((add-locals (lambda (env names) (let fnrec8512 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__90_) (let fnrec8513 ((p__90_ p__90_)) (jolt-reduce jolt-conj p__90_ names)))))))) add-locals) (let* ((_o$8514 (keyword #f "private")) (_o$8515 #t)) (jolt-hash-map _o$8514 _o$8515)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec8516 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur) (let* ((_o$8517 (keyword #f "private")) (_o$8518 #t)) (jolt-hash-map _o$8517 _o$8518)))) + (def-var-with-meta! "jolt.analyzer" "amp-env-map" (letrec ((amp-env-map (lambda (env) (let fnrec8516 ((env env)) (let* ((_a$8518 (lambda (m n) (let fnrec8517 ((m m) (n n)) (jolt-assoc m (jolt-invoke (var-deref "clojure.core" "symbol") n) jolt-nil)))) (_a$8519 (jolt-hash-map)) (_a$8520 (jolt-get env (keyword #f "locals")))) (jolt-reduce _a$8518 _a$8519 _a$8520)))))) amp-env-map) (let* ((_o$8521 (keyword #f "private")) (_o$8522 #t)) (jolt-hash-map _o$8521 _o$8522)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec8519 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-nil? m) jolt-nil (if (jolt-truthy? (jolt-get m (keyword #f "struct"))) (keyword #f "struct") (if (jolt-truthy? (keyword #f "else")) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? (let* ((and__25__auto t)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "record-type?") ctx t) and__25__auto))) (keyword #f "struct") jolt-nil)) jolt-nil)))))))) hint-of) (let* ((_o$8520 (keyword #f "private")) (_o$8521 #t)) (jolt-hash-map _o$8520 _o$8521)))) + (def-var-with-meta! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec8523 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur) (let* ((_o$8524 (keyword #f "private")) (_o$8525 #t)) (jolt-hash-map _o$8524 _o$8525)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec8522 ((env env) (nm nm) (h h)) (if (jolt-truthy? h) (jolt-assoc env (keyword #f "hints") (jolt-assoc (jolt-get env (keyword #f "hints")) nm h)) env))))) add-hint) (let* ((_o$8523 (keyword #f "private")) (_o$8524 #t)) (jolt-hash-map _o$8523 _o$8524)))) + (def-var-with-meta! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec8526 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-nil? m) jolt-nil (if (jolt-truthy? (jolt-get m (keyword #f "struct"))) (keyword #f "struct") (if (jolt-truthy? (keyword #f "else")) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? (let* ((and__25__auto t)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "record-type?") ctx t) and__25__auto))) (keyword #f "struct") jolt-nil)) jolt-nil)))))))) hint-of) (let* ((_o$8527 (keyword #f "private")) (_o$8528 #t)) (jolt-hash-map _o$8527 _o$8528)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec8525 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? t) (jolt-invoke (var-deref "jolt.host" "record-ctor-key") ctx t) jolt-nil)) jolt-nil)))))) phint-of) (let* ((_o$8526 (keyword #f "private")) (_o$8527 #t)) (jolt-hash-map _o$8526 _o$8527)))) + (def-var-with-meta! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec8529 ((env env) (nm nm) (h h)) (if (jolt-truthy? h) (jolt-assoc env (keyword #f "hints") (jolt-assoc (jolt-get env (keyword #f "hints")) nm h)) env))))) add-hint) (let* ((_o$8530 (keyword #f "private")) (_o$8531 #t)) (jolt-hash-map _o$8530 _o$8531)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "tag->nkind" (letrec ((tag->nkind (lambda (t) (let fnrec8528 ((t t)) (let* ((s (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") t)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") t) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") t)) t (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt= s "double") (keyword #f "double") (if (jolt= s "long") (keyword #f "long") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))))))) tag->nkind) (let* ((_o$8529 (keyword #f "private")) (_o$8530 #t)) (jolt-hash-map _o$8529 _o$8530)))) + (def-var-with-meta! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec8532 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? t) (jolt-invoke (var-deref "jolt.host" "record-ctor-key") ctx t) jolt-nil)) jolt-nil)))))) phint-of) (let* ((_o$8533 (keyword #f "private")) (_o$8534 #t)) (jolt-hash-map _o$8533 _o$8534)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "nhint-of" (letrec ((nhint-of (lambda (ctx sym) (let fnrec8531 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") (jolt-get m (keyword #f "tag"))) jolt-nil)))))) nhint-of) (let* ((_o$8532 (keyword #f "private")) (_o$8533 #t)) (jolt-hash-map _o$8532 _o$8533)))) + (def-var-with-meta! "jolt.analyzer" "tag->nkind" (letrec ((tag->nkind (lambda (t) (let fnrec8535 ((t t)) (let* ((s (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") t)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") t) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") t)) t (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt= s "double") (keyword #f "double") (if (jolt= s "long") (keyword #f "long") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))))))) tag->nkind) (let* ((_o$8536 (keyword #f "private")) (_o$8537 #t)) (jolt-hash-map _o$8536 _o$8537)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "with-ret-nhint" (letrec ((with-ret-nhint (lambda (node kind) (let fnrec8534 ((node node) (kind kind)) (if (jolt-truthy? (let* ((and__25__auto kind)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "arities") (let* ((_a$8536 (var-deref "clojure.core" "mapv")) (_a$8537 (lambda (a) (let fnrec8535 ((a a)) (if (jolt-truthy? (jolt-get a (keyword #f "ret-nhint"))) a (jolt-assoc a (keyword #f "ret-nhint") kind))))) (_a$8538 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$8536 _a$8537 _a$8538))) node))))) with-ret-nhint) (let* ((_o$8539 (keyword #f "private")) (_o$8540 #t)) (jolt-hash-map _o$8539 _o$8540)))) + (def-var-with-meta! "jolt.analyzer" "nhint-of" (letrec ((nhint-of (lambda (ctx sym) (let fnrec8538 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") (jolt-get m (keyword #f "tag"))) jolt-nil)))))) nhint-of) (let* ((_o$8539 (keyword #f "private")) (_o$8540 #t)) (jolt-hash-map _o$8539 _o$8540)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec8541 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__91_) (let fnrec8542 ((p__91_ p__91_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__91_ env))) forms)) (n (jolt-count v))) (if (jolt-zero? n) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil) (if (jolt= 1 n) (jolt-first v) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$8543 (var-deref "jolt.ir" "do-node")) (_a$8544 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$8545 (jolt-peek v))) (jolt-invoke _a$8543 _a$8544 _a$8545)) jolt-nil)))))))) analyze-seq) (let* ((_o$8546 (keyword #f "private")) (_o$8547 #t)) (jolt-hash-map _o$8546 _o$8547)))) + (def-var-with-meta! "jolt.analyzer" "with-ret-nhint" (letrec ((with-ret-nhint (lambda (node kind) (let fnrec8541 ((node node) (kind kind)) (if (jolt-truthy? (let* ((and__25__auto kind)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "arities") (let* ((_a$8543 (var-deref "clojure.core" "mapv")) (_a$8544 (lambda (a) (let fnrec8542 ((a a)) (if (jolt-truthy? (jolt-get a (keyword #f "ret-nhint"))) a (jolt-assoc a (keyword #f "ret-nhint") kind))))) (_a$8545 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$8543 _a$8544 _a$8545))) node))))) with-ret-nhint) (let* ((_o$8546 (keyword #f "private")) (_o$8547 #t)) (jolt-hash-map _o$8546 _o$8547)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec8548 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop8549 ((i i) (env env) (pairs pairs)) (if (< i (jolt-count bvec)) (let* ((bsym (jolt-nth bvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") bsym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring binding") jolt-nil) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") bsym)) (init (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth bvec (jolt-inc i)) env))) (let* ((_a$8556 (+ i 2)) (_a$8557 (let* ((_a$8550 (var-deref "jolt.analyzer" "add-hint")) (_a$8551 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$8552 nm) (_a$8553 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$8550 _a$8551 _a$8552 _a$8553))) (_a$8558 (jolt-conj pairs (let* ((_o$8554 nm) (_o$8555 init)) (jolt-vector _o$8554 _o$8555))))) (loop8549 _a$8556 _a$8557 _a$8558))))) (let* ((_o$8559 pairs) (_o$8560 env)) (jolt-vector _o$8559 _o$8560))))))))) analyze-bindings) (let* ((_o$8561 (keyword #f "private")) (_o$8562 #t)) (jolt-hash-map _o$8561 _o$8562)))) + (def-var-with-meta! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec8548 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__91_) (let fnrec8549 ((p__91_ p__91_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__91_ env))) forms)) (n (jolt-count v))) (if (jolt-zero? n) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil) (if (jolt= 1 n) (jolt-first v) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$8550 (var-deref "jolt.ir" "do-node")) (_a$8551 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$8552 (jolt-peek v))) (jolt-invoke _a$8550 _a$8551 _a$8552)) jolt-nil)))))))) analyze-seq) (let* ((_o$8553 (keyword #f "private")) (_o$8554 #t)) (jolt-hash-map _o$8553 _o$8554)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec8563 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector)) (nhints (jolt-vector))) (let loop8564 ((i i) (fixed fixed) (rest-name rest-name) (hints hints) (phints phints) (nhints nhints)) (if (< i (jolt-count pvec)) (let* ((p (jolt-nth pvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") p)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn param") jolt-nil) (if (jolt= "&" (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (let* ((r (jolt-nth pvec (jolt-inc i)))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") r)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn rest") jolt-nil) (let* ((_a$8565 (+ i 2)) (_a$8566 fixed) (_a$8567 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$8568 hints) (_a$8569 phints) (_a$8570 nhints)) (loop8564 _a$8565 _a$8566 _a$8567 _a$8568 _a$8569 _a$8570)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (h (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx p)) (ph (jolt-invoke (var-deref "jolt.analyzer" "phint-of") ctx p)) (nh (jolt-invoke (var-deref "jolt.analyzer" "nhint-of") ctx p))) (let* ((_a$8577 (jolt-inc i)) (_a$8578 (jolt-conj fixed nm)) (_a$8579 rest-name) (_a$8580 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$8571 nm) (_o$8572 h)) (jolt-vector _o$8571 _o$8572))) hints)) (_a$8581 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$8573 nm) (_o$8574 ph)) (jolt-vector _o$8573 _o$8574))) phints)) (_a$8582 (if (jolt-truthy? nh) (jolt-conj nhints (let* ((_o$8575 nm) (_o$8576 nh)) (jolt-vector _o$8575 _o$8576))) nhints))) (loop8564 _a$8577 _a$8578 _a$8579 _a$8580 _a$8581 _a$8582)))))) (let* ((_o$8583 (keyword #f "fixed")) (_o$8584 fixed) (_o$8585 (keyword #f "rest")) (_o$8586 rest-name) (_o$8587 (keyword #f "hints")) (_o$8588 hints) (_o$8589 (keyword #f "phints")) (_o$8590 phints) (_o$8591 (keyword #f "nhints")) (_o$8592 nhints)) (jolt-hash-map _o$8583 _o$8584 _o$8585 _o$8586 _o$8587 _o$8588 _o$8589 _o$8590 _o$8591 _o$8592))))))))) parse-params) (let* ((_o$8593 (keyword #f "private")) (_o$8594 #t)) (jolt-hash-map _o$8593 _o$8594)))) + (def-var-with-meta! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec8555 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop8556 ((i i) (env env) (pairs pairs)) (if (< i (jolt-count bvec)) (let* ((bsym (jolt-nth bvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") bsym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring binding") jolt-nil) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") bsym)) (init (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth bvec (jolt-inc i)) env))) (let* ((_a$8563 (+ i 2)) (_a$8564 (let* ((_a$8557 (var-deref "jolt.analyzer" "add-hint")) (_a$8558 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$8559 nm) (_a$8560 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$8557 _a$8558 _a$8559 _a$8560))) (_a$8565 (jolt-conj pairs (let* ((_o$8561 nm) (_o$8562 init)) (jolt-vector _o$8561 _o$8562))))) (loop8556 _a$8563 _a$8564 _a$8565))))) (let* ((_o$8566 pairs) (_o$8567 env)) (jolt-vector _o$8566 _o$8567))))))))) analyze-bindings) (let* ((_o$8568 (keyword #f "private")) (_o$8569 #t)) (jolt-hash-map _o$8568 _o$8569)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec8595 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop8596 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop8597 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop8597 (jolt-inc j)) jolt-nil))))))) (let* ((_a$8598 (jolt-inc i)) (_a$8599 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop8596 _a$8598 _a$8599))) out)))))))) uniquify-params) (let* ((_o$8600 (keyword #f "private")) (_o$8601 #t)) (jolt-hash-map _o$8600 _o$8601)))) + (def-var-with-meta! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec8570 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector)) (nhints (jolt-vector))) (let loop8571 ((i i) (fixed fixed) (rest-name rest-name) (hints hints) (phints phints) (nhints nhints)) (if (< i (jolt-count pvec)) (let* ((p (jolt-nth pvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") p)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn param") jolt-nil) (if (jolt= "&" (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (let* ((r (jolt-nth pvec (jolt-inc i)))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") r)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn rest") jolt-nil) (let* ((_a$8572 (+ i 2)) (_a$8573 fixed) (_a$8574 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$8575 hints) (_a$8576 phints) (_a$8577 nhints)) (loop8571 _a$8572 _a$8573 _a$8574 _a$8575 _a$8576 _a$8577)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (h (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx p)) (ph (jolt-invoke (var-deref "jolt.analyzer" "phint-of") ctx p)) (nh (jolt-invoke (var-deref "jolt.analyzer" "nhint-of") ctx p))) (let* ((_a$8584 (jolt-inc i)) (_a$8585 (jolt-conj fixed nm)) (_a$8586 rest-name) (_a$8587 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$8578 nm) (_o$8579 h)) (jolt-vector _o$8578 _o$8579))) hints)) (_a$8588 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$8580 nm) (_o$8581 ph)) (jolt-vector _o$8580 _o$8581))) phints)) (_a$8589 (if (jolt-truthy? nh) (jolt-conj nhints (let* ((_o$8582 nm) (_o$8583 nh)) (jolt-vector _o$8582 _o$8583))) nhints))) (loop8571 _a$8584 _a$8585 _a$8586 _a$8587 _a$8588 _a$8589)))))) (let* ((_o$8590 (keyword #f "fixed")) (_o$8591 fixed) (_o$8592 (keyword #f "rest")) (_o$8593 rest-name) (_o$8594 (keyword #f "hints")) (_o$8595 hints) (_o$8596 (keyword #f "phints")) (_o$8597 phints) (_o$8598 (keyword #f "nhints")) (_o$8599 nhints)) (jolt-hash-map _o$8590 _o$8591 _o$8592 _o$8593 _o$8594 _o$8595 _o$8596 _o$8597 _o$8598 _o$8599))))))))) parse-params) (let* ((_o$8600 (keyword #f "private")) (_o$8601 #t)) (jolt-hash-map _o$8600 _o$8601)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec8602 ((ctx ctx) (pvec pvec) (body body) (env env) (fn-name fn-name)) (let* ((pp (jolt-invoke (var-deref "jolt.analyzer" "parse-params") ctx (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") pvec)))) (fixed (jolt-invoke (var-deref "jolt.analyzer" "uniquify-params") (jolt-get pp (keyword #f "fixed")))) (rst (jolt-get pp (keyword #f "rest"))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (let* ((_a$8603 (var-deref "clojure.core" "str")) (_a$8604 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$8605 "/") (_a$8606 (let* ((or__26__auto fn-name)) (if (jolt-truthy? or__26__auto) or__26__auto "fn"))) (_a$8607 "--")) (jolt-invoke _a$8603 _a$8604 _a$8605 _a$8606 _a$8607)))) (names (let* ((G__146 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__147 (if (jolt-truthy? rst) (jolt-conj G__146 rst) G__146))) (let* ((G__148 (if (jolt-truthy? fn-name) (jolt-conj G__147 fn-name) G__147))) G__148)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$8613 (lambda (e pr) (let fnrec8608 ((e e) (pr pr)) (let* ((_a$8609 (var-deref "jolt.analyzer" "add-hint")) (_a$8610 e) (_a$8611 (jolt-nth pr 0)) (_a$8612 (jolt-nth pr 1))) (jolt-invoke _a$8609 _a$8610 _a$8611 _a$8612))))) (_a$8614 env0) (_a$8615 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$8613 _a$8614 _a$8615))) (arity (let* ((_o$8616 (keyword #f "params")) (_o$8617 fixed) (_o$8618 (keyword #f "recur-name")) (_o$8619 rname) (_o$8620 (keyword #f "body")) (_o$8621 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$8616 _o$8617 _o$8618 _o$8619 _o$8620 _o$8621))) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "phints")))) (jolt-assoc arity (keyword #f "phints") (jolt-get pp (keyword #f "phints"))) arity)) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "nhints")))) (jolt-assoc arity (keyword #f "nhints") (jolt-get pp (keyword #f "nhints"))) arity))) (if (jolt-truthy? rst) (jolt-assoc arity (keyword #f "rest") rst) arity)))))) analyze-arity) (let* ((_o$8622 (keyword #f "private")) (_o$8623 #t)) (jolt-hash-map _o$8622 _o$8623)))) + (def-var-with-meta! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec8602 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop8603 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop8604 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop8604 (jolt-inc j)) jolt-nil))))))) (let* ((_a$8605 (jolt-inc i)) (_a$8606 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop8603 _a$8605 _a$8606))) out)))))))) uniquify-params) (let* ((_o$8607 (keyword #f "private")) (_o$8608 #t)) (jolt-hash-map _o$8607 _o$8608)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec8624 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (let* ((es (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-truthy? (let* ((and__25__auto (jolt= 3 (jolt-count es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "with-meta" (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first es))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-vec?") (jolt-nth es 1)) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-nth es 1) form)) form))))) strip-arglist-meta) (let* ((_o$8625 (keyword #f "private")) (_o$8626 #t)) (jolt-hash-map _o$8625 _o$8626)))) + (def-var-with-meta! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec8609 ((ctx ctx) (pvec pvec) (body body) (env env) (fn-name fn-name)) (let* ((pp (jolt-invoke (var-deref "jolt.analyzer" "parse-params") ctx (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") pvec)))) (fixed (jolt-invoke (var-deref "jolt.analyzer" "uniquify-params") (jolt-get pp (keyword #f "fixed")))) (rst (jolt-get pp (keyword #f "rest"))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (let* ((_a$8610 (var-deref "clojure.core" "str")) (_a$8611 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$8612 "/") (_a$8613 (let* ((or__26__auto fn-name)) (if (jolt-truthy? or__26__auto) or__26__auto "fn"))) (_a$8614 "--")) (jolt-invoke _a$8610 _a$8611 _a$8612 _a$8613 _a$8614)))) (names (let* ((G__146 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__147 (if (jolt-truthy? rst) (jolt-conj G__146 rst) G__146))) (let* ((G__148 (if (jolt-truthy? fn-name) (jolt-conj G__147 fn-name) G__147))) G__148)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$8620 (lambda (e pr) (let fnrec8615 ((e e) (pr pr)) (let* ((_a$8616 (var-deref "jolt.analyzer" "add-hint")) (_a$8617 e) (_a$8618 (jolt-nth pr 0)) (_a$8619 (jolt-nth pr 1))) (jolt-invoke _a$8616 _a$8617 _a$8618 _a$8619))))) (_a$8621 env0) (_a$8622 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$8620 _a$8621 _a$8622))) (arity (let* ((_o$8623 (keyword #f "params")) (_o$8624 fixed) (_o$8625 (keyword #f "recur-name")) (_o$8626 rname) (_o$8627 (keyword #f "body")) (_o$8628 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$8623 _o$8624 _o$8625 _o$8626 _o$8627 _o$8628))) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "phints")))) (jolt-assoc arity (keyword #f "phints") (jolt-get pp (keyword #f "phints"))) arity)) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "nhints")))) (jolt-assoc arity (keyword #f "nhints") (jolt-get pp (keyword #f "nhints"))) arity))) (if (jolt-truthy? rst) (jolt-assoc arity (keyword #f "rest") rst) arity)))))) analyze-arity) (let* ((_o$8629 (keyword #f "private")) (_o$8630 #t)) (jolt-hash-map _o$8629 _o$8630)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec8627 ((ctx ctx) (items items) (env env)) (let* ((named (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1))) (fn-name (if (jolt-truthy? named) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1)) jolt-nil)) (rest-items (if (jolt-truthy? named) (jolt-drop 2 items) (jolt-drop 1 items))) (first* (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first rest-items)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze-arity") ctx first* (jolt-rest rest-items) env fn-name))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (clause) (let fnrec8628 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$8629 (var-deref "jolt.analyzer" "analyze-arity")) (_a$8630 ctx) (_a$8631 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$8632 (jolt-rest cl)) (_a$8633 env) (_a$8634 fn-name)) (jolt-invoke _a$8629 _a$8630 _a$8631 _a$8632 _a$8633 _a$8634))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn) (let* ((_o$8635 (keyword #f "private")) (_o$8636 #t)) (jolt-hash-map _o$8635 _o$8636)))) + (def-var-with-meta! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec8631 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (let* ((es (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-truthy? (let* ((and__25__auto (jolt= 3 (jolt-count es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "with-meta" (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first es))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-vec?") (jolt-nth es 1)) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-nth es 1) form)) form))))) strip-arglist-meta) (let* ((_o$8632 (keyword #f "private")) (_o$8633 #t)) (jolt-hash-map _o$8632 _o$8633)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "catch-all-names" (let* ((_o$8637 "Throwable") (_o$8638 "java.lang.Throwable") (_o$8639 "Object") (_o$8640 "java.lang.Object")) (jolt-hash-set _o$8637 _o$8638 _o$8639 _o$8640)) (let* ((_o$8641 (keyword #f "private")) (_o$8642 #t)) (jolt-hash-map _o$8641 _o$8642)))) + (def-var-with-meta! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec8634 ((ctx ctx) (items items) (env env)) (let* ((named (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1))) (fn-name (if (jolt-truthy? named) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1)) jolt-nil)) (rest-items (if (jolt-truthy? named) (jolt-drop 2 items) (jolt-drop 1 items))) (first* (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first rest-items)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze-arity") ctx first* (jolt-rest rest-items) env fn-name))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (clause) (let fnrec8635 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$8636 (var-deref "jolt.analyzer" "analyze-arity")) (_a$8637 ctx) (_a$8638 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$8639 (jolt-rest cl)) (_a$8640 env) (_a$8641 fn-name)) (jolt-invoke _a$8636 _a$8637 _a$8638 _a$8639 _a$8640 _a$8641))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn) (let* ((_o$8642 (keyword #f "private")) (_o$8643 #t)) (jolt-hash-map _o$8642 _o$8643)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec8643 ((ctx ctx) (items items) (env env)) (let* ((clauses (jolt-rest items)) (body (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (catches (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (finally-body (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil))) (begin (begin (jolt-count (jolt-map (lambda (c) (let fnrec8644 ((c c)) (begin (let* ((head (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") c)) (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c))) jolt-nil)) (hname (if (jolt-truthy? (let* ((and__25__auto head)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") head) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil))) (if (jolt= hname "catch") (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (begin (if (let* ((or__26__auto (< (jolt-count cl) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth cl 2))))) (jolt-throw "Unable to parse catch clause; expected (catch class binding body*)") jolt-nil) (jolt-invoke (var-deref "clojure.core" "swap!") catches jolt-conj cl))) (if (jolt= hname "finally") (jolt-invoke (var-deref "clojure.core" "reset!") finally-body (jolt-rest (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "swap!") body jolt-conj c) jolt-nil)))) jolt-nil))) clauses)) jolt-nil) (let* ((n (let* ((_o$8645 (keyword #f "op")) (_o$8646 (keyword #f "try")) (_o$8647 (keyword #f "body")) (_o$8648 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$8645 _o$8646 _o$8647 _o$8648))) (n (if (jolt-truthy? (jolt-seq (jolt-invoke (var-deref "clojure.core" "deref") catches))) (let* ((evar-name (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "catch")) (evar (jolt-invoke (var-deref "clojure.core" "symbol") evar-name)) (dispatch (let* ((_a$8653 (lambda (_else cl) (let fnrec8649 ((_else _else) (cl cl)) (let* ((cform (jolt-nth cl 1)) (bindsym (jolt-nth cl 2)) (bodyf (jolt-drop 3 cl)) (letform (jolt-cons (jolt-symbol #f "let") (jolt-cons (jolt-vector bindsym evar) bodyf))) (fullname (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") cform) jolt-nil)) (catch-all? (let* ((or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-contains? (var-deref "jolt.analyzer" "catch-all-names") fullname))))) (if (jolt-truthy? catch-all?) letform (jolt-list (jolt-symbol #f "if") (let* ((_a$8650 (jolt-symbol #f "or")) (_a$8651 (jolt-list (jolt-symbol #f "instance?") cform evar)) (_a$8652 (jolt-list (jolt-symbol #f "__catch-broad?") fullname evar))) (jolt-list _a$8650 _a$8651 _a$8652)) letform _else)))))) (_a$8654 (jolt-list (jolt-symbol #f "throw") evar)) (_a$8655 (jolt-reverse (jolt-invoke (var-deref "clojure.core" "deref") catches)))) (jolt-reduce _a$8653 _a$8654 _a$8655)))) (jolt-assoc n (keyword #f "catch-sym") evar-name (keyword #f "catch-body") (let* ((_a$8656 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8657 ctx) (_a$8658 (jolt-list dispatch)) (_a$8659 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector evar-name)))) (jolt-invoke _a$8656 _a$8657 _a$8658 _a$8659)))) n)) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") finally-body)) (jolt-assoc n (keyword #f "finally") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") finally-body) env)) n))) n))))))) analyze-try) (let* ((_o$8660 (keyword #f "private")) (_o$8661 #t)) (jolt-hash-map _o$8660 _o$8661)))) + (def-var-with-meta! "jolt.analyzer" "catch-all-names" (let* ((_o$8644 "Throwable") (_o$8645 "java.lang.Throwable") (_o$8646 "Object") (_o$8647 "java.lang.Object")) (jolt-hash-set _o$8644 _o$8645 _o$8646 _o$8647)) (let* ((_o$8648 (keyword #f "private")) (_o$8649 #t)) (jolt-hash-map _o$8648 _o$8649)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-letfn" (letrec ((analyze-letfn (lambda (ctx items env) (let fnrec8662 ((ctx ctx) (items items) (env env)) (let* ((specs (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (names (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__92_) (let fnrec8663 ((p__92_ p__92_)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") p__92_)))))) specs)) (env* (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names)) (binds (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (spec) (let fnrec8664 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$8665 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$8666 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$8665 _o$8666))))) specs))) (let* ((_o$8667 (keyword #f "op")) (_o$8668 (keyword #f "let")) (_o$8669 (keyword #f "letrec")) (_o$8670 #t) (_o$8671 (keyword #f "bindings")) (_o$8672 binds) (_o$8673 (keyword #f "body")) (_o$8674 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$8667 _o$8668 _o$8669 _o$8670 _o$8671 _o$8672 _o$8673 _o$8674))))))) analyze-letfn) (let* ((_o$8675 (keyword #f "private")) (_o$8676 #t)) (jolt-hash-map _o$8675 _o$8676)))) + (def-var-with-meta! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec8650 ((ctx ctx) (items items) (env env)) (let* ((clauses (jolt-rest items)) (body (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (catches (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (finally-body (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil))) (begin (begin (jolt-count (jolt-map (lambda (c) (let fnrec8651 ((c c)) (begin (let* ((head (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") c)) (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c))) jolt-nil)) (hname (if (jolt-truthy? (let* ((and__25__auto head)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") head) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil))) (if (jolt= hname "catch") (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (begin (if (let* ((or__26__auto (< (jolt-count cl) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth cl 2))))) (jolt-throw "Unable to parse catch clause; expected (catch class binding body*)") jolt-nil) (jolt-invoke (var-deref "clojure.core" "swap!") catches jolt-conj cl))) (if (jolt= hname "finally") (jolt-invoke (var-deref "clojure.core" "reset!") finally-body (jolt-rest (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "swap!") body jolt-conj c) jolt-nil)))) jolt-nil))) clauses)) jolt-nil) (let* ((n (let* ((_o$8652 (keyword #f "op")) (_o$8653 (keyword #f "try")) (_o$8654 (keyword #f "body")) (_o$8655 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$8652 _o$8653 _o$8654 _o$8655))) (n (if (jolt-truthy? (jolt-seq (jolt-invoke (var-deref "clojure.core" "deref") catches))) (let* ((evar-name (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "catch")) (evar (jolt-invoke (var-deref "clojure.core" "symbol") evar-name)) (dispatch (let* ((_a$8660 (lambda (_else cl) (let fnrec8656 ((_else _else) (cl cl)) (let* ((cform (jolt-nth cl 1)) (bindsym (jolt-nth cl 2)) (bodyf (jolt-drop 3 cl)) (letform (jolt-cons (jolt-symbol #f "let") (jolt-cons (jolt-vector bindsym evar) bodyf))) (fullname (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") cform) jolt-nil)) (catch-all? (let* ((or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-contains? (var-deref "jolt.analyzer" "catch-all-names") fullname))))) (if (jolt-truthy? catch-all?) letform (jolt-list (jolt-symbol #f "if") (let* ((_a$8657 (jolt-symbol #f "or")) (_a$8658 (jolt-list (jolt-symbol #f "instance?") cform evar)) (_a$8659 (jolt-list (jolt-symbol #f "__catch-broad?") fullname evar))) (jolt-list _a$8657 _a$8658 _a$8659)) letform _else)))))) (_a$8661 (jolt-list (jolt-symbol #f "throw") evar)) (_a$8662 (jolt-reverse (jolt-invoke (var-deref "clojure.core" "deref") catches)))) (jolt-reduce _a$8660 _a$8661 _a$8662)))) (jolt-assoc n (keyword #f "catch-sym") evar-name (keyword #f "catch-body") (let* ((_a$8663 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8664 ctx) (_a$8665 (jolt-list dispatch)) (_a$8666 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector evar-name)))) (jolt-invoke _a$8663 _a$8664 _a$8665 _a$8666)))) n)) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") finally-body)) (jolt-assoc n (keyword #f "finally") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") finally-body) env)) n))) n))))))) analyze-try) (let* ((_o$8667 (keyword #f "private")) (_o$8668 #t)) (jolt-hash-map _o$8667 _o$8668)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec8677 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 2))) (if (jolt-truthy? and__25__auto) (jolt= ".-" (jolt-invoke (var-deref "clojure.core" "subs") nm 0 2)) and__25__auto)))))) field-head?) (let* ((_o$8678 (keyword #f "private")) (_o$8679 #t)) (jolt-hash-map _o$8678 _o$8679)))) + (def-var-with-meta! "jolt.analyzer" "analyze-letfn" (letrec ((analyze-letfn (lambda (ctx items env) (let fnrec8669 ((ctx ctx) (items items) (env env)) (let* ((specs (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (names (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__92_) (let fnrec8670 ((p__92_ p__92_)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") p__92_)))))) specs)) (env* (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names)) (binds (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (spec) (let fnrec8671 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$8672 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$8673 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$8672 _o$8673))))) specs))) (let* ((_o$8674 (keyword #f "op")) (_o$8675 (keyword #f "let")) (_o$8676 (keyword #f "letrec")) (_o$8677 #t) (_o$8678 (keyword #f "bindings")) (_o$8679 binds) (_o$8680 (keyword #f "body")) (_o$8681 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$8674 _o$8675 _o$8676 _o$8677 _o$8678 _o$8679 _o$8680 _o$8681))))))) analyze-letfn) (let* ((_o$8682 (keyword #f "private")) (_o$8683 #t)) (jolt-hash-map _o$8682 _o$8683)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "def-meta-expr" (letrec ((def-meta-expr (lambda (ctx base env) (let fnrec8680 ((ctx ctx) (base base) (env env)) (if (jolt-pos? (jolt-count base)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$8684 (var-deref "clojure.core" "mapv")) (_a$8685 (lambda (p) (let fnrec8681 ((p p)) (let* ((k (jolt-first p)) (v (jolt-invoke (var-deref "clojure.core" "second") p))) (let* ((_o$8682 (jolt-invoke (var-deref "jolt.ir" "const") k)) (_o$8683 (if (jolt= k (keyword #f "tag")) (jolt-invoke (var-deref "jolt.ir" "quote-node") v) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx v env)))) (jolt-vector _o$8682 _o$8683)))))) (_a$8686 (jolt-seq base))) (jolt-invoke _a$8684 _a$8685 _a$8686))) jolt-nil))))) def-meta-expr) (let* ((_o$8687 (keyword #f "private")) (_o$8688 #t)) (jolt-hash-map _o$8687 _o$8688)))) + (def-var-with-meta! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec8684 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 2))) (if (jolt-truthy? and__25__auto) (jolt= ".-" (jolt-invoke (var-deref "clojure.core" "subs") nm 0 2)) and__25__auto)))))) field-head?) (let* ((_o$8685 (keyword #f "private")) (_o$8686 #t)) (jolt-hash-map _o$8685 _o$8686)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec8689 ((ctx ctx) (items items) (env env)) (let* ((name-sym (jolt-nth items 1))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") name-sym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "def name with map metadata") jolt-nil) (if (< (jolt-count items) 3) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8690 (keyword #f "op")) (_o$8691 (keyword #f "def")) (_o$8692 (keyword #f "ns")) (_o$8693 cur) (_o$8694 (keyword #f "name")) (_o$8695 nm) (_o$8696 (keyword #f "no-init")) (_o$8697 #t)) (jolt-hash-map _o$8690 _o$8691 _o$8692 _o$8693 _o$8694 _o$8695 _o$8696 _o$8697)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (has-doc (let* ((and__25__auto (> (jolt-count items) 3))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "string?") (jolt-nth items 2)) and__25__auto))) (val-form (jolt-nth items (if (jolt-truthy? has-doc) 3 2))) (base0 (let* ((or__26__auto (jolt-invoke (var-deref "jolt.host" "form-sym-meta") name-sym))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))) (tag (jolt-get base0 (keyword #f "tag"))) (tag-name (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") tag)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") tag) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") tag)) tag (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (base-meta (if (jolt-truthy? tag-name) (let* ((c (jolt-invoke (var-deref "jolt.host" "resolve-class-hint") tag-name))) (if (jolt-truthy? c) (jolt-assoc base0 (keyword #f "tag") c) base0)) base0)) (node-meta (if (jolt-truthy? has-doc) (jolt-assoc base-meta (keyword #f "doc") (jolt-nth items 2)) base-meta))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((node (jolt-invoke (var-deref "jolt.ir" "def-node") cur nm (let* ((_a$8698 (var-deref "jolt.analyzer" "with-ret-nhint")) (_a$8699 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env)) (_a$8700 (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") tag))) (jolt-invoke _a$8698 _a$8699 _a$8700)) node-meta)) (me (jolt-invoke (var-deref "jolt.analyzer" "def-meta-expr") ctx node-meta env))) (if (jolt-truthy? me) (jolt-assoc node (keyword #f "meta-expr") me) node))))))))))) analyze-def) (let* ((_o$8701 (keyword #f "private")) (_o$8702 #t)) (jolt-hash-map _o$8701 _o$8702)))) + (def-var-with-meta! "jolt.analyzer" "def-meta-expr" (letrec ((def-meta-expr (lambda (ctx base env) (let fnrec8687 ((ctx ctx) (base base) (env env)) (if (jolt-pos? (jolt-count base)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$8691 (var-deref "clojure.core" "mapv")) (_a$8692 (lambda (p) (let fnrec8688 ((p p)) (let* ((k (jolt-first p)) (v (jolt-invoke (var-deref "clojure.core" "second") p))) (let* ((_o$8689 (jolt-invoke (var-deref "jolt.ir" "const") k)) (_o$8690 (if (jolt= k (keyword #f "tag")) (jolt-invoke (var-deref "jolt.ir" "quote-node") v) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx v env)))) (jolt-vector _o$8689 _o$8690)))))) (_a$8693 (jolt-seq base))) (jolt-invoke _a$8691 _a$8692 _a$8693))) jolt-nil))))) def-meta-expr) (let* ((_o$8694 (keyword #f "private")) (_o$8695 #t)) (jolt-hash-map _o$8694 _o$8695)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec8703 ((ctx ctx) (items items) (env env)) (let* ((target (jolt-nth items 1)) (val-node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (ti (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") target)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") target)) jolt-nil)) (thead (if (jolt-truthy? (let* ((and__25__auto ti)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count ti)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first ti)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first ti)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto thead)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") thead) and__25__auto))) (let* ((_o$8704 (keyword #f "op")) (_o$8705 (keyword #f "set-field")) (_o$8706 (keyword #f "obj")) (_o$8707 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$8708 (keyword #f "field")) (_o$8709 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$8710 (keyword #f "val")) (_o$8711 val-node)) (jolt-hash-map _o$8704 _o$8705 _o$8706 _o$8707 _o$8708 _o$8709 _o$8710 _o$8711)) (if (jolt-truthy? (let* ((and__25__auto (jolt= thead "."))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (>= (jolt-count ti) 3))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 2)))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "class") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "kind"))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$8715 (var-deref "jolt.ir" "invoke")) (_a$8716 (jolt-invoke (var-deref "jolt.ir" "var-ref") "jolt.host" "set-static-field!")) (_a$8717 (let* ((_o$8712 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "name")))) (_o$8713 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth ti 2)))) (_o$8714 val-node)) (jolt-vector _o$8712 _o$8713 _o$8714)))) (jolt-invoke _a$8715 _a$8716 _a$8717)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") target)) (begin (if (jolt-truthy? (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a local") jolt-nil) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (begin (if (jolt-not (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind")))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a non-var") jolt-nil) (let* ((_o$8721 (keyword #f "op")) (_o$8722 (keyword #f "set-var")) (_o$8723 (keyword #f "the-var")) (_o$8724 (let* ((_a$8718 (var-deref "jolt.ir" "the-var")) (_a$8719 (jolt-get r (keyword #f "ns"))) (_a$8720 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8718 _a$8719 _a$8720))) (_o$8725 (keyword #f "val")) (_o$8726 val-node)) (jolt-hash-map _o$8721 _o$8722 _o$8723 _o$8724 _o$8725 _o$8726))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil))))))))) analyze-set!) (let* ((_o$8727 (keyword #f "private")) (_o$8728 #t)) (jolt-hash-map _o$8727 _o$8728)))) + (def-var-with-meta! "jolt.analyzer" "analyze-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec8696 ((ctx ctx) (items items) (env env)) (let* ((name-sym (jolt-nth items 1))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") name-sym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "def name with map metadata") jolt-nil) (if (< (jolt-count items) 3) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8697 (keyword #f "op")) (_o$8698 (keyword #f "def")) (_o$8699 (keyword #f "ns")) (_o$8700 cur) (_o$8701 (keyword #f "name")) (_o$8702 nm) (_o$8703 (keyword #f "no-init")) (_o$8704 #t)) (jolt-hash-map _o$8697 _o$8698 _o$8699 _o$8700 _o$8701 _o$8702 _o$8703 _o$8704)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (has-doc (let* ((and__25__auto (> (jolt-count items) 3))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "string?") (jolt-nth items 2)) and__25__auto))) (val-form (jolt-nth items (if (jolt-truthy? has-doc) 3 2))) (base0 (let* ((or__26__auto (jolt-invoke (var-deref "jolt.host" "form-sym-meta") name-sym))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))) (tag (jolt-get base0 (keyword #f "tag"))) (tag-name (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") tag)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") tag) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") tag)) tag (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (base-meta (if (jolt-truthy? tag-name) (let* ((c (jolt-invoke (var-deref "jolt.host" "resolve-class-hint") tag-name))) (if (jolt-truthy? c) (jolt-assoc base0 (keyword #f "tag") c) base0)) base0)) (node-meta (if (jolt-truthy? has-doc) (jolt-assoc base-meta (keyword #f "doc") (jolt-nth items 2)) base-meta))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((node (jolt-invoke (var-deref "jolt.ir" "def-node") cur nm (let* ((_a$8705 (var-deref "jolt.analyzer" "with-ret-nhint")) (_a$8706 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env)) (_a$8707 (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") tag))) (jolt-invoke _a$8705 _a$8706 _a$8707)) node-meta)) (me (jolt-invoke (var-deref "jolt.analyzer" "def-meta-expr") ctx node-meta env))) (if (jolt-truthy? me) (jolt-assoc node (keyword #f "meta-expr") me) node))))))))))) analyze-def) (let* ((_o$8708 (keyword #f "private")) (_o$8709 #t)) (jolt-hash-map _o$8708 _o$8709)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec8729 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__149 op)) (if (jolt= G__149 "quote") (jolt-invoke (var-deref "jolt.ir" "quote-node") (jolt-invoke (var-deref "clojure.core" "second") items)) (if (jolt= G__149 "if") (begin (if (let* ((or__26__auto (< (jolt-count items) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (> (jolt-count items) 4))) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Wrong number of args (" (jolt-dec (jolt-count items)) ") passed to: if")) jolt-nil) (let* ((_a$8730 (var-deref "jolt.ir" "if-node")) (_a$8731 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$8732 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$8733 (if (> (jolt-count items) 3) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 3) env) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil)))) (jolt-invoke _a$8730 _a$8731 _a$8732 _a$8733))) (if (jolt= G__149 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__149 "throw") (jolt-invoke (var-deref "jolt.ir" "throw-node") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (if (jolt= G__149 "def") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (if (jolt= G__149 "let*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env))) (let* ((_a$8738 (var-deref "jolt.ir" "let-node")) (_a$8739 (jolt-first r)) (_a$8740 (let* ((_a$8734 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8735 ctx) (_a$8736 (jolt-drop 2 items)) (_a$8737 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$8734 _a$8735 _a$8736 _a$8737)))) (jolt-invoke _a$8738 _a$8739 _a$8740))) (if (jolt= G__149 "loop*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "loop")) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env)) (env** (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "clojure.core" "second") r) rname))) (let* ((_o$8741 (keyword #f "op")) (_o$8742 (keyword #f "loop")) (_o$8743 (keyword #f "recur-name")) (_o$8744 rname) (_o$8745 (keyword #f "bindings")) (_o$8746 (jolt-first r)) (_o$8747 (keyword #f "body")) (_o$8748 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$8741 _o$8742 _o$8743 _o$8744 _o$8745 _o$8746 _o$8747 _o$8748))) (if (jolt= G__149 "recur") (let* ((rt (jolt-get env (keyword #f "recur")))) (begin (if (jolt-not rt) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "recur outside loop/fn") jolt-nil) (let* ((_o$8753 (keyword #f "op")) (_o$8754 (keyword #f "recur")) (_o$8755 (keyword #f "recur-name")) (_o$8756 rt) (_o$8757 (keyword #f "args")) (_o$8758 (let* ((_a$8750 (var-deref "clojure.core" "mapv")) (_a$8751 (lambda (p__93_) (let fnrec8749 ((p__93_ p__93_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__93_ env)))) (_a$8752 (jolt-rest items))) (jolt-invoke _a$8750 _a$8751 _a$8752)))) (jolt-hash-map _o$8753 _o$8754 _o$8755 _o$8756 _o$8757 _o$8758)))) (if (jolt= G__149 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__149 "letfn") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn") ctx items env) (if (jolt= G__149 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__149 "syntax-quote") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-syntax-quote-lower") ctx (jolt-invoke (var-deref "clojure.core" "second") items)) env) (if (jolt= G__149 "var") (let* ((sym (jolt-invoke (var-deref "clojure.core" "second") items)) (r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx sym))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((_a$8759 (var-deref "jolt.ir" "the-var")) (_a$8760 (jolt-get r (keyword #f "ns"))) (_a$8761 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8759 _a$8760 _a$8761)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "var of non-var " (jolt-invoke (var-deref "jolt.host" "form-sym-name") sym))))) (if (jolt= G__149 "defmacro") (let* ((name-sym (jolt-nth items 1)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (after (jolt-drop 2 items)) (after (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") (jolt-first after))) (jolt-rest after) after)) (after (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") (jolt-first after))) (jolt-rest after) after)) (fn-form (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") after))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8762 (keyword #f "op")) (_o$8763 (keyword #f "defmacro")) (_o$8764 (keyword #f "ns")) (_o$8765 cur) (_o$8766 (keyword #f "name")) (_o$8767 nm) (_o$8768 (keyword #f "fn")) (_o$8769 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$8762 _o$8763 _o$8764 _o$8765 _o$8766 _o$8767 _o$8768 _o$8769)))) (if (jolt= G__149 "set!") (jolt-invoke (var-deref "jolt.analyzer" "analyze-set!") ctx items env) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " op)))))))))))))))))))))) analyze-special) (let* ((_o$8770 (keyword #f "private")) (_o$8771 #t)) (jolt-hash-map _o$8770 _o$8771)))) + (def-var-with-meta! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec8710 ((ctx ctx) (items items) (env env)) (let* ((target (jolt-nth items 1)) (val-node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (ti (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") target)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") target)) jolt-nil)) (thead (if (jolt-truthy? (let* ((and__25__auto ti)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count ti)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first ti)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first ti)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto thead)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") thead) and__25__auto))) (let* ((_o$8711 (keyword #f "op")) (_o$8712 (keyword #f "set-field")) (_o$8713 (keyword #f "obj")) (_o$8714 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$8715 (keyword #f "field")) (_o$8716 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$8717 (keyword #f "val")) (_o$8718 val-node)) (jolt-hash-map _o$8711 _o$8712 _o$8713 _o$8714 _o$8715 _o$8716 _o$8717 _o$8718)) (if (jolt-truthy? (let* ((and__25__auto (jolt= thead "."))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (>= (jolt-count ti) 3))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 2)))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "class") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "kind"))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$8722 (var-deref "jolt.ir" "invoke")) (_a$8723 (jolt-invoke (var-deref "jolt.ir" "var-ref") "jolt.host" "set-static-field!")) (_a$8724 (let* ((_o$8719 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "name")))) (_o$8720 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth ti 2)))) (_o$8721 val-node)) (jolt-vector _o$8719 _o$8720 _o$8721)))) (jolt-invoke _a$8722 _a$8723 _a$8724)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") target)) (begin (if (jolt-truthy? (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a local") jolt-nil) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (begin (if (jolt-not (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind")))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a non-var") jolt-nil) (let* ((_o$8728 (keyword #f "op")) (_o$8729 (keyword #f "set-var")) (_o$8730 (keyword #f "the-var")) (_o$8731 (let* ((_a$8725 (var-deref "jolt.ir" "the-var")) (_a$8726 (jolt-get r (keyword #f "ns"))) (_a$8727 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8725 _a$8726 _a$8727))) (_o$8732 (keyword #f "val")) (_o$8733 val-node)) (jolt-hash-map _o$8728 _o$8729 _o$8730 _o$8731 _o$8732 _o$8733))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil))))))))) analyze-set!) (let* ((_o$8734 (keyword #f "private")) (_o$8735 #t)) (jolt-hash-map _o$8734 _o$8735)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec8772 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt= "-" (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))) and__25__auto)) and__25__auto)) and__25__auto)))))) method-head?) (let* ((_o$8773 (keyword #f "private")) (_o$8774 #t)) (jolt-hash-map _o$8773 _o$8774)))) + (def-var-with-meta! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec8736 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__149 op)) (if (jolt= G__149 "quote") (jolt-invoke (var-deref "jolt.ir" "quote-node") (jolt-invoke (var-deref "clojure.core" "second") items)) (if (jolt= G__149 "if") (begin (if (let* ((or__26__auto (< (jolt-count items) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (> (jolt-count items) 4))) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Wrong number of args (" (jolt-dec (jolt-count items)) ") passed to: if")) jolt-nil) (let* ((_a$8737 (var-deref "jolt.ir" "if-node")) (_a$8738 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$8739 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$8740 (if (> (jolt-count items) 3) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 3) env) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil)))) (jolt-invoke _a$8737 _a$8738 _a$8739 _a$8740))) (if (jolt= G__149 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__149 "throw") (jolt-invoke (var-deref "jolt.ir" "throw-node") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (if (jolt= G__149 "def") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (if (jolt= G__149 "let*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env))) (let* ((_a$8745 (var-deref "jolt.ir" "let-node")) (_a$8746 (jolt-first r)) (_a$8747 (let* ((_a$8741 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8742 ctx) (_a$8743 (jolt-drop 2 items)) (_a$8744 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$8741 _a$8742 _a$8743 _a$8744)))) (jolt-invoke _a$8745 _a$8746 _a$8747))) (if (jolt= G__149 "loop*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "loop")) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env)) (env** (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "clojure.core" "second") r) rname))) (let* ((_o$8748 (keyword #f "op")) (_o$8749 (keyword #f "loop")) (_o$8750 (keyword #f "recur-name")) (_o$8751 rname) (_o$8752 (keyword #f "bindings")) (_o$8753 (jolt-first r)) (_o$8754 (keyword #f "body")) (_o$8755 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$8748 _o$8749 _o$8750 _o$8751 _o$8752 _o$8753 _o$8754 _o$8755))) (if (jolt= G__149 "recur") (let* ((rt (jolt-get env (keyword #f "recur")))) (begin (if (jolt-not rt) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "recur outside loop/fn") jolt-nil) (let* ((_o$8760 (keyword #f "op")) (_o$8761 (keyword #f "recur")) (_o$8762 (keyword #f "recur-name")) (_o$8763 rt) (_o$8764 (keyword #f "args")) (_o$8765 (let* ((_a$8757 (var-deref "clojure.core" "mapv")) (_a$8758 (lambda (p__93_) (let fnrec8756 ((p__93_ p__93_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__93_ env)))) (_a$8759 (jolt-rest items))) (jolt-invoke _a$8757 _a$8758 _a$8759)))) (jolt-hash-map _o$8760 _o$8761 _o$8762 _o$8763 _o$8764 _o$8765)))) (if (jolt= G__149 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__149 "letfn") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn") ctx items env) (if (jolt= G__149 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__149 "syntax-quote") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-syntax-quote-lower") ctx (jolt-invoke (var-deref "clojure.core" "second") items)) env) (if (jolt= G__149 "var") (let* ((sym (jolt-invoke (var-deref "clojure.core" "second") items)) (r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx sym))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((_a$8766 (var-deref "jolt.ir" "the-var")) (_a$8767 (jolt-get r (keyword #f "ns"))) (_a$8768 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8766 _a$8767 _a$8768)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "var of non-var " (jolt-invoke (var-deref "jolt.host" "form-sym-name") sym))))) (if (jolt= G__149 "defmacro") (let* ((name-sym (jolt-nth items 1)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (after (jolt-drop 2 items)) (after (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") (jolt-first after))) (jolt-rest after) after)) (after (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") (jolt-first after))) (jolt-rest after) after)) (fn-form (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") after))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8769 (keyword #f "op")) (_o$8770 (keyword #f "defmacro")) (_o$8771 (keyword #f "ns")) (_o$8772 cur) (_o$8773 (keyword #f "name")) (_o$8774 nm) (_o$8775 (keyword #f "fn")) (_o$8776 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$8769 _o$8770 _o$8771 _o$8772 _o$8773 _o$8774 _o$8775 _o$8776)))) (if (jolt= G__149 "set!") (jolt-invoke (var-deref "jolt.analyzer" "analyze-set!") ctx items env) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " op)))))))))))))))))))))) analyze-special) (let* ((_o$8777 (keyword #f "private")) (_o$8778 #t)) (jolt-hash-map _o$8777 _o$8778)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec8775 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed member expression, expecting (.method target ...): " hname)) jolt-nil) (let* ((_o$8780 (keyword #f "op")) (_o$8781 (keyword #f "host-call")) (_o$8782 (keyword #f "method")) (_o$8783 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8784 (keyword #f "target")) (_o$8785 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8786 (keyword #f "args")) (_o$8787 (let* ((_a$8777 (var-deref "clojure.core" "mapv")) (_a$8778 (lambda (p__94_) (let fnrec8776 ((p__94_ p__94_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__94_ env)))) (_a$8779 (jolt-drop 2 items))) (jolt-invoke _a$8777 _a$8778 _a$8779)))) (jolt-hash-map _o$8780 _o$8781 _o$8782 _o$8783 _o$8784 _o$8785 _o$8786 _o$8787))))))) analyze-host-call) (let* ((_o$8788 (keyword #f "private")) (_o$8789 #t)) (jolt-hash-map _o$8788 _o$8789)))) + (def-var-with-meta! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec8779 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt= "-" (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))) and__25__auto)) and__25__auto)) and__25__auto)))))) method-head?) (let* ((_o$8780 (keyword #f "private")) (_o$8781 #t)) (jolt-hash-map _o$8780 _o$8781)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec8790 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (let* ((_a$8791 (var-deref "clojure.core" "subs")) (_a$8792 nm) (_a$8793 (jolt-dec (jolt-count nm))) (_a$8794 (jolt-count nm))) (jolt-invoke _a$8791 _a$8792 _a$8793 _a$8794))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1))) and__25__auto)) and__25__auto)))))) ctor-head?) (let* ((_o$8795 (keyword #f "private")) (_o$8796 #t)) (jolt-hash-map _o$8795 _o$8796)))) + (def-var-with-meta! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec8782 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed member expression, expecting (.method target ...): " hname)) jolt-nil) (let* ((_o$8787 (keyword #f "op")) (_o$8788 (keyword #f "host-call")) (_o$8789 (keyword #f "method")) (_o$8790 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8791 (keyword #f "target")) (_o$8792 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8793 (keyword #f "args")) (_o$8794 (let* ((_a$8784 (var-deref "clojure.core" "mapv")) (_a$8785 (lambda (p__94_) (let fnrec8783 ((p__94_ p__94_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__94_ env)))) (_a$8786 (jolt-drop 2 items))) (jolt-invoke _a$8784 _a$8785 _a$8786)))) (jolt-hash-map _o$8787 _o$8788 _o$8789 _o$8790 _o$8791 _o$8792 _o$8793 _o$8794))))))) analyze-host-call) (let* ((_o$8795 (keyword #f "private")) (_o$8796 #t)) (jolt-hash-map _o$8795 _o$8796)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec8797 ((ctx ctx) (class class) (args args) (env env)) (jolt-invoke (var-deref "jolt.ir" "host-new") class (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__95_) (let fnrec8798 ((p__95_ p__95_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__95_ env))) args)))))) analyze-ctor) (let* ((_o$8799 (keyword #f "private")) (_o$8800 #t)) (jolt-hash-map _o$8799 _o$8800)))) + (def-var-with-meta! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec8797 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (let* ((_a$8798 (var-deref "clojure.core" "subs")) (_a$8799 nm) (_a$8800 (jolt-dec (jolt-count nm))) (_a$8801 (jolt-count nm))) (jolt-invoke _a$8798 _a$8799 _a$8800 _a$8801))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1))) and__25__auto)) and__25__auto)))))) ctor-head?) (let* ((_o$8802 (keyword #f "private")) (_o$8803 #t)) (jolt-hash-map _o$8802 _o$8803)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec8801 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-fn expects (foreign-fn \"sym\" [argtypes] rettype [:blocking])")) jolt-nil) (let* ((_o$8802 (keyword #f "op")) (_o$8803 (keyword #f "ffi-fn")) (_o$8804 (keyword #f "csym")) (_o$8805 (jolt-nth items 1)) (_o$8806 (keyword #f "argtypes")) (_o$8807 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8808 (keyword #f "rettype")) (_o$8809 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8810 (keyword #f "blocking")) (_o$8811 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "blocking" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8802 _o$8803 _o$8804 _o$8805 _o$8806 _o$8807 _o$8808 _o$8809 _o$8810 _o$8811))))))) analyze-ffi-fn) (let* ((_o$8812 (keyword #f "private")) (_o$8813 #t)) (jolt-hash-map _o$8812 _o$8813)))) + (def-var-with-meta! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec8804 ((ctx ctx) (class class) (args args) (env env)) (jolt-invoke (var-deref "jolt.ir" "host-new") class (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__95_) (let fnrec8805 ((p__95_ p__95_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__95_ env))) args)))))) analyze-ctor) (let* ((_o$8806 (keyword #f "private")) (_o$8807 #t)) (jolt-hash-map _o$8806 _o$8807)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-ffi-callable" (letrec ((analyze-ffi-callable (lambda (ctx items env) (let fnrec8814 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-callable expects (foreign-callable f [argtypes] rettype [:collect-safe])")) jolt-nil) (let* ((_o$8815 (keyword #f "op")) (_o$8816 (keyword #f "ffi-callable")) (_o$8817 (keyword #f "fn")) (_o$8818 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8819 (keyword #f "argtypes")) (_o$8820 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8821 (keyword #f "rettype")) (_o$8822 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8823 (keyword #f "collect-safe")) (_o$8824 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "collect-safe" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8815 _o$8816 _o$8817 _o$8818 _o$8819 _o$8820 _o$8821 _o$8822 _o$8823 _o$8824))))))) analyze-ffi-callable) (let* ((_o$8825 (keyword #f "private")) (_o$8826 #t)) (jolt-hash-map _o$8825 _o$8826)))) + (def-var-with-meta! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec8808 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-fn expects (foreign-fn \"sym\" [argtypes] rettype [:blocking])")) jolt-nil) (let* ((_o$8809 (keyword #f "op")) (_o$8810 (keyword #f "ffi-fn")) (_o$8811 (keyword #f "csym")) (_o$8812 (jolt-nth items 1)) (_o$8813 (keyword #f "argtypes")) (_o$8814 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8815 (keyword #f "rettype")) (_o$8816 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8817 (keyword #f "blocking")) (_o$8818 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "blocking" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8809 _o$8810 _o$8811 _o$8812 _o$8813 _o$8814 _o$8815 _o$8816 _o$8817 _o$8818))))))) analyze-ffi-fn) (let* ((_o$8819 (keyword #f "private")) (_o$8820 #t)) (jolt-hash-map _o$8819 _o$8820)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec8827 ((ctx ctx) (items items) (env env)) (begin (if (< (jolt-count items) 3) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (. target member ...) form")) jolt-nil) (let* ((member0 (jolt-nth items 2)) (items (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") member0)) (let* ((ml (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") member0)))) (let* ((_a$8831 (let* ((_o$8828 (jolt-nth items 0)) (_o$8829 (jolt-nth items 1)) (_o$8830 (jolt-first ml))) (jolt-vector _o$8828 _o$8829 _o$8830))) (_a$8832 (jolt-rest ml))) (jolt-into _a$8831 _a$8832))) items)) (target (jolt-nth items 1)) (member (jolt-nth items 2)) (class-target (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") target))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) and__25__auto))) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (if (jolt= (keyword #f "class") (jolt-get r (keyword #f "kind"))) (jolt-get r (keyword #f "name")) jolt-nil)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto class-target)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") member) and__25__auto))) (let* ((_a$8837 (var-deref "jolt.ir" "invoke")) (_a$8838 (jolt-invoke (var-deref "jolt.ir" "host-static") class-target (jolt-invoke (var-deref "jolt.host" "form-sym-name") member))) (_a$8839 (let* ((_a$8834 (var-deref "clojure.core" "mapv")) (_a$8835 (lambda (p__96_) (let fnrec8833 ((p__96_ p__96_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__96_ env)))) (_a$8836 (jolt-drop 3 items))) (jolt-invoke _a$8834 _a$8835 _a$8836)))) (jolt-invoke _a$8837 _a$8838 _a$8839)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$8844 (keyword #f "op")) (_o$8845 (keyword #f "host-call")) (_o$8846 (keyword #f "method")) (_o$8847 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$8848 (keyword #f "target")) (_o$8849 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx target env)) (_o$8850 (keyword #f "args")) (_o$8851 (let* ((_a$8841 (var-deref "clojure.core" "mapv")) (_a$8842 (lambda (p__97_) (let fnrec8840 ((p__97_ p__97_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__97_ env)))) (_a$8843 (jolt-drop 3 items))) (jolt-invoke _a$8841 _a$8842 _a$8843)))) (jolt-hash-map _o$8844 _o$8845 _o$8846 _o$8847 _o$8848 _o$8849 _o$8850 _o$8851)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$8852 (var-deref "jolt.ir" "invoke")) (_a$8853 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$8854 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$8852 _a$8853 _a$8854)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil)))))))))) analyze-dot) (let* ((_o$8855 (keyword #f "private")) (_o$8856 #t)) (jolt-hash-map _o$8855 _o$8856)))) + (def-var-with-meta! "jolt.analyzer" "analyze-ffi-callable" (letrec ((analyze-ffi-callable (lambda (ctx items env) (let fnrec8821 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-callable expects (foreign-callable f [argtypes] rettype [:collect-safe])")) jolt-nil) (let* ((_o$8822 (keyword #f "op")) (_o$8823 (keyword #f "ffi-callable")) (_o$8824 (keyword #f "fn")) (_o$8825 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8826 (keyword #f "argtypes")) (_o$8827 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8828 (keyword #f "rettype")) (_o$8829 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8830 (keyword #f "collect-safe")) (_o$8831 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "collect-safe" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8822 _o$8823 _o$8824 _o$8825 _o$8826 _o$8827 _o$8828 _o$8829 _o$8830 _o$8831))))))) analyze-ffi-callable) (let* ((_o$8832 (keyword #f "private")) (_o$8833 #t)) (jolt-hash-map _o$8832 _o$8833)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec8857 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (.-field target) form")) jolt-nil) (let* ((_o$8858 (keyword #f "op")) (_o$8859 (keyword #f "host-call")) (_o$8860 (keyword #f "method")) (_o$8861 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8862 (keyword #f "target")) (_o$8863 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8864 (keyword #f "args")) (_o$8865 (jolt-vector))) (jolt-hash-map _o$8858 _o$8859 _o$8860 _o$8861 _o$8862 _o$8863 _o$8864 _o$8865))))))) analyze-field) (let* ((_o$8866 (keyword #f "private")) (_o$8867 #t)) (jolt-hash-map _o$8866 _o$8867)))) + (def-var-with-meta! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec8834 ((ctx ctx) (items items) (env env)) (begin (if (< (jolt-count items) 3) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (. target member ...) form")) jolt-nil) (let* ((member0 (jolt-nth items 2)) (items (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") member0)) (let* ((ml (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") member0)))) (let* ((_a$8838 (let* ((_o$8835 (jolt-nth items 0)) (_o$8836 (jolt-nth items 1)) (_o$8837 (jolt-first ml))) (jolt-vector _o$8835 _o$8836 _o$8837))) (_a$8839 (jolt-rest ml))) (jolt-into _a$8838 _a$8839))) items)) (target (jolt-nth items 1)) (member (jolt-nth items 2)) (class-target (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") target))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) and__25__auto))) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (if (jolt= (keyword #f "class") (jolt-get r (keyword #f "kind"))) (jolt-get r (keyword #f "name")) jolt-nil)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto class-target)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") member) and__25__auto))) (let* ((_a$8844 (var-deref "jolt.ir" "invoke")) (_a$8845 (jolt-invoke (var-deref "jolt.ir" "host-static") class-target (jolt-invoke (var-deref "jolt.host" "form-sym-name") member))) (_a$8846 (let* ((_a$8841 (var-deref "clojure.core" "mapv")) (_a$8842 (lambda (p__96_) (let fnrec8840 ((p__96_ p__96_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__96_ env)))) (_a$8843 (jolt-drop 3 items))) (jolt-invoke _a$8841 _a$8842 _a$8843)))) (jolt-invoke _a$8844 _a$8845 _a$8846)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$8851 (keyword #f "op")) (_o$8852 (keyword #f "host-call")) (_o$8853 (keyword #f "method")) (_o$8854 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$8855 (keyword #f "target")) (_o$8856 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx target env)) (_o$8857 (keyword #f "args")) (_o$8858 (let* ((_a$8848 (var-deref "clojure.core" "mapv")) (_a$8849 (lambda (p__97_) (let fnrec8847 ((p__97_ p__97_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__97_ env)))) (_a$8850 (jolt-drop 3 items))) (jolt-invoke _a$8848 _a$8849 _a$8850)))) (jolt-hash-map _o$8851 _o$8852 _o$8853 _o$8854 _o$8855 _o$8856 _o$8857 _o$8858)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$8859 (var-deref "jolt.ir" "invoke")) (_a$8860 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$8861 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$8859 _a$8860 _a$8861)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil)))))))))) analyze-dot) (let* ((_o$8862 (keyword #f "private")) (_o$8863 #t)) (jolt-hash-map _o$8862 _o$8863)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec8868 ((ctx ctx) (form form) (env env)) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form)) (ns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form))) (if (jolt-truthy? (let* ((and__25__auto (jolt-nil? ns))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env nm) and__25__auto))) (let* ((h (jolt-get (jolt-get env (keyword #f "hints")) nm))) (if (jolt-truthy? h) (jolt-assoc (jolt-invoke (var-deref "jolt.ir" "local") nm) (keyword #f "hint") h) (jolt-invoke (var-deref "jolt.ir" "local") nm))) (if (jolt-truthy? ns) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((G__150 (let* ((_a$8869 (var-deref "jolt.ir" "var-ref")) (_a$8870 (jolt-get r (keyword #f "ns"))) (_a$8871 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8869 _a$8870 _a$8871)))) (let* ((G__151 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__150 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__150))) G__151)) (jolt-invoke (var-deref "jolt.ir" "host-static") ns nm))) (if (jolt-truthy? (keyword #f "else")) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (let* ((G__152 (jolt-get r (keyword #f "kind")))) (if (jolt= G__152 (keyword #f "var")) (let* ((G__153 (let* ((_a$8872 (var-deref "jolt.ir" "var-ref")) (_a$8873 (jolt-get r (keyword #f "ns"))) (_a$8874 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8872 _a$8873 _a$8874)))) (let* ((G__154 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__153 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__153))) G__154)) (if (jolt= G__152 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt= G__152 (keyword #f "class")) (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get r (keyword #f "name"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "late-bind?") ctx)) (jolt-invoke (var-deref "jolt.ir" "var-ref") (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx) nm) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "Unable to resolve symbol: " nm " in this context")))))))) jolt-nil)))))))) analyze-symbol) (let* ((_o$8875 (keyword #f "private")) (_o$8876 #t)) (jolt-hash-map _o$8875 _o$8876)))) + (def-var-with-meta! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec8864 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (.-field target) form")) jolt-nil) (let* ((_o$8865 (keyword #f "op")) (_o$8866 (keyword #f "host-call")) (_o$8867 (keyword #f "method")) (_o$8868 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8869 (keyword #f "target")) (_o$8870 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8871 (keyword #f "args")) (_o$8872 (jolt-vector))) (jolt-hash-map _o$8865 _o$8866 _o$8867 _o$8868 _o$8869 _o$8870 _o$8871 _o$8872))))))) analyze-field) (let* ((_o$8873 (keyword #f "private")) (_o$8874 #t)) (jolt-hash-map _o$8873 _o$8874)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec8877 ((ctx ctx) (form form) (env env)) (let* ((items (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-zero? (jolt-count items)) (jolt-invoke (var-deref "jolt.ir" "quote-node") form) (let* ((head (jolt-first items)) (hname (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (jolt-nil? (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)) (sf-name (let* ((or__26__auto hname)) (if (jolt-truthy? or__26__auto) or__26__auto (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)))) (shadowed (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env hname) and__25__auto)))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-macro?") ctx head) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-expand-1") ctx form) env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__cfn" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-fn") ctx items env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__ccallable" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-callable") ctx items env) (if (jolt-truthy? (let* ((and__25__auto sf-name)) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx sf-name items env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "method-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-host-call") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "ctor-head?") hname) and__25__auto)) and__25__auto))) (let* ((_a$8878 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8879 ctx) (_a$8880 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$8881 (jolt-rest items)) (_a$8882 env)) (jolt-invoke _a$8878 _a$8879 _a$8880 _a$8881 _a$8882)) (if (jolt-truthy? (let* ((and__25__auto (jolt= hname "new"))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (>= (jolt-count items) 2))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$8883 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8884 ctx) (_a$8885 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$8886 (jolt-drop 2 items)) (_a$8887 env)) (jolt-invoke _a$8883 _a$8884 _a$8885 _a$8886 _a$8887)) (if (let* ((and__25__auto (jolt= hname "."))) (if (jolt-truthy? and__25__auto) (jolt-not shadowed) and__25__auto)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-dot") ctx items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-field") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-special?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " hname)) (if (jolt-truthy? (keyword #f "else")) (let* ((n (let* ((_a$8892 (var-deref "jolt.ir" "invoke")) (_a$8893 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$8894 (let* ((_a$8889 (var-deref "clojure.core" "mapv")) (_a$8890 (lambda (p__98_) (let fnrec8888 ((p__98_ p__98_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__98_ env)))) (_a$8891 (jolt-rest items))) (jolt-invoke _a$8889 _a$8890 _a$8891)))) (jolt-invoke _a$8892 _a$8893 _a$8894))) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? p) (jolt-assoc n (keyword #f "pos") p) n)) jolt-nil)))))))))))))))))) analyze-list) (let* ((_o$8895 (keyword #f "private")) (_o$8896 #t)) (jolt-hash-map _o$8895 _o$8896)))) + (def-var-with-meta! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec8875 ((ctx ctx) (form form) (env env)) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form)) (ns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form))) (if (jolt-truthy? (let* ((and__25__auto (jolt-nil? ns))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env nm) and__25__auto))) (let* ((h (jolt-get (jolt-get env (keyword #f "hints")) nm))) (if (jolt-truthy? h) (jolt-assoc (jolt-invoke (var-deref "jolt.ir" "local") nm) (keyword #f "hint") h) (jolt-invoke (var-deref "jolt.ir" "local") nm))) (if (jolt-truthy? ns) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((G__150 (let* ((_a$8876 (var-deref "jolt.ir" "var-ref")) (_a$8877 (jolt-get r (keyword #f "ns"))) (_a$8878 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8876 _a$8877 _a$8878)))) (let* ((G__151 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__150 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__150))) G__151)) (jolt-invoke (var-deref "jolt.ir" "host-static") ns nm))) (if (jolt-truthy? (keyword #f "else")) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (let* ((G__152 (jolt-get r (keyword #f "kind")))) (if (jolt= G__152 (keyword #f "var")) (let* ((G__153 (let* ((_a$8879 (var-deref "jolt.ir" "var-ref")) (_a$8880 (jolt-get r (keyword #f "ns"))) (_a$8881 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8879 _a$8880 _a$8881)))) (let* ((G__154 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__153 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__153))) G__154)) (if (jolt= G__152 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt= G__152 (keyword #f "class")) (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get r (keyword #f "name"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "late-bind?") ctx)) (jolt-invoke (var-deref "jolt.ir" "var-ref") (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx) nm) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "Unable to resolve symbol: " nm " in this context")))))))) jolt-nil)))))))) analyze-symbol) (let* ((_o$8882 (keyword #f "private")) (_o$8883 #t)) (jolt-hash-map _o$8882 _o$8883)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "with-coll-meta" (letrec ((with-coll-meta (lambda (ctx form env node) (let fnrec8897 ((ctx ctx) (form form) (env env) (node node)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-coll-meta") form))) (if (jolt-nil? m) node (let* ((_a$8900 (var-deref "jolt.ir" "invoke")) (_a$8901 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$8902 (let* ((_o$8898 node) (_o$8899 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx m env))) (jolt-vector _o$8898 _o$8899)))) (jolt-invoke _a$8900 _a$8901 _a$8902)))))))) with-coll-meta) (let* ((_o$8903 (keyword #f "private")) (_o$8904 #t)) (jolt-hash-map _o$8903 _o$8904)))) + (def-var-with-meta! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec8884 ((ctx ctx) (form form) (env env)) (let* ((items (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-zero? (jolt-count items)) (jolt-invoke (var-deref "jolt.ir" "quote-node") form) (let* ((head (jolt-first items)) (hname (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (jolt-nil? (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)) (sf-name (let* ((or__26__auto hname)) (if (jolt-truthy? or__26__auto) or__26__auto (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)))) (shadowed (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env hname) and__25__auto)))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-macro?") ctx head) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-expand-1") ctx form (jolt-invoke (var-deref "jolt.analyzer" "amp-env-map") env)) env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__cfn" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-fn") ctx items env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__ccallable" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-callable") ctx items env) (if (jolt-truthy? (let* ((and__25__auto sf-name)) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx sf-name items env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "method-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-host-call") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "ctor-head?") hname) and__25__auto)) and__25__auto))) (let* ((_a$8885 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8886 ctx) (_a$8887 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$8888 (jolt-rest items)) (_a$8889 env)) (jolt-invoke _a$8885 _a$8886 _a$8887 _a$8888 _a$8889)) (if (jolt-truthy? (let* ((and__25__auto (jolt= hname "new"))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (>= (jolt-count items) 2))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$8890 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8891 ctx) (_a$8892 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$8893 (jolt-drop 2 items)) (_a$8894 env)) (jolt-invoke _a$8890 _a$8891 _a$8892 _a$8893 _a$8894)) (if (let* ((and__25__auto (jolt= hname "."))) (if (jolt-truthy? and__25__auto) (jolt-not shadowed) and__25__auto)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-dot") ctx items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-field") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-special?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " hname)) (if (jolt-truthy? (keyword #f "else")) (let* ((n (let* ((_a$8899 (var-deref "jolt.ir" "invoke")) (_a$8900 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$8901 (let* ((_a$8896 (var-deref "clojure.core" "mapv")) (_a$8897 (lambda (p__98_) (let fnrec8895 ((p__98_ p__98_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__98_ env)))) (_a$8898 (jolt-rest items))) (jolt-invoke _a$8896 _a$8897 _a$8898)))) (jolt-invoke _a$8899 _a$8900 _a$8901))) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? p) (jolt-assoc n (keyword #f "pos") p) n)) jolt-nil)))))))))))))))))) analyze-list) (let* ((_o$8902 (keyword #f "private")) (_o$8903 #t)) (jolt-hash-map _o$8902 _o$8903)))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec8905 ((ctx ctx) (form form)) (analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec8906 ((ctx ctx) (form form) (env env)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.ir" "const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-symbol") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "vector-node") (let* ((_a$8908 (var-deref "clojure.core" "mapv")) (_a$8909 (lambda (p__99_) (let fnrec8907 ((p__99_ p__99_)) (analyze ctx p__99_ env)))) (_a$8910 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$8908 _a$8909 _a$8910)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$8914 (var-deref "clojure.core" "mapv")) (_a$8915 (lambda (p) (let fnrec8911 ((p p)) (let* ((_o$8912 (analyze ctx (jolt-first p) env)) (_o$8913 (analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$8912 _o$8913))))) (_a$8916 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$8914 _a$8915 _a$8916)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "set-node") (let* ((_a$8918 (var-deref "clojure.core" "mapv")) (_a$8919 (lambda (p__100_) (let fnrec8917 ((p__100_ p__100_)) (analyze ctx p__100_ env)))) (_a$8920 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$8918 _a$8919 _a$8920)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-list") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (let* ((_o$8921 (keyword #f "op")) (_o$8922 (keyword #f "regex")) (_o$8923 (keyword #f "source")) (_o$8924 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$8921 _o$8922 _o$8923 _o$8924)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$8925 (keyword #f "op")) (_o$8926 (keyword #f "inst")) (_o$8927 (keyword #f "source")) (_o$8928 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$8925 _o$8926 _o$8927 _o$8928)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$8929 (keyword #f "op")) (_o$8930 (keyword #f "uuid")) (_o$8931 (keyword #f "source")) (_o$8932 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$8929 _o$8930 _o$8931 _o$8932)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$8933 (keyword #f "op")) (_o$8934 (keyword #f "bigdec")) (_o$8935 (keyword #f "source")) (_o$8936 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$8933 _o$8934 _o$8935 _o$8936)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$8937 (keyword #f "op")) (_o$8938 (keyword #f "the-ns")) (_o$8939 (keyword #f "name")) (_o$8940 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$8937 _o$8938 _o$8939 _o$8940)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "unsupported form") jolt-nil))))))))))))))))) analyze))) + (def-var-with-meta! "jolt.analyzer" "with-coll-meta" (letrec ((with-coll-meta (lambda (ctx form env node) (let fnrec8904 ((ctx ctx) (form form) (env env) (node node)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-coll-meta") form))) (if (jolt-nil? m) node (let* ((_a$8907 (var-deref "jolt.ir" "invoke")) (_a$8908 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$8909 (let* ((_o$8905 node) (_o$8906 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx m env))) (jolt-vector _o$8905 _o$8906)))) (jolt-invoke _a$8907 _a$8908 _a$8909)))))))) with-coll-meta) (let* ((_o$8910 (keyword #f "private")) (_o$8911 #t)) (jolt-hash-map _o$8910 _o$8911)))) +(guard (e (#t #f)) + (def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec8912 ((ctx ctx) (form form)) (analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec8913 ((ctx ctx) (form form) (env env)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.ir" "const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-symbol") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "vector-node") (let* ((_a$8915 (var-deref "clojure.core" "mapv")) (_a$8916 (lambda (p__99_) (let fnrec8914 ((p__99_ p__99_)) (analyze ctx p__99_ env)))) (_a$8917 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$8915 _a$8916 _a$8917)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$8921 (var-deref "clojure.core" "mapv")) (_a$8922 (lambda (p) (let fnrec8918 ((p p)) (let* ((_o$8919 (analyze ctx (jolt-first p) env)) (_o$8920 (analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$8919 _o$8920))))) (_a$8923 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$8921 _a$8922 _a$8923)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "set-node") (let* ((_a$8925 (var-deref "clojure.core" "mapv")) (_a$8926 (lambda (p__100_) (let fnrec8924 ((p__100_ p__100_)) (analyze ctx p__100_ env)))) (_a$8927 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$8925 _a$8926 _a$8927)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-list") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (let* ((_o$8928 (keyword #f "op")) (_o$8929 (keyword #f "regex")) (_o$8930 (keyword #f "source")) (_o$8931 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$8928 _o$8929 _o$8930 _o$8931)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$8932 (keyword #f "op")) (_o$8933 (keyword #f "inst")) (_o$8934 (keyword #f "source")) (_o$8935 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$8932 _o$8933 _o$8934 _o$8935)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$8936 (keyword #f "op")) (_o$8937 (keyword #f "uuid")) (_o$8938 (keyword #f "source")) (_o$8939 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$8936 _o$8937 _o$8938 _o$8939)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$8940 (keyword #f "op")) (_o$8941 (keyword #f "bigdec")) (_o$8942 (keyword #f "source")) (_o$8943 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$8940 _o$8941 _o$8942 _o$8943)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$8944 (keyword #f "op")) (_o$8945 (keyword #f "the-ns")) (_o$8946 (keyword #f "name")) (_o$8947 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$8944 _o$8945 _o$8946 _o$8947)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "unsupported form") jolt-nil))))))))))))))))) analyze))) (guard (e (#t #f)) (def-var-with-meta! "jolt.backend-scheme" "native-ops" (let* ((_o$7153 "+") (_o$7154 "+") (_o$7155 "-") (_o$7156 "-") (_o$7157 "*") (_o$7158 "*") (_o$7159 "/") (_o$7160 "/") (_o$7161 "<") (_o$7162 "<") (_o$7163 ">") (_o$7164 ">") (_o$7165 "<=") (_o$7166 "<=") (_o$7167 ">=") (_o$7168 ">=") (_o$7169 "=") (_o$7170 "jolt=") (_o$7171 "inc") (_o$7172 "jolt-inc") (_o$7173 "dec") (_o$7174 "jolt-dec") (_o$7175 "not") (_o$7176 "jolt-not") (_o$7177 "min") (_o$7178 "min") (_o$7179 "max") (_o$7180 "max") (_o$7181 "mod") (_o$7182 "modulo") (_o$7183 "rem") (_o$7184 "remainder") (_o$7185 "quot") (_o$7186 "quotient") (_o$7187 "vector") (_o$7188 "jolt-vector") (_o$7189 "hash-map") (_o$7190 "jolt-hash-map-fn") (_o$7191 "hash-set") (_o$7192 "jolt-hash-set") (_o$7193 "conj") (_o$7194 "jolt-conj") (_o$7195 "get") (_o$7196 "jolt-get") (_o$7197 "nth") (_o$7198 "jolt-nth") (_o$7199 "count") (_o$7200 "jolt-count") (_o$7201 "assoc") (_o$7202 "jolt-assoc") (_o$7203 "dissoc") (_o$7204 "jolt-dissoc") (_o$7205 "contains?") (_o$7206 "jolt-contains?") (_o$7207 "empty?") (_o$7208 "jolt-empty?") (_o$7209 "peek") (_o$7210 "jolt-peek") (_o$7211 "pop") (_o$7212 "jolt-pop") (_o$7213 "first") (_o$7214 "jolt-first") (_o$7215 "rest") (_o$7216 "jolt-rest") (_o$7217 "next") (_o$7218 "jolt-next") (_o$7219 "seq") (_o$7220 "jolt-seq") (_o$7221 "cons") (_o$7222 "jolt-cons") (_o$7223 "list") (_o$7224 "jolt-list") (_o$7225 "reverse") (_o$7226 "jolt-reverse") (_o$7227 "last") (_o$7228 "jolt-last") (_o$7229 "map") (_o$7230 "jolt-map") (_o$7231 "filter") (_o$7232 "jolt-filter") (_o$7233 "remove") (_o$7234 "jolt-remove") (_o$7235 "reduce") (_o$7236 "jolt-reduce") (_o$7237 "into") (_o$7238 "jolt-into") (_o$7239 "concat") (_o$7240 "jolt-concat") (_o$7241 "apply") (_o$7242 "jolt-apply") (_o$7243 "range") (_o$7244 "jolt-range") (_o$7245 "take") (_o$7246 "jolt-take") (_o$7247 "drop") (_o$7248 "jolt-drop") (_o$7249 "keys") (_o$7250 "jolt-keys") (_o$7251 "vals") (_o$7252 "jolt-vals") (_o$7253 "even?") (_o$7254 "jolt-even?") (_o$7255 "odd?") (_o$7256 "jolt-odd?") (_o$7257 "pos?") (_o$7258 "jolt-pos?") (_o$7259 "neg?") (_o$7260 "jolt-neg?") (_o$7261 "zero?") (_o$7262 "jolt-zero?") (_o$7263 "identity") (_o$7264 "jolt-identity") (_o$7265 "nil?") (_o$7266 "jolt-nil?") (_o$7267 "some?") (_o$7268 "jolt-some?") (_o$7269 "ex-info") (_o$7270 "jolt-ex-info") (_o$7271 "protocol-dispatch1") (_o$7272 "protocol-dispatch1") (_o$7273 "protocol-dispatch2") (_o$7274 "protocol-dispatch2") (_o$7275 "protocol-dispatch3") (_o$7276 "protocol-dispatch3")) (jolt-hash-map _o$7153 _o$7154 _o$7155 _o$7156 _o$7157 _o$7158 _o$7159 _o$7160 _o$7161 _o$7162 _o$7163 _o$7164 _o$7165 _o$7166 _o$7167 _o$7168 _o$7169 _o$7170 _o$7171 _o$7172 _o$7173 _o$7174 _o$7175 _o$7176 _o$7177 _o$7178 _o$7179 _o$7180 _o$7181 _o$7182 _o$7183 _o$7184 _o$7185 _o$7186 _o$7187 _o$7188 _o$7189 _o$7190 _o$7191 _o$7192 _o$7193 _o$7194 _o$7195 _o$7196 _o$7197 _o$7198 _o$7199 _o$7200 _o$7201 _o$7202 _o$7203 _o$7204 _o$7205 _o$7206 _o$7207 _o$7208 _o$7209 _o$7210 _o$7211 _o$7212 _o$7213 _o$7214 _o$7215 _o$7216 _o$7217 _o$7218 _o$7219 _o$7220 _o$7221 _o$7222 _o$7223 _o$7224 _o$7225 _o$7226 _o$7227 _o$7228 _o$7229 _o$7230 _o$7231 _o$7232 _o$7233 _o$7234 _o$7235 _o$7236 _o$7237 _o$7238 _o$7239 _o$7240 _o$7241 _o$7242 _o$7243 _o$7244 _o$7245 _o$7246 _o$7247 _o$7248 _o$7249 _o$7250 _o$7251 _o$7252 _o$7253 _o$7254 _o$7255 _o$7256 _o$7257 _o$7258 _o$7259 _o$7260 _o$7261 _o$7262 _o$7263 _o$7264 _o$7265 _o$7266 _o$7267 _o$7268 _o$7269 _o$7270 _o$7271 _o$7272 _o$7273 _o$7274 _o$7275 _o$7276)) (let* ((_o$7277 (keyword #f "private")) (_o$7278 #t)) (jolt-hash-map _o$7277 _o$7278)))) (guard (e (#t #f)) diff --git a/jolt-core/jolt/analyzer.clj b/jolt-core/jolt/analyzer.clj index 34e6cce..4489701 100644 --- a/jolt-core/jolt/analyzer.clj +++ b/jolt-core/jolt/analyzer.clj @@ -52,6 +52,11 @@ (defn- empty-env [] {:locals #{} :hints {}}) (defn- local? [env nm] (contains? (:locals env) nm)) (defn- add-locals [env names] (update env :locals #(reduce conj % names))) +;; &env value handed to a macro: a map of each in-scope local SYMBOL to nil +;; (Clojure's &env maps locals to compiler binding objects; consumers like +;; core.logic's matche only read its keys to tell locals from fresh pattern vars). +(defn- amp-env-map [env] + (reduce (fn [m n] (assoc m (symbol n) nil)) {} (:locals env))) (defn- with-recur [env name] (assoc env :recur name)) ;; Type hints. The reader keeps ^hint metadata on the binding symbol. @@ -632,7 +637,7 @@ ;; defn/defn- expand to (def name (fn …)); carry the ORIGINAL form's ;; source offset onto the resulting def, since the macro builds a fresh ;; (def …) with no metadata. So the back end can register fn defs. - (let [node (analyze ctx (form-expand-1 ctx form) env) + (let [node (analyze ctx (form-expand-1 ctx form (amp-env-map env)) env) p (form-position form)] (if (and p (= :def (:op node))) (assoc node :pos p) node)) ;; jolt.ffi/__cfn — the foreign-function special form (always emitted diff --git a/test/chez/corpus.edn b/test/chez/corpus.edn index b50bf21..04f385b 100644 --- a/test/chez/corpus.edn +++ b/test/chez/corpus.edn @@ -3348,5 +3348,5 @@ {:suite "symbols / interning" :label "(str sym) is the symbol's interned name (identity-stable)" :expected "[true true]" :actual "(let [s (quote ?a)] [(identical? (name s) (str s)) (= (str s) \"?a\")])"} {:suite "symbols / interning" :label "equal symbols share an interned name string" :expected "true" :actual "(let [a (quote ?foo) b (quote ?foo)] (identical? (name a) (name b)))"} {:suite "reader / unquote" :label "~x reads as clojure.core/unquote" :expected "true" :actual "(= (quote (clojure.core/unquote v)) (read-string \"~v\"))"} - {:suite "reader / unquote" :label "~@x reads as clojure.core/unquote-splicing" :expected "clojure.core/unquote-splicing" :actual "(first (read-string \"~@xs\"))"} + {:suite "reader / unquote" :label "~@x reads as clojure.core/unquote-splicing" :expected "true" :actual "(= (quote clojure.core/unquote-splicing) (first (read-string \"~@xs\")))"} ]