From a31c1af8c49460ca5da3d45f9e8e9cb170f4042e Mon Sep 17 00:00:00 2001 From: Dmitri Sotnikov Date: Fri, 26 Jun 2026 18:34:13 +0000 Subject: [PATCH] Devirt: cache the resolved impl in a per-site cell (inline cache) (#237) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A devirtualized protocol call resolved its impl with devirt-resolve on EVERY call — but the tag/proto/method are compile-time constants, so the resolved fn is a runtime constant (closed world). That per-call find-protocol-method (three hashtable lookups) was the cost: on mono-dispatch, dispatch was ~75% of the time (ablation: same arithmetic direct-call 166ms vs dispatch 673ms). Resolve once. When emitting a direct-link def, each devirt site gets a fresh cache cell, bound to #f in a let wrapping the def (so it persists across calls and is shared by every invocation); the site resolves into it on first use ((or cell (let ((_f (devirt-resolve ..))) (set! cell _f) _f))) and reuses it after — the inline cache the JVM gets for free. First call still passes the real receiver, so the Object/host-tag fallback (devirt-resolve) is unchanged. mono-dispatch 673ms -> 214ms (~3.15x), 47.5x -> ~15x JVM, near the 166ms direct-call floor. run-devirt.ss gains the cached-path checks (cell present, 1st call caches + 2nd reuses, both == dispatch). make test / shakesmoke green, selfhost holds, 0 new divergences. Co-authored-by: Yogthos --- host/chez/run-devirt.ss | 22 +++ host/chez/seed/image.ss | 214 +++++++++++++++--------------- jolt-core/jolt/backend_scheme.clj | 39 +++++- 3 files changed, 163 insertions(+), 112 deletions(-) diff --git a/host/chez/run-devirt.ss b/host/chez/run-devirt.ss index e0a385e..82fc185 100644 --- a/host/chez/run-devirt.ss +++ b/host/chez/run-devirt.ss @@ -77,6 +77,28 @@ (let ((e (devirt-emit "user.Plain" "pl"))) (check "devirt Object-default == dispatch" (run-emit e) (evals "(area pl)"))) ; :obj-default +;; in a direct-link build a devirt site caches the resolved impl in a per-site cell +;; (resolved once, reused) instead of resolving per call. Annotate the (area x) in a +;; def body and emit the top form; the result must carry the cell and still be right. +(let* ((set-direct-link! (var-deref "jolt.backend-scheme" "set-direct-link!")) + (emit-top-form (var-deref "jolt.backend-scheme" "emit-top-form")) + (dn (analyze (make-analyze-ctx "user") (jolt-ce-read "(def usearea (fn [x] (area x)))"))) + (ar0 (jolt-nth (jolt-get (jolt-get dn (kw "init")) (kw "arities")) 0)) + (inv (jolt-get ar0 (kw "body"))) + (inv2 (jolt-assoc inv (kw "devirt-type") "user.Circle" (kw "devirt-proto") "Shape" (kw "devirt-method") "area")) + (dn2 (jolt-assoc dn (kw "init") + (jolt-assoc (jolt-get dn (kw "init")) (kw "arities") + (jolt-vector (jolt-assoc ar0 (kw "body") inv2)))))) + (set-direct-link! #t) + (let ((e (emit-top-form dn2))) + (set-direct-link! #f) + (check "devirt in a def caches in a per-site cell" (has-sub? e "_dvc$") #t) + (check "cached cell still resolves the impl" (has-sub? e "devirt-resolve") #t) + ;; eval the def, then call it: caches on first call, reuses after — still 7. + (run-emit e) + (check "cached devirt == dispatch (1st call)" (jolt-invoke (var-deref "user" "usearea") (var-deref "user" "c")) 7) + (check "cached devirt == dispatch (2nd call, from cell)" (jolt-invoke (var-deref "user" "usearea") (var-deref "user" "c")) 7))) + (if (= fails 0) (begin (printf "devirt gate: ~a/~a passed\n" total total) (exit 0)) (begin (printf "devirt gate: ~a/~a passed (~a failed)\n" (- total fails) total fails) (exit 1))) diff --git a/host/chez/seed/image.ss b/host/chez/seed/image.ss index 9270c40..cea01ea 100644 --- a/host/chez/seed/image.ss +++ b/host/chez/seed/image.ss @@ -1,129 +1,129 @@ (guard (e (#t #f)) - (def-var! "jolt.ir" "const" (letrec ((const (lambda (v) (let fnrec7567 ((v v)) (let* ((_o$7568 (keyword #f "op")) (_o$7569 (keyword #f "const")) (_o$7570 (keyword #f "val")) (_o$7571 v)) (jolt-hash-map _o$7568 _o$7569 _o$7570 _o$7571)))))) const))) + (def-var! "jolt.ir" "const" (letrec ((const (lambda (v) (let fnrec7575 ((v v)) (let* ((_o$7576 (keyword #f "op")) (_o$7577 (keyword #f "const")) (_o$7578 (keyword #f "val")) (_o$7579 v)) (jolt-hash-map _o$7576 _o$7577 _o$7578 _o$7579)))))) const))) (guard (e (#t #f)) - (def-var! "jolt.ir" "local" (letrec ((local (lambda (name) (let fnrec7572 ((name name)) (let* ((_o$7573 (keyword #f "op")) (_o$7574 (keyword #f "local")) (_o$7575 (keyword #f "name")) (_o$7576 name)) (jolt-hash-map _o$7573 _o$7574 _o$7575 _o$7576)))))) local))) + (def-var! "jolt.ir" "local" (letrec ((local (lambda (name) (let fnrec7580 ((name name)) (let* ((_o$7581 (keyword #f "op")) (_o$7582 (keyword #f "local")) (_o$7583 (keyword #f "name")) (_o$7584 name)) (jolt-hash-map _o$7581 _o$7582 _o$7583 _o$7584)))))) local))) (guard (e (#t #f)) - (def-var! "jolt.ir" "var-ref" (letrec ((var-ref (lambda (ns name) (let fnrec7577 ((ns ns) (name name)) (let* ((_o$7578 (keyword #f "op")) (_o$7579 (keyword #f "var")) (_o$7580 (keyword #f "ns")) (_o$7581 ns) (_o$7582 (keyword #f "name")) (_o$7583 name)) (jolt-hash-map _o$7578 _o$7579 _o$7580 _o$7581 _o$7582 _o$7583)))))) var-ref))) + (def-var! "jolt.ir" "var-ref" (letrec ((var-ref (lambda (ns name) (let fnrec7585 ((ns ns) (name name)) (let* ((_o$7586 (keyword #f "op")) (_o$7587 (keyword #f "var")) (_o$7588 (keyword #f "ns")) (_o$7589 ns) (_o$7590 (keyword #f "name")) (_o$7591 name)) (jolt-hash-map _o$7586 _o$7587 _o$7588 _o$7589 _o$7590 _o$7591)))))) var-ref))) (guard (e (#t #f)) - (def-var! "jolt.ir" "the-var" (letrec ((the-var (lambda (ns name) (let fnrec7584 ((ns ns) (name name)) (let* ((_o$7585 (keyword #f "op")) (_o$7586 (keyword #f "the-var")) (_o$7587 (keyword #f "ns")) (_o$7588 ns) (_o$7589 (keyword #f "name")) (_o$7590 name)) (jolt-hash-map _o$7585 _o$7586 _o$7587 _o$7588 _o$7589 _o$7590)))))) the-var))) + (def-var! "jolt.ir" "the-var" (letrec ((the-var (lambda (ns name) (let fnrec7592 ((ns ns) (name name)) (let* ((_o$7593 (keyword #f "op")) (_o$7594 (keyword #f "the-var")) (_o$7595 (keyword #f "ns")) (_o$7596 ns) (_o$7597 (keyword #f "name")) (_o$7598 name)) (jolt-hash-map _o$7593 _o$7594 _o$7595 _o$7596 _o$7597 _o$7598)))))) the-var))) (guard (e (#t #f)) - (def-var! "jolt.ir" "host-ref" (letrec ((host-ref (lambda (name) (let fnrec7591 ((name name)) (let* ((_o$7592 (keyword #f "op")) (_o$7593 (keyword #f "host")) (_o$7594 (keyword #f "name")) (_o$7595 name)) (jolt-hash-map _o$7592 _o$7593 _o$7594 _o$7595)))))) host-ref))) + (def-var! "jolt.ir" "host-ref" (letrec ((host-ref (lambda (name) (let fnrec7599 ((name name)) (let* ((_o$7600 (keyword #f "op")) (_o$7601 (keyword #f "host")) (_o$7602 (keyword #f "name")) (_o$7603 name)) (jolt-hash-map _o$7600 _o$7601 _o$7602 _o$7603)))))) host-ref))) (guard (e (#t #f)) - (def-var! "jolt.ir" "host-static" (letrec ((host-static (lambda (class member) (let fnrec7596 ((class class) (member member)) (let* ((_o$7597 (keyword #f "op")) (_o$7598 (keyword #f "host-static")) (_o$7599 (keyword #f "class")) (_o$7600 class) (_o$7601 (keyword #f "member")) (_o$7602 member)) (jolt-hash-map _o$7597 _o$7598 _o$7599 _o$7600 _o$7601 _o$7602)))))) host-static))) + (def-var! "jolt.ir" "host-static" (letrec ((host-static (lambda (class member) (let fnrec7604 ((class class) (member member)) (let* ((_o$7605 (keyword #f "op")) (_o$7606 (keyword #f "host-static")) (_o$7607 (keyword #f "class")) (_o$7608 class) (_o$7609 (keyword #f "member")) (_o$7610 member)) (jolt-hash-map _o$7605 _o$7606 _o$7607 _o$7608 _o$7609 _o$7610)))))) host-static))) (guard (e (#t #f)) - (def-var! "jolt.ir" "host-new" (letrec ((host-new (lambda (class args) (let fnrec7603 ((class class) (args args)) (let* ((_o$7604 (keyword #f "op")) (_o$7605 (keyword #f "host-new")) (_o$7606 (keyword #f "class")) (_o$7607 class) (_o$7608 (keyword #f "args")) (_o$7609 args)) (jolt-hash-map _o$7604 _o$7605 _o$7606 _o$7607 _o$7608 _o$7609)))))) host-new))) + (def-var! "jolt.ir" "host-new" (letrec ((host-new (lambda (class args) (let fnrec7611 ((class class) (args args)) (let* ((_o$7612 (keyword #f "op")) (_o$7613 (keyword #f "host-new")) (_o$7614 (keyword #f "class")) (_o$7615 class) (_o$7616 (keyword #f "args")) (_o$7617 args)) (jolt-hash-map _o$7612 _o$7613 _o$7614 _o$7615 _o$7616 _o$7617)))))) host-new))) (guard (e (#t #f)) - (def-var! "jolt.ir" "if-node" (letrec ((if-node (lambda (test then _else) (let fnrec7610 ((test test) (then then) (_else _else)) (let* ((_o$7611 (keyword #f "op")) (_o$7612 (keyword #f "if")) (_o$7613 (keyword #f "test")) (_o$7614 test) (_o$7615 (keyword #f "then")) (_o$7616 then) (_o$7617 (keyword #f "else")) (_o$7618 _else)) (jolt-hash-map _o$7611 _o$7612 _o$7613 _o$7614 _o$7615 _o$7616 _o$7617 _o$7618)))))) if-node))) + (def-var! "jolt.ir" "if-node" (letrec ((if-node (lambda (test then _else) (let fnrec7618 ((test test) (then then) (_else _else)) (let* ((_o$7619 (keyword #f "op")) (_o$7620 (keyword #f "if")) (_o$7621 (keyword #f "test")) (_o$7622 test) (_o$7623 (keyword #f "then")) (_o$7624 then) (_o$7625 (keyword #f "else")) (_o$7626 _else)) (jolt-hash-map _o$7619 _o$7620 _o$7621 _o$7622 _o$7623 _o$7624 _o$7625 _o$7626)))))) if-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "do-node" (letrec ((do-node (lambda (statements ret) (let fnrec7619 ((statements statements) (ret ret)) (let* ((_o$7620 (keyword #f "op")) (_o$7621 (keyword #f "do")) (_o$7622 (keyword #f "statements")) (_o$7623 statements) (_o$7624 (keyword #f "ret")) (_o$7625 ret)) (jolt-hash-map _o$7620 _o$7621 _o$7622 _o$7623 _o$7624 _o$7625)))))) do-node))) + (def-var! "jolt.ir" "do-node" (letrec ((do-node (lambda (statements ret) (let fnrec7627 ((statements statements) (ret ret)) (let* ((_o$7628 (keyword #f "op")) (_o$7629 (keyword #f "do")) (_o$7630 (keyword #f "statements")) (_o$7631 statements) (_o$7632 (keyword #f "ret")) (_o$7633 ret)) (jolt-hash-map _o$7628 _o$7629 _o$7630 _o$7631 _o$7632 _o$7633)))))) do-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "invoke" (letrec ((invoke (lambda (f args) (let fnrec7626 ((f f) (args args)) (let* ((_o$7627 (keyword #f "op")) (_o$7628 (keyword #f "invoke")) (_o$7629 (keyword #f "fn")) (_o$7630 f) (_o$7631 (keyword #f "args")) (_o$7632 args)) (jolt-hash-map _o$7627 _o$7628 _o$7629 _o$7630 _o$7631 _o$7632)))))) invoke))) + (def-var! "jolt.ir" "invoke" (letrec ((invoke (lambda (f args) (let fnrec7634 ((f f) (args args)) (let* ((_o$7635 (keyword #f "op")) (_o$7636 (keyword #f "invoke")) (_o$7637 (keyword #f "fn")) (_o$7638 f) (_o$7639 (keyword #f "args")) (_o$7640 args)) (jolt-hash-map _o$7635 _o$7636 _o$7637 _o$7638 _o$7639 _o$7640)))))) invoke))) (guard (e (#t #f)) - (def-var! "jolt.ir" "def-node" (letrec ((def-node (case-lambda ((ns name init) (let fnrec7633 ((ns ns) (name name) (init init)) (let* ((_o$7634 (keyword #f "op")) (_o$7635 (keyword #f "def")) (_o$7636 (keyword #f "ns")) (_o$7637 ns) (_o$7638 (keyword #f "name")) (_o$7639 name) (_o$7640 (keyword #f "init")) (_o$7641 init)) (jolt-hash-map _o$7634 _o$7635 _o$7636 _o$7637 _o$7638 _o$7639 _o$7640 _o$7641)))) ((ns name init meta) (let fnrec7642 ((ns ns) (name name) (init init) (meta meta)) (if (jolt-truthy? meta) (let* ((_o$7643 (keyword #f "op")) (_o$7644 (keyword #f "def")) (_o$7645 (keyword #f "ns")) (_o$7646 ns) (_o$7647 (keyword #f "name")) (_o$7648 name) (_o$7649 (keyword #f "init")) (_o$7650 init) (_o$7651 (keyword #f "meta")) (_o$7652 meta)) (jolt-hash-map _o$7643 _o$7644 _o$7645 _o$7646 _o$7647 _o$7648 _o$7649 _o$7650 _o$7651 _o$7652)) (let* ((_o$7653 (keyword #f "op")) (_o$7654 (keyword #f "def")) (_o$7655 (keyword #f "ns")) (_o$7656 ns) (_o$7657 (keyword #f "name")) (_o$7658 name) (_o$7659 (keyword #f "init")) (_o$7660 init)) (jolt-hash-map _o$7653 _o$7654 _o$7655 _o$7656 _o$7657 _o$7658 _o$7659 _o$7660)))))))) def-node))) + (def-var! "jolt.ir" "def-node" (letrec ((def-node (case-lambda ((ns name init) (let fnrec7641 ((ns ns) (name name) (init init)) (let* ((_o$7642 (keyword #f "op")) (_o$7643 (keyword #f "def")) (_o$7644 (keyword #f "ns")) (_o$7645 ns) (_o$7646 (keyword #f "name")) (_o$7647 name) (_o$7648 (keyword #f "init")) (_o$7649 init)) (jolt-hash-map _o$7642 _o$7643 _o$7644 _o$7645 _o$7646 _o$7647 _o$7648 _o$7649)))) ((ns name init meta) (let fnrec7650 ((ns ns) (name name) (init init) (meta meta)) (if (jolt-truthy? meta) (let* ((_o$7651 (keyword #f "op")) (_o$7652 (keyword #f "def")) (_o$7653 (keyword #f "ns")) (_o$7654 ns) (_o$7655 (keyword #f "name")) (_o$7656 name) (_o$7657 (keyword #f "init")) (_o$7658 init) (_o$7659 (keyword #f "meta")) (_o$7660 meta)) (jolt-hash-map _o$7651 _o$7652 _o$7653 _o$7654 _o$7655 _o$7656 _o$7657 _o$7658 _o$7659 _o$7660)) (let* ((_o$7661 (keyword #f "op")) (_o$7662 (keyword #f "def")) (_o$7663 (keyword #f "ns")) (_o$7664 ns) (_o$7665 (keyword #f "name")) (_o$7666 name) (_o$7667 (keyword #f "init")) (_o$7668 init)) (jolt-hash-map _o$7661 _o$7662 _o$7663 _o$7664 _o$7665 _o$7666 _o$7667 _o$7668)))))))) def-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "let-node" (letrec ((let-node (lambda (bindings body) (let fnrec7661 ((bindings bindings) (body body)) (let* ((_o$7662 (keyword #f "op")) (_o$7663 (keyword #f "let")) (_o$7664 (keyword #f "bindings")) (_o$7665 bindings) (_o$7666 (keyword #f "body")) (_o$7667 body)) (jolt-hash-map _o$7662 _o$7663 _o$7664 _o$7665 _o$7666 _o$7667)))))) let-node))) + (def-var! "jolt.ir" "let-node" (letrec ((let-node (lambda (bindings body) (let fnrec7669 ((bindings bindings) (body body)) (let* ((_o$7670 (keyword #f "op")) (_o$7671 (keyword #f "let")) (_o$7672 (keyword #f "bindings")) (_o$7673 bindings) (_o$7674 (keyword #f "body")) (_o$7675 body)) (jolt-hash-map _o$7670 _o$7671 _o$7672 _o$7673 _o$7674 _o$7675)))))) let-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "fn-node" (letrec ((fn-node (lambda (name arities) (let fnrec7668 ((name name) (arities arities)) (if (jolt-truthy? name) (let* ((_o$7669 (keyword #f "op")) (_o$7670 (keyword #f "fn")) (_o$7671 (keyword #f "name")) (_o$7672 name) (_o$7673 (keyword #f "arities")) (_o$7674 arities)) (jolt-hash-map _o$7669 _o$7670 _o$7671 _o$7672 _o$7673 _o$7674)) (let* ((_o$7675 (keyword #f "op")) (_o$7676 (keyword #f "fn")) (_o$7677 (keyword #f "arities")) (_o$7678 arities)) (jolt-hash-map _o$7675 _o$7676 _o$7677 _o$7678))))))) fn-node))) + (def-var! "jolt.ir" "fn-node" (letrec ((fn-node (lambda (name arities) (let fnrec7676 ((name name) (arities arities)) (if (jolt-truthy? name) (let* ((_o$7677 (keyword #f "op")) (_o$7678 (keyword #f "fn")) (_o$7679 (keyword #f "name")) (_o$7680 name) (_o$7681 (keyword #f "arities")) (_o$7682 arities)) (jolt-hash-map _o$7677 _o$7678 _o$7679 _o$7680 _o$7681 _o$7682)) (let* ((_o$7683 (keyword #f "op")) (_o$7684 (keyword #f "fn")) (_o$7685 (keyword #f "arities")) (_o$7686 arities)) (jolt-hash-map _o$7683 _o$7684 _o$7685 _o$7686))))))) fn-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "vector-node" (letrec ((vector-node (lambda (items) (let fnrec7679 ((items items)) (let* ((_o$7680 (keyword #f "op")) (_o$7681 (keyword #f "vector")) (_o$7682 (keyword #f "items")) (_o$7683 items)) (jolt-hash-map _o$7680 _o$7681 _o$7682 _o$7683)))))) vector-node))) + (def-var! "jolt.ir" "vector-node" (letrec ((vector-node (lambda (items) (let fnrec7687 ((items items)) (let* ((_o$7688 (keyword #f "op")) (_o$7689 (keyword #f "vector")) (_o$7690 (keyword #f "items")) (_o$7691 items)) (jolt-hash-map _o$7688 _o$7689 _o$7690 _o$7691)))))) vector-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "map-node" (letrec ((map-node (lambda (pairs) (let fnrec7684 ((pairs pairs)) (let* ((_o$7685 (keyword #f "op")) (_o$7686 (keyword #f "map")) (_o$7687 (keyword #f "pairs")) (_o$7688 pairs)) (jolt-hash-map _o$7685 _o$7686 _o$7687 _o$7688)))))) map-node))) + (def-var! "jolt.ir" "map-node" (letrec ((map-node (lambda (pairs) (let fnrec7692 ((pairs pairs)) (let* ((_o$7693 (keyword #f "op")) (_o$7694 (keyword #f "map")) (_o$7695 (keyword #f "pairs")) (_o$7696 pairs)) (jolt-hash-map _o$7693 _o$7694 _o$7695 _o$7696)))))) map-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "set-node" (letrec ((set-node (lambda (items) (let fnrec7689 ((items items)) (let* ((_o$7690 (keyword #f "op")) (_o$7691 (keyword #f "set")) (_o$7692 (keyword #f "items")) (_o$7693 items)) (jolt-hash-map _o$7690 _o$7691 _o$7692 _o$7693)))))) set-node))) + (def-var! "jolt.ir" "set-node" (letrec ((set-node (lambda (items) (let fnrec7697 ((items items)) (let* ((_o$7698 (keyword #f "op")) (_o$7699 (keyword #f "set")) (_o$7700 (keyword #f "items")) (_o$7701 items)) (jolt-hash-map _o$7698 _o$7699 _o$7700 _o$7701)))))) set-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "quote-node" (letrec ((quote-node (lambda (form) (let fnrec7694 ((form form)) (let* ((_o$7695 (keyword #f "op")) (_o$7696 (keyword #f "quote")) (_o$7697 (keyword #f "form")) (_o$7698 form)) (jolt-hash-map _o$7695 _o$7696 _o$7697 _o$7698)))))) quote-node))) + (def-var! "jolt.ir" "quote-node" (letrec ((quote-node (lambda (form) (let fnrec7702 ((form form)) (let* ((_o$7703 (keyword #f "op")) (_o$7704 (keyword #f "quote")) (_o$7705 (keyword #f "form")) (_o$7706 form)) (jolt-hash-map _o$7703 _o$7704 _o$7705 _o$7706)))))) quote-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "throw-node" (letrec ((throw-node (lambda (expr) (let fnrec7699 ((expr expr)) (let* ((_o$7700 (keyword #f "op")) (_o$7701 (keyword #f "throw")) (_o$7702 (keyword #f "expr")) (_o$7703 expr)) (jolt-hash-map _o$7700 _o$7701 _o$7702 _o$7703)))))) throw-node))) + (def-var! "jolt.ir" "throw-node" (letrec ((throw-node (lambda (expr) (let fnrec7707 ((expr expr)) (let* ((_o$7708 (keyword #f "op")) (_o$7709 (keyword #f "throw")) (_o$7710 (keyword #f "expr")) (_o$7711 expr)) (jolt-hash-map _o$7708 _o$7709 _o$7710 _o$7711)))))) throw-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "coerce-node" (letrec ((coerce-node (lambda (kind expr) (let fnrec7704 ((kind kind) (expr expr)) (let* ((_o$7705 (keyword #f "op")) (_o$7706 (keyword #f "coerce")) (_o$7707 (keyword #f "kind")) (_o$7708 kind) (_o$7709 (keyword #f "expr")) (_o$7710 expr)) (jolt-hash-map _o$7705 _o$7706 _o$7707 _o$7708 _o$7709 _o$7710)))))) coerce-node))) + (def-var! "jolt.ir" "coerce-node" (letrec ((coerce-node (lambda (kind expr) (let fnrec7712 ((kind kind) (expr expr)) (let* ((_o$7713 (keyword #f "op")) (_o$7714 (keyword #f "coerce")) (_o$7715 (keyword #f "kind")) (_o$7716 kind) (_o$7717 (keyword #f "expr")) (_o$7718 expr)) (jolt-hash-map _o$7713 _o$7714 _o$7715 _o$7716 _o$7717 _o$7718)))))) coerce-node))) (guard (e (#t #f)) - (def-var! "jolt.ir" "map-ir-children" (letrec ((map-ir-children (lambda (f node) (let fnrec7711 ((f f) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$7712 node) (_a$7713 (keyword #f "test")) (_a$7714 (jolt-invoke f (jolt-get node (keyword #f "test")))) (_a$7715 (keyword #f "then")) (_a$7716 (jolt-invoke f (jolt-get node (keyword #f "then")))) (_a$7717 (keyword #f "else")) (_a$7718 (jolt-invoke f (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$7712 _a$7713 _a$7714 _a$7715 _a$7716 _a$7717 _a$7718)) (if (jolt= op (keyword #f "do")) (let* ((_a$7719 node) (_a$7720 (keyword #f "statements")) (_a$7721 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "statements")))) (_a$7722 (keyword #f "ret")) (_a$7723 (jolt-invoke f (jolt-get node (keyword #f "ret"))))) (jolt-assoc _a$7719 _a$7720 _a$7721 _a$7722 _a$7723)) (if (jolt= op (keyword #f "throw")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "coerce")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "set-var")) (jolt-assoc node (keyword #f "val") (jolt-invoke f (jolt-get node (keyword #f "val")))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$7724 node) (_a$7725 (keyword #f "obj")) (_a$7726 (jolt-invoke f (jolt-get node (keyword #f "obj")))) (_a$7727 (keyword #f "val")) (_a$7728 (jolt-invoke f (jolt-get node (keyword #f "val"))))) (jolt-assoc _a$7724 _a$7725 _a$7726 _a$7727 _a$7728)) (if (jolt= op (keyword #f "defmacro")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$7729 node) (_a$7730 (keyword #f "fn")) (_a$7731 (jolt-invoke f (jolt-get node (keyword #f "fn")))) (_a$7732 (keyword #f "args")) (_a$7733 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$7729 _a$7730 _a$7731 _a$7732 _a$7733)) (if (jolt= op (keyword #f "vector")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "set")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "map")) (jolt-assoc node (keyword #f "pairs") (let* ((_a$7737 (var-deref "clojure.core" "mapv")) (_a$7738 (lambda (pr) (let fnrec7734 ((pr pr)) (let* ((_o$7735 (jolt-invoke f (jolt-nth pr 0))) (_o$7736 (jolt-invoke f (jolt-nth pr 1)))) (jolt-vector _o$7735 _o$7736))))) (_a$7739 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$7737 _a$7738 _a$7739))) (if (jolt= op (keyword #f "let")) (let* ((_a$7746 node) (_a$7747 (keyword #f "bindings")) (_a$7748 (let* ((_a$7743 (var-deref "clojure.core" "mapv")) (_a$7744 (lambda (b) (let fnrec7740 ((b b)) (let* ((_o$7741 (jolt-nth b 0)) (_o$7742 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$7741 _o$7742))))) (_a$7745 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$7743 _a$7744 _a$7745))) (_a$7749 (keyword #f "body")) (_a$7750 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$7746 _a$7747 _a$7748 _a$7749 _a$7750)) (if (jolt= op (keyword #f "loop")) (let* ((_a$7757 node) (_a$7758 (keyword #f "bindings")) (_a$7759 (let* ((_a$7754 (var-deref "clojure.core" "mapv")) (_a$7755 (lambda (b) (let fnrec7751 ((b b)) (let* ((_o$7752 (jolt-nth b 0)) (_o$7753 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$7752 _o$7753))))) (_a$7756 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$7754 _a$7755 _a$7756))) (_a$7760 (keyword #f "body")) (_a$7761 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$7757 _a$7758 _a$7759 _a$7760 _a$7761)) (if (jolt= op (keyword #f "recur")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "fn")) (jolt-assoc node (keyword #f "arities") (let* ((_a$7763 (var-deref "clojure.core" "mapv")) (_a$7764 (lambda (a) (let fnrec7762 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-invoke f (jolt-get a (keyword #f "body"))))))) (_a$7765 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$7763 _a$7764 _a$7765))) (if (jolt= op (keyword #f "def")) (let* ((n (jolt-assoc node (keyword #f "init") (jolt-invoke f (jolt-get node (keyword #f "init")))))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-assoc n (keyword #f "meta-expr") (jolt-invoke f (jolt-get node (keyword #f "meta-expr")))) n)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$7766 node) (_a$7767 (keyword #f "target")) (_a$7768 (jolt-invoke f (jolt-get node (keyword #f "target")))) (_a$7769 (keyword #f "args")) (_a$7770 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$7766 _a$7767 _a$7768 _a$7769 _a$7770)) (if (jolt= op (keyword #f "host-new")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "try")) (let* ((n (jolt-assoc node (keyword #f "body") (jolt-invoke f (jolt-get node (keyword #f "body"))))) (n (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-assoc n (keyword #f "catch-body") (jolt-invoke f (jolt-get node (keyword #f "catch-body")))) n)) (n (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-assoc n (keyword #f "finally") (jolt-invoke f (jolt-get node (keyword #f "finally")))) n))) n) (if (jolt-truthy? (keyword #f "else")) node jolt-nil)))))))))))))))))))))))))) map-ir-children))) + (def-var! "jolt.ir" "map-ir-children" (letrec ((map-ir-children (lambda (f node) (let fnrec7719 ((f f) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$7720 node) (_a$7721 (keyword #f "test")) (_a$7722 (jolt-invoke f (jolt-get node (keyword #f "test")))) (_a$7723 (keyword #f "then")) (_a$7724 (jolt-invoke f (jolt-get node (keyword #f "then")))) (_a$7725 (keyword #f "else")) (_a$7726 (jolt-invoke f (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$7720 _a$7721 _a$7722 _a$7723 _a$7724 _a$7725 _a$7726)) (if (jolt= op (keyword #f "do")) (let* ((_a$7727 node) (_a$7728 (keyword #f "statements")) (_a$7729 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "statements")))) (_a$7730 (keyword #f "ret")) (_a$7731 (jolt-invoke f (jolt-get node (keyword #f "ret"))))) (jolt-assoc _a$7727 _a$7728 _a$7729 _a$7730 _a$7731)) (if (jolt= op (keyword #f "throw")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "coerce")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "set-var")) (jolt-assoc node (keyword #f "val") (jolt-invoke f (jolt-get node (keyword #f "val")))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$7732 node) (_a$7733 (keyword #f "obj")) (_a$7734 (jolt-invoke f (jolt-get node (keyword #f "obj")))) (_a$7735 (keyword #f "val")) (_a$7736 (jolt-invoke f (jolt-get node (keyword #f "val"))))) (jolt-assoc _a$7732 _a$7733 _a$7734 _a$7735 _a$7736)) (if (jolt= op (keyword #f "defmacro")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$7737 node) (_a$7738 (keyword #f "fn")) (_a$7739 (jolt-invoke f (jolt-get node (keyword #f "fn")))) (_a$7740 (keyword #f "args")) (_a$7741 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$7737 _a$7738 _a$7739 _a$7740 _a$7741)) (if (jolt= op (keyword #f "vector")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "set")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "map")) (jolt-assoc node (keyword #f "pairs") (let* ((_a$7745 (var-deref "clojure.core" "mapv")) (_a$7746 (lambda (pr) (let fnrec7742 ((pr pr)) (let* ((_o$7743 (jolt-invoke f (jolt-nth pr 0))) (_o$7744 (jolt-invoke f (jolt-nth pr 1)))) (jolt-vector _o$7743 _o$7744))))) (_a$7747 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$7745 _a$7746 _a$7747))) (if (jolt= op (keyword #f "let")) (let* ((_a$7754 node) (_a$7755 (keyword #f "bindings")) (_a$7756 (let* ((_a$7751 (var-deref "clojure.core" "mapv")) (_a$7752 (lambda (b) (let fnrec7748 ((b b)) (let* ((_o$7749 (jolt-nth b 0)) (_o$7750 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$7749 _o$7750))))) (_a$7753 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$7751 _a$7752 _a$7753))) (_a$7757 (keyword #f "body")) (_a$7758 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$7754 _a$7755 _a$7756 _a$7757 _a$7758)) (if (jolt= op (keyword #f "loop")) (let* ((_a$7765 node) (_a$7766 (keyword #f "bindings")) (_a$7767 (let* ((_a$7762 (var-deref "clojure.core" "mapv")) (_a$7763 (lambda (b) (let fnrec7759 ((b b)) (let* ((_o$7760 (jolt-nth b 0)) (_o$7761 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$7760 _o$7761))))) (_a$7764 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$7762 _a$7763 _a$7764))) (_a$7768 (keyword #f "body")) (_a$7769 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$7765 _a$7766 _a$7767 _a$7768 _a$7769)) (if (jolt= op (keyword #f "recur")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "fn")) (jolt-assoc node (keyword #f "arities") (let* ((_a$7771 (var-deref "clojure.core" "mapv")) (_a$7772 (lambda (a) (let fnrec7770 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-invoke f (jolt-get a (keyword #f "body"))))))) (_a$7773 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$7771 _a$7772 _a$7773))) (if (jolt= op (keyword #f "def")) (let* ((n (jolt-assoc node (keyword #f "init") (jolt-invoke f (jolt-get node (keyword #f "init")))))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-assoc n (keyword #f "meta-expr") (jolt-invoke f (jolt-get node (keyword #f "meta-expr")))) n)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$7774 node) (_a$7775 (keyword #f "target")) (_a$7776 (jolt-invoke f (jolt-get node (keyword #f "target")))) (_a$7777 (keyword #f "args")) (_a$7778 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$7774 _a$7775 _a$7776 _a$7777 _a$7778)) (if (jolt= op (keyword #f "host-new")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "try")) (let* ((n (jolt-assoc node (keyword #f "body") (jolt-invoke f (jolt-get node (keyword #f "body"))))) (n (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-assoc n (keyword #f "catch-body") (jolt-invoke f (jolt-get node (keyword #f "catch-body")))) n)) (n (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-assoc n (keyword #f "finally") (jolt-invoke f (jolt-get node (keyword #f "finally")))) n))) n) (if (jolt-truthy? (keyword #f "else")) node jolt-nil)))))))))))))))))))))))))) map-ir-children))) (guard (e (#t #f)) - (def-var! "jolt.ir" "reduce-ir-children" (letrec ((reduce-ir-children (lambda (f acc node) (let fnrec7771 ((f f) (acc acc) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$7775 f) (_a$7776 (let* ((_a$7772 f) (_a$7773 (jolt-invoke f acc (jolt-get node (keyword #f "test")))) (_a$7774 (jolt-get node (keyword #f "then")))) (jolt-invoke _a$7772 _a$7773 _a$7774))) (_a$7777 (jolt-get node (keyword #f "else")))) (jolt-invoke _a$7775 _a$7776 _a$7777)) (if (jolt= op (keyword #f "do")) (let* ((_a$7778 f) (_a$7779 (jolt-reduce f acc (jolt-get node (keyword #f "statements")))) (_a$7780 (jolt-get node (keyword #f "ret")))) (jolt-invoke _a$7778 _a$7779 _a$7780)) (if (jolt= op (keyword #f "throw")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "coerce")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "set-var")) (jolt-invoke f acc (jolt-get node (keyword #f "val"))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$7781 f) (_a$7782 (jolt-invoke f acc (jolt-get node (keyword #f "obj")))) (_a$7783 (jolt-get node (keyword #f "val")))) (jolt-invoke _a$7781 _a$7782 _a$7783)) (if (jolt= op (keyword #f "defmacro")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$7784 f) (_a$7785 (jolt-invoke f acc (jolt-get node (keyword #f "fn")))) (_a$7786 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$7784 _a$7785 _a$7786)) (if (jolt= op (keyword #f "vector")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "set")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "map")) (let* ((_a$7791 (lambda (a pr) (let fnrec7787 ((a a) (pr pr)) (let* ((_a$7788 f) (_a$7789 (jolt-invoke f a (jolt-nth pr 0))) (_a$7790 (jolt-nth pr 1))) (jolt-invoke _a$7788 _a$7789 _a$7790))))) (_a$7792 acc) (_a$7793 (jolt-get node (keyword #f "pairs")))) (jolt-reduce _a$7791 _a$7792 _a$7793)) (if (jolt= op (keyword #f "let")) (let* ((_a$7798 f) (_a$7799 (let* ((_a$7795 (lambda (a b) (let fnrec7794 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$7796 acc) (_a$7797 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7795 _a$7796 _a$7797))) (_a$7800 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$7798 _a$7799 _a$7800)) (if (jolt= op (keyword #f "loop")) (let* ((_a$7805 f) (_a$7806 (let* ((_a$7802 (lambda (a b) (let fnrec7801 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$7803 acc) (_a$7804 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7802 _a$7803 _a$7804))) (_a$7807 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$7805 _a$7806 _a$7807)) (if (jolt= op (keyword #f "recur")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "fn")) (let* ((_a$7809 (lambda (a ar) (let fnrec7808 ((a a) (ar ar)) (jolt-invoke f a (jolt-get ar (keyword #f "body")))))) (_a$7810 acc) (_a$7811 (jolt-get node (keyword #f "arities")))) (jolt-reduce _a$7809 _a$7810 _a$7811)) (if (jolt= op (keyword #f "def")) (let* ((a (if (jolt-truthy? (jolt-get node (keyword #f "init"))) (jolt-invoke f acc (jolt-get node (keyword #f "init"))) acc))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke f a (jolt-get node (keyword #f "meta-expr"))) a)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$7812 f) (_a$7813 (jolt-invoke f acc (jolt-get node (keyword #f "target")))) (_a$7814 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$7812 _a$7813 _a$7814)) (if (jolt= op (keyword #f "host-new")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "try")) (let* ((a (jolt-invoke f acc (jolt-get node (keyword #f "body")))) (a (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-invoke f a (jolt-get node (keyword #f "catch-body"))) a)) (a (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-invoke f a (jolt-get node (keyword #f "finally"))) a))) a) (if (jolt-truthy? (keyword #f "else")) acc jolt-nil)))))))))))))))))))))))))) reduce-ir-children))) + (def-var! "jolt.ir" "reduce-ir-children" (letrec ((reduce-ir-children (lambda (f acc node) (let fnrec7779 ((f f) (acc acc) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$7783 f) (_a$7784 (let* ((_a$7780 f) (_a$7781 (jolt-invoke f acc (jolt-get node (keyword #f "test")))) (_a$7782 (jolt-get node (keyword #f "then")))) (jolt-invoke _a$7780 _a$7781 _a$7782))) (_a$7785 (jolt-get node (keyword #f "else")))) (jolt-invoke _a$7783 _a$7784 _a$7785)) (if (jolt= op (keyword #f "do")) (let* ((_a$7786 f) (_a$7787 (jolt-reduce f acc (jolt-get node (keyword #f "statements")))) (_a$7788 (jolt-get node (keyword #f "ret")))) (jolt-invoke _a$7786 _a$7787 _a$7788)) (if (jolt= op (keyword #f "throw")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "coerce")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "set-var")) (jolt-invoke f acc (jolt-get node (keyword #f "val"))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$7789 f) (_a$7790 (jolt-invoke f acc (jolt-get node (keyword #f "obj")))) (_a$7791 (jolt-get node (keyword #f "val")))) (jolt-invoke _a$7789 _a$7790 _a$7791)) (if (jolt= op (keyword #f "defmacro")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$7792 f) (_a$7793 (jolt-invoke f acc (jolt-get node (keyword #f "fn")))) (_a$7794 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$7792 _a$7793 _a$7794)) (if (jolt= op (keyword #f "vector")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "set")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "map")) (let* ((_a$7799 (lambda (a pr) (let fnrec7795 ((a a) (pr pr)) (let* ((_a$7796 f) (_a$7797 (jolt-invoke f a (jolt-nth pr 0))) (_a$7798 (jolt-nth pr 1))) (jolt-invoke _a$7796 _a$7797 _a$7798))))) (_a$7800 acc) (_a$7801 (jolt-get node (keyword #f "pairs")))) (jolt-reduce _a$7799 _a$7800 _a$7801)) (if (jolt= op (keyword #f "let")) (let* ((_a$7806 f) (_a$7807 (let* ((_a$7803 (lambda (a b) (let fnrec7802 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$7804 acc) (_a$7805 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7803 _a$7804 _a$7805))) (_a$7808 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$7806 _a$7807 _a$7808)) (if (jolt= op (keyword #f "loop")) (let* ((_a$7813 f) (_a$7814 (let* ((_a$7810 (lambda (a b) (let fnrec7809 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$7811 acc) (_a$7812 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7810 _a$7811 _a$7812))) (_a$7815 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$7813 _a$7814 _a$7815)) (if (jolt= op (keyword #f "recur")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "fn")) (let* ((_a$7817 (lambda (a ar) (let fnrec7816 ((a a) (ar ar)) (jolt-invoke f a (jolt-get ar (keyword #f "body")))))) (_a$7818 acc) (_a$7819 (jolt-get node (keyword #f "arities")))) (jolt-reduce _a$7817 _a$7818 _a$7819)) (if (jolt= op (keyword #f "def")) (let* ((a (if (jolt-truthy? (jolt-get node (keyword #f "init"))) (jolt-invoke f acc (jolt-get node (keyword #f "init"))) acc))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke f a (jolt-get node (keyword #f "meta-expr"))) a)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$7820 f) (_a$7821 (jolt-invoke f acc (jolt-get node (keyword #f "target")))) (_a$7822 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$7820 _a$7821 _a$7822)) (if (jolt= op (keyword #f "host-new")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "try")) (let* ((a (jolt-invoke f acc (jolt-get node (keyword #f "body")))) (a (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-invoke f a (jolt-get node (keyword #f "catch-body"))) a)) (a (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-invoke f a (jolt-get node (keyword #f "finally"))) a))) a) (if (jolt-truthy? (keyword #f "else")) acc jolt-nil)))))))))))))))))))))))))) reduce-ir-children))) (guard (e (#t #f)) (declare-var! "jolt.analyzer" "analyze")) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "handled" (let* ((_o$7815 "quote") (_o$7816 "if") (_o$7817 "do") (_o$7818 "def") (_o$7819 "fn*") (_o$7820 "let*") (_o$7821 "loop*") (_o$7822 "recur") (_o$7823 "throw") (_o$7824 "try") (_o$7825 "syntax-quote") (_o$7826 "var") (_o$7827 "letfn") (_o$7828 "set!") (_o$7829 "defmacro")) (jolt-hash-set _o$7815 _o$7816 _o$7817 _o$7818 _o$7819 _o$7820 _o$7821 _o$7822 _o$7823 _o$7824 _o$7825 _o$7826 _o$7827 _o$7828 _o$7829)) (let* ((_o$7830 (keyword #f "private")) (_o$7831 #t)) (jolt-hash-map _o$7830 _o$7831)))) + (def-var-with-meta! "jolt.analyzer" "handled" (let* ((_o$7823 "quote") (_o$7824 "if") (_o$7825 "do") (_o$7826 "def") (_o$7827 "fn*") (_o$7828 "let*") (_o$7829 "loop*") (_o$7830 "recur") (_o$7831 "throw") (_o$7832 "try") (_o$7833 "syntax-quote") (_o$7834 "var") (_o$7835 "letfn") (_o$7836 "set!") (_o$7837 "defmacro")) (jolt-hash-set _o$7823 _o$7824 _o$7825 _o$7826 _o$7827 _o$7828 _o$7829 _o$7830 _o$7831 _o$7832 _o$7833 _o$7834 _o$7835 _o$7836 _o$7837)) (let* ((_o$7838 (keyword #f "private")) (_o$7839 #t)) (jolt-hash-map _o$7838 _o$7839)))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "uncompilable" (letrec ((uncompilable (lambda (why) (let fnrec7832 ((why why)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt/uncompilable: " why)))))) uncompilable))) + (def-var! "jolt.analyzer" "uncompilable" (letrec ((uncompilable (lambda (why) (let fnrec7840 ((why why)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt/uncompilable: " why)))))) uncompilable))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (let* ((_o$7833 (keyword #f "private")) (_o$7834 #t)) (jolt-hash-map _o$7833 _o$7834)))) + (def-var-with-meta! "jolt.analyzer" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (let* ((_o$7841 (keyword #f "private")) (_o$7842 #t)) (jolt-hash-map _o$7841 _o$7842)))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "gen-name" (letrec ((gen-name (lambda (prefix) (let fnrec7835 ((prefix prefix)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.analyzer" "gensym-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.analyzer" "gensym-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") "_r$" prefix n))))))) gen-name))) + (def-var! "jolt.analyzer" "gen-name" (letrec ((gen-name (lambda (prefix) (let fnrec7843 ((prefix prefix)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.analyzer" "gensym-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.analyzer" "gensym-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") "_r$" prefix n))))))) gen-name))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "empty-env" (letrec ((empty-env (lambda () (let fnrec7836 () (let* ((_o$7837 (keyword #f "locals")) (_o$7838 (jolt-hash-set)) (_o$7839 (keyword #f "hints")) (_o$7840 (jolt-hash-map))) (jolt-hash-map _o$7837 _o$7838 _o$7839 _o$7840)))))) empty-env))) + (def-var! "jolt.analyzer" "empty-env" (letrec ((empty-env (lambda () (let fnrec7844 () (let* ((_o$7845 (keyword #f "locals")) (_o$7846 (jolt-hash-set)) (_o$7847 (keyword #f "hints")) (_o$7848 (jolt-hash-map))) (jolt-hash-map _o$7845 _o$7846 _o$7847 _o$7848)))))) empty-env))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "local?" (letrec ((local? (lambda (env nm) (let fnrec7841 ((env env) (nm nm)) (jolt-contains? (jolt-get env (keyword #f "locals")) nm))))) local?))) + (def-var! "jolt.analyzer" "local?" (letrec ((local? (lambda (env nm) (let fnrec7849 ((env env) (nm nm)) (jolt-contains? (jolt-get env (keyword #f "locals")) nm))))) local?))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "add-locals" (letrec ((add-locals (lambda (env names) (let fnrec7842 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__90_) (let fnrec7843 ((p__90_ p__90_)) (jolt-reduce jolt-conj p__90_ names)))))))) add-locals))) + (def-var! "jolt.analyzer" "add-locals" (letrec ((add-locals (lambda (env names) (let fnrec7850 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__90_) (let fnrec7851 ((p__90_ p__90_)) (jolt-reduce jolt-conj p__90_ names)))))))) add-locals))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec7844 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur))) + (def-var! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec7852 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec7845 ((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))) + (def-var! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec7853 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec7846 ((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))) + (def-var! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec7854 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec7847 ((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))) + (def-var! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec7855 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "tag->nkind" (letrec ((tag->nkind (lambda (t) (let fnrec7848 ((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))) + (def-var! "jolt.analyzer" "tag->nkind" (letrec ((tag->nkind (lambda (t) (let fnrec7856 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "nhint-of" (letrec ((nhint-of (lambda (ctx sym) (let fnrec7849 ((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))) + (def-var! "jolt.analyzer" "nhint-of" (letrec ((nhint-of (lambda (ctx sym) (let fnrec7857 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "with-ret-nhint" (letrec ((with-ret-nhint (lambda (node kind) (let fnrec7850 ((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$7852 (var-deref "clojure.core" "mapv")) (_a$7853 (lambda (a) (let fnrec7851 ((a a)) (if (jolt-truthy? (jolt-get a (keyword #f "ret-nhint"))) a (jolt-assoc a (keyword #f "ret-nhint") kind))))) (_a$7854 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$7852 _a$7853 _a$7854))) node))))) with-ret-nhint))) + (def-var! "jolt.analyzer" "with-ret-nhint" (letrec ((with-ret-nhint (lambda (node kind) (let fnrec7858 ((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$7860 (var-deref "clojure.core" "mapv")) (_a$7861 (lambda (a) (let fnrec7859 ((a a)) (if (jolt-truthy? (jolt-get a (keyword #f "ret-nhint"))) a (jolt-assoc a (keyword #f "ret-nhint") kind))))) (_a$7862 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$7860 _a$7861 _a$7862))) node))))) with-ret-nhint))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec7855 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__91_) (let fnrec7856 ((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$7857 (var-deref "jolt.ir" "do-node")) (_a$7858 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$7859 (jolt-peek v))) (jolt-invoke _a$7857 _a$7858 _a$7859)) jolt-nil)))))))) analyze-seq))) + (def-var! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec7863 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__91_) (let fnrec7864 ((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$7865 (var-deref "jolt.ir" "do-node")) (_a$7866 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$7867 (jolt-peek v))) (jolt-invoke _a$7865 _a$7866 _a$7867)) jolt-nil)))))))) analyze-seq))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec7860 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop7861 ((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$7868 (+ i 2)) (_a$7869 (let* ((_a$7862 (var-deref "jolt.analyzer" "add-hint")) (_a$7863 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$7864 nm) (_a$7865 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$7862 _a$7863 _a$7864 _a$7865))) (_a$7870 (jolt-conj pairs (let* ((_o$7866 nm) (_o$7867 init)) (jolt-vector _o$7866 _o$7867))))) (loop7861 _a$7868 _a$7869 _a$7870))))) (let* ((_o$7871 pairs) (_o$7872 env)) (jolt-vector _o$7871 _o$7872))))))))) analyze-bindings))) + (def-var! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec7868 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop7869 ((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$7876 (+ i 2)) (_a$7877 (let* ((_a$7870 (var-deref "jolt.analyzer" "add-hint")) (_a$7871 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$7872 nm) (_a$7873 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$7870 _a$7871 _a$7872 _a$7873))) (_a$7878 (jolt-conj pairs (let* ((_o$7874 nm) (_o$7875 init)) (jolt-vector _o$7874 _o$7875))))) (loop7869 _a$7876 _a$7877 _a$7878))))) (let* ((_o$7879 pairs) (_o$7880 env)) (jolt-vector _o$7879 _o$7880))))))))) analyze-bindings))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec7873 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector)) (nhints (jolt-vector))) (let loop7874 ((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$7875 (+ i 2)) (_a$7876 fixed) (_a$7877 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$7878 hints) (_a$7879 phints) (_a$7880 nhints)) (loop7874 _a$7875 _a$7876 _a$7877 _a$7878 _a$7879 _a$7880)))) (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$7887 (jolt-inc i)) (_a$7888 (jolt-conj fixed nm)) (_a$7889 rest-name) (_a$7890 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$7881 nm) (_o$7882 h)) (jolt-vector _o$7881 _o$7882))) hints)) (_a$7891 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$7883 nm) (_o$7884 ph)) (jolt-vector _o$7883 _o$7884))) phints)) (_a$7892 (if (jolt-truthy? nh) (jolt-conj nhints (let* ((_o$7885 nm) (_o$7886 nh)) (jolt-vector _o$7885 _o$7886))) nhints))) (loop7874 _a$7887 _a$7888 _a$7889 _a$7890 _a$7891 _a$7892)))))) (let* ((_o$7893 (keyword #f "fixed")) (_o$7894 fixed) (_o$7895 (keyword #f "rest")) (_o$7896 rest-name) (_o$7897 (keyword #f "hints")) (_o$7898 hints) (_o$7899 (keyword #f "phints")) (_o$7900 phints) (_o$7901 (keyword #f "nhints")) (_o$7902 nhints)) (jolt-hash-map _o$7893 _o$7894 _o$7895 _o$7896 _o$7897 _o$7898 _o$7899 _o$7900 _o$7901 _o$7902))))))))) parse-params))) + (def-var! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec7881 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector)) (nhints (jolt-vector))) (let loop7882 ((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$7883 (+ i 2)) (_a$7884 fixed) (_a$7885 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$7886 hints) (_a$7887 phints) (_a$7888 nhints)) (loop7882 _a$7883 _a$7884 _a$7885 _a$7886 _a$7887 _a$7888)))) (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$7895 (jolt-inc i)) (_a$7896 (jolt-conj fixed nm)) (_a$7897 rest-name) (_a$7898 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$7889 nm) (_o$7890 h)) (jolt-vector _o$7889 _o$7890))) hints)) (_a$7899 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$7891 nm) (_o$7892 ph)) (jolt-vector _o$7891 _o$7892))) phints)) (_a$7900 (if (jolt-truthy? nh) (jolt-conj nhints (let* ((_o$7893 nm) (_o$7894 nh)) (jolt-vector _o$7893 _o$7894))) nhints))) (loop7882 _a$7895 _a$7896 _a$7897 _a$7898 _a$7899 _a$7900)))))) (let* ((_o$7901 (keyword #f "fixed")) (_o$7902 fixed) (_o$7903 (keyword #f "rest")) (_o$7904 rest-name) (_o$7905 (keyword #f "hints")) (_o$7906 hints) (_o$7907 (keyword #f "phints")) (_o$7908 phints) (_o$7909 (keyword #f "nhints")) (_o$7910 nhints)) (jolt-hash-map _o$7901 _o$7902 _o$7903 _o$7904 _o$7905 _o$7906 _o$7907 _o$7908 _o$7909 _o$7910))))))))) parse-params))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec7903 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop7904 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop7905 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop7905 (jolt-inc j)) jolt-nil))))))) (let* ((_a$7906 (jolt-inc i)) (_a$7907 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop7904 _a$7906 _a$7907))) out)))))))) uniquify-params))) + (def-var! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec7911 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop7912 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop7913 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop7913 (jolt-inc j)) jolt-nil))))))) (let* ((_a$7914 (jolt-inc i)) (_a$7915 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop7912 _a$7914 _a$7915))) out)))))))) uniquify-params))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec7908 ((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$7909 (var-deref "clojure.core" "str")) (_a$7910 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$7911 "/") (_a$7912 (let* ((or__26__auto fn-name)) (if (jolt-truthy? or__26__auto) or__26__auto "fn"))) (_a$7913 "--")) (jolt-invoke _a$7909 _a$7910 _a$7911 _a$7912 _a$7913)))) (names (let* ((G__142 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__143 (if (jolt-truthy? rst) (jolt-conj G__142 rst) G__142))) (let* ((G__144 (if (jolt-truthy? fn-name) (jolt-conj G__143 fn-name) G__143))) G__144)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$7919 (lambda (e pr) (let fnrec7914 ((e e) (pr pr)) (let* ((_a$7915 (var-deref "jolt.analyzer" "add-hint")) (_a$7916 e) (_a$7917 (jolt-nth pr 0)) (_a$7918 (jolt-nth pr 1))) (jolt-invoke _a$7915 _a$7916 _a$7917 _a$7918))))) (_a$7920 env0) (_a$7921 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$7919 _a$7920 _a$7921))) (arity (let* ((_o$7922 (keyword #f "params")) (_o$7923 fixed) (_o$7924 (keyword #f "recur-name")) (_o$7925 rname) (_o$7926 (keyword #f "body")) (_o$7927 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$7922 _o$7923 _o$7924 _o$7925 _o$7926 _o$7927))) (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))) + (def-var! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec7916 ((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$7917 (var-deref "clojure.core" "str")) (_a$7918 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$7919 "/") (_a$7920 (let* ((or__26__auto fn-name)) (if (jolt-truthy? or__26__auto) or__26__auto "fn"))) (_a$7921 "--")) (jolt-invoke _a$7917 _a$7918 _a$7919 _a$7920 _a$7921)))) (names (let* ((G__142 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__143 (if (jolt-truthy? rst) (jolt-conj G__142 rst) G__142))) (let* ((G__144 (if (jolt-truthy? fn-name) (jolt-conj G__143 fn-name) G__143))) G__144)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$7927 (lambda (e pr) (let fnrec7922 ((e e) (pr pr)) (let* ((_a$7923 (var-deref "jolt.analyzer" "add-hint")) (_a$7924 e) (_a$7925 (jolt-nth pr 0)) (_a$7926 (jolt-nth pr 1))) (jolt-invoke _a$7923 _a$7924 _a$7925 _a$7926))))) (_a$7928 env0) (_a$7929 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$7927 _a$7928 _a$7929))) (arity (let* ((_o$7930 (keyword #f "params")) (_o$7931 fixed) (_o$7932 (keyword #f "recur-name")) (_o$7933 rname) (_o$7934 (keyword #f "body")) (_o$7935 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$7930 _o$7931 _o$7932 _o$7933 _o$7934 _o$7935))) (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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec7928 ((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))) + (def-var! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec7936 ((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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec7929 ((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 fnrec7930 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$7931 (var-deref "jolt.analyzer" "analyze-arity")) (_a$7932 ctx) (_a$7933 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$7934 (jolt-rest cl)) (_a$7935 env) (_a$7936 fn-name)) (jolt-invoke _a$7931 _a$7932 _a$7933 _a$7934 _a$7935 _a$7936))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn))) + (def-var! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec7937 ((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 fnrec7938 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$7939 (var-deref "jolt.analyzer" "analyze-arity")) (_a$7940 ctx) (_a$7941 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$7942 (jolt-rest cl)) (_a$7943 env) (_a$7944 fn-name)) (jolt-invoke _a$7939 _a$7940 _a$7941 _a$7942 _a$7943 _a$7944))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.analyzer" "catch-all-names" (let* ((_o$7937 "Throwable") (_o$7938 "java.lang.Throwable") (_o$7939 "Object") (_o$7940 "java.lang.Object")) (jolt-hash-set _o$7937 _o$7938 _o$7939 _o$7940)) (let* ((_o$7941 (keyword #f "private")) (_o$7942 #t)) (jolt-hash-map _o$7941 _o$7942)))) + (def-var-with-meta! "jolt.analyzer" "catch-all-names" (let* ((_o$7945 "Throwable") (_o$7946 "java.lang.Throwable") (_o$7947 "Object") (_o$7948 "java.lang.Object")) (jolt-hash-set _o$7945 _o$7946 _o$7947 _o$7948)) (let* ((_o$7949 (keyword #f "private")) (_o$7950 #t)) (jolt-hash-map _o$7949 _o$7950)))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec7943 ((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 fnrec7944 ((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$7945 (keyword #f "op")) (_o$7946 (keyword #f "try")) (_o$7947 (keyword #f "body")) (_o$7948 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$7945 _o$7946 _o$7947 _o$7948))) (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$7953 (lambda (_else cl) (let fnrec7949 ((_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$7950 (jolt-symbol #f "or")) (_a$7951 (jolt-list (jolt-symbol #f "instance?") cform evar)) (_a$7952 (jolt-list (jolt-symbol #f "__catch-broad?") fullname evar))) (jolt-list _a$7950 _a$7951 _a$7952)) letform _else)))))) (_a$7954 (jolt-list (jolt-symbol #f "throw") evar)) (_a$7955 (jolt-reverse (jolt-invoke (var-deref "clojure.core" "deref") catches)))) (jolt-reduce _a$7953 _a$7954 _a$7955)))) (jolt-assoc n (keyword #f "catch-sym") evar-name (keyword #f "catch-body") (let* ((_a$7956 (var-deref "jolt.analyzer" "analyze-seq")) (_a$7957 ctx) (_a$7958 (jolt-list dispatch)) (_a$7959 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector evar-name)))) (jolt-invoke _a$7956 _a$7957 _a$7958 _a$7959)))) 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))) + (def-var! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec7951 ((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 fnrec7952 ((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$7953 (keyword #f "op")) (_o$7954 (keyword #f "try")) (_o$7955 (keyword #f "body")) (_o$7956 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$7953 _o$7954 _o$7955 _o$7956))) (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$7961 (lambda (_else cl) (let fnrec7957 ((_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$7958 (jolt-symbol #f "or")) (_a$7959 (jolt-list (jolt-symbol #f "instance?") cform evar)) (_a$7960 (jolt-list (jolt-symbol #f "__catch-broad?") fullname evar))) (jolt-list _a$7958 _a$7959 _a$7960)) letform _else)))))) (_a$7962 (jolt-list (jolt-symbol #f "throw") evar)) (_a$7963 (jolt-reverse (jolt-invoke (var-deref "clojure.core" "deref") catches)))) (jolt-reduce _a$7961 _a$7962 _a$7963)))) (jolt-assoc n (keyword #f "catch-sym") evar-name (keyword #f "catch-body") (let* ((_a$7964 (var-deref "jolt.analyzer" "analyze-seq")) (_a$7965 ctx) (_a$7966 (jolt-list dispatch)) (_a$7967 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector evar-name)))) (jolt-invoke _a$7964 _a$7965 _a$7966 _a$7967)))) 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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-letfn" (letrec ((analyze-letfn (lambda (ctx items env) (let fnrec7960 ((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 fnrec7961 ((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 fnrec7962 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$7963 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$7964 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$7963 _o$7964))))) specs))) (let* ((_o$7965 (keyword #f "op")) (_o$7966 (keyword #f "let")) (_o$7967 (keyword #f "letrec")) (_o$7968 #t) (_o$7969 (keyword #f "bindings")) (_o$7970 binds) (_o$7971 (keyword #f "body")) (_o$7972 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$7965 _o$7966 _o$7967 _o$7968 _o$7969 _o$7970 _o$7971 _o$7972))))))) analyze-letfn))) + (def-var! "jolt.analyzer" "analyze-letfn" (letrec ((analyze-letfn (lambda (ctx items env) (let fnrec7968 ((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 fnrec7969 ((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 fnrec7970 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$7971 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$7972 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$7971 _o$7972))))) specs))) (let* ((_o$7973 (keyword #f "op")) (_o$7974 (keyword #f "let")) (_o$7975 (keyword #f "letrec")) (_o$7976 #t) (_o$7977 (keyword #f "bindings")) (_o$7978 binds) (_o$7979 (keyword #f "body")) (_o$7980 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$7973 _o$7974 _o$7975 _o$7976 _o$7977 _o$7978 _o$7979 _o$7980))))))) analyze-letfn))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec7973 ((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?))) + (def-var! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec7981 ((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?))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "def-meta-expr" (letrec ((def-meta-expr (lambda (ctx base env) (let fnrec7974 ((ctx ctx) (base base) (env env)) (if (jolt-pos? (jolt-count base)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$7978 (var-deref "clojure.core" "mapv")) (_a$7979 (lambda (p) (let fnrec7975 ((p p)) (let* ((k (jolt-first p)) (v (jolt-invoke (var-deref "clojure.core" "second") p))) (let* ((_o$7976 (jolt-invoke (var-deref "jolt.ir" "const") k)) (_o$7977 (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$7976 _o$7977)))))) (_a$7980 (jolt-seq base))) (jolt-invoke _a$7978 _a$7979 _a$7980))) jolt-nil))))) def-meta-expr))) + (def-var! "jolt.analyzer" "def-meta-expr" (letrec ((def-meta-expr (lambda (ctx base env) (let fnrec7982 ((ctx ctx) (base base) (env env)) (if (jolt-pos? (jolt-count base)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$7986 (var-deref "clojure.core" "mapv")) (_a$7987 (lambda (p) (let fnrec7983 ((p p)) (let* ((k (jolt-first p)) (v (jolt-invoke (var-deref "clojure.core" "second") p))) (let* ((_o$7984 (jolt-invoke (var-deref "jolt.ir" "const") k)) (_o$7985 (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$7984 _o$7985)))))) (_a$7988 (jolt-seq base))) (jolt-invoke _a$7986 _a$7987 _a$7988))) jolt-nil))))) def-meta-expr))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec7981 ((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$7982 (keyword #f "op")) (_o$7983 (keyword #f "def")) (_o$7984 (keyword #f "ns")) (_o$7985 cur) (_o$7986 (keyword #f "name")) (_o$7987 nm) (_o$7988 (keyword #f "no-init")) (_o$7989 #t)) (jolt-hash-map _o$7982 _o$7983 _o$7984 _o$7985 _o$7986 _o$7987 _o$7988 _o$7989)))) (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$7990 (var-deref "jolt.analyzer" "with-ret-nhint")) (_a$7991 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env)) (_a$7992 (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") tag))) (jolt-invoke _a$7990 _a$7991 _a$7992)) 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))) + (def-var! "jolt.analyzer" "analyze-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec7989 ((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$7990 (keyword #f "op")) (_o$7991 (keyword #f "def")) (_o$7992 (keyword #f "ns")) (_o$7993 cur) (_o$7994 (keyword #f "name")) (_o$7995 nm) (_o$7996 (keyword #f "no-init")) (_o$7997 #t)) (jolt-hash-map _o$7990 _o$7991 _o$7992 _o$7993 _o$7994 _o$7995 _o$7996 _o$7997)))) (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$7998 (var-deref "jolt.analyzer" "with-ret-nhint")) (_a$7999 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env)) (_a$8000 (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") tag))) (jolt-invoke _a$7998 _a$7999 _a$8000)) 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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec7993 ((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$7994 (keyword #f "op")) (_o$7995 (keyword #f "set-field")) (_o$7996 (keyword #f "obj")) (_o$7997 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$7998 (keyword #f "field")) (_o$7999 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$8000 (keyword #f "val")) (_o$8001 val-node)) (jolt-hash-map _o$7994 _o$7995 _o$7996 _o$7997 _o$7998 _o$7999 _o$8000 _o$8001)) (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$8005 (var-deref "jolt.ir" "invoke")) (_a$8006 (jolt-invoke (var-deref "jolt.ir" "var-ref") "jolt.host" "set-static-field!")) (_a$8007 (let* ((_o$8002 (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$8003 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth ti 2)))) (_o$8004 val-node)) (jolt-vector _o$8002 _o$8003 _o$8004)))) (jolt-invoke _a$8005 _a$8006 _a$8007)) (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$8011 (keyword #f "op")) (_o$8012 (keyword #f "set-var")) (_o$8013 (keyword #f "the-var")) (_o$8014 (let* ((_a$8008 (var-deref "jolt.ir" "the-var")) (_a$8009 (jolt-get r (keyword #f "ns"))) (_a$8010 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8008 _a$8009 _a$8010))) (_o$8015 (keyword #f "val")) (_o$8016 val-node)) (jolt-hash-map _o$8011 _o$8012 _o$8013 _o$8014 _o$8015 _o$8016))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil))))))))) analyze-set!))) + (def-var! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec8001 ((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$8002 (keyword #f "op")) (_o$8003 (keyword #f "set-field")) (_o$8004 (keyword #f "obj")) (_o$8005 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$8006 (keyword #f "field")) (_o$8007 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$8008 (keyword #f "val")) (_o$8009 val-node)) (jolt-hash-map _o$8002 _o$8003 _o$8004 _o$8005 _o$8006 _o$8007 _o$8008 _o$8009)) (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$8013 (var-deref "jolt.ir" "invoke")) (_a$8014 (jolt-invoke (var-deref "jolt.ir" "var-ref") "jolt.host" "set-static-field!")) (_a$8015 (let* ((_o$8010 (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$8011 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth ti 2)))) (_o$8012 val-node)) (jolt-vector _o$8010 _o$8011 _o$8012)))) (jolt-invoke _a$8013 _a$8014 _a$8015)) (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$8019 (keyword #f "op")) (_o$8020 (keyword #f "set-var")) (_o$8021 (keyword #f "the-var")) (_o$8022 (let* ((_a$8016 (var-deref "jolt.ir" "the-var")) (_a$8017 (jolt-get r (keyword #f "ns"))) (_a$8018 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8016 _a$8017 _a$8018))) (_o$8023 (keyword #f "val")) (_o$8024 val-node)) (jolt-hash-map _o$8019 _o$8020 _o$8021 _o$8022 _o$8023 _o$8024))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil))))))))) analyze-set!))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec8017 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__145 op)) (if (jolt= G__145 "quote") (jolt-invoke (var-deref "jolt.ir" "quote-node") (jolt-invoke (var-deref "clojure.core" "second") items)) (if (jolt= G__145 "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$8018 (var-deref "jolt.ir" "if-node")) (_a$8019 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$8020 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$8021 (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$8018 _a$8019 _a$8020 _a$8021))) (if (jolt= G__145 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__145 "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__145 "def") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (if (jolt= G__145 "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$8026 (var-deref "jolt.ir" "let-node")) (_a$8027 (jolt-first r)) (_a$8028 (let* ((_a$8022 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8023 ctx) (_a$8024 (jolt-drop 2 items)) (_a$8025 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$8022 _a$8023 _a$8024 _a$8025)))) (jolt-invoke _a$8026 _a$8027 _a$8028))) (if (jolt= G__145 "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$8029 (keyword #f "op")) (_o$8030 (keyword #f "loop")) (_o$8031 (keyword #f "recur-name")) (_o$8032 rname) (_o$8033 (keyword #f "bindings")) (_o$8034 (jolt-first r)) (_o$8035 (keyword #f "body")) (_o$8036 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$8029 _o$8030 _o$8031 _o$8032 _o$8033 _o$8034 _o$8035 _o$8036))) (if (jolt= G__145 "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$8041 (keyword #f "op")) (_o$8042 (keyword #f "recur")) (_o$8043 (keyword #f "recur-name")) (_o$8044 rt) (_o$8045 (keyword #f "args")) (_o$8046 (let* ((_a$8038 (var-deref "clojure.core" "mapv")) (_a$8039 (lambda (p__93_) (let fnrec8037 ((p__93_ p__93_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__93_ env)))) (_a$8040 (jolt-rest items))) (jolt-invoke _a$8038 _a$8039 _a$8040)))) (jolt-hash-map _o$8041 _o$8042 _o$8043 _o$8044 _o$8045 _o$8046)))) (if (jolt= G__145 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__145 "letfn") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn") ctx items env) (if (jolt= G__145 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__145 "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__145 "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$8047 (var-deref "jolt.ir" "the-var")) (_a$8048 (jolt-get r (keyword #f "ns"))) (_a$8049 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8047 _a$8048 _a$8049)) (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__145 "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$8050 (keyword #f "op")) (_o$8051 (keyword #f "defmacro")) (_o$8052 (keyword #f "ns")) (_o$8053 cur) (_o$8054 (keyword #f "name")) (_o$8055 nm) (_o$8056 (keyword #f "fn")) (_o$8057 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$8050 _o$8051 _o$8052 _o$8053 _o$8054 _o$8055 _o$8056 _o$8057)))) (if (jolt= G__145 "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))) + (def-var! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec8025 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__145 op)) (if (jolt= G__145 "quote") (jolt-invoke (var-deref "jolt.ir" "quote-node") (jolt-invoke (var-deref "clojure.core" "second") items)) (if (jolt= G__145 "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$8026 (var-deref "jolt.ir" "if-node")) (_a$8027 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$8028 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$8029 (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$8026 _a$8027 _a$8028 _a$8029))) (if (jolt= G__145 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__145 "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__145 "def") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (if (jolt= G__145 "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$8034 (var-deref "jolt.ir" "let-node")) (_a$8035 (jolt-first r)) (_a$8036 (let* ((_a$8030 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8031 ctx) (_a$8032 (jolt-drop 2 items)) (_a$8033 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$8030 _a$8031 _a$8032 _a$8033)))) (jolt-invoke _a$8034 _a$8035 _a$8036))) (if (jolt= G__145 "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$8037 (keyword #f "op")) (_o$8038 (keyword #f "loop")) (_o$8039 (keyword #f "recur-name")) (_o$8040 rname) (_o$8041 (keyword #f "bindings")) (_o$8042 (jolt-first r)) (_o$8043 (keyword #f "body")) (_o$8044 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$8037 _o$8038 _o$8039 _o$8040 _o$8041 _o$8042 _o$8043 _o$8044))) (if (jolt= G__145 "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$8049 (keyword #f "op")) (_o$8050 (keyword #f "recur")) (_o$8051 (keyword #f "recur-name")) (_o$8052 rt) (_o$8053 (keyword #f "args")) (_o$8054 (let* ((_a$8046 (var-deref "clojure.core" "mapv")) (_a$8047 (lambda (p__93_) (let fnrec8045 ((p__93_ p__93_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__93_ env)))) (_a$8048 (jolt-rest items))) (jolt-invoke _a$8046 _a$8047 _a$8048)))) (jolt-hash-map _o$8049 _o$8050 _o$8051 _o$8052 _o$8053 _o$8054)))) (if (jolt= G__145 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__145 "letfn") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn") ctx items env) (if (jolt= G__145 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__145 "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__145 "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$8055 (var-deref "jolt.ir" "the-var")) (_a$8056 (jolt-get r (keyword #f "ns"))) (_a$8057 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8055 _a$8056 _a$8057)) (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__145 "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$8058 (keyword #f "op")) (_o$8059 (keyword #f "defmacro")) (_o$8060 (keyword #f "ns")) (_o$8061 cur) (_o$8062 (keyword #f "name")) (_o$8063 nm) (_o$8064 (keyword #f "fn")) (_o$8065 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$8058 _o$8059 _o$8060 _o$8061 _o$8062 _o$8063 _o$8064 _o$8065)))) (if (jolt= G__145 "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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec8058 ((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?))) + (def-var! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec8066 ((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?))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec8059 ((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$8064 (keyword #f "op")) (_o$8065 (keyword #f "host-call")) (_o$8066 (keyword #f "method")) (_o$8067 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8068 (keyword #f "target")) (_o$8069 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8070 (keyword #f "args")) (_o$8071 (let* ((_a$8061 (var-deref "clojure.core" "mapv")) (_a$8062 (lambda (p__94_) (let fnrec8060 ((p__94_ p__94_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__94_ env)))) (_a$8063 (jolt-drop 2 items))) (jolt-invoke _a$8061 _a$8062 _a$8063)))) (jolt-hash-map _o$8064 _o$8065 _o$8066 _o$8067 _o$8068 _o$8069 _o$8070 _o$8071))))))) analyze-host-call))) + (def-var! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec8067 ((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$8072 (keyword #f "op")) (_o$8073 (keyword #f "host-call")) (_o$8074 (keyword #f "method")) (_o$8075 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8076 (keyword #f "target")) (_o$8077 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8078 (keyword #f "args")) (_o$8079 (let* ((_a$8069 (var-deref "clojure.core" "mapv")) (_a$8070 (lambda (p__94_) (let fnrec8068 ((p__94_ p__94_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__94_ env)))) (_a$8071 (jolt-drop 2 items))) (jolt-invoke _a$8069 _a$8070 _a$8071)))) (jolt-hash-map _o$8072 _o$8073 _o$8074 _o$8075 _o$8076 _o$8077 _o$8078 _o$8079))))))) analyze-host-call))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec8072 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (let* ((_a$8073 (var-deref "clojure.core" "subs")) (_a$8074 nm) (_a$8075 (jolt-dec (jolt-count nm))) (_a$8076 (jolt-count nm))) (jolt-invoke _a$8073 _a$8074 _a$8075 _a$8076))))) (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?))) + (def-var! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec8080 ((nm nm)) (let* ((and__25__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (let* ((_a$8081 (var-deref "clojure.core" "subs")) (_a$8082 nm) (_a$8083 (jolt-dec (jolt-count nm))) (_a$8084 (jolt-count nm))) (jolt-invoke _a$8081 _a$8082 _a$8083 _a$8084))))) (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?))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec8077 ((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 fnrec8078 ((p__95_ p__95_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__95_ env))) args)))))) analyze-ctor))) + (def-var! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec8085 ((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 fnrec8086 ((p__95_ p__95_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__95_ env))) args)))))) analyze-ctor))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec8079 ((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$8080 (keyword #f "op")) (_o$8081 (keyword #f "ffi-fn")) (_o$8082 (keyword #f "csym")) (_o$8083 (jolt-nth items 1)) (_o$8084 (keyword #f "argtypes")) (_o$8085 (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$8086 (keyword #f "rettype")) (_o$8087 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8088 (keyword #f "blocking")) (_o$8089 (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$8080 _o$8081 _o$8082 _o$8083 _o$8084 _o$8085 _o$8086 _o$8087 _o$8088 _o$8089))))))) analyze-ffi-fn))) + (def-var! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec8087 ((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$8088 (keyword #f "op")) (_o$8089 (keyword #f "ffi-fn")) (_o$8090 (keyword #f "csym")) (_o$8091 (jolt-nth items 1)) (_o$8092 (keyword #f "argtypes")) (_o$8093 (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$8094 (keyword #f "rettype")) (_o$8095 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8096 (keyword #f "blocking")) (_o$8097 (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$8088 _o$8089 _o$8090 _o$8091 _o$8092 _o$8093 _o$8094 _o$8095 _o$8096 _o$8097))))))) analyze-ffi-fn))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-ffi-callable" (letrec ((analyze-ffi-callable (lambda (ctx items env) (let fnrec8090 ((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$8091 (keyword #f "op")) (_o$8092 (keyword #f "ffi-callable")) (_o$8093 (keyword #f "fn")) (_o$8094 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8095 (keyword #f "argtypes")) (_o$8096 (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$8097 (keyword #f "rettype")) (_o$8098 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8099 (keyword #f "collect-safe")) (_o$8100 (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$8091 _o$8092 _o$8093 _o$8094 _o$8095 _o$8096 _o$8097 _o$8098 _o$8099 _o$8100))))))) analyze-ffi-callable))) + (def-var! "jolt.analyzer" "analyze-ffi-callable" (letrec ((analyze-ffi-callable (lambda (ctx items env) (let fnrec8098 ((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$8099 (keyword #f "op")) (_o$8100 (keyword #f "ffi-callable")) (_o$8101 (keyword #f "fn")) (_o$8102 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8103 (keyword #f "argtypes")) (_o$8104 (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$8105 (keyword #f "rettype")) (_o$8106 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8107 (keyword #f "collect-safe")) (_o$8108 (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$8099 _o$8100 _o$8101 _o$8102 _o$8103 _o$8104 _o$8105 _o$8106 _o$8107 _o$8108))))))) analyze-ffi-callable))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec8101 ((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* ((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$8106 (var-deref "jolt.ir" "invoke")) (_a$8107 (jolt-invoke (var-deref "jolt.ir" "host-static") class-target (jolt-invoke (var-deref "jolt.host" "form-sym-name") member))) (_a$8108 (let* ((_a$8103 (var-deref "clojure.core" "mapv")) (_a$8104 (lambda (p__96_) (let fnrec8102 ((p__96_ p__96_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__96_ env)))) (_a$8105 (jolt-drop 3 items))) (jolt-invoke _a$8103 _a$8104 _a$8105)))) (jolt-invoke _a$8106 _a$8107 _a$8108)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$8113 (keyword #f "op")) (_o$8114 (keyword #f "host-call")) (_o$8115 (keyword #f "method")) (_o$8116 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$8117 (keyword #f "target")) (_o$8118 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx target env)) (_o$8119 (keyword #f "args")) (_o$8120 (let* ((_a$8110 (var-deref "clojure.core" "mapv")) (_a$8111 (lambda (p__97_) (let fnrec8109 ((p__97_ p__97_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__97_ env)))) (_a$8112 (jolt-drop 3 items))) (jolt-invoke _a$8110 _a$8111 _a$8112)))) (jolt-hash-map _o$8113 _o$8114 _o$8115 _o$8116 _o$8117 _o$8118 _o$8119 _o$8120)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$8121 (var-deref "jolt.ir" "invoke")) (_a$8122 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$8123 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$8121 _a$8122 _a$8123)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil)))))))))) analyze-dot))) + (def-var! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec8109 ((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* ((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$8114 (var-deref "jolt.ir" "invoke")) (_a$8115 (jolt-invoke (var-deref "jolt.ir" "host-static") class-target (jolt-invoke (var-deref "jolt.host" "form-sym-name") member))) (_a$8116 (let* ((_a$8111 (var-deref "clojure.core" "mapv")) (_a$8112 (lambda (p__96_) (let fnrec8110 ((p__96_ p__96_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__96_ env)))) (_a$8113 (jolt-drop 3 items))) (jolt-invoke _a$8111 _a$8112 _a$8113)))) (jolt-invoke _a$8114 _a$8115 _a$8116)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$8121 (keyword #f "op")) (_o$8122 (keyword #f "host-call")) (_o$8123 (keyword #f "method")) (_o$8124 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$8125 (keyword #f "target")) (_o$8126 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx target env)) (_o$8127 (keyword #f "args")) (_o$8128 (let* ((_a$8118 (var-deref "clojure.core" "mapv")) (_a$8119 (lambda (p__97_) (let fnrec8117 ((p__97_ p__97_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__97_ env)))) (_a$8120 (jolt-drop 3 items))) (jolt-invoke _a$8118 _a$8119 _a$8120)))) (jolt-hash-map _o$8121 _o$8122 _o$8123 _o$8124 _o$8125 _o$8126 _o$8127 _o$8128)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$8129 (var-deref "jolt.ir" "invoke")) (_a$8130 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$8131 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$8129 _a$8130 _a$8131)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil)))))))))) analyze-dot))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec8124 ((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$8125 (keyword #f "op")) (_o$8126 (keyword #f "host-call")) (_o$8127 (keyword #f "method")) (_o$8128 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8129 (keyword #f "target")) (_o$8130 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8131 (keyword #f "args")) (_o$8132 (jolt-vector))) (jolt-hash-map _o$8125 _o$8126 _o$8127 _o$8128 _o$8129 _o$8130 _o$8131 _o$8132))))))) analyze-field))) + (def-var! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec8132 ((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$8133 (keyword #f "op")) (_o$8134 (keyword #f "host-call")) (_o$8135 (keyword #f "method")) (_o$8136 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8137 (keyword #f "target")) (_o$8138 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8139 (keyword #f "args")) (_o$8140 (jolt-vector))) (jolt-hash-map _o$8133 _o$8134 _o$8135 _o$8136 _o$8137 _o$8138 _o$8139 _o$8140))))))) analyze-field))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec8133 ((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__146 (let* ((_a$8134 (var-deref "jolt.ir" "var-ref")) (_a$8135 (jolt-get r (keyword #f "ns"))) (_a$8136 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8134 _a$8135 _a$8136)))) (let* ((G__147 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__146 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__146))) G__147)) (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__148 (jolt-get r (keyword #f "kind")))) (if (jolt= G__148 (keyword #f "var")) (let* ((G__149 (let* ((_a$8137 (var-deref "jolt.ir" "var-ref")) (_a$8138 (jolt-get r (keyword #f "ns"))) (_a$8139 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8137 _a$8138 _a$8139)))) (let* ((G__150 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__149 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__149))) G__150)) (if (jolt= G__148 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt= G__148 (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))) + (def-var! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec8141 ((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__146 (let* ((_a$8142 (var-deref "jolt.ir" "var-ref")) (_a$8143 (jolt-get r (keyword #f "ns"))) (_a$8144 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8142 _a$8143 _a$8144)))) (let* ((G__147 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__146 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__146))) G__147)) (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__148 (jolt-get r (keyword #f "kind")))) (if (jolt= G__148 (keyword #f "var")) (let* ((G__149 (let* ((_a$8145 (var-deref "jolt.ir" "var-ref")) (_a$8146 (jolt-get r (keyword #f "ns"))) (_a$8147 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8145 _a$8146 _a$8147)))) (let* ((G__150 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__149 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__149))) G__150)) (if (jolt= G__148 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt= G__148 (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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec8140 ((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)) (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") hname)))) (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 hname)) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") hname) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx hname 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$8141 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8142 ctx) (_a$8143 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$8144 (jolt-rest items)) (_a$8145 env)) (jolt-invoke _a$8141 _a$8142 _a$8143 _a$8144 _a$8145)) (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$8146 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8147 ctx) (_a$8148 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$8149 (jolt-drop 2 items)) (_a$8150 env)) (jolt-invoke _a$8146 _a$8147 _a$8148 _a$8149 _a$8150)) (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$8155 (var-deref "jolt.ir" "invoke")) (_a$8156 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$8157 (let* ((_a$8152 (var-deref "clojure.core" "mapv")) (_a$8153 (lambda (p__98_) (let fnrec8151 ((p__98_ p__98_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__98_ env)))) (_a$8154 (jolt-rest items))) (jolt-invoke _a$8152 _a$8153 _a$8154)))) (jolt-invoke _a$8155 _a$8156 _a$8157))) (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))) + (def-var! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec8148 ((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)) (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") hname)))) (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 hname)) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") hname) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx hname 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$8149 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8150 ctx) (_a$8151 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$8152 (jolt-rest items)) (_a$8153 env)) (jolt-invoke _a$8149 _a$8150 _a$8151 _a$8152 _a$8153)) (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$8154 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$8155 ctx) (_a$8156 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$8157 (jolt-drop 2 items)) (_a$8158 env)) (jolt-invoke _a$8154 _a$8155 _a$8156 _a$8157 _a$8158)) (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$8163 (var-deref "jolt.ir" "invoke")) (_a$8164 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$8165 (let* ((_a$8160 (var-deref "clojure.core" "mapv")) (_a$8161 (lambda (p__98_) (let fnrec8159 ((p__98_ p__98_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__98_ env)))) (_a$8162 (jolt-rest items))) (jolt-invoke _a$8160 _a$8161 _a$8162)))) (jolt-invoke _a$8163 _a$8164 _a$8165))) (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))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "with-coll-meta" (letrec ((with-coll-meta (lambda (ctx form env node) (let fnrec8158 ((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$8161 (var-deref "jolt.ir" "invoke")) (_a$8162 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$8163 (let* ((_o$8159 node) (_o$8160 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx m env))) (jolt-vector _o$8159 _o$8160)))) (jolt-invoke _a$8161 _a$8162 _a$8163)))))))) with-coll-meta))) + (def-var! "jolt.analyzer" "with-coll-meta" (letrec ((with-coll-meta (lambda (ctx form env node) (let fnrec8166 ((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$8169 (var-deref "jolt.ir" "invoke")) (_a$8170 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$8171 (let* ((_o$8167 node) (_o$8168 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx m env))) (jolt-vector _o$8167 _o$8168)))) (jolt-invoke _a$8169 _a$8170 _a$8171)))))))) with-coll-meta))) (guard (e (#t #f)) - (def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec8164 ((ctx ctx) (form form)) (analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec8165 ((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$8167 (var-deref "clojure.core" "mapv")) (_a$8168 (lambda (p__99_) (let fnrec8166 ((p__99_ p__99_)) (analyze ctx p__99_ env)))) (_a$8169 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$8167 _a$8168 _a$8169)))) (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$8173 (var-deref "clojure.core" "mapv")) (_a$8174 (lambda (p) (let fnrec8170 ((p p)) (let* ((_o$8171 (analyze ctx (jolt-first p) env)) (_o$8172 (analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$8171 _o$8172))))) (_a$8175 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$8173 _a$8174 _a$8175)))) (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$8177 (var-deref "clojure.core" "mapv")) (_a$8178 (lambda (p__100_) (let fnrec8176 ((p__100_ p__100_)) (analyze ctx p__100_ env)))) (_a$8179 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$8177 _a$8178 _a$8179)))) (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$8180 (keyword #f "op")) (_o$8181 (keyword #f "regex")) (_o$8182 (keyword #f "source")) (_o$8183 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$8180 _o$8181 _o$8182 _o$8183)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$8184 (keyword #f "op")) (_o$8185 (keyword #f "inst")) (_o$8186 (keyword #f "source")) (_o$8187 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$8184 _o$8185 _o$8186 _o$8187)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$8188 (keyword #f "op")) (_o$8189 (keyword #f "uuid")) (_o$8190 (keyword #f "source")) (_o$8191 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$8188 _o$8189 _o$8190 _o$8191)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$8192 (keyword #f "op")) (_o$8193 (keyword #f "bigdec")) (_o$8194 (keyword #f "source")) (_o$8195 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$8192 _o$8193 _o$8194 _o$8195)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$8196 (keyword #f "op")) (_o$8197 (keyword #f "the-ns")) (_o$8198 (keyword #f "name")) (_o$8199 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$8196 _o$8197 _o$8198 _o$8199)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "unsupported form") jolt-nil))))))))))))))))) analyze))) + (def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec8172 ((ctx ctx) (form form)) (analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec8173 ((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$8175 (var-deref "clojure.core" "mapv")) (_a$8176 (lambda (p__99_) (let fnrec8174 ((p__99_ p__99_)) (analyze ctx p__99_ env)))) (_a$8177 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$8175 _a$8176 _a$8177)))) (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$8181 (var-deref "clojure.core" "mapv")) (_a$8182 (lambda (p) (let fnrec8178 ((p p)) (let* ((_o$8179 (analyze ctx (jolt-first p) env)) (_o$8180 (analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$8179 _o$8180))))) (_a$8183 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$8181 _a$8182 _a$8183)))) (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$8185 (var-deref "clojure.core" "mapv")) (_a$8186 (lambda (p__100_) (let fnrec8184 ((p__100_ p__100_)) (analyze ctx p__100_ env)))) (_a$8187 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$8185 _a$8186 _a$8187)))) (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$8188 (keyword #f "op")) (_o$8189 (keyword #f "regex")) (_o$8190 (keyword #f "source")) (_o$8191 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$8188 _o$8189 _o$8190 _o$8191)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$8192 (keyword #f "op")) (_o$8193 (keyword #f "inst")) (_o$8194 (keyword #f "source")) (_o$8195 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$8192 _o$8193 _o$8194 _o$8195)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$8196 (keyword #f "op")) (_o$8197 (keyword #f "uuid")) (_o$8198 (keyword #f "source")) (_o$8199 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$8196 _o$8197 _o$8198 _o$8199)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$8200 (keyword #f "op")) (_o$8201 (keyword #f "bigdec")) (_o$8202 (keyword #f "source")) (_o$8203 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$8200 _o$8201 _o$8202 _o$8203)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$8204 (keyword #f "op")) (_o$8205 (keyword #f "the-ns")) (_o$8206 (keyword #f "name")) (_o$8207 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$8204 _o$8205 _o$8206 _o$8207)) (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$6581 "+") (_o$6582 "+") (_o$6583 "-") (_o$6584 "-") (_o$6585 "*") (_o$6586 "*") (_o$6587 "/") (_o$6588 "/") (_o$6589 "<") (_o$6590 "<") (_o$6591 ">") (_o$6592 ">") (_o$6593 "<=") (_o$6594 "<=") (_o$6595 ">=") (_o$6596 ">=") (_o$6597 "=") (_o$6598 "jolt=") (_o$6599 "inc") (_o$6600 "jolt-inc") (_o$6601 "dec") (_o$6602 "jolt-dec") (_o$6603 "not") (_o$6604 "jolt-not") (_o$6605 "min") (_o$6606 "min") (_o$6607 "max") (_o$6608 "max") (_o$6609 "mod") (_o$6610 "modulo") (_o$6611 "rem") (_o$6612 "remainder") (_o$6613 "quot") (_o$6614 "quotient") (_o$6615 "vector") (_o$6616 "jolt-vector") (_o$6617 "hash-map") (_o$6618 "jolt-hash-map") (_o$6619 "hash-set") (_o$6620 "jolt-hash-set") (_o$6621 "conj") (_o$6622 "jolt-conj") (_o$6623 "get") (_o$6624 "jolt-get") (_o$6625 "nth") (_o$6626 "jolt-nth") (_o$6627 "count") (_o$6628 "jolt-count") (_o$6629 "assoc") (_o$6630 "jolt-assoc") (_o$6631 "dissoc") (_o$6632 "jolt-dissoc") (_o$6633 "contains?") (_o$6634 "jolt-contains?") (_o$6635 "empty?") (_o$6636 "jolt-empty?") (_o$6637 "peek") (_o$6638 "jolt-peek") (_o$6639 "pop") (_o$6640 "jolt-pop") (_o$6641 "first") (_o$6642 "jolt-first") (_o$6643 "rest") (_o$6644 "jolt-rest") (_o$6645 "next") (_o$6646 "jolt-next") (_o$6647 "seq") (_o$6648 "jolt-seq") (_o$6649 "cons") (_o$6650 "jolt-cons") (_o$6651 "list") (_o$6652 "jolt-list") (_o$6653 "reverse") (_o$6654 "jolt-reverse") (_o$6655 "last") (_o$6656 "jolt-last") (_o$6657 "map") (_o$6658 "jolt-map") (_o$6659 "filter") (_o$6660 "jolt-filter") (_o$6661 "remove") (_o$6662 "jolt-remove") (_o$6663 "reduce") (_o$6664 "jolt-reduce") (_o$6665 "into") (_o$6666 "jolt-into") (_o$6667 "concat") (_o$6668 "jolt-concat") (_o$6669 "apply") (_o$6670 "jolt-apply") (_o$6671 "range") (_o$6672 "jolt-range") (_o$6673 "take") (_o$6674 "jolt-take") (_o$6675 "drop") (_o$6676 "jolt-drop") (_o$6677 "keys") (_o$6678 "jolt-keys") (_o$6679 "vals") (_o$6680 "jolt-vals") (_o$6681 "even?") (_o$6682 "jolt-even?") (_o$6683 "odd?") (_o$6684 "jolt-odd?") (_o$6685 "pos?") (_o$6686 "jolt-pos?") (_o$6687 "neg?") (_o$6688 "jolt-neg?") (_o$6689 "zero?") (_o$6690 "jolt-zero?") (_o$6691 "identity") (_o$6692 "jolt-identity") (_o$6693 "nil?") (_o$6694 "jolt-nil?") (_o$6695 "some?") (_o$6696 "jolt-some?") (_o$6697 "ex-info") (_o$6698 "jolt-ex-info") (_o$6699 "protocol-dispatch1") (_o$6700 "protocol-dispatch1") (_o$6701 "protocol-dispatch2") (_o$6702 "protocol-dispatch2") (_o$6703 "protocol-dispatch3") (_o$6704 "protocol-dispatch3")) (jolt-hash-map _o$6581 _o$6582 _o$6583 _o$6584 _o$6585 _o$6586 _o$6587 _o$6588 _o$6589 _o$6590 _o$6591 _o$6592 _o$6593 _o$6594 _o$6595 _o$6596 _o$6597 _o$6598 _o$6599 _o$6600 _o$6601 _o$6602 _o$6603 _o$6604 _o$6605 _o$6606 _o$6607 _o$6608 _o$6609 _o$6610 _o$6611 _o$6612 _o$6613 _o$6614 _o$6615 _o$6616 _o$6617 _o$6618 _o$6619 _o$6620 _o$6621 _o$6622 _o$6623 _o$6624 _o$6625 _o$6626 _o$6627 _o$6628 _o$6629 _o$6630 _o$6631 _o$6632 _o$6633 _o$6634 _o$6635 _o$6636 _o$6637 _o$6638 _o$6639 _o$6640 _o$6641 _o$6642 _o$6643 _o$6644 _o$6645 _o$6646 _o$6647 _o$6648 _o$6649 _o$6650 _o$6651 _o$6652 _o$6653 _o$6654 _o$6655 _o$6656 _o$6657 _o$6658 _o$6659 _o$6660 _o$6661 _o$6662 _o$6663 _o$6664 _o$6665 _o$6666 _o$6667 _o$6668 _o$6669 _o$6670 _o$6671 _o$6672 _o$6673 _o$6674 _o$6675 _o$6676 _o$6677 _o$6678 _o$6679 _o$6680 _o$6681 _o$6682 _o$6683 _o$6684 _o$6685 _o$6686 _o$6687 _o$6688 _o$6689 _o$6690 _o$6691 _o$6692 _o$6693 _o$6694 _o$6695 _o$6696 _o$6697 _o$6698 _o$6699 _o$6700 _o$6701 _o$6702 _o$6703 _o$6704)) (let* ((_o$6705 (keyword #f "private")) (_o$6706 #t)) (jolt-hash-map _o$6705 _o$6706)))) (guard (e (#t #f)) @@ -175,97 +175,99 @@ (guard (e (#t #f)) (def-var! "jolt.backend-scheme" "fresh-label" (letrec ((fresh-label (lambda (prefix) (let fnrec7005 ((prefix prefix)) (jolt-invoke (var-deref "clojure.core" "str") prefix (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "gensym-counter") jolt-inc)))))) fresh-label))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.backend-scheme" "scheme-reserved" (let* ((_o$7006 "if") (_o$7007 "begin") (_o$7008 "lambda") (_o$7009 "let") (_o$7010 "let*") (_o$7011 "letrec") (_o$7012 "letrec*") (_o$7013 "quote") (_o$7014 "quasiquote") (_o$7015 "unquote") (_o$7016 "set!") (_o$7017 "define") (_o$7018 "define-syntax") (_o$7019 "cond") (_o$7020 "case") (_o$7021 "when") (_o$7022 "unless") (_o$7023 "and") (_o$7024 "or") (_o$7025 "do") (_o$7026 "else") (_o$7027 "guard") (_o$7028 "parameterize") (_o$7029 "delay") (_o$7030 "values")) (jolt-hash-set _o$7006 _o$7007 _o$7008 _o$7009 _o$7010 _o$7011 _o$7012 _o$7013 _o$7014 _o$7015 _o$7016 _o$7017 _o$7018 _o$7019 _o$7020 _o$7021 _o$7022 _o$7023 _o$7024 _o$7025 _o$7026 _o$7027 _o$7028 _o$7029 _o$7030)) (let* ((_o$7031 (keyword #f "private")) (_o$7032 #t)) (jolt-hash-map _o$7031 _o$7032)))) + (def-var-with-meta! "jolt.backend-scheme" "devirt-cells" (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil) (let* ((_o$7006 (keyword #f "private")) (_o$7007 #t)) (jolt-hash-map _o$7006 _o$7007)))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "munge-name" (letrec ((munge-name (lambda (s) (let fnrec7033 ((s s)) (let* ((s (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") s "#" "_") "'" "_PRIME_"))) (if (jolt-contains? (var-deref "jolt.backend-scheme" "scheme-reserved") s) (jolt-invoke (var-deref "clojure.core" "str") "_" s) s)))))) munge-name))) + (def-var-with-meta! "jolt.backend-scheme" "scheme-reserved" (let* ((_o$7008 "if") (_o$7009 "begin") (_o$7010 "lambda") (_o$7011 "let") (_o$7012 "let*") (_o$7013 "letrec") (_o$7014 "letrec*") (_o$7015 "quote") (_o$7016 "quasiquote") (_o$7017 "unquote") (_o$7018 "set!") (_o$7019 "define") (_o$7020 "define-syntax") (_o$7021 "cond") (_o$7022 "case") (_o$7023 "when") (_o$7024 "unless") (_o$7025 "and") (_o$7026 "or") (_o$7027 "do") (_o$7028 "else") (_o$7029 "guard") (_o$7030 "parameterize") (_o$7031 "delay") (_o$7032 "values")) (jolt-hash-set _o$7008 _o$7009 _o$7010 _o$7011 _o$7012 _o$7013 _o$7014 _o$7015 _o$7016 _o$7017 _o$7018 _o$7019 _o$7020 _o$7021 _o$7022 _o$7023 _o$7024 _o$7025 _o$7026 _o$7027 _o$7028 _o$7029 _o$7030 _o$7031 _o$7032)) (let* ((_o$7033 (keyword #f "private")) (_o$7034 #t)) (jolt-hash-map _o$7033 _o$7034)))) +(guard (e (#t #f)) + (def-var! "jolt.backend-scheme" "munge-name" (letrec ((munge-name (lambda (s) (let fnrec7035 ((s s)) (let* ((s (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") s "#" "_") "'" "_PRIME_"))) (if (jolt-contains? (var-deref "jolt.backend-scheme" "scheme-reserved") s) (jolt-invoke (var-deref "clojure.core" "str") "_" s) s)))))) munge-name))) (guard (e (#t #f)) (declare-var! "jolt.backend-scheme" "emit")) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "char-escape" (letrec ((char-escape (lambda (cp) (let fnrec7034 ((cp cp)) (if (jolt= cp 34) "\\\"" (if (jolt= cp 92) "\\\\" (if (jolt= cp 10) "\\n" (if (jolt= cp 9) "\\t" (if (jolt= cp 13) "\\r" (if (let* ((and__25__auto (>= cp 32))) (if (jolt-truthy? and__25__auto) (< cp 127) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") (jolt-invoke (var-deref "clojure.core" "char") cp)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "\\x" (jolt-invoke (var-deref "clojure.core" "format") "%x" cp) ";") jolt-nil))))))))))) char-escape))) + (def-var! "jolt.backend-scheme" "char-escape" (letrec ((char-escape (lambda (cp) (let fnrec7036 ((cp cp)) (if (jolt= cp 34) "\\\"" (if (jolt= cp 92) "\\\\" (if (jolt= cp 10) "\\n" (if (jolt= cp 9) "\\t" (if (jolt= cp 13) "\\r" (if (let* ((and__25__auto (>= cp 32))) (if (jolt-truthy? and__25__auto) (< cp 127) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") (jolt-invoke (var-deref "clojure.core" "char") cp)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "\\x" (jolt-invoke (var-deref "clojure.core" "format") "%x" cp) ";") jolt-nil))))))))))) char-escape))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "chez-str-lit" (letrec ((chez-str-lit (lambda (s) (let fnrec7035 ((s s)) (jolt-invoke (var-deref "clojure.core" "str") "\"" (jolt-apply (var-deref "clojure.core" "str") (jolt-map (lambda (c) (let fnrec7036 ((c c)) (jolt-invoke (var-deref "jolt.backend-scheme" "char-escape") (jolt-invoke (var-deref "clojure.core" "int") c)))) s)) "\""))))) chez-str-lit))) + (def-var! "jolt.backend-scheme" "chez-str-lit" (letrec ((chez-str-lit (lambda (s) (let fnrec7037 ((s s)) (jolt-invoke (var-deref "clojure.core" "str") "\"" (jolt-apply (var-deref "clojure.core" "str") (jolt-map (lambda (c) (let fnrec7038 ((c c)) (jolt-invoke (var-deref "jolt.backend-scheme" "char-escape") (jolt-invoke (var-deref "clojure.core" "int") c)))) s)) "\""))))) chez-str-lit))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-const" (letrec ((emit-const (lambda (v) (let fnrec7037 ((v v)) (if (jolt-nil? v) "jolt-nil" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "boolean?") v)) (if (jolt-truthy? v) "#t" "#f") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (if (jolt= v +inf.0) "+inf.0" (if (jolt= v -inf.0) "-inf.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") v v)) "+nan.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "float?") v)) (let* ((s (jolt-invoke (var-deref "clojure.core" "str") v))) (if (jolt-truthy? (let* ((or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "."))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "e")))) s (jolt-invoke (var-deref "clojure.core" "str") s ".0"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") v) jolt-nil))))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") v) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (let* ((temp__16__auto (jolt-invoke (var-deref "clojure.core" "namespace") v))) (if (jolt-truthy? temp__16__auto) (let* ((kns temp__16__auto)) (let* ((_a$7038 (var-deref "clojure.core" "str")) (_a$7039 "(keyword ") (_a$7040 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") kns)) (_a$7041 " ") (_a$7042 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v))) (_a$7043 ")")) (jolt-invoke _a$7038 _a$7039 _a$7040 _a$7041 _a$7042 _a$7043))) (jolt-invoke (var-deref "clojure.core" "str") "(keyword #f " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v)) ")"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") v)) (jolt-invoke (var-deref "clojure.core" "str") "(integer->char " (jolt-invoke (var-deref "jolt.host" "form-char-code") v) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7044 (jolt-invoke (var-deref "clojure.core" "str") "emit-const: unsupported literal " (jolt-invoke (var-deref "clojure.core" "pr-str") v))) (_a$7045 (jolt-hash-map))) (jolt-ex-info _a$7044 _a$7045))) jolt-nil))))))))))) emit-const))) + (def-var! "jolt.backend-scheme" "emit-const" (letrec ((emit-const (lambda (v) (let fnrec7039 ((v v)) (if (jolt-nil? v) "jolt-nil" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "boolean?") v)) (if (jolt-truthy? v) "#t" "#f") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (if (jolt= v +inf.0) "+inf.0" (if (jolt= v -inf.0) "-inf.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") v v)) "+nan.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "float?") v)) (let* ((s (jolt-invoke (var-deref "clojure.core" "str") v))) (if (jolt-truthy? (let* ((or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "."))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "e")))) s (jolt-invoke (var-deref "clojure.core" "str") s ".0"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") v) jolt-nil))))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") v) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (let* ((temp__16__auto (jolt-invoke (var-deref "clojure.core" "namespace") v))) (if (jolt-truthy? temp__16__auto) (let* ((kns temp__16__auto)) (let* ((_a$7040 (var-deref "clojure.core" "str")) (_a$7041 "(keyword ") (_a$7042 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") kns)) (_a$7043 " ") (_a$7044 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v))) (_a$7045 ")")) (jolt-invoke _a$7040 _a$7041 _a$7042 _a$7043 _a$7044 _a$7045))) (jolt-invoke (var-deref "clojure.core" "str") "(keyword #f " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v)) ")"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") v)) (jolt-invoke (var-deref "clojure.core" "str") "(integer->char " (jolt-invoke (var-deref "jolt.host" "form-char-code") v) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7046 (jolt-invoke (var-deref "clojure.core" "str") "emit-const: unsupported literal " (jolt-invoke (var-deref "clojure.core" "pr-str") v))) (_a$7047 (jolt-hash-map))) (jolt-ex-info _a$7046 _a$7047))) jolt-nil))))))))))) emit-const))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-ordered" (letrec ((emit-ordered (lambda (ctor arg-strs) (let fnrec7046 ((ctor ctor) (arg-strs arg-strs)) (if (< (jolt-count arg-strs) 2) (jolt-invoke (var-deref "clojure.core" "str") "(" ctor (if (jolt-empty? arg-strs) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " arg-strs))) ")") (let* ((tmps (jolt-map (lambda (_) (let fnrec7047 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_o$"))) arg-strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7048 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps arg-strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") (" ctor " " (jolt-invoke (var-deref "clojure.string" "join") " " tmps) "))"))))))) emit-ordered))) + (def-var! "jolt.backend-scheme" "emit-ordered" (letrec ((emit-ordered (lambda (ctor arg-strs) (let fnrec7048 ((ctor ctor) (arg-strs arg-strs)) (if (< (jolt-count arg-strs) 2) (jolt-invoke (var-deref "clojure.core" "str") "(" ctor (if (jolt-empty? arg-strs) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " arg-strs))) ")") (let* ((tmps (jolt-map (lambda (_) (let fnrec7049 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_o$"))) arg-strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7050 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps arg-strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") (" ctor " " (jolt-invoke (var-deref "clojure.string" "join") " " tmps) "))"))))))) emit-ordered))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "side-effect-free?" (letrec ((side-effect-free? (lambda (n) (let fnrec7049 ((n n)) (let* ((_a$7055 (let* ((_o$7050 (keyword #f "const")) (_o$7051 (keyword #f "local")) (_o$7052 (keyword #f "var")) (_o$7053 (keyword #f "the-var")) (_o$7054 (keyword #f "quote"))) (jolt-hash-set _o$7050 _o$7051 _o$7052 _o$7053 _o$7054))) (_a$7056 (jolt-get n (keyword #f "op")))) (jolt-contains? _a$7055 _a$7056)))))) side-effect-free?))) + (def-var! "jolt.backend-scheme" "side-effect-free?" (letrec ((side-effect-free? (lambda (n) (let fnrec7051 ((n n)) (let* ((_a$7057 (let* ((_o$7052 (keyword #f "const")) (_o$7053 (keyword #f "local")) (_o$7054 (keyword #f "var")) (_o$7055 (keyword #f "the-var")) (_o$7056 (keyword #f "quote"))) (jolt-hash-set _o$7052 _o$7053 _o$7054 _o$7055 _o$7056))) (_a$7058 (jolt-get n (keyword #f "op")))) (jolt-contains? _a$7057 _a$7058)))))) side-effect-free?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "needs-order?" (letrec ((needs-order? (lambda (nodes) (let fnrec7057 ((nodes nodes)) (> (jolt-count (jolt-remove (var-deref "jolt.backend-scheme" "side-effect-free?") nodes)) 1))))) needs-order?))) + (def-var! "jolt.backend-scheme" "needs-order?" (letrec ((needs-order? (lambda (nodes) (let fnrec7059 ((nodes nodes)) (> (jolt-count (jolt-remove (var-deref "jolt.backend-scheme" "side-effect-free?") nodes)) 1))))) needs-order?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "ordered-call" (letrec ((ordered-call (lambda (nodes strs build) (let fnrec7058 ((nodes nodes) (strs strs) (build build)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "needs-order?") nodes)) (let* ((tmps (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (_) (let fnrec7059 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_a$"))) strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7060 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") " (jolt-invoke build tmps) ")")) (jolt-invoke build strs)))))) ordered-call))) + (def-var! "jolt.backend-scheme" "ordered-call" (letrec ((ordered-call (lambda (nodes strs build) (let fnrec7060 ((nodes nodes) (strs strs) (build build)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "needs-order?") nodes)) (let* ((tmps (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (_) (let fnrec7061 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_a$"))) strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7062 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") " (jolt-invoke build tmps) ")")) (jolt-invoke build strs)))))) ordered-call))) (guard (e (#t #f)) (declare-var! "jolt.backend-scheme" "emit-quoted")) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-quoted-map" (letrec ((emit-quoted-map (lambda (pairs) (let fnrec7061 ((pairs pairs)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "mapcat") (lambda (p) (let fnrec7062 ((p p)) (let* ((_o$7063 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 0))) (_o$7064 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 1)))) (jolt-vector _o$7063 _o$7064)))) pairs)) ")"))))) emit-quoted-map))) + (def-var! "jolt.backend-scheme" "emit-quoted-map" (letrec ((emit-quoted-map (lambda (pairs) (let fnrec7063 ((pairs pairs)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "mapcat") (lambda (p) (let fnrec7064 ((p p)) (let* ((_o$7065 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 0))) (_o$7066 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 1)))) (jolt-vector _o$7065 _o$7066)))) pairs)) ")"))))) emit-quoted-map))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-quoted-map-value" (letrec ((emit-quoted-map-value (lambda (m) (let fnrec7065 ((m m)) (let* ((pairs (jolt-invoke (var-deref "clojure.core" "sort") (let* ((_a$7071 (lambda (k) (let fnrec7066 ((k k)) (let* ((_a$7067 (var-deref "clojure.core" "str")) (_a$7068 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") k)) (_a$7069 " ") (_a$7070 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get m k)))) (jolt-invoke _a$7067 _a$7068 _a$7069 _a$7070))))) (_a$7072 (jolt-keys m))) (jolt-map _a$7071 _a$7072))))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " pairs) ")")))))) emit-quoted-map-value))) + (def-var! "jolt.backend-scheme" "emit-quoted-map-value" (letrec ((emit-quoted-map-value (lambda (m) (let fnrec7067 ((m m)) (let* ((pairs (jolt-invoke (var-deref "clojure.core" "sort") (let* ((_a$7073 (lambda (k) (let fnrec7068 ((k k)) (let* ((_a$7069 (var-deref "clojure.core" "str")) (_a$7070 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") k)) (_a$7071 " ") (_a$7072 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get m k)))) (jolt-invoke _a$7069 _a$7070 _a$7071 _a$7072))))) (_a$7074 (jolt-keys m))) (jolt-map _a$7073 _a$7074))))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " pairs) ")")))))) emit-quoted-map-value))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-quoted" (letrec ((emit-quoted (lambda (form) (let fnrec7073 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") form)) (sns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form))) (if (jolt-truthy? (let* ((and__25__auto m)) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto))) (let* ((_a$7074 (var-deref "clojure.core" "str")) (_a$7075 "(jolt-symbol/meta ") (_a$7076 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7077 " ") (_a$7078 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7079 " ") (_a$7080 (emit-quoted m)) (_a$7081 ")")) (jolt-invoke _a$7074 _a$7075 _a$7076 _a$7077 _a$7078 _a$7079 _a$7080 _a$7081)) (let* ((_a$7082 (var-deref "clojure.core" "str")) (_a$7083 "(jolt-symbol ") (_a$7084 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7085 " ") (_a$7086 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7087 ")")) (jolt-invoke _a$7082 _a$7083 _a$7084 _a$7085 _a$7086 _a$7087)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-set-items") form)))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-elements") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map") (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "jolt.host" "form-regex-source") form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map-value") form) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "vector?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "seq?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7088 (jolt-invoke (var-deref "clojure.core" "str") "emit-quoted: unsupported quoted form " (jolt-invoke (var-deref "clojure.core" "pr-str") form))) (_a$7089 (jolt-hash-map))) (jolt-ex-info _a$7088 _a$7089))) jolt-nil))))))))))))))))) emit-quoted))) + (def-var! "jolt.backend-scheme" "emit-quoted" (letrec ((emit-quoted (lambda (form) (let fnrec7075 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") form)) (sns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form))) (if (jolt-truthy? (let* ((and__25__auto m)) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto))) (let* ((_a$7076 (var-deref "clojure.core" "str")) (_a$7077 "(jolt-symbol/meta ") (_a$7078 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7079 " ") (_a$7080 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7081 " ") (_a$7082 (emit-quoted m)) (_a$7083 ")")) (jolt-invoke _a$7076 _a$7077 _a$7078 _a$7079 _a$7080 _a$7081 _a$7082 _a$7083)) (let* ((_a$7084 (var-deref "clojure.core" "str")) (_a$7085 "(jolt-symbol ") (_a$7086 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7087 " ") (_a$7088 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7089 ")")) (jolt-invoke _a$7084 _a$7085 _a$7086 _a$7087 _a$7088 _a$7089)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-set-items") form)))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-elements") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map") (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "jolt.host" "form-regex-source") form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map-value") form) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "vector?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "seq?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7090 (jolt-invoke (var-deref "clojure.core" "str") "emit-quoted: unsupported quoted form " (jolt-invoke (var-deref "clojure.core" "pr-str") form))) (_a$7091 (jolt-hash-map))) (jolt-ex-info _a$7090 _a$7091))) jolt-nil))))))))))))))))) emit-quoted))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "jmeta-nonempty?" (letrec ((jmeta-nonempty? (lambda (m) (let fnrec7090 ((m m)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") m))) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto)))))) jmeta-nonempty?))) + (def-var! "jolt.backend-scheme" "jmeta-nonempty?" (letrec ((jmeta-nonempty? (lambda (m) (let fnrec7092 ((m m)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") m))) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto)))))) jmeta-nonempty?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-def-meta" (letrec ((emit-def-meta (lambda (node) (let fnrec7091 ((node node)) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "meta")))))))) emit-def-meta))) + (def-var! "jolt.backend-scheme" "emit-def-meta" (letrec ((emit-def-meta (lambda (node) (let fnrec7093 ((node node)) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "meta")))))))) emit-def-meta))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-binding" (letrec ((emit-binding (lambda (b) (let fnrec7092 ((b b)) (let* ((_a$7093 (var-deref "clojure.core" "str")) (_a$7094 "(") (_a$7095 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth b 0))) (_a$7096 " ") (_a$7097 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth b 1))) (_a$7098 ")")) (jolt-invoke _a$7093 _a$7094 _a$7095 _a$7096 _a$7097 _a$7098)))))) emit-binding))) + (def-var! "jolt.backend-scheme" "emit-binding" (letrec ((emit-binding (lambda (b) (let fnrec7094 ((b b)) (let* ((_a$7095 (var-deref "clojure.core" "str")) (_a$7096 "(") (_a$7097 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth b 0))) (_a$7098 " ") (_a$7099 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth b 1))) (_a$7100 ")")) (jolt-invoke _a$7095 _a$7096 _a$7097 _a$7098 _a$7099 _a$7100)))))) emit-binding))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-let" (letrec ((emit-let (lambda (node) (let fnrec7099 ((node node)) (let* ((kw (if (jolt-truthy? (jolt-get node (keyword #f "letrec"))) "letrec*" "let*"))) (let* ((_a$7100 (var-deref "clojure.core" "str")) (_a$7101 "(") (_a$7102 kw) (_a$7103 " (") (_a$7104 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "emit-binding") (jolt-get node (keyword #f "bindings"))))) (_a$7105 ") ") (_a$7106 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$7107 ")")) (jolt-invoke _a$7100 _a$7101 _a$7102 _a$7103 _a$7104 _a$7105 _a$7106 _a$7107))))))) emit-let))) + (def-var! "jolt.backend-scheme" "emit-let" (letrec ((emit-let (lambda (node) (let fnrec7101 ((node node)) (let* ((kw (if (jolt-truthy? (jolt-get node (keyword #f "letrec"))) "letrec*" "let*"))) (let* ((_a$7102 (var-deref "clojure.core" "str")) (_a$7103 "(") (_a$7104 kw) (_a$7105 " (") (_a$7106 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "emit-binding") (jolt-get node (keyword #f "bindings"))))) (_a$7107 ") ") (_a$7108 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$7109 ")")) (jolt-invoke _a$7102 _a$7103 _a$7104 _a$7105 _a$7106 _a$7107 _a$7108 _a$7109))))))) emit-let))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-loop" (letrec ((emit-loop (lambda (node) (let fnrec7108 ((node node)) (let* ((label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "loop")) (pairs (jolt-get node (keyword #f "bindings"))) (names (jolt-map (lambda (p__88_) (let fnrec7109 ((p__88_ p__88_)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth p__88_ 0)))) pairs)) (inits (jolt-map (lambda (p__89_) (let fnrec7110 ((p__89_ p__89_)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth p__89_ 1)))) pairs)) (seq-bs (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n i) (let fnrec7111 ((n n) (i i)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " i ")"))) names inits))) (rebinds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n) (let fnrec7112 ((n n)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " n ")"))) names))) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings")))))))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" seq-bs ") (let " label " (" rebinds ") " body "))")))))) emit-loop))) + (def-var! "jolt.backend-scheme" "emit-loop" (letrec ((emit-loop (lambda (node) (let fnrec7110 ((node node)) (let* ((label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "loop")) (pairs (jolt-get node (keyword #f "bindings"))) (names (jolt-map (lambda (p__88_) (let fnrec7111 ((p__88_ p__88_)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth p__88_ 0)))) pairs)) (inits (jolt-map (lambda (p__89_) (let fnrec7112 ((p__89_ p__89_)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth p__89_ 1)))) pairs)) (seq-bs (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n i) (let fnrec7113 ((n n) (i i)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " i ")"))) names inits))) (rebinds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n) (let fnrec7114 ((n n)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " n ")"))) names))) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings")))))))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" seq-bs ") (let " label " (" rebinds ") " body "))")))))) emit-loop))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.backend-scheme" "ffi-types" (let* ((_o$7113 "int") (_o$7114 "int") (_o$7115 "uint") (_o$7116 "unsigned-int") (_o$7117 "long") (_o$7118 "long") (_o$7119 "ulong") (_o$7120 "unsigned-long") (_o$7121 "int64") (_o$7122 "integer-64") (_o$7123 "uint64") (_o$7124 "unsigned-64") (_o$7125 "size_t") (_o$7126 "size_t") (_o$7127 "ssize_t") (_o$7128 "ssize_t") (_o$7129 "iptr") (_o$7130 "iptr") (_o$7131 "uptr") (_o$7132 "uptr") (_o$7133 "double") (_o$7134 "double") (_o$7135 "float") (_o$7136 "float") (_o$7137 "pointer") (_o$7138 "void*") (_o$7139 "void*") (_o$7140 "void*") (_o$7141 "string") (_o$7142 "string") (_o$7143 "void") (_o$7144 "void") (_o$7145 "uint8") (_o$7146 "unsigned-8") (_o$7147 "u8") (_o$7148 "unsigned-8") (_o$7149 "byte") (_o$7150 "unsigned-8") (_o$7151 "char") (_o$7152 "char")) (jolt-hash-map _o$7113 _o$7114 _o$7115 _o$7116 _o$7117 _o$7118 _o$7119 _o$7120 _o$7121 _o$7122 _o$7123 _o$7124 _o$7125 _o$7126 _o$7127 _o$7128 _o$7129 _o$7130 _o$7131 _o$7132 _o$7133 _o$7134 _o$7135 _o$7136 _o$7137 _o$7138 _o$7139 _o$7140 _o$7141 _o$7142 _o$7143 _o$7144 _o$7145 _o$7146 _o$7147 _o$7148 _o$7149 _o$7150 _o$7151 _o$7152)) (let* ((_o$7153 (keyword #f "private")) (_o$7154 #t)) (jolt-hash-map _o$7153 _o$7154)))) + (def-var-with-meta! "jolt.backend-scheme" "ffi-types" (let* ((_o$7115 "int") (_o$7116 "int") (_o$7117 "uint") (_o$7118 "unsigned-int") (_o$7119 "long") (_o$7120 "long") (_o$7121 "ulong") (_o$7122 "unsigned-long") (_o$7123 "int64") (_o$7124 "integer-64") (_o$7125 "uint64") (_o$7126 "unsigned-64") (_o$7127 "size_t") (_o$7128 "size_t") (_o$7129 "ssize_t") (_o$7130 "ssize_t") (_o$7131 "iptr") (_o$7132 "iptr") (_o$7133 "uptr") (_o$7134 "uptr") (_o$7135 "double") (_o$7136 "double") (_o$7137 "float") (_o$7138 "float") (_o$7139 "pointer") (_o$7140 "void*") (_o$7141 "void*") (_o$7142 "void*") (_o$7143 "string") (_o$7144 "string") (_o$7145 "void") (_o$7146 "void") (_o$7147 "uint8") (_o$7148 "unsigned-8") (_o$7149 "u8") (_o$7150 "unsigned-8") (_o$7151 "byte") (_o$7152 "unsigned-8") (_o$7153 "char") (_o$7154 "char")) (jolt-hash-map _o$7115 _o$7116 _o$7117 _o$7118 _o$7119 _o$7120 _o$7121 _o$7122 _o$7123 _o$7124 _o$7125 _o$7126 _o$7127 _o$7128 _o$7129 _o$7130 _o$7131 _o$7132 _o$7133 _o$7134 _o$7135 _o$7136 _o$7137 _o$7138 _o$7139 _o$7140 _o$7141 _o$7142 _o$7143 _o$7144 _o$7145 _o$7146 _o$7147 _o$7148 _o$7149 _o$7150 _o$7151 _o$7152 _o$7153 _o$7154)) (let* ((_o$7155 (keyword #f "private")) (_o$7156 #t)) (jolt-hash-map _o$7155 _o$7156)))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "ffi-type->chez" (letrec ((ffi-type->chez (lambda (t) (let fnrec7155 ((t t)) (let* ((or__26__auto (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-types") t))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-throw (let* ((_a$7156 (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi: unknown foreign type :" t)) (_a$7157 (jolt-hash-map))) (jolt-ex-info _a$7156 _a$7157))))))))) ffi-type->chez))) + (def-var! "jolt.backend-scheme" "ffi-type->chez" (letrec ((ffi-type->chez (lambda (t) (let fnrec7157 ((t t)) (let* ((or__26__auto (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-types") t))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-throw (let* ((_a$7158 (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi: unknown foreign type :" t)) (_a$7159 (jolt-hash-map))) (jolt-ex-info _a$7158 _a$7159))))))))) ffi-type->chez))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-ffi-fn" (letrec ((emit-ffi-fn (lambda (node) (let fnrec7158 ((node node)) (let* ((_a$7159 (var-deref "clojure.core" "str")) (_a$7160 "(foreign-procedure ") (_a$7161 (if (jolt-truthy? (jolt-get node (keyword #f "blocking"))) "__collect_safe " jolt-nil)) (_a$7162 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "csym")))) (_a$7163 " (") (_a$7164 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7165 ") ") (_a$7166 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7167 ")")) (jolt-invoke _a$7159 _a$7160 _a$7161 _a$7162 _a$7163 _a$7164 _a$7165 _a$7166 _a$7167)))))) emit-ffi-fn))) + (def-var! "jolt.backend-scheme" "emit-ffi-fn" (letrec ((emit-ffi-fn (lambda (node) (let fnrec7160 ((node node)) (let* ((_a$7161 (var-deref "clojure.core" "str")) (_a$7162 "(foreign-procedure ") (_a$7163 (if (jolt-truthy? (jolt-get node (keyword #f "blocking"))) "__collect_safe " jolt-nil)) (_a$7164 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "csym")))) (_a$7165 " (") (_a$7166 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7167 ") ") (_a$7168 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7169 ")")) (jolt-invoke _a$7161 _a$7162 _a$7163 _a$7164 _a$7165 _a$7166 _a$7167 _a$7168 _a$7169)))))) emit-ffi-fn))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-ffi-callable" (letrec ((emit-ffi-callable (lambda (node) (let fnrec7168 ((node node)) (let* ((_a$7169 (var-deref "clojure.core" "str")) (_a$7170 "(jolt-ffi-register-callable! (foreign-callable ") (_a$7171 (if (jolt-truthy? (jolt-get node (keyword #f "collect-safe"))) "__collect_safe " jolt-nil)) (_a$7172 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "fn")))) (_a$7173 " (") (_a$7174 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7175 ") ") (_a$7176 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7177 "))")) (jolt-invoke _a$7169 _a$7170 _a$7171 _a$7172 _a$7173 _a$7174 _a$7175 _a$7176 _a$7177)))))) emit-ffi-callable))) + (def-var! "jolt.backend-scheme" "emit-ffi-callable" (letrec ((emit-ffi-callable (lambda (node) (let fnrec7170 ((node node)) (let* ((_a$7171 (var-deref "clojure.core" "str")) (_a$7172 "(jolt-ffi-register-callable! (foreign-callable ") (_a$7173 (if (jolt-truthy? (jolt-get node (keyword #f "collect-safe"))) "__collect_safe " jolt-nil)) (_a$7174 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "fn")))) (_a$7175 " (") (_a$7176 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7177 ") ") (_a$7178 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7179 "))")) (jolt-invoke _a$7171 _a$7172 _a$7173 _a$7174 _a$7175 _a$7176 _a$7177 _a$7178 _a$7179)))))) emit-ffi-callable))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-recur" (letrec ((emit-recur (lambda (node) (let fnrec7178 ((node node)) (begin (if (jolt-not (var-deref "jolt.backend-scheme" "*recur-target*")) (jolt-throw (jolt-ex-info "emit: recur outside a loop/fn target" (jolt-hash-map))) jolt-nil) (let* ((arg-nodes (jolt-get node (keyword #f "args")))) (let* ((_a$7180 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7181 arg-nodes) (_a$7182 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (_a$7183 (lambda (as) (let fnrec7179 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" (var-deref "jolt.backend-scheme" "*recur-target*") " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) (jolt-invoke _a$7180 _a$7181 _a$7182 _a$7183)))))))) emit-recur))) + (def-var! "jolt.backend-scheme" "emit-recur" (letrec ((emit-recur (lambda (node) (let fnrec7180 ((node node)) (begin (if (jolt-not (var-deref "jolt.backend-scheme" "*recur-target*")) (jolt-throw (jolt-ex-info "emit: recur outside a loop/fn target" (jolt-hash-map))) jolt-nil) (let* ((arg-nodes (jolt-get node (keyword #f "args")))) (let* ((_a$7182 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7183 arg-nodes) (_a$7184 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (_a$7185 (lambda (as) (let fnrec7181 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" (var-deref "jolt.backend-scheme" "*recur-target*") " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) (jolt-invoke _a$7182 _a$7183 _a$7184 _a$7185)))))))) emit-recur))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "nhint-init" (letrec ((nhint-init (lambda (nh orig munged) (let fnrec7184 ((nh nh) (orig orig) (munged munged)) (let* ((k (jolt-get nh orig))) (if (jolt= k (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " munged ")") (if (jolt= k (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " munged ")") (if (jolt-truthy? (keyword #f "else")) munged jolt-nil)))))))) nhint-init))) + (def-var! "jolt.backend-scheme" "nhint-init" (letrec ((nhint-init (lambda (nh orig munged) (let fnrec7186 ((nh nh) (orig orig) (munged munged)) (let* ((k (jolt-get nh orig))) (if (jolt= k (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " munged ")") (if (jolt= k (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " munged ")") (if (jolt-truthy? (keyword #f "else")) munged jolt-nil)))))))) nhint-init))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-arity-clause" (letrec ((emit-arity-clause (lambda (a) (let fnrec7185 ((a a)) (let* ((orig (jolt-get a (keyword #f "params"))) (nh (let* ((_a$7186 (jolt-hash-map)) (_a$7187 (jolt-get a (keyword #f "nhints")))) (jolt-into _a$7186 _a$7187))) (params (jolt-map (var-deref "jolt.backend-scheme" "munge-name") orig)) (restp (let* ((temp__27__auto (jolt-get a (keyword #f "rest")))) (if (jolt-truthy? temp__27__auto) (let* ((r temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") r)) jolt-nil))) (label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "fnrec")) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get a (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (paramlist (if (jolt-truthy? (let* ((and__25__auto restp)) (if (jolt-truthy? and__25__auto) (jolt-empty? params) and__25__auto))) restp (if (jolt-truthy? restp) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) " . " restp ")") (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) ")") jolt-nil)))) (pbind (jolt-map (lambda (o p) (let fnrec7188 ((o o) (p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " (jolt-invoke (var-deref "jolt.backend-scheme" "nhint-init") nh o p) ")"))) orig params)) (binds (if (jolt-truthy? restp) (jolt-concat pbind (jolt-vector (jolt-invoke (var-deref "clojure.core" "str") "(" restp " (list->cseq " restp "))"))) pbind)) (lett (jolt-invoke (var-deref "clojure.core" "str") "(let " label " (" (jolt-invoke (var-deref "clojure.string" "join") " " binds) ") " body ")")) (ret (jolt-get a (keyword #f "ret-nhint")))) (let* ((_o$7189 paramlist) (_o$7190 (if (jolt= ret (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " lett ")") (if (jolt= ret (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " lett ")") (if (jolt-truthy? (keyword #f "else")) lett jolt-nil))))) (jolt-vector _o$7189 _o$7190))))))) emit-arity-clause))) + (def-var! "jolt.backend-scheme" "emit-arity-clause" (letrec ((emit-arity-clause (lambda (a) (let fnrec7187 ((a a)) (let* ((orig (jolt-get a (keyword #f "params"))) (nh (let* ((_a$7188 (jolt-hash-map)) (_a$7189 (jolt-get a (keyword #f "nhints")))) (jolt-into _a$7188 _a$7189))) (params (jolt-map (var-deref "jolt.backend-scheme" "munge-name") orig)) (restp (let* ((temp__27__auto (jolt-get a (keyword #f "rest")))) (if (jolt-truthy? temp__27__auto) (let* ((r temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") r)) jolt-nil))) (label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "fnrec")) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get a (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (paramlist (if (jolt-truthy? (let* ((and__25__auto restp)) (if (jolt-truthy? and__25__auto) (jolt-empty? params) and__25__auto))) restp (if (jolt-truthy? restp) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) " . " restp ")") (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) ")") jolt-nil)))) (pbind (jolt-map (lambda (o p) (let fnrec7190 ((o o) (p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " (jolt-invoke (var-deref "jolt.backend-scheme" "nhint-init") nh o p) ")"))) orig params)) (binds (if (jolt-truthy? restp) (jolt-concat pbind (jolt-vector (jolt-invoke (var-deref "clojure.core" "str") "(" restp " (list->cseq " restp "))"))) pbind)) (lett (jolt-invoke (var-deref "clojure.core" "str") "(let " label " (" (jolt-invoke (var-deref "clojure.string" "join") " " binds) ") " body ")")) (ret (jolt-get a (keyword #f "ret-nhint")))) (let* ((_o$7191 paramlist) (_o$7192 (if (jolt= ret (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " lett ")") (if (jolt= ret (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " lett ")") (if (jolt-truthy? (keyword #f "else")) lett jolt-nil))))) (jolt-vector _o$7191 _o$7192))))))) emit-arity-clause))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-fn" (letrec ((emit-fn (lambda (node) (let fnrec7191 ((node node)) (let* ((arities (jolt-get node (keyword #f "arities"))) (self (let* ((temp__27__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__27__auto) (let* ((nm temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm)) jolt-nil))) (clauses (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*known-procs*") (if (jolt-truthy? self) (jolt-conj (var-deref "jolt.backend-scheme" "*known-procs*") self) (var-deref "jolt.backend-scheme" "*known-procs*"))))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit-arity-clause") arities)) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (_lambda (if (jolt= 1 (jolt-count clauses)) (let* ((c (jolt-first clauses))) (let* ((_a$7192 (var-deref "clojure.core" "str")) (_a$7193 "(lambda ") (_a$7194 (jolt-nth c 0)) (_a$7195 " ") (_a$7196 (jolt-nth c 1)) (_a$7197 ")")) (jolt-invoke _a$7192 _a$7193 _a$7194 _a$7195 _a$7196 _a$7197))) (jolt-invoke (var-deref "clojure.core" "str") "(case-lambda " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (c) (let fnrec7198 ((c c)) (let* ((_a$7199 (var-deref "clojure.core" "str")) (_a$7200 "(") (_a$7201 (jolt-nth c 0)) (_a$7202 " ") (_a$7203 (jolt-nth c 1)) (_a$7204 ")")) (jolt-invoke _a$7199 _a$7200 _a$7201 _a$7202 _a$7203 _a$7204)))) clauses)) ")")))) (let* ((temp__16__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((nm temp__16__auto)) (let* ((m (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm))) (jolt-invoke (var-deref "clojure.core" "str") "(letrec ((" m " " _lambda ")) " m ")"))) _lambda))))))) emit-fn))) + (def-var! "jolt.backend-scheme" "emit-fn" (letrec ((emit-fn (lambda (node) (let fnrec7193 ((node node)) (let* ((arities (jolt-get node (keyword #f "arities"))) (self (let* ((temp__27__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__27__auto) (let* ((nm temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm)) jolt-nil))) (clauses (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*known-procs*") (if (jolt-truthy? self) (jolt-conj (var-deref "jolt.backend-scheme" "*known-procs*") self) (var-deref "jolt.backend-scheme" "*known-procs*"))))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit-arity-clause") arities)) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (_lambda (if (jolt= 1 (jolt-count clauses)) (let* ((c (jolt-first clauses))) (let* ((_a$7194 (var-deref "clojure.core" "str")) (_a$7195 "(lambda ") (_a$7196 (jolt-nth c 0)) (_a$7197 " ") (_a$7198 (jolt-nth c 1)) (_a$7199 ")")) (jolt-invoke _a$7194 _a$7195 _a$7196 _a$7197 _a$7198 _a$7199))) (jolt-invoke (var-deref "clojure.core" "str") "(case-lambda " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (c) (let fnrec7200 ((c c)) (let* ((_a$7201 (var-deref "clojure.core" "str")) (_a$7202 "(") (_a$7203 (jolt-nth c 0)) (_a$7204 " ") (_a$7205 (jolt-nth c 1)) (_a$7206 ")")) (jolt-invoke _a$7201 _a$7202 _a$7203 _a$7204 _a$7205 _a$7206)))) clauses)) ")")))) (let* ((temp__16__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((nm temp__16__auto)) (let* ((m (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm))) (jolt-invoke (var-deref "clojure.core" "str") "(letrec ((" m " " _lambda ")) " m ")"))) _lambda))))))) emit-fn))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "native-op" (letrec ((native-op (lambda (fnode nargs) (let fnrec7205 ((fnode fnode) (nargs nargs)) (let* ((nm (let* ((G__134 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__134 (keyword #f "var")) (if (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) (jolt-get fnode (keyword #f "name")) jolt-nil) (if (jolt= G__134 (keyword #f "host")) (jolt-get fnode (keyword #f "name")) jolt-nil)))) (op (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "native-ops") nm) jolt-nil)) (arity-ok (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "op-arity") nm) jolt-nil))) (if (jolt-nil? op) jolt-nil (if (jolt-truthy? (let* ((and__25__auto arity-ok)) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke arity-ok nargs)) and__25__auto))) jolt-nil (if (jolt-truthy? (keyword #f "else")) op jolt-nil)))))))) native-op))) + (def-var! "jolt.backend-scheme" "native-op" (letrec ((native-op (lambda (fnode nargs) (let fnrec7207 ((fnode fnode) (nargs nargs)) (let* ((nm (let* ((G__134 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__134 (keyword #f "var")) (if (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) (jolt-get fnode (keyword #f "name")) jolt-nil) (if (jolt= G__134 (keyword #f "host")) (jolt-get fnode (keyword #f "name")) jolt-nil)))) (op (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "native-ops") nm) jolt-nil)) (arity-ok (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "op-arity") nm) jolt-nil))) (if (jolt-nil? op) jolt-nil (if (jolt-truthy? (let* ((and__25__auto arity-ok)) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke arity-ok nargs)) and__25__auto))) jolt-nil (if (jolt-truthy? (keyword #f "else")) op jolt-nil)))))))) native-op))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "ifn-kind" (letrec ((ifn-kind (lambda (fnode) (let fnrec7206 ((fnode fnode)) (let* ((G__135 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__135 (keyword #f "const")) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val")))) (keyword #f "keyword") jolt-nil) (if (let* ((or__26__auto (jolt= G__135 (keyword #f "map")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= G__135 (keyword #f "set")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= G__135 (keyword #f "vector")))))) (keyword #f "coll") jolt-nil))))))) ifn-kind))) + (def-var! "jolt.backend-scheme" "ifn-kind" (letrec ((ifn-kind (lambda (fnode) (let fnrec7208 ((fnode fnode)) (let* ((G__135 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__135 (keyword #f "const")) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val")))) (keyword #f "keyword") jolt-nil) (if (let* ((or__26__auto (jolt= G__135 (keyword #f "map")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= G__135 (keyword #f "set")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= G__135 (keyword #f "vector")))))) (keyword #f "coll") jolt-nil))))))) ifn-kind))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "stdlib-var?" (letrec ((stdlib-var? (lambda (n) (let fnrec7207 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.string" "starts-with?") (let* ((or__26__auto (jolt-get n (keyword #f "ns")))) (if (jolt-truthy? or__26__auto) or__26__auto "")) "clojure.") and__25__auto)))))) stdlib-var?))) + (def-var! "jolt.backend-scheme" "stdlib-var?" (letrec ((stdlib-var? (lambda (n) (let fnrec7209 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.string" "starts-with?") (let* ((or__26__auto (jolt-get n (keyword #f "ns")))) (if (jolt-truthy? or__26__auto) or__26__auto "")) "clojure.") and__25__auto)))))) stdlib-var?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-numeric" (letrec ((emit-numeric (lambda (kind nm args order-args) (let fnrec7208 ((kind kind) (nm nm) (args args) (order-args order-args)) (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "inc") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl+ " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "dec") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl- " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt= nm "inc"))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= nm "unchecked-inc"))) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fx1+ " (jolt-first args) ")") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt= nm "dec"))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= nm "unchecked-dec"))) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fx1- " (jolt-first args) ")") (if (jolt-truthy? (keyword #f "else")) (let* ((op (let* ((G__136 kind)) (if (jolt= G__136 (keyword #f "double")) (jolt-invoke (var-deref "jolt.backend-scheme" "dbl-ops") nm) (if (jolt= G__136 (keyword #f "long")) (jolt-invoke (var-deref "jolt.backend-scheme" "lng-ops") nm) (if (jolt= G__136 (keyword #f "bigdec")) (jolt-invoke (var-deref "jolt.backend-scheme" "bd-ops") nm) (jolt-throw (let* ((_a$7209 (jolt-invoke (var-deref "clojure.core" "str") "No matching clause: " G__136)) (_a$7210 (jolt-hash-map))) (jolt-ex-info _a$7209 _a$7210))))))))) (jolt-invoke order-args (lambda (as) (let fnrec7211 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" op " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) jolt-nil))))))))) emit-numeric))) + (def-var! "jolt.backend-scheme" "emit-numeric" (letrec ((emit-numeric (lambda (kind nm args order-args) (let fnrec7210 ((kind kind) (nm nm) (args args) (order-args order-args)) (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "inc") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl+ " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "dec") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl- " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt= nm "inc"))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= nm "unchecked-inc"))) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fx1+ " (jolt-first args) ")") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt= nm "dec"))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= nm "unchecked-dec"))) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fx1- " (jolt-first args) ")") (if (jolt-truthy? (keyword #f "else")) (let* ((op (let* ((G__136 kind)) (if (jolt= G__136 (keyword #f "double")) (jolt-invoke (var-deref "jolt.backend-scheme" "dbl-ops") nm) (if (jolt= G__136 (keyword #f "long")) (jolt-invoke (var-deref "jolt.backend-scheme" "lng-ops") nm) (if (jolt= G__136 (keyword #f "bigdec")) (jolt-invoke (var-deref "jolt.backend-scheme" "bd-ops") nm) (jolt-throw (let* ((_a$7211 (jolt-invoke (var-deref "clojure.core" "str") "No matching clause: " G__136)) (_a$7212 (jolt-hash-map))) (jolt-ex-info _a$7211 _a$7212))))))))) (jolt-invoke order-args (lambda (as) (let fnrec7213 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" op " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) jolt-nil))))))))) emit-numeric))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "struct-field-index" (letrec ((struct-field-index (lambda (shape kw) (let fnrec7212 ((shape shape) (kw kw)) (if (jolt-truthy? shape) (let* ((i 0)) (let loop7213 ((i i)) (if (>= i (jolt-count shape)) jolt-nil (if (jolt= (jolt-nth shape i) kw) i (if (jolt-truthy? (keyword #f "else")) (loop7213 (jolt-inc i)) jolt-nil))))) jolt-nil))))) struct-field-index))) + (def-var! "jolt.backend-scheme" "struct-field-index" (letrec ((struct-field-index (lambda (shape kw) (let fnrec7214 ((shape shape) (kw kw)) (if (jolt-truthy? shape) (let* ((i 0)) (let loop7215 ((i i)) (if (>= i (jolt-count shape)) jolt-nil (if (jolt= (jolt-nth shape i) kw) i (if (jolt-truthy? (keyword #f "else")) (loop7215 (jolt-inc i)) jolt-nil))))) jolt-nil))))) struct-field-index))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-invoke" (letrec ((emit-invoke (lambda (node) (let fnrec7214 ((node node)) (let* ((fnode (jolt-get node (keyword #f "fn"))) (arg-nodes (jolt-get node (keyword #f "args"))) (args (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (nop (jolt-invoke (var-deref "jolt.backend-scheme" "native-op") fnode (jolt-count args))) (kind (jolt-invoke (var-deref "jolt.backend-scheme" "ifn-kind") fnode)) (order-args (lambda (build) (let fnrec7215 ((build build)) (jolt-invoke (var-deref "jolt.backend-scheme" "ordered-call") arg-nodes args build)))) (defstr (lambda (as) (let fnrec7216 ((as as)) (if (> (jolt-count as) 1) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-nth as 1)) "")))) (invoke (lambda () (let fnrec7217 () (let* ((_a$7219 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7220 (jolt-cons fnode arg-nodes)) (_a$7221 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$7222 (lambda (G__137) (let fnrec7218 ((G__137 G__137)) (let* ((G__138 G__137) (f (jolt-nth G__138 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__138 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-invoke " f (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "") ")")))))) (jolt-invoke _a$7219 _a$7220 _a$7221 _a$7222)))))) (if (jolt-truthy? (jolt-get node (keyword #f "devirt-type"))) (jolt-invoke order-args (lambda (as) (let fnrec7223 ((as as)) (let* ((r (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_r$"))) (let* ((_a$7224 (var-deref "clojure.core" "str")) (_a$7225 "(let* ((") (_a$7226 r) (_a$7227 " ") (_a$7228 (jolt-first as)) (_a$7229 ")) ") (_a$7230 "((devirt-resolve ") (_a$7231 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-type")))) (_a$7232 " ") (_a$7233 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-proto")))) (_a$7234 " ") (_a$7235 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-method")))) (_a$7236 " ") (_a$7237 r) (_a$7238 ") ") (_a$7239 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-cons r (jolt-rest as)))) (_a$7240 "))")) (jolt-invoke _a$7224 _a$7225 _a$7226 _a$7227 _a$7228 _a$7229 _a$7230 _a$7231 _a$7232 _a$7233 _a$7234 _a$7235 _a$7236 _a$7237 _a$7238 _a$7239 _a$7240)))))) (if (jolt-truthy? (jolt-get node (keyword #f "num-kind"))) (let* ((_a$7241 (var-deref "jolt.backend-scheme" "emit-numeric")) (_a$7242 (jolt-get node (keyword #f "num-kind"))) (_a$7243 (jolt-get fnode (keyword #f "name"))) (_a$7244 args) (_a$7245 order-args)) (jolt-invoke _a$7241 _a$7242 _a$7243 _a$7244 _a$7245)) (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "+") and__25__auto)) and__25__auto))) "0" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "*") and__25__auto)) and__25__auto))) "1" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "cmp1-ops") nop) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "clojure.core" "str") "(begin " (jolt-first args) " #t)") (if (jolt-truthy? nop) (jolt-invoke order-args (lambda (as) (let fnrec7246 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" nop " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))) (if (jolt= kind (keyword #f "keyword")) (let* ((recv (jolt-first arg-nodes)) (idx (if (let* ((and__25__auto (jolt= (keyword #f "struct") (jolt-get recv (keyword #f "hint"))))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count arg-nodes)) and__25__auto)) (let* ((_a$7247 (var-deref "jolt.backend-scheme" "struct-field-index")) (_a$7248 (jolt-get recv (keyword #f "shape"))) (_a$7249 (jolt-get fnode (keyword #f "val")))) (jolt-invoke _a$7247 _a$7248 _a$7249)) jolt-nil))) (if (jolt-truthy? idx) (jolt-invoke order-args (lambda (as) (let fnrec7250 ((as as)) (let* ((_a$7251 (var-deref "clojure.core" "str")) (_a$7252 "(jrec-field-at ") (_a$7253 (jolt-first as)) (_a$7254 " ") (_a$7255 idx) (_a$7256 " ") (_a$7257 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$7258 ")")) (jolt-invoke _a$7251 _a$7252 _a$7253 _a$7254 _a$7255 _a$7256 _a$7257 _a$7258))))) (jolt-invoke order-args (lambda (as) (let fnrec7259 ((as as)) (let* ((_a$7260 (var-deref "clojure.core" "str")) (_a$7261 "(jolt-get ") (_a$7262 (jolt-first as)) (_a$7263 " ") (_a$7264 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$7265 (jolt-invoke defstr as)) (_a$7266 ")")) (jolt-invoke _a$7260 _a$7261 _a$7262 _a$7263 _a$7264 _a$7265 _a$7266))))))) (if (jolt= kind (keyword #f "coll")) (let* ((_a$7268 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7269 (jolt-cons fnode arg-nodes)) (_a$7270 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$7271 (lambda (G__139) (let fnrec7267 ((G__139 G__139)) (let* ((G__140 G__139) (c (jolt-nth G__140 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__140 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-get " c " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))))) (jolt-invoke _a$7268 _a$7269 _a$7270 _a$7271)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") fnode))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$7278 (let* ((_a$7272 (var-deref "clojure.core" "str")) (_a$7273 "emit: unsupported stdlib fn `") (_a$7274 (jolt-get fnode (keyword #f "ns"))) (_a$7275 "/") (_a$7276 (jolt-get fnode (keyword #f "name"))) (_a$7277 "` (no core on Chez yet)")) (jolt-invoke _a$7272 _a$7273 _a$7274 _a$7275 _a$7276 _a$7277))) (_a$7279 (jolt-hash-map))) (jolt-ex-info _a$7278 _a$7279))) (if (jolt= (keyword #f "host-static") (jolt-get fnode (keyword #f "op"))) (jolt-invoke order-args (lambda (as) (let fnrec7280 ((as as)) (let* ((_a$7281 (var-deref "clojure.core" "str")) (_a$7282 "(host-static-call ") (_a$7283 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "class")))) (_a$7284 " ") (_a$7285 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "member")))) (_a$7286 (if (jolt-empty? as) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)))) (_a$7287 ")")) (jolt-invoke _a$7281 _a$7282 _a$7283 _a$7284 _a$7285 _a$7286 _a$7287))))) (if (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))) (jolt-throw (let* ((_a$7288 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host call `" (jolt-get fnode (keyword #f "name")) "`")) (_a$7289 (jolt-hash-map))) (jolt-ex-info _a$7288 _a$7289))) (if (jolt= (keyword #f "local") (jolt-get fnode (keyword #f "op"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "*known-procs*") (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name"))))) (jolt-invoke order-args (lambda (as) (let fnrec7290 ((as as)) (let* ((_a$7291 (var-deref "clojure.core" "str")) (_a$7292 "(") (_a$7293 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name")))) (_a$7294 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$7295 ")")) (jolt-invoke _a$7291 _a$7292 _a$7293 _a$7294 _a$7295))))) (jolt-invoke invoke)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (let* ((_a$7296 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$7297 (jolt-get fnode (keyword #f "ns"))) (_a$7298 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7296 _a$7297 _a$7298)))) (if (jolt-truthy? and__25__auto) (let* ((_a$7299 (var-deref "jolt.backend-scheme" "direct-link-fn?")) (_a$7300 (jolt-get fnode (keyword #f "ns"))) (_a$7301 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7299 _a$7300 _a$7301)) and__25__auto)) and__25__auto))) (jolt-invoke order-args (lambda (as) (let fnrec7302 ((as as)) (let* ((_a$7306 (var-deref "clojure.core" "str")) (_a$7307 "(") (_a$7308 (let* ((_a$7303 (var-deref "jolt.backend-scheme" "dl-name")) (_a$7304 (jolt-get fnode (keyword #f "ns"))) (_a$7305 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7303 _a$7304 _a$7305))) (_a$7309 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$7310 ")")) (jolt-invoke _a$7306 _a$7307 _a$7308 _a$7309 _a$7310))))) (if (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))) (jolt-invoke invoke) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke invoke) jolt-nil)))))))))))))))))))) emit-invoke))) + (def-var! "jolt.backend-scheme" "emit-invoke" (letrec ((emit-invoke (lambda (node) (let fnrec7216 ((node node)) (let* ((fnode (jolt-get node (keyword #f "fn"))) (arg-nodes (jolt-get node (keyword #f "args"))) (args (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (nop (jolt-invoke (var-deref "jolt.backend-scheme" "native-op") fnode (jolt-count args))) (kind (jolt-invoke (var-deref "jolt.backend-scheme" "ifn-kind") fnode)) (order-args (lambda (build) (let fnrec7217 ((build build)) (jolt-invoke (var-deref "jolt.backend-scheme" "ordered-call") arg-nodes args build)))) (defstr (lambda (as) (let fnrec7218 ((as as)) (if (> (jolt-count as) 1) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-nth as 1)) "")))) (invoke (lambda () (let fnrec7219 () (let* ((_a$7221 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7222 (jolt-cons fnode arg-nodes)) (_a$7223 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$7224 (lambda (G__137) (let fnrec7220 ((G__137 G__137)) (let* ((G__138 G__137) (f (jolt-nth G__138 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__138 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-invoke " f (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "") ")")))))) (jolt-invoke _a$7221 _a$7222 _a$7223 _a$7224)))))) (if (jolt-truthy? (jolt-get node (keyword #f "devirt-type"))) (jolt-invoke order-args (lambda (as) (let fnrec7225 ((as as)) (let* ((r (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_r$")) (dv (let* ((_a$7226 (var-deref "clojure.core" "str")) (_a$7227 "(devirt-resolve ") (_a$7228 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-type")))) (_a$7229 " ") (_a$7230 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-proto")))) (_a$7231 " ") (_a$7232 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-method")))) (_a$7233 " ") (_a$7234 r) (_a$7235 ")")) (jolt-invoke _a$7226 _a$7227 _a$7228 _a$7229 _a$7230 _a$7231 _a$7232 _a$7233 _a$7234 _a$7235))) (cells (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "devirt-cells"))) (resolver (if (jolt-truthy? cells) (let* ((c (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_dvc$"))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") cells jolt-conj c) (jolt-invoke (var-deref "clojure.core" "str") "(or " c " (let ((_f " dv ")) (set! " c " _f) _f))"))) dv))) (let* ((_a$7236 (var-deref "clojure.core" "str")) (_a$7237 "(let* ((") (_a$7238 r) (_a$7239 " ") (_a$7240 (jolt-first as)) (_a$7241 ")) (") (_a$7242 resolver) (_a$7243 " ") (_a$7244 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-cons r (jolt-rest as)))) (_a$7245 "))")) (jolt-invoke _a$7236 _a$7237 _a$7238 _a$7239 _a$7240 _a$7241 _a$7242 _a$7243 _a$7244 _a$7245)))))) (if (jolt-truthy? (jolt-get node (keyword #f "num-kind"))) (let* ((_a$7246 (var-deref "jolt.backend-scheme" "emit-numeric")) (_a$7247 (jolt-get node (keyword #f "num-kind"))) (_a$7248 (jolt-get fnode (keyword #f "name"))) (_a$7249 args) (_a$7250 order-args)) (jolt-invoke _a$7246 _a$7247 _a$7248 _a$7249 _a$7250)) (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "+") and__25__auto)) and__25__auto))) "0" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "*") and__25__auto)) and__25__auto))) "1" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "cmp1-ops") nop) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "clojure.core" "str") "(begin " (jolt-first args) " #t)") (if (jolt-truthy? nop) (jolt-invoke order-args (lambda (as) (let fnrec7251 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" nop " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))) (if (jolt= kind (keyword #f "keyword")) (let* ((recv (jolt-first arg-nodes)) (idx (if (let* ((and__25__auto (jolt= (keyword #f "struct") (jolt-get recv (keyword #f "hint"))))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count arg-nodes)) and__25__auto)) (let* ((_a$7252 (var-deref "jolt.backend-scheme" "struct-field-index")) (_a$7253 (jolt-get recv (keyword #f "shape"))) (_a$7254 (jolt-get fnode (keyword #f "val")))) (jolt-invoke _a$7252 _a$7253 _a$7254)) jolt-nil))) (if (jolt-truthy? idx) (jolt-invoke order-args (lambda (as) (let fnrec7255 ((as as)) (let* ((_a$7256 (var-deref "clojure.core" "str")) (_a$7257 "(jrec-field-at ") (_a$7258 (jolt-first as)) (_a$7259 " ") (_a$7260 idx) (_a$7261 " ") (_a$7262 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$7263 ")")) (jolt-invoke _a$7256 _a$7257 _a$7258 _a$7259 _a$7260 _a$7261 _a$7262 _a$7263))))) (jolt-invoke order-args (lambda (as) (let fnrec7264 ((as as)) (let* ((_a$7265 (var-deref "clojure.core" "str")) (_a$7266 "(jolt-get ") (_a$7267 (jolt-first as)) (_a$7268 " ") (_a$7269 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$7270 (jolt-invoke defstr as)) (_a$7271 ")")) (jolt-invoke _a$7265 _a$7266 _a$7267 _a$7268 _a$7269 _a$7270 _a$7271))))))) (if (jolt= kind (keyword #f "coll")) (let* ((_a$7273 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7274 (jolt-cons fnode arg-nodes)) (_a$7275 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$7276 (lambda (G__139) (let fnrec7272 ((G__139 G__139)) (let* ((G__140 G__139) (c (jolt-nth G__140 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__140 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-get " c " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))))) (jolt-invoke _a$7273 _a$7274 _a$7275 _a$7276)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") fnode))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$7283 (let* ((_a$7277 (var-deref "clojure.core" "str")) (_a$7278 "emit: unsupported stdlib fn `") (_a$7279 (jolt-get fnode (keyword #f "ns"))) (_a$7280 "/") (_a$7281 (jolt-get fnode (keyword #f "name"))) (_a$7282 "` (no core on Chez yet)")) (jolt-invoke _a$7277 _a$7278 _a$7279 _a$7280 _a$7281 _a$7282))) (_a$7284 (jolt-hash-map))) (jolt-ex-info _a$7283 _a$7284))) (if (jolt= (keyword #f "host-static") (jolt-get fnode (keyword #f "op"))) (jolt-invoke order-args (lambda (as) (let fnrec7285 ((as as)) (let* ((_a$7286 (var-deref "clojure.core" "str")) (_a$7287 "(host-static-call ") (_a$7288 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "class")))) (_a$7289 " ") (_a$7290 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "member")))) (_a$7291 (if (jolt-empty? as) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)))) (_a$7292 ")")) (jolt-invoke _a$7286 _a$7287 _a$7288 _a$7289 _a$7290 _a$7291 _a$7292))))) (if (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))) (jolt-throw (let* ((_a$7293 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host call `" (jolt-get fnode (keyword #f "name")) "`")) (_a$7294 (jolt-hash-map))) (jolt-ex-info _a$7293 _a$7294))) (if (jolt= (keyword #f "local") (jolt-get fnode (keyword #f "op"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "*known-procs*") (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name"))))) (jolt-invoke order-args (lambda (as) (let fnrec7295 ((as as)) (let* ((_a$7296 (var-deref "clojure.core" "str")) (_a$7297 "(") (_a$7298 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name")))) (_a$7299 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$7300 ")")) (jolt-invoke _a$7296 _a$7297 _a$7298 _a$7299 _a$7300))))) (jolt-invoke invoke)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (let* ((_a$7301 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$7302 (jolt-get fnode (keyword #f "ns"))) (_a$7303 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7301 _a$7302 _a$7303)))) (if (jolt-truthy? and__25__auto) (let* ((_a$7304 (var-deref "jolt.backend-scheme" "direct-link-fn?")) (_a$7305 (jolt-get fnode (keyword #f "ns"))) (_a$7306 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7304 _a$7305 _a$7306)) and__25__auto)) and__25__auto))) (jolt-invoke order-args (lambda (as) (let fnrec7307 ((as as)) (let* ((_a$7311 (var-deref "clojure.core" "str")) (_a$7312 "(") (_a$7313 (let* ((_a$7308 (var-deref "jolt.backend-scheme" "dl-name")) (_a$7309 (jolt-get fnode (keyword #f "ns"))) (_a$7310 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$7308 _a$7309 _a$7310))) (_a$7314 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$7315 ")")) (jolt-invoke _a$7311 _a$7312 _a$7313 _a$7314 _a$7315))))) (if (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))) (jolt-invoke invoke) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke invoke) jolt-nil)))))))))))))))))))) emit-invoke))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-try" (letrec ((emit-try (lambda (node) (let fnrec7311 ((node node)) (let* ((core (let* ((temp__16__auto (jolt-get node (keyword #f "catch-sym")))) (if (jolt-truthy? temp__16__auto) (let* ((cs temp__16__auto)) (let* ((_a$7312 (var-deref "clojure.core" "str")) (_a$7313 "(guard (") (_a$7314 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") cs)) (_a$7315 " (else ") (_a$7316 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "catch-body")))) (_a$7317 ")) ") (_a$7318 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$7319 ")")) (jolt-invoke _a$7312 _a$7313 _a$7314 _a$7315 _a$7316 _a$7317 _a$7318 _a$7319))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body"))))))) (let* ((temp__16__auto (jolt-get node (keyword #f "finally")))) (if (jolt-truthy? temp__16__auto) (let* ((fin temp__16__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(dynamic-wind (lambda () #f) (lambda () " core ") (lambda () " (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fin) "))")) core))))))) emit-try))) + (def-var! "jolt.backend-scheme" "emit-try" (letrec ((emit-try (lambda (node) (let fnrec7316 ((node node)) (let* ((core (let* ((temp__16__auto (jolt-get node (keyword #f "catch-sym")))) (if (jolt-truthy? temp__16__auto) (let* ((cs temp__16__auto)) (let* ((_a$7317 (var-deref "clojure.core" "str")) (_a$7318 "(guard (") (_a$7319 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") cs)) (_a$7320 " (else ") (_a$7321 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "catch-body")))) (_a$7322 ")) ") (_a$7323 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$7324 ")")) (jolt-invoke _a$7317 _a$7318 _a$7319 _a$7320 _a$7321 _a$7322 _a$7323 _a$7324))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body"))))))) (let* ((temp__16__auto (jolt-get node (keyword #f "finally")))) (if (jolt-truthy? temp__16__auto) (let* ((fin temp__16__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(dynamic-wind (lambda () #f) (lambda () " core ") (lambda () " (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fin) "))")) core))))))) emit-try))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "returns-scheme-bool?" (letrec ((returns-scheme-bool? (case-lambda ((node) (let fnrec7320 ((node node)) (returns-scheme-bool? node (jolt-hash-set)))) ((node bools) (let fnrec7321 ((node node) (bools bools)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "boolean?") (jolt-get node (keyword #f "val"))) and__25__auto))) #t (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((nop (let* ((_a$7322 (var-deref "jolt.backend-scheme" "native-op")) (_a$7323 (jolt-get node (keyword #f "fn"))) (_a$7324 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt-invoke _a$7322 _a$7323 _a$7324)))) (jolt-invoke (var-deref "clojure.core" "boolean") (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "bool-returning-ops") nop) and__25__auto)))) (if (jolt= (keyword #f "local") (jolt-get node (keyword #f "op"))) (jolt-contains? bools (jolt-get node (keyword #f "name"))) (if (jolt= (keyword #f "if") (jolt-get node (keyword #f "op"))) (let* ((and__25__auto (returns-scheme-bool? (jolt-get node (keyword #f "then")) bools))) (if (jolt-truthy? and__25__auto) (returns-scheme-bool? (jolt-get node (keyword #f "else")) bools) and__25__auto)) (if (jolt= (keyword #f "let") (jolt-get node (keyword #f "op"))) (let* ((bools_PRIME_ (let* ((_a$7326 (lambda (s b) (let fnrec7325 ((s s) (b b)) (if (jolt-truthy? (returns-scheme-bool? (jolt-nth b 1) s)) (jolt-conj s (jolt-nth b 0)) (jolt-invoke (var-deref "clojure.core" "disj") s (jolt-nth b 0)))))) (_a$7327 bools) (_a$7328 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7326 _a$7327 _a$7328)))) (returns-scheme-bool? (jolt-get node (keyword #f "body")) bools_PRIME_)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))))) returns-scheme-bool?))) + (def-var! "jolt.backend-scheme" "returns-scheme-bool?" (letrec ((returns-scheme-bool? (case-lambda ((node) (let fnrec7325 ((node node)) (returns-scheme-bool? node (jolt-hash-set)))) ((node bools) (let fnrec7326 ((node node) (bools bools)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "boolean?") (jolt-get node (keyword #f "val"))) and__25__auto))) #t (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((nop (let* ((_a$7327 (var-deref "jolt.backend-scheme" "native-op")) (_a$7328 (jolt-get node (keyword #f "fn"))) (_a$7329 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt-invoke _a$7327 _a$7328 _a$7329)))) (jolt-invoke (var-deref "clojure.core" "boolean") (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "bool-returning-ops") nop) and__25__auto)))) (if (jolt= (keyword #f "local") (jolt-get node (keyword #f "op"))) (jolt-contains? bools (jolt-get node (keyword #f "name"))) (if (jolt= (keyword #f "if") (jolt-get node (keyword #f "op"))) (let* ((and__25__auto (returns-scheme-bool? (jolt-get node (keyword #f "then")) bools))) (if (jolt-truthy? and__25__auto) (returns-scheme-bool? (jolt-get node (keyword #f "else")) bools) and__25__auto)) (if (jolt= (keyword #f "let") (jolt-get node (keyword #f "op"))) (let* ((bools_PRIME_ (let* ((_a$7331 (lambda (s b) (let fnrec7330 ((s s) (b b)) (if (jolt-truthy? (returns-scheme-bool? (jolt-nth b 1) s)) (jolt-conj s (jolt-nth b 0)) (jolt-invoke (var-deref "clojure.core" "disj") s (jolt-nth b 0)))))) (_a$7332 bools) (_a$7333 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$7331 _a$7332 _a$7333)))) (returns-scheme-bool? (jolt-get node (keyword #f "body")) bools_PRIME_)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))))) returns-scheme-bool?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit" (letrec ((emit (lambda (node) (let fnrec7329 ((node node)) (let* ((G__141 (jolt-get node (keyword #f "op")))) (if (jolt= G__141 (keyword #f "const")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") (jolt-get node (keyword #f "val"))) (if (jolt= G__141 (keyword #f "local")) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get node (keyword #f "name"))) (if (jolt= G__141 (keyword #f "var")) (let* ((core-proc (let* ((and__25__auto (jolt= "clojure.core" (jolt-get node (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "core-value-procs") (jolt-get node (keyword #f "name"))) and__25__auto)))) (if (jolt-truthy? core-proc) core-proc (if (jolt-truthy? (let* ((_a$7330 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$7331 (jolt-get node (keyword #f "ns"))) (_a$7332 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$7330 _a$7331 _a$7332))) (let* ((_a$7333 (var-deref "jolt.backend-scheme" "dl-name")) (_a$7334 (jolt-get node (keyword #f "ns"))) (_a$7335 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$7333 _a$7334 _a$7335)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") node))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$7342 (let* ((_a$7336 (var-deref "clojure.core" "str")) (_a$7337 "emit: unsupported stdlib ref `") (_a$7338 (jolt-get node (keyword #f "ns"))) (_a$7339 "/") (_a$7340 (jolt-get node (keyword #f "name"))) (_a$7341 "` (no core on Chez yet)")) (jolt-invoke _a$7336 _a$7337 _a$7338 _a$7339 _a$7340 _a$7341))) (_a$7343 (jolt-hash-map))) (jolt-ex-info _a$7342 _a$7343))) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$7344 (var-deref "clojure.core" "str")) (_a$7345 "(var-deref ") (_a$7346 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7347 " ") (_a$7348 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7349 ")")) (jolt-invoke _a$7344 _a$7345 _a$7346 _a$7347 _a$7348 _a$7349)) jolt-nil))))) (if (jolt= G__141 (keyword #f "the-var")) (let* ((_a$7350 (var-deref "clojure.core" "str")) (_a$7351 "(jolt-var ") (_a$7352 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7353 " ") (_a$7354 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7355 ")")) (jolt-invoke _a$7350 _a$7351 _a$7352 _a$7353 _a$7354 _a$7355)) (if (jolt= G__141 (keyword #f "set-var")) (let* ((_a$7356 (var-deref "clojure.core" "str")) (_a$7357 "(jolt-var-set ") (_a$7358 (emit (jolt-get node (keyword #f "the-var")))) (_a$7359 " ") (_a$7360 (emit (jolt-get node (keyword #f "val")))) (_a$7361 ")")) (jolt-invoke _a$7356 _a$7357 _a$7358 _a$7359 _a$7360 _a$7361)) (if (jolt= G__141 (keyword #f "set-field")) (let* ((_a$7362 (var-deref "clojure.core" "str")) (_a$7363 "(jolt-set-field! ") (_a$7364 (emit (jolt-get node (keyword #f "obj")))) (_a$7365 " (keyword #f ") (_a$7366 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "field")))) (_a$7367 ") ") (_a$7368 (emit (jolt-get node (keyword #f "val")))) (_a$7369 ")")) (jolt-invoke _a$7362 _a$7363 _a$7364 _a$7365 _a$7366 _a$7367 _a$7368 _a$7369)) (if (jolt= G__141 (keyword #f "defmacro")) (let* ((_a$7370 (var-deref "clojure.core" "str")) (_a$7371 "(begin (def-var! ") (_a$7372 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7373 " ") (_a$7374 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7375 " ") (_a$7376 (emit (jolt-get node (keyword #f "fn")))) (_a$7377 ") (mark-macro! ") (_a$7378 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7379 " ") (_a$7380 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7381 ") jolt-nil)")) (jolt-invoke _a$7370 _a$7371 _a$7372 _a$7373 _a$7374 _a$7375 _a$7376 _a$7377 _a$7378 _a$7379 _a$7380 _a$7381)) (if (jolt= G__141 (keyword #f "host")) (jolt-throw (let* ((_a$7382 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host ref `" (jolt-get node (keyword #f "name")) "`")) (_a$7383 (jolt-hash-map))) (jolt-ex-info _a$7382 _a$7383))) (if (jolt= G__141 (keyword #f "host-static")) (let* ((_a$7384 (var-deref "clojure.core" "str")) (_a$7385 "(host-static-ref ") (_a$7386 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$7387 " ") (_a$7388 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "member")))) (_a$7389 ")")) (jolt-invoke _a$7384 _a$7385 _a$7386 _a$7387 _a$7388 _a$7389)) (if (jolt= G__141 (keyword #f "host-new")) (let* ((_a$7390 (var-deref "clojure.core" "str")) (_a$7391 "(host-new ") (_a$7392 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$7393 (let* ((args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args))))) (_a$7394 ")")) (jolt-invoke _a$7390 _a$7391 _a$7392 _a$7393 _a$7394)) (if (jolt= G__141 (keyword #f "if")) (let* ((test (jolt-get node (keyword #f "test"))) (t (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "returns-scheme-bool?") test)) (emit test) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-truthy? " (emit test) ")")))) (let* ((_a$7395 (var-deref "clojure.core" "str")) (_a$7396 "(if ") (_a$7397 t) (_a$7398 " ") (_a$7399 (emit (jolt-get node (keyword #f "then")))) (_a$7400 " ") (_a$7401 (emit (jolt-get node (keyword #f "else")))) (_a$7402 ")")) (jolt-invoke _a$7395 _a$7396 _a$7397 _a$7398 _a$7399 _a$7400 _a$7401 _a$7402))) (if (jolt= G__141 (keyword #f "do")) (let* ((_a$7403 (var-deref "clojure.core" "str")) (_a$7404 "(begin ") (_a$7405 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit (jolt-get node (keyword #f "statements"))))) (_a$7406 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$7407 (emit (jolt-get node (keyword #f "ret")))) (_a$7408 ")")) (jolt-invoke _a$7403 _a$7404 _a$7405 _a$7406 _a$7407 _a$7408)) (if (jolt= G__141 (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-invoke") node) (if (jolt= G__141 (keyword #f "vector")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-vector" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__141 (keyword #f "set")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-set" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__141 (keyword #f "map")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-map" (let* ((_a$7412 (var-deref "clojure.core" "mapcat")) (_a$7413 (lambda (p) (let fnrec7409 ((p p)) (let* ((_o$7410 (emit (jolt-nth p 0))) (_o$7411 (emit (jolt-nth p 1)))) (jolt-vector _o$7410 _o$7411))))) (_a$7414 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$7412 _a$7413 _a$7414))) (if (jolt= G__141 (keyword #f "quote")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "form"))) (if (jolt= G__141 (keyword #f "throw")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-throw " (emit (jolt-get node (keyword #f "expr"))) ")") (if (jolt= G__141 (keyword #f "coerce")) (let* ((e (emit (jolt-get node (keyword #f "expr"))))) (if (jolt= (keyword #f "double") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " e ")") (if (jolt= (keyword #f "long") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " e ")") (if (jolt-truthy? (keyword #f "else")) e jolt-nil)))) (if (jolt= G__141 (keyword #f "try")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-try") node) (if (jolt= G__141 (keyword #f "regex")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "inst")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-inst-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "uuid")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uuid-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "bigdec")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-bigdec-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "the-ns")) (jolt-invoke (var-deref "clojure.core" "str") "(intern-ns! " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name"))) ")") (if (jolt= G__141 (keyword #f "host-call")) (let* ((m (jolt-get node (keyword #f "method"))) (target (emit (jolt-get node (keyword #f "target")))) (args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "supported-host-methods") m)) (let* ((_a$7415 (var-deref "clojure.core" "str")) (_a$7416 "(jolt-host-call ") (_a$7417 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$7418 " ") (_a$7419 target) (_a$7420 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$7421 ")")) (jolt-invoke _a$7415 _a$7416 _a$7417 _a$7418 _a$7419 _a$7420 _a$7421)) (let* ((_a$7422 (var-deref "clojure.core" "str")) (_a$7423 "(record-method-dispatch ") (_a$7424 target) (_a$7425 " ") (_a$7426 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$7427 " (jolt-vector") (_a$7428 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$7429 "))")) (jolt-invoke _a$7422 _a$7423 _a$7424 _a$7425 _a$7426 _a$7427 _a$7428 _a$7429)))) (if (jolt= G__141 (keyword #f "let")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-let") node) (if (jolt= G__141 (keyword #f "loop")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-loop") node) (if (jolt= G__141 (keyword #f "recur")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-recur") node) (if (jolt= G__141 (keyword #f "ffi-fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-fn") node) (if (jolt= G__141 (keyword #f "ffi-callable")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-callable") node) (if (jolt= G__141 (keyword #f "fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-fn") node) (if (jolt= G__141 (keyword #f "def")) (if (jolt-truthy? (jolt-get node (keyword #f "no-init"))) (let* ((_a$7430 (var-deref "clojure.core" "str")) (_a$7431 "(declare-var! ") (_a$7432 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7433 " ") (_a$7434 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7435 ")")) (jolt-invoke _a$7430 _a$7431 _a$7432 _a$7433 _a$7434 _a$7435)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$7436 (var-deref "clojure.core" "str")) (_a$7437 "(def-var-with-meta! ") (_a$7438 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7439 " ") (_a$7440 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7441 " ") (_a$7442 (emit (jolt-get node (keyword #f "init")))) (_a$7443 " ") (_a$7444 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$7445 ")")) (jolt-invoke _a$7436 _a$7437 _a$7438 _a$7439 _a$7440 _a$7441 _a$7442 _a$7443 _a$7444 _a$7445)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$7446 (var-deref "clojure.core" "str")) (_a$7447 "(def-var! ") (_a$7448 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7449 " ") (_a$7450 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7451 " ") (_a$7452 (emit (jolt-get node (keyword #f "init")))) (_a$7453 ")")) (jolt-invoke _a$7446 _a$7447 _a$7448 _a$7449 _a$7450 _a$7451 _a$7452 _a$7453)) jolt-nil))) (jolt-throw (let* ((_a$7454 (jolt-invoke (var-deref "clojure.core" "str") "emit: op not yet ported / unhandled: " (jolt-invoke (var-deref "clojure.core" "pr-str") (jolt-get node (keyword #f "op"))))) (_a$7455 (jolt-hash-map))) (jolt-ex-info _a$7454 _a$7455))))))))))))))))))))))))))))))))))))))))) emit))) + (def-var! "jolt.backend-scheme" "emit" (letrec ((emit (lambda (node) (let fnrec7334 ((node node)) (let* ((G__141 (jolt-get node (keyword #f "op")))) (if (jolt= G__141 (keyword #f "const")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") (jolt-get node (keyword #f "val"))) (if (jolt= G__141 (keyword #f "local")) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get node (keyword #f "name"))) (if (jolt= G__141 (keyword #f "var")) (let* ((core-proc (let* ((and__25__auto (jolt= "clojure.core" (jolt-get node (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "core-value-procs") (jolt-get node (keyword #f "name"))) and__25__auto)))) (if (jolt-truthy? core-proc) core-proc (if (jolt-truthy? (let* ((_a$7335 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$7336 (jolt-get node (keyword #f "ns"))) (_a$7337 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$7335 _a$7336 _a$7337))) (let* ((_a$7338 (var-deref "jolt.backend-scheme" "dl-name")) (_a$7339 (jolt-get node (keyword #f "ns"))) (_a$7340 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$7338 _a$7339 _a$7340)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") node))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$7347 (let* ((_a$7341 (var-deref "clojure.core" "str")) (_a$7342 "emit: unsupported stdlib ref `") (_a$7343 (jolt-get node (keyword #f "ns"))) (_a$7344 "/") (_a$7345 (jolt-get node (keyword #f "name"))) (_a$7346 "` (no core on Chez yet)")) (jolt-invoke _a$7341 _a$7342 _a$7343 _a$7344 _a$7345 _a$7346))) (_a$7348 (jolt-hash-map))) (jolt-ex-info _a$7347 _a$7348))) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$7349 (var-deref "clojure.core" "str")) (_a$7350 "(var-deref ") (_a$7351 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7352 " ") (_a$7353 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7354 ")")) (jolt-invoke _a$7349 _a$7350 _a$7351 _a$7352 _a$7353 _a$7354)) jolt-nil))))) (if (jolt= G__141 (keyword #f "the-var")) (let* ((_a$7355 (var-deref "clojure.core" "str")) (_a$7356 "(jolt-var ") (_a$7357 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7358 " ") (_a$7359 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7360 ")")) (jolt-invoke _a$7355 _a$7356 _a$7357 _a$7358 _a$7359 _a$7360)) (if (jolt= G__141 (keyword #f "set-var")) (let* ((_a$7361 (var-deref "clojure.core" "str")) (_a$7362 "(jolt-var-set ") (_a$7363 (emit (jolt-get node (keyword #f "the-var")))) (_a$7364 " ") (_a$7365 (emit (jolt-get node (keyword #f "val")))) (_a$7366 ")")) (jolt-invoke _a$7361 _a$7362 _a$7363 _a$7364 _a$7365 _a$7366)) (if (jolt= G__141 (keyword #f "set-field")) (let* ((_a$7367 (var-deref "clojure.core" "str")) (_a$7368 "(jolt-set-field! ") (_a$7369 (emit (jolt-get node (keyword #f "obj")))) (_a$7370 " (keyword #f ") (_a$7371 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "field")))) (_a$7372 ") ") (_a$7373 (emit (jolt-get node (keyword #f "val")))) (_a$7374 ")")) (jolt-invoke _a$7367 _a$7368 _a$7369 _a$7370 _a$7371 _a$7372 _a$7373 _a$7374)) (if (jolt= G__141 (keyword #f "defmacro")) (let* ((_a$7375 (var-deref "clojure.core" "str")) (_a$7376 "(begin (def-var! ") (_a$7377 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7378 " ") (_a$7379 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7380 " ") (_a$7381 (emit (jolt-get node (keyword #f "fn")))) (_a$7382 ") (mark-macro! ") (_a$7383 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7384 " ") (_a$7385 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7386 ") jolt-nil)")) (jolt-invoke _a$7375 _a$7376 _a$7377 _a$7378 _a$7379 _a$7380 _a$7381 _a$7382 _a$7383 _a$7384 _a$7385 _a$7386)) (if (jolt= G__141 (keyword #f "host")) (jolt-throw (let* ((_a$7387 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host ref `" (jolt-get node (keyword #f "name")) "`")) (_a$7388 (jolt-hash-map))) (jolt-ex-info _a$7387 _a$7388))) (if (jolt= G__141 (keyword #f "host-static")) (let* ((_a$7389 (var-deref "clojure.core" "str")) (_a$7390 "(host-static-ref ") (_a$7391 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$7392 " ") (_a$7393 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "member")))) (_a$7394 ")")) (jolt-invoke _a$7389 _a$7390 _a$7391 _a$7392 _a$7393 _a$7394)) (if (jolt= G__141 (keyword #f "host-new")) (let* ((_a$7395 (var-deref "clojure.core" "str")) (_a$7396 "(host-new ") (_a$7397 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$7398 (let* ((args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args))))) (_a$7399 ")")) (jolt-invoke _a$7395 _a$7396 _a$7397 _a$7398 _a$7399)) (if (jolt= G__141 (keyword #f "if")) (let* ((test (jolt-get node (keyword #f "test"))) (t (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "returns-scheme-bool?") test)) (emit test) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-truthy? " (emit test) ")")))) (let* ((_a$7400 (var-deref "clojure.core" "str")) (_a$7401 "(if ") (_a$7402 t) (_a$7403 " ") (_a$7404 (emit (jolt-get node (keyword #f "then")))) (_a$7405 " ") (_a$7406 (emit (jolt-get node (keyword #f "else")))) (_a$7407 ")")) (jolt-invoke _a$7400 _a$7401 _a$7402 _a$7403 _a$7404 _a$7405 _a$7406 _a$7407))) (if (jolt= G__141 (keyword #f "do")) (let* ((_a$7408 (var-deref "clojure.core" "str")) (_a$7409 "(begin ") (_a$7410 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit (jolt-get node (keyword #f "statements"))))) (_a$7411 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$7412 (emit (jolt-get node (keyword #f "ret")))) (_a$7413 ")")) (jolt-invoke _a$7408 _a$7409 _a$7410 _a$7411 _a$7412 _a$7413)) (if (jolt= G__141 (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-invoke") node) (if (jolt= G__141 (keyword #f "vector")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-vector" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__141 (keyword #f "set")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-set" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__141 (keyword #f "map")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-map" (let* ((_a$7417 (var-deref "clojure.core" "mapcat")) (_a$7418 (lambda (p) (let fnrec7414 ((p p)) (let* ((_o$7415 (emit (jolt-nth p 0))) (_o$7416 (emit (jolt-nth p 1)))) (jolt-vector _o$7415 _o$7416))))) (_a$7419 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$7417 _a$7418 _a$7419))) (if (jolt= G__141 (keyword #f "quote")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "form"))) (if (jolt= G__141 (keyword #f "throw")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-throw " (emit (jolt-get node (keyword #f "expr"))) ")") (if (jolt= G__141 (keyword #f "coerce")) (let* ((e (emit (jolt-get node (keyword #f "expr"))))) (if (jolt= (keyword #f "double") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " e ")") (if (jolt= (keyword #f "long") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " e ")") (if (jolt-truthy? (keyword #f "else")) e jolt-nil)))) (if (jolt= G__141 (keyword #f "try")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-try") node) (if (jolt= G__141 (keyword #f "regex")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "inst")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-inst-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "uuid")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uuid-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "bigdec")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-bigdec-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__141 (keyword #f "the-ns")) (jolt-invoke (var-deref "clojure.core" "str") "(intern-ns! " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name"))) ")") (if (jolt= G__141 (keyword #f "host-call")) (let* ((m (jolt-get node (keyword #f "method"))) (target (emit (jolt-get node (keyword #f "target")))) (args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "supported-host-methods") m)) (let* ((_a$7420 (var-deref "clojure.core" "str")) (_a$7421 "(jolt-host-call ") (_a$7422 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$7423 " ") (_a$7424 target) (_a$7425 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$7426 ")")) (jolt-invoke _a$7420 _a$7421 _a$7422 _a$7423 _a$7424 _a$7425 _a$7426)) (let* ((_a$7427 (var-deref "clojure.core" "str")) (_a$7428 "(record-method-dispatch ") (_a$7429 target) (_a$7430 " ") (_a$7431 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$7432 " (jolt-vector") (_a$7433 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$7434 "))")) (jolt-invoke _a$7427 _a$7428 _a$7429 _a$7430 _a$7431 _a$7432 _a$7433 _a$7434)))) (if (jolt= G__141 (keyword #f "let")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-let") node) (if (jolt= G__141 (keyword #f "loop")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-loop") node) (if (jolt= G__141 (keyword #f "recur")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-recur") node) (if (jolt= G__141 (keyword #f "ffi-fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-fn") node) (if (jolt= G__141 (keyword #f "ffi-callable")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-callable") node) (if (jolt= G__141 (keyword #f "fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-fn") node) (if (jolt= G__141 (keyword #f "def")) (if (jolt-truthy? (jolt-get node (keyword #f "no-init"))) (let* ((_a$7435 (var-deref "clojure.core" "str")) (_a$7436 "(declare-var! ") (_a$7437 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7438 " ") (_a$7439 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7440 ")")) (jolt-invoke _a$7435 _a$7436 _a$7437 _a$7438 _a$7439 _a$7440)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$7441 (var-deref "clojure.core" "str")) (_a$7442 "(def-var-with-meta! ") (_a$7443 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7444 " ") (_a$7445 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7446 " ") (_a$7447 (emit (jolt-get node (keyword #f "init")))) (_a$7448 " ") (_a$7449 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$7450 ")")) (jolt-invoke _a$7441 _a$7442 _a$7443 _a$7444 _a$7445 _a$7446 _a$7447 _a$7448 _a$7449 _a$7450)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$7451 (var-deref "clojure.core" "str")) (_a$7452 "(def-var! ") (_a$7453 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$7454 " ") (_a$7455 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$7456 " ") (_a$7457 (emit (jolt-get node (keyword #f "init")))) (_a$7458 ")")) (jolt-invoke _a$7451 _a$7452 _a$7453 _a$7454 _a$7455 _a$7456 _a$7457 _a$7458)) jolt-nil))) (jolt-throw (let* ((_a$7459 (jolt-invoke (var-deref "clojure.core" "str") "emit: op not yet ported / unhandled: " (jolt-invoke (var-deref "clojure.core" "pr-str") (jolt-get node (keyword #f "op"))))) (_a$7460 (jolt-hash-map))) (jolt-ex-info _a$7459 _a$7460))))))))))))))))))))))))))))))))))))))))) emit))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "dl-opt-out?" (letrec ((dl-opt-out? (lambda (m) (let fnrec7456 ((m m)) (let* ((or__26__auto (jolt-get m (keyword #f "dynamic")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-get m (keyword #f "redef")))))))) dl-opt-out?))) + (def-var! "jolt.backend-scheme" "dl-opt-out?" (letrec ((dl-opt-out? (lambda (m) (let fnrec7461 ((m m)) (let* ((or__26__auto (jolt-get m (keyword #f "dynamic")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-get m (keyword #f "redef")))))))) dl-opt-out?))) (guard (e (#t #f)) - (def-var! "jolt.backend-scheme" "emit-top-form" (letrec ((emit-top-form (lambda (node) (let fnrec7457 ((node node)) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link?"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) (if (jolt= (keyword #f "do") (jolt-get node (keyword #f "op"))) (let* ((_a$7458 (var-deref "clojure.core" "str")) (_a$7459 "(begin ") (_a$7460 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-top-form (jolt-get node (keyword #f "statements"))))) (_a$7461 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$7462 (emit-top-form (jolt-get node (keyword #f "ret")))) (_a$7463 ")")) (jolt-invoke _a$7458 _a$7459 _a$7460 _a$7461 _a$7462 _a$7463)) (if (let* ((and__25__auto (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-get node (keyword #f "no-init"))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.backend-scheme" "dl-opt-out?") (jolt-get node (keyword #f "meta")))) and__25__auto)) and__25__auto)) (let* ((ns (jolt-get node (keyword #f "ns"))) (nm (jolt-get node (keyword #f "name"))) (b (jolt-invoke (var-deref "jolt.backend-scheme" "dl-name") ns nm)) (fn? (jolt= (keyword #f "fn") (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "op")))) (pos (jolt-get node (keyword #f "pos"))) (frame-name (if (jolt-truthy? fn?) (let* ((temp__16__auto (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((fnm temp__16__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") fnm)) b)) jolt-nil)) (reg (if (jolt-truthy? (let* ((and__25__auto fn?)) (if (jolt-truthy? and__25__auto) pos and__25__auto))) (let* ((_a$7464 (var-deref "clojure.core" "str")) (_a$7465 " (jolt-register-source! ") (_a$7466 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") frame-name)) (_a$7467 " ") (_a$7468 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7469 " ") (_a$7470 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7471 " ") (_a$7472 (if (jolt-truthy? (jolt-get pos (keyword #f "file"))) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get pos (keyword #f "file"))) "jolt-nil")) (_a$7473 " ") (_a$7474 (let* ((or__26__auto (jolt-get pos (keyword #f "line")))) (if (jolt-truthy? or__26__auto) or__26__auto 0))) (_a$7475 ")")) (jolt-invoke _a$7464 _a$7465 _a$7466 _a$7467 _a$7468 _a$7469 _a$7470 _a$7471 _a$7472 _a$7473 _a$7474 _a$7475)) jolt-nil))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-defined") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) (if (jolt-truthy? fn?) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-fns") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) jolt-nil) (let* ((init (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "init"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$7476 (var-deref "clojure.core" "str")) (_a$7477 "(begin (define ") (_a$7478 b) (_a$7479 " ") (_a$7480 init) (_a$7481 ") (def-var-with-meta! ") (_a$7482 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7483 " ") (_a$7484 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7485 " ") (_a$7486 b) (_a$7487 " ") (_a$7488 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$7489 ")") (_a$7490 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$7491 ")")) (jolt-invoke _a$7476 _a$7477 _a$7478 _a$7479 _a$7480 _a$7481 _a$7482 _a$7483 _a$7484 _a$7485 _a$7486 _a$7487 _a$7488 _a$7489 _a$7490 _a$7491)) (let* ((_a$7492 (var-deref "clojure.core" "str")) (_a$7493 "(begin (define ") (_a$7494 b) (_a$7495 " ") (_a$7496 init) (_a$7497 ") (def-var! ") (_a$7498 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7499 " ") (_a$7500 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7501 " ") (_a$7502 b) (_a$7503 ")") (_a$7504 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$7505 ")")) (jolt-invoke _a$7492 _a$7493 _a$7494 _a$7495 _a$7496 _a$7497 _a$7498 _a$7499 _a$7500 _a$7501 _a$7502 _a$7503 _a$7504 _a$7505)))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) jolt-nil)))))))) emit-top-form))) + (def-var! "jolt.backend-scheme" "emit-top-form" (letrec ((emit-top-form (lambda (node) (let fnrec7462 ((node node)) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link?"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) (if (jolt= (keyword #f "do") (jolt-get node (keyword #f "op"))) (let* ((_a$7463 (var-deref "clojure.core" "str")) (_a$7464 "(begin ") (_a$7465 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-top-form (jolt-get node (keyword #f "statements"))))) (_a$7466 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$7467 (emit-top-form (jolt-get node (keyword #f "ret")))) (_a$7468 ")")) (jolt-invoke _a$7463 _a$7464 _a$7465 _a$7466 _a$7467 _a$7468)) (if (let* ((and__25__auto (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-get node (keyword #f "no-init"))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.backend-scheme" "dl-opt-out?") (jolt-get node (keyword #f "meta")))) and__25__auto)) and__25__auto)) (let* ((ns (jolt-get node (keyword #f "ns"))) (nm (jolt-get node (keyword #f "name"))) (b (jolt-invoke (var-deref "jolt.backend-scheme" "dl-name") ns nm)) (fn? (jolt= (keyword #f "fn") (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "op")))) (pos (jolt-get node (keyword #f "pos"))) (frame-name (if (jolt-truthy? fn?) (let* ((temp__16__auto (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((fnm temp__16__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") fnm)) b)) jolt-nil)) (reg (if (jolt-truthy? (let* ((and__25__auto fn?)) (if (jolt-truthy? and__25__auto) pos and__25__auto))) (let* ((_a$7469 (var-deref "clojure.core" "str")) (_a$7470 " (jolt-register-source! ") (_a$7471 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") frame-name)) (_a$7472 " ") (_a$7473 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7474 " ") (_a$7475 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7476 " ") (_a$7477 (if (jolt-truthy? (jolt-get pos (keyword #f "file"))) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get pos (keyword #f "file"))) "jolt-nil")) (_a$7478 " ") (_a$7479 (let* ((or__26__auto (jolt-get pos (keyword #f "line")))) (if (jolt-truthy? or__26__auto) or__26__auto 0))) (_a$7480 ")")) (jolt-invoke _a$7469 _a$7470 _a$7471 _a$7472 _a$7473 _a$7474 _a$7475 _a$7476 _a$7477 _a$7478 _a$7479 _a$7480)) jolt-nil))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-defined") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) (if (jolt-truthy? fn?) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-fns") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) jolt-nil) (let* ((cells (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (_ (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "devirt-cells") cells)) (raw (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "init")))) (_ (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "devirt-cells") jolt-nil)) (init (if (jolt-truthy? (jolt-seq (jolt-invoke (var-deref "clojure.core" "deref") cells))) (jolt-invoke (var-deref "clojure.core" "str") "(let (" (jolt-invoke (var-deref "clojure.string" "join") " " (let* ((_a$7482 (lambda (c) (let fnrec7481 ((c c)) (jolt-invoke (var-deref "clojure.core" "str") "(" c " #f)")))) (_a$7483 (jolt-invoke (var-deref "clojure.core" "deref") cells))) (jolt-map _a$7482 _a$7483))) ") " raw ")") raw))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$7484 (var-deref "clojure.core" "str")) (_a$7485 "(begin (define ") (_a$7486 b) (_a$7487 " ") (_a$7488 init) (_a$7489 ") (def-var-with-meta! ") (_a$7490 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7491 " ") (_a$7492 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7493 " ") (_a$7494 b) (_a$7495 " ") (_a$7496 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$7497 ")") (_a$7498 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$7499 ")")) (jolt-invoke _a$7484 _a$7485 _a$7486 _a$7487 _a$7488 _a$7489 _a$7490 _a$7491 _a$7492 _a$7493 _a$7494 _a$7495 _a$7496 _a$7497 _a$7498 _a$7499)) (let* ((_a$7500 (var-deref "clojure.core" "str")) (_a$7501 "(begin (define ") (_a$7502 b) (_a$7503 " ") (_a$7504 init) (_a$7505 ") (def-var! ") (_a$7506 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$7507 " ") (_a$7508 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7509 " ") (_a$7510 b) (_a$7511 ")") (_a$7512 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$7513 ")")) (jolt-invoke _a$7500 _a$7501 _a$7502 _a$7503 _a$7504 _a$7505 _a$7506 _a$7507 _a$7508 _a$7509 _a$7510 _a$7511 _a$7512 _a$7513)))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) jolt-nil)))))))) emit-top-form))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.fold" "foldable" (let* ((_o$7506 "+") (_o$7507 jolt-add) (_o$7508 "-") (_o$7509 jolt-sub) (_o$7510 "*") (_o$7511 jolt-mul) (_o$7512 "/") (_o$7513 jolt-div) (_o$7514 "<") (_o$7515 <) (_o$7516 ">") (_o$7517 >) (_o$7518 "<=") (_o$7519 <=) (_o$7520 ">=") (_o$7521 >=) (_o$7522 "=") (_o$7523 jolt=) (_o$7524 "inc") (_o$7525 jolt-inc) (_o$7526 "dec") (_o$7527 jolt-dec) (_o$7528 "mod") (_o$7529 modulo) (_o$7530 "rem") (_o$7531 remainder) (_o$7532 "quot") (_o$7533 quotient) (_o$7534 "bit-and") (_o$7535 (var-deref "clojure.core" "__bit-and")) (_o$7536 "bit-or") (_o$7537 (var-deref "clojure.core" "__bit-or")) (_o$7538 "bit-xor") (_o$7539 (var-deref "clojure.core" "__bit-xor"))) (jolt-hash-map _o$7506 _o$7507 _o$7508 _o$7509 _o$7510 _o$7511 _o$7512 _o$7513 _o$7514 _o$7515 _o$7516 _o$7517 _o$7518 _o$7519 _o$7520 _o$7521 _o$7522 _o$7523 _o$7524 _o$7525 _o$7526 _o$7527 _o$7528 _o$7529 _o$7530 _o$7531 _o$7532 _o$7533 _o$7534 _o$7535 _o$7536 _o$7537 _o$7538 _o$7539)) (let* ((_o$7540 (keyword #f "private")) (_o$7541 #t)) (jolt-hash-map _o$7540 _o$7541)))) + (def-var-with-meta! "jolt.passes.fold" "foldable" (let* ((_o$7514 "+") (_o$7515 jolt-add) (_o$7516 "-") (_o$7517 jolt-sub) (_o$7518 "*") (_o$7519 jolt-mul) (_o$7520 "/") (_o$7521 jolt-div) (_o$7522 "<") (_o$7523 <) (_o$7524 ">") (_o$7525 >) (_o$7526 "<=") (_o$7527 <=) (_o$7528 ">=") (_o$7529 >=) (_o$7530 "=") (_o$7531 jolt=) (_o$7532 "inc") (_o$7533 jolt-inc) (_o$7534 "dec") (_o$7535 jolt-dec) (_o$7536 "mod") (_o$7537 modulo) (_o$7538 "rem") (_o$7539 remainder) (_o$7540 "quot") (_o$7541 quotient) (_o$7542 "bit-and") (_o$7543 (var-deref "clojure.core" "__bit-and")) (_o$7544 "bit-or") (_o$7545 (var-deref "clojure.core" "__bit-or")) (_o$7546 "bit-xor") (_o$7547 (var-deref "clojure.core" "__bit-xor"))) (jolt-hash-map _o$7514 _o$7515 _o$7516 _o$7517 _o$7518 _o$7519 _o$7520 _o$7521 _o$7522 _o$7523 _o$7524 _o$7525 _o$7526 _o$7527 _o$7528 _o$7529 _o$7530 _o$7531 _o$7532 _o$7533 _o$7534 _o$7535 _o$7536 _o$7537 _o$7538 _o$7539 _o$7540 _o$7541 _o$7542 _o$7543 _o$7544 _o$7545 _o$7546 _o$7547)) (let* ((_o$7548 (keyword #f "private")) (_o$7549 #t)) (jolt-hash-map _o$7548 _o$7549)))) (guard (e (#t #f)) - (def-var! "jolt.passes.fold" "const?" (letrec ((const? (lambda (n) (let fnrec7542 ((n n)) (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))))) const?))) + (def-var! "jolt.passes.fold" "const?" (letrec ((const? (lambda (n) (let fnrec7550 ((n n)) (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))))) const?))) (guard (e (#t #f)) - (def-var! "jolt.passes.fold" "const-num?" (letrec ((const-num? (lambda (n) (let fnrec7543 ((n n)) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "const?") n))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "number?") (jolt-get n (keyword #f "val"))) and__25__auto)))))) const-num?))) + (def-var! "jolt.passes.fold" "const-num?" (letrec ((const-num? (lambda (n) (let fnrec7551 ((n n)) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "const?") n))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "number?") (jolt-get n (keyword #f "val"))) and__25__auto)))))) const-num?))) (guard (e (#t #f)) - (def-var! "jolt.passes.fold" "fold-fn" (letrec ((fold-fn (lambda (fnode) (let fnrec7544 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (let* ((or__26__auto (let* ((and__25__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "host")))) (jolt-get (var-deref "jolt.passes.fold" "foldable") (jolt-get fnode (keyword #f "name"))) jolt-nil)))))) fold-fn))) + (def-var! "jolt.passes.fold" "fold-fn" (letrec ((fold-fn (lambda (fnode) (let fnrec7552 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (let* ((or__26__auto (let* ((and__25__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "host")))) (jolt-get (var-deref "jolt.passes.fold" "foldable") (jolt-get fnode (keyword #f "name"))) jolt-nil)))))) fold-fn))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.fold" "const-fold" (letrec ((const-fold (lambda (node) (let fnrec7545 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((n (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node)) (ff (jolt-invoke (var-deref "jolt.passes.fold" "fold-fn") (jolt-get n (keyword #f "fn")))) (args (jolt-get n (keyword #f "args"))) (folded (if (jolt-truthy? (let* ((and__25__auto ff)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.fold" "const-num?") args) and__25__auto)) and__25__auto))) (guard (_r$catch1559 (else (let* ((e _r$catch1559)) jolt-nil))) (let* ((_o$7547 (keyword #f "op")) (_o$7548 (keyword #f "const")) (_o$7549 (keyword #f "val")) (_o$7550 (jolt-apply ff (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec7546 ((a a)) (jolt-get a (keyword #f "val")))) args)))) (jolt-hash-map _o$7547 _o$7548 _o$7549 _o$7550))) jolt-nil))) (let* ((or__26__auto folded)) (if (jolt-truthy? or__26__auto) or__26__auto n))) (if (jolt= op (keyword #f "if")) (let* ((t (const-fold (jolt-get node (keyword #f "test"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.fold" "const?") t)) (if (let* ((or__26__auto (jolt-nil? (jolt-get t (keyword #f "val"))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= #f (jolt-get t (keyword #f "val"))))) (const-fold (jolt-get node (keyword #f "else"))) (const-fold (jolt-get node (keyword #f "then")))) (let* ((_a$7551 node) (_a$7552 (keyword #f "test")) (_a$7553 t) (_a$7554 (keyword #f "then")) (_a$7555 (const-fold (jolt-get node (keyword #f "then")))) (_a$7556 (keyword #f "else")) (_a$7557 (const-fold (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$7551 _a$7552 _a$7553 _a$7554 _a$7555 _a$7556 _a$7557)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node) jolt-nil)))))))) const-fold) (let* ((_o$7558 (keyword #f "doc")) (_o$7559 "Bottom-up constant folding: a call of a foldable numeric fn whose args are\n all constant numbers becomes a constant; an if with a constant test becomes\n the taken branch.")) (jolt-hash-map _o$7558 _o$7559)))) + (def-var-with-meta! "jolt.passes.fold" "const-fold" (letrec ((const-fold (lambda (node) (let fnrec7553 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((n (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node)) (ff (jolt-invoke (var-deref "jolt.passes.fold" "fold-fn") (jolt-get n (keyword #f "fn")))) (args (jolt-get n (keyword #f "args"))) (folded (if (jolt-truthy? (let* ((and__25__auto ff)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.fold" "const-num?") args) and__25__auto)) and__25__auto))) (guard (_r$catch1560 (else (let* ((e _r$catch1560)) jolt-nil))) (let* ((_o$7555 (keyword #f "op")) (_o$7556 (keyword #f "const")) (_o$7557 (keyword #f "val")) (_o$7558 (jolt-apply ff (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec7554 ((a a)) (jolt-get a (keyword #f "val")))) args)))) (jolt-hash-map _o$7555 _o$7556 _o$7557 _o$7558))) jolt-nil))) (let* ((or__26__auto folded)) (if (jolt-truthy? or__26__auto) or__26__auto n))) (if (jolt= op (keyword #f "if")) (let* ((t (const-fold (jolt-get node (keyword #f "test"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.fold" "const?") t)) (if (let* ((or__26__auto (jolt-nil? (jolt-get t (keyword #f "val"))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= #f (jolt-get t (keyword #f "val"))))) (const-fold (jolt-get node (keyword #f "else"))) (const-fold (jolt-get node (keyword #f "then")))) (let* ((_a$7559 node) (_a$7560 (keyword #f "test")) (_a$7561 t) (_a$7562 (keyword #f "then")) (_a$7563 (const-fold (jolt-get node (keyword #f "then")))) (_a$7564 (keyword #f "else")) (_a$7565 (const-fold (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$7559 _a$7560 _a$7561 _a$7562 _a$7563 _a$7564 _a$7565)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node) jolt-nil)))))))) const-fold) (let* ((_o$7566 (keyword #f "doc")) (_o$7567 "Bottom-up constant folding: a call of a foldable numeric fn whose args are\n all constant numbers becomes a constant; an if with a constant test becomes\n the taken branch.")) (jolt-hash-map _o$7566 _o$7567)))) (guard (e (#t #f)) - (def-var! "jolt.passes.fold" "scalar-const?" (letrec ((scalar-const? (lambda (n) (let fnrec7560 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "keyword?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "string?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.core" "boolean?") v)))))))) and__25__auto)))))) scalar-const?))) + (def-var! "jolt.passes.fold" "scalar-const?" (letrec ((scalar-const? (lambda (n) (let fnrec7568 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "keyword?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "string?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.core" "boolean?") v)))))))) and__25__auto)))))) scalar-const?))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.fold" "kw-callee?" (letrec ((kw-callee? (lambda (fnode) (let fnrec7561 ((fnode fnode)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))) and__25__auto)))))) kw-callee?) (let* ((_o$7562 (keyword #f "doc")) (_o$7563 "True if fnode is a constant keyword used as a function head \x2014; the (:k m) form.")) (jolt-hash-map _o$7562 _o$7563)))) + (def-var-with-meta! "jolt.passes.fold" "kw-callee?" (letrec ((kw-callee? (lambda (fnode) (let fnrec7569 ((fnode fnode)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))) and__25__auto)))))) kw-callee?) (let* ((_o$7570 (keyword #f "doc")) (_o$7571 "True if fnode is a constant keyword used as a function head \x2014; the (:k m) form.")) (jolt-hash-map _o$7570 _o$7571)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.fold" "get-callee?" (letrec ((get-callee? (lambda (fnode) (let fnrec7564 ((fnode fnode)) (let* ((or__26__auto (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((and__25__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)))))))) get-callee?) (let* ((_o$7565 (keyword #f "doc")) (_o$7566 "True if fnode is the clojure.core/get (or host get) callee \x2014; the (get m k) form.")) (jolt-hash-map _o$7565 _o$7566)))) + (def-var-with-meta! "jolt.passes.fold" "get-callee?" (letrec ((get-callee? (lambda (fnode) (let fnrec7572 ((fnode fnode)) (let* ((or__26__auto (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((and__25__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)))))))) get-callee?) (let* ((_o$7573 (keyword #f "doc")) (_o$7574 "True if fnode is the clojure.core/get (or host get) callee \x2014; the (get m k) form.")) (jolt-hash-map _o$7573 _o$7574)))) (guard (e (#t #f)) (def-var! "jolt.passes.numeric" "int-lit?" (letrec ((int-lit? (lambda (n) (let fnrec6105 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "integer?") v) and__25__auto))) and__25__auto)))))) int-lit?))) (guard (e (#t #f)) diff --git a/jolt-core/jolt/backend_scheme.clj b/jolt-core/jolt/backend_scheme.clj index 5271426..5653917 100644 --- a/jolt-core/jolt/backend_scheme.clj +++ b/jolt-core/jolt/backend_scheme.clj @@ -162,6 +162,15 @@ (def ^:private gensym-counter (atom 0)) (defn- fresh-label [prefix] (str prefix (swap! gensym-counter inc))) +;; Per-site devirt cache cells collected while emitting one top-level def. A +;; devirtualized call resolves a CONSTANT impl (static tag/proto/method), so it +;; needs resolving once, not per call — the inline cache the JVM gets for free. When +;; a def init is being emitted this holds an atom; each devirt site appends a fresh +;; cell name (bound to #f in a let wrapping the def, so it persists across calls and +;; is shared by every invocation), and the site resolves into it on first use. nil +;; outside a def (a devirt there falls back to a per-call resolve). +(def ^:private devirt-cells (atom nil)) + ;; Scheme syntactic keywords. A jolt local with one of these names would, when ;; emitted verbatim, shadow the Scheme form in operator position (a local named ;; `if` would turn the special form (if …) the back end emits into a call), so @@ -517,11 +526,21 @@ ;; The receiver is bound once — it feeds both the resolve and the application. (:devirt-type node) (order-args (fn [as] - (let [r (fresh-label "_r$")] - (str "(let* ((" r " " (first as) ")) " - "((devirt-resolve " (chez-str-lit (:devirt-type node)) " " - (chez-str-lit (:devirt-proto node)) " " (chez-str-lit (:devirt-method node)) - " " r ") " (str/join " " (cons r (rest as))) "))")))) + (let [r (fresh-label "_r$") + dv (str "(devirt-resolve " (chez-str-lit (:devirt-type node)) " " + (chez-str-lit (:devirt-proto node)) " " (chez-str-lit (:devirt-method node)) + " " r ")") + cells @devirt-cells + ;; cache the resolved impl in a per-site cell when inside a + ;; def (resolved once on first call, then reused); else + ;; resolve per call. + resolver (if cells + (let [c (fresh-label "_dvc$")] + (swap! cells conj c) + (str "(or " c " (let ((_f " dv ")) (set! " c " _f) _f))")) + dv)] + (str "(let* ((" r " " (first as) ")) (" + resolver " " (str/join " " (cons r (rest as))) "))")))) ;; hint-directed fast arithmetic: jolt.passes.numeric proved every operand a ;; flonum (^double) or fixnum (^long), so emit the Chez fl*/fx* op. (:num-kind node) (emit-numeric (:num-kind node) (:name fnode) args order-args) @@ -755,7 +774,15 @@ ;; register before emitting the init so a self-referential body direct-links. (swap! direct-link-defined conj (dl-fqn ns nm)) (when fn? (swap! direct-link-fns conj (dl-fqn ns nm))) - (let [init (emit (:init node))] + (let [cells (atom []) + _ (reset! devirt-cells cells) + raw (emit (:init node)) + _ (reset! devirt-cells nil) + ;; wrap the init so each devirt site's cache cell persists across calls, + ;; shared by every invocation of this def. + init (if (seq @cells) + (str "(let (" (str/join " " (map (fn [c] (str "(" c " #f)")) @cells)) ") " raw ")") + raw)] (if (jmeta-nonempty? (:meta node)) (str "(begin (define " b " " init ") (def-var-with-meta! " (chez-str-lit ns) " " (chez-str-lit nm) " " b " " (emit-def-meta node) ")" (or reg "") ")")