From bc16513afd8d219b69a67ea3f4928c9eb6c2502e Mon Sep 17 00:00:00 2001 From: Yogthos Date: Tue, 23 Jun 2026 04:35:32 -0400 Subject: [PATCH] Sync re-minted seed for the types.clj lattice split The lattice-split commit staged its seed before make remint ran, so image.ss lagged the source. Commit the correct re-minted image (gensym renumbering only). --- host/chez/seed/image.ss | 204 ++++++++++++++++++++-------------------- 1 file changed, 102 insertions(+), 102 deletions(-) diff --git a/host/chez/seed/image.ss b/host/chez/seed/image.ss index f364b6f..3b24df0 100644 --- a/host/chez/seed/image.ss +++ b/host/chez/seed/image.ss @@ -209,135 +209,135 @@ (guard (e (#t #f)) (def-var! "jolt.passes.inline" "dirty" (jolt-invoke (var-deref "clojure.core" "atom") #f))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "mark!" (letrec ((mark! (lambda () (let fnrec2879 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #t))))) mark!))) + (def-var! "jolt.passes.inline" "mark!" (letrec ((mark! (lambda () (let fnrec3380 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #t))))) mark!))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.inline" "rec-shapes" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "set-rec-shapes!" (letrec ((set-rec-shapes! (lambda (m) (let fnrec2880 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "rec-shapes") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-rec-shapes!))) + (def-var! "jolt.passes.inline" "set-rec-shapes!" (letrec ((set-rec-shapes! (lambda (m) (let fnrec3381 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "rec-shapes") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-rec-shapes!))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.inline" "fresh-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "fresh" (letrec ((fresh (lambda (base) (let fnrec2881 ((base base)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "fresh-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.inline" "fresh-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") base "__il" n))))))) fresh))) + (def-var! "jolt.passes.inline" "fresh" (letrec ((fresh (lambda (base) (let fnrec3382 ((base base)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "fresh-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.inline" "fresh-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") base "__il" n))))))) fresh))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "safe-op?" (letrec ((safe-op? (lambda (op) (let fnrec2882 ((op op)) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "host")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "the-var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "quote")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "if")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "do")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "let")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "invoke")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "map")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "vector")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "set")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "throw")))))))))))))))))))))))))))))))) safe-op?))) + (def-var! "jolt.passes.inline" "safe-op?" (letrec ((safe-op? (lambda (op) (let fnrec3383 ((op op)) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "host")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "the-var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "quote")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "if")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "do")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "let")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "invoke")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "map")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "vector")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "set")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "throw")))))))))))))))))))))))))))))))) safe-op?))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.inline" "inline-budget" 120 (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "body-size" (letrec ((body-size (lambda (node) (let fnrec2883 ((node node)) (if (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") (jolt-get node (keyword #f "op")))) 100000 (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (acc c) (let fnrec2884 ((acc acc) (c c)) (+ acc (jolt-invoke body-size c)))) 1 node)))))) body-size))) + (def-var! "jolt.passes.inline" "body-size" (letrec ((body-size (lambda (node) (let fnrec3384 ((node node)) (if (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") (jolt-get node (keyword #f "op")))) 100000 (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (acc c) (let fnrec3385 ((acc acc) (c c)) (+ acc (jolt-invoke body-size c)))) 1 node)))))) body-size))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "subst" (letrec ((subst (lambda (node env) (let fnrec2885 ((node node) (env env)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (let* ((r (jolt-get env (jolt-get node (keyword #f "name"))))) (if (jolt-truthy? r) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get r (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get node (keyword #f "hint")))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-get r (keyword #f "hint"))) and__13__auto)) and__13__auto))) (jolt-assoc r (keyword #f "hint") (jolt-get node (keyword #f "hint"))) r) node)) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$2897 (lambda (acc b) (let fnrec2886 ((acc acc) (b b)) (let* ((e (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (nm (jolt-nth b 0)) (init (jolt-invoke subst (jolt-nth b 1) e)) (f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") nm))) (let* ((_o$2893 (jolt-assoc e nm (let* ((_o$2887 (keyword #f "op")) (_o$2888 (keyword #f "local")) (_o$2889 (keyword #f "name")) (_o$2890 f)) (jolt-hash-map _o$2887 _o$2888 _o$2889 _o$2890)))) (_o$2894 (jolt-conj binds (let* ((_o$2891 f) (_o$2892 init)) (jolt-vector _o$2891 _o$2892))))) (jolt-vector _o$2893 _o$2894)))))) (_a$2898 (let* ((_o$2895 env) (_o$2896 (jolt-vector))) (jolt-vector _o$2895 _o$2896))) (_a$2899 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2897 _a$2898 _a$2899)))) (let* ((_a$2903 node) (_a$2904 (keyword #f "bindings")) (_a$2905 (jolt-nth res 1)) (_a$2906 (keyword #f "body")) (_a$2907 (let* ((_a$2900 subst) (_a$2901 (jolt-get node (keyword #f "body"))) (_a$2902 (jolt-nth res 0))) (jolt-invoke _a$2900 _a$2901 _a$2902)))) (jolt-assoc _a$2903 _a$2904 _a$2905 _a$2906 _a$2907))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2908 ((c c)) (jolt-invoke subst c env))) node) jolt-nil)))))))) subst))) + (def-var! "jolt.passes.inline" "subst" (letrec ((subst (lambda (node env) (let fnrec3386 ((node node) (env env)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (let* ((r (jolt-get env (jolt-get node (keyword #f "name"))))) (if (jolt-truthy? r) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get r (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get node (keyword #f "hint")))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-get r (keyword #f "hint"))) and__13__auto)) and__13__auto))) (jolt-assoc r (keyword #f "hint") (jolt-get node (keyword #f "hint"))) r) node)) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3398 (lambda (acc b) (let fnrec3387 ((acc acc) (b b)) (let* ((e (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (nm (jolt-nth b 0)) (init (jolt-invoke subst (jolt-nth b 1) e)) (f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") nm))) (let* ((_o$3394 (jolt-assoc e nm (let* ((_o$3388 (keyword #f "op")) (_o$3389 (keyword #f "local")) (_o$3390 (keyword #f "name")) (_o$3391 f)) (jolt-hash-map _o$3388 _o$3389 _o$3390 _o$3391)))) (_o$3395 (jolt-conj binds (let* ((_o$3392 f) (_o$3393 init)) (jolt-vector _o$3392 _o$3393))))) (jolt-vector _o$3394 _o$3395)))))) (_a$3399 (let* ((_o$3396 env) (_o$3397 (jolt-vector))) (jolt-vector _o$3396 _o$3397))) (_a$3400 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3398 _a$3399 _a$3400)))) (let* ((_a$3404 node) (_a$3405 (keyword #f "bindings")) (_a$3406 (jolt-nth res 1)) (_a$3407 (keyword #f "body")) (_a$3408 (let* ((_a$3401 subst) (_a$3402 (jolt-get node (keyword #f "body"))) (_a$3403 (jolt-nth res 0))) (jolt-invoke _a$3401 _a$3402 _a$3403)))) (jolt-assoc _a$3404 _a$3405 _a$3406 _a$3407 _a$3408))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3409 ((c c)) (jolt-invoke subst c env))) node) jolt-nil)))))))) subst))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "trivial-arg?" (letrec ((trivial-arg? (lambda (n) (let fnrec2909 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "const"))))))))) trivial-arg?))) + (def-var! "jolt.passes.inline" "trivial-arg?" (letrec ((trivial-arg? (lambda (n) (let fnrec3410 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "const"))))))))) trivial-arg?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "body-closed?" (letrec ((body-closed? (lambda (node scope) (let fnrec2910 ((node node) (scope scope)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (jolt-contains? scope (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$2916 (lambda (acc b) (let fnrec2911 ((acc acc) (b b)) (let* ((sc (jolt-nth acc 0)) (ok (jolt-nth acc 1))) (if (jolt-not ok) acc (let* ((_o$2912 (jolt-conj sc (jolt-nth b 0))) (_o$2913 (jolt-invoke body-closed? (jolt-nth b 1) sc))) (jolt-vector _o$2912 _o$2913))))))) (_a$2917 (let* ((_o$2914 scope) (_o$2915 #t)) (jolt-vector _o$2914 _o$2915))) (_a$2918 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2916 _a$2917 _a$2918)))) (let* ((and__13__auto (jolt-nth res 1))) (if (jolt-truthy? and__13__auto) (let* ((_a$2919 body-closed?) (_a$2920 (jolt-get node (keyword #f "body"))) (_a$2921 (jolt-nth res 0))) (jolt-invoke _a$2919 _a$2920 _a$2921)) and__13__auto))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec2922 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? c scope) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) body-closed?))) + (def-var! "jolt.passes.inline" "body-closed?" (letrec ((body-closed? (lambda (node scope) (let fnrec3411 ((node node) (scope scope)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (jolt-contains? scope (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3417 (lambda (acc b) (let fnrec3412 ((acc acc) (b b)) (let* ((sc (jolt-nth acc 0)) (ok (jolt-nth acc 1))) (if (jolt-not ok) acc (let* ((_o$3413 (jolt-conj sc (jolt-nth b 0))) (_o$3414 (jolt-invoke body-closed? (jolt-nth b 1) sc))) (jolt-vector _o$3413 _o$3414))))))) (_a$3418 (let* ((_o$3415 scope) (_o$3416 #t)) (jolt-vector _o$3415 _o$3416))) (_a$3419 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3417 _a$3418 _a$3419)))) (let* ((and__13__auto (jolt-nth res 1))) (if (jolt-truthy? and__13__auto) (let* ((_a$3420 body-closed?) (_a$3421 (jolt-get node (keyword #f "body"))) (_a$3422 (jolt-nth res 0))) (jolt-invoke _a$3420 _a$3421 _a$3422)) and__13__auto))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec3423 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? c scope) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) body-closed?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "try-inline" (letrec ((try-inline (lambda (node ctx) (let fnrec2923 ((node node) (ctx ctx)) (let* ((f (jolt-get node (keyword #f "fn")))) (if (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))) (let* ((stash (let* ((_a$2924 (var-deref "jolt.host" "inline-ir")) (_a$2925 ctx) (_a$2926 (jolt-get f (keyword #f "ns"))) (_a$2927 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$2924 _a$2925 _a$2926 _a$2927)))) (if (jolt-truthy? stash) (let* ((params (jolt-get stash (keyword #f "params"))) (body (jolt-get stash (keyword #f "body"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (let* ((_a$2928 (jolt-count params)) (_a$2929 (jolt-count args))) (jolt= _a$2928 _a$2929)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (<= (jolt-invoke (var-deref "jolt.passes.inline" "body-size") body) (var-deref "jolt.passes.inline" "inline-budget")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "body-closed?") body (jolt-reduce jolt-conj (jolt-hash-set) params)) and__13__auto)) and__13__auto))) (let* ((n (jolt-count params)) (res (let* ((i 0) (env (jolt-hash-map)) (binds (jolt-vector))) (let loop2930 ((i i) (env env) (binds binds)) (if (< i n) (let* ((p (jolt-nth params i)) (a (jolt-nth args i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "trivial-arg?") a)) (let* ((_a$2931 (jolt-inc i)) (_a$2932 (jolt-assoc env p a)) (_a$2933 binds)) (loop2930 _a$2931 _a$2932 _a$2933)) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$2940 (jolt-inc i)) (_a$2941 (jolt-assoc env p (let* ((_o$2934 (keyword #f "op")) (_o$2935 (keyword #f "local")) (_o$2936 (keyword #f "name")) (_o$2937 f)) (jolt-hash-map _o$2934 _o$2935 _o$2936 _o$2937)))) (_a$2942 (jolt-conj binds (let* ((_o$2938 f) (_o$2939 a)) (jolt-vector _o$2938 _o$2939))))) (loop2930 _a$2940 _a$2941 _a$2942))))) (let* ((_o$2943 env) (_o$2944 binds)) (jolt-vector _o$2943 _o$2944)))))) (env (jolt-nth res 0)) (binds (jolt-nth res 1)) (rbody (jolt-invoke (var-deref "jolt.passes.inline" "subst") body env))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count binds)) rbody (let* ((_o$2945 (keyword #f "op")) (_o$2946 (keyword #f "let")) (_o$2947 (keyword #f "bindings")) (_o$2948 binds) (_o$2949 (keyword #f "body")) (_o$2950 rbody)) (jolt-hash-map _o$2945 _o$2946 _o$2947 _o$2948 _o$2949 _o$2950))))) node)) node)) node)))))) try-inline))) + (def-var! "jolt.passes.inline" "try-inline" (letrec ((try-inline (lambda (node ctx) (let fnrec3424 ((node node) (ctx ctx)) (let* ((f (jolt-get node (keyword #f "fn")))) (if (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))) (let* ((stash (let* ((_a$3425 (var-deref "jolt.host" "inline-ir")) (_a$3426 ctx) (_a$3427 (jolt-get f (keyword #f "ns"))) (_a$3428 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$3425 _a$3426 _a$3427 _a$3428)))) (if (jolt-truthy? stash) (let* ((params (jolt-get stash (keyword #f "params"))) (body (jolt-get stash (keyword #f "body"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (let* ((_a$3429 (jolt-count params)) (_a$3430 (jolt-count args))) (jolt= _a$3429 _a$3430)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (<= (jolt-invoke (var-deref "jolt.passes.inline" "body-size") body) (var-deref "jolt.passes.inline" "inline-budget")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "body-closed?") body (jolt-reduce jolt-conj (jolt-hash-set) params)) and__13__auto)) and__13__auto))) (let* ((n (jolt-count params)) (res (let* ((i 0) (env (jolt-hash-map)) (binds (jolt-vector))) (let loop3431 ((i i) (env env) (binds binds)) (if (< i n) (let* ((p (jolt-nth params i)) (a (jolt-nth args i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "trivial-arg?") a)) (let* ((_a$3432 (jolt-inc i)) (_a$3433 (jolt-assoc env p a)) (_a$3434 binds)) (loop3431 _a$3432 _a$3433 _a$3434)) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$3441 (jolt-inc i)) (_a$3442 (jolt-assoc env p (let* ((_o$3435 (keyword #f "op")) (_o$3436 (keyword #f "local")) (_o$3437 (keyword #f "name")) (_o$3438 f)) (jolt-hash-map _o$3435 _o$3436 _o$3437 _o$3438)))) (_a$3443 (jolt-conj binds (let* ((_o$3439 f) (_o$3440 a)) (jolt-vector _o$3439 _o$3440))))) (loop3431 _a$3441 _a$3442 _a$3443))))) (let* ((_o$3444 env) (_o$3445 binds)) (jolt-vector _o$3444 _o$3445)))))) (env (jolt-nth res 0)) (binds (jolt-nth res 1)) (rbody (jolt-invoke (var-deref "jolt.passes.inline" "subst") body env))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count binds)) rbody (let* ((_o$3446 (keyword #f "op")) (_o$3447 (keyword #f "let")) (_o$3448 (keyword #f "bindings")) (_o$3449 binds) (_o$3450 (keyword #f "body")) (_o$3451 rbody)) (jolt-hash-map _o$3446 _o$3447 _o$3448 _o$3449 _o$3450 _o$3451))))) node)) node)) node)))))) try-inline))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "inline-node" (letrec ((inline-node (lambda (node ctx) (let fnrec2951 ((node node) (ctx ctx)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.inline" "try-inline") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2952 ((c c)) (jolt-invoke inline-node c ctx))) node) ctx) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2953 ((c c)) (jolt-invoke inline-node c ctx))) node)))))) inline-node))) + (def-var! "jolt.passes.inline" "inline-node" (letrec ((inline-node (lambda (node ctx) (let fnrec3452 ((node node) (ctx ctx)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.inline" "try-inline") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3453 ((c c)) (jolt-invoke inline-node c ctx))) node) ctx) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3454 ((c c)) (jolt-invoke inline-node c ctx))) node)))))) inline-node))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "flatten-let-bindings" (letrec ((flatten-let-bindings (lambda (binds) (let fnrec2954 ((binds binds)) (let* ((_a$2960 (lambda (out b) (let fnrec2955 ((out out) (b b)) (let* ((nm (jolt-nth b 0)) (init (jolt-nth b 1))) (if (jolt= (keyword #f "let") (jolt-get init (keyword #f "op"))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (let* ((_a$2958 (jolt-reduce jolt-conj out (jolt-get init (keyword #f "bindings")))) (_a$2959 (let* ((_o$2956 nm) (_o$2957 (jolt-get init (keyword #f "body")))) (jolt-vector _o$2956 _o$2957)))) (jolt-conj _a$2958 _a$2959))) (jolt-conj out b)))))) (_a$2961 (jolt-vector)) (_a$2962 binds)) (jolt-reduce _a$2960 _a$2961 _a$2962)))))) flatten-let-bindings))) + (def-var! "jolt.passes.inline" "flatten-let-bindings" (letrec ((flatten-let-bindings (lambda (binds) (let fnrec3455 ((binds binds)) (let* ((_a$3461 (lambda (out b) (let fnrec3456 ((out out) (b b)) (let* ((nm (jolt-nth b 0)) (init (jolt-nth b 1))) (if (jolt= (keyword #f "let") (jolt-get init (keyword #f "op"))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (let* ((_a$3459 (jolt-reduce jolt-conj out (jolt-get init (keyword #f "bindings")))) (_a$3460 (let* ((_o$3457 nm) (_o$3458 (jolt-get init (keyword #f "body")))) (jolt-vector _o$3457 _o$3458)))) (jolt-conj _a$3459 _a$3460))) (jolt-conj out b)))))) (_a$3462 (jolt-vector)) (_a$3463 binds)) (jolt-reduce _a$3461 _a$3462 _a$3463)))))) flatten-let-bindings))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "flatten-lets" (letrec ((flatten-lets (lambda (node) (let fnrec2963 ((node node)) (if (jolt= (keyword #f "let") (jolt-get node (keyword #f "op"))) (let* ((n (jolt-invoke (var-deref "jolt.ir" "map-ir-children") flatten-lets node))) (jolt-assoc n (keyword #f "bindings") (jolt-invoke (var-deref "jolt.passes.inline" "flatten-let-bindings") (jolt-get n (keyword #f "bindings"))))) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") flatten-lets node)))))) flatten-lets))) + (def-var! "jolt.passes.inline" "flatten-lets" (letrec ((flatten-lets (lambda (node) (let fnrec3464 ((node node)) (if (jolt= (keyword #f "let") (jolt-get node (keyword #f "op"))) (let* ((n (jolt-invoke (var-deref "jolt.ir" "map-ir-children") flatten-lets node))) (jolt-assoc n (keyword #f "bindings") (jolt-invoke (var-deref "jolt.passes.inline" "flatten-let-bindings") (jolt-get n (keyword #f "bindings"))))) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") flatten-lets node)))))) flatten-lets))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.inline" "pure-fns" (let* ((_o$2964 "+") (_o$2965 "-") (_o$2966 "*") (_o$2967 "/") (_o$2968 "<") (_o$2969 ">") (_o$2970 "<=") (_o$2971 ">=") (_o$2972 "=") (_o$2973 "not=") (_o$2974 "inc") (_o$2975 "dec") (_o$2976 "mod") (_o$2977 "rem") (_o$2978 "quot") (_o$2979 "min") (_o$2980 "max") (_o$2981 "abs") (_o$2982 "nil?") (_o$2983 "some?") (_o$2984 "not") (_o$2985 "get") (_o$2986 "zero?") (_o$2987 "pos?") (_o$2988 "neg?") (_o$2989 "even?") (_o$2990 "odd?") (_o$2991 "bit-and") (_o$2992 "bit-or") (_o$2993 "bit-xor")) (jolt-hash-set _o$2964 _o$2965 _o$2966 _o$2967 _o$2968 _o$2969 _o$2970 _o$2971 _o$2972 _o$2973 _o$2974 _o$2975 _o$2976 _o$2977 _o$2978 _o$2979 _o$2980 _o$2981 _o$2982 _o$2983 _o$2984 _o$2985 _o$2986 _o$2987 _o$2988 _o$2989 _o$2990 _o$2991 _o$2992 _o$2993)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.inline" "pure-fns" (let* ((_o$3465 "+") (_o$3466 "-") (_o$3467 "*") (_o$3468 "/") (_o$3469 "<") (_o$3470 ">") (_o$3471 "<=") (_o$3472 ">=") (_o$3473 "=") (_o$3474 "not=") (_o$3475 "inc") (_o$3476 "dec") (_o$3477 "mod") (_o$3478 "rem") (_o$3479 "quot") (_o$3480 "min") (_o$3481 "max") (_o$3482 "abs") (_o$3483 "nil?") (_o$3484 "some?") (_o$3485 "not") (_o$3486 "get") (_o$3487 "zero?") (_o$3488 "pos?") (_o$3489 "neg?") (_o$3490 "even?") (_o$3491 "odd?") (_o$3492 "bit-and") (_o$3493 "bit-or") (_o$3494 "bit-xor")) (jolt-hash-set _o$3465 _o$3466 _o$3467 _o$3468 _o$3469 _o$3470 _o$3471 _o$3472 _o$3473 _o$3474 _o$3475 _o$3476 _o$3477 _o$3478 _o$3479 _o$3480 _o$3481 _o$3482 _o$3483 _o$3484 _o$3485 _o$3486 _o$3487 _o$3488 _o$3489 _o$3490 _o$3491 _o$3492 _o$3493 _o$3494)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "pure-fn?" (letrec ((pure-fn? (lambda (f) (let fnrec2994 ((f f)) (let* ((op (jolt-get f (keyword #f "op")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))) and__13__auto))) #t (if (jolt= op (keyword #f "var")) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) and__13__auto)) (if (jolt= op (keyword #f "host")) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) pure-fn?))) + (def-var! "jolt.passes.inline" "pure-fn?" (letrec ((pure-fn? (lambda (f) (let fnrec3495 ((f f)) (let* ((op (jolt-get f (keyword #f "op")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))) and__13__auto))) #t (if (jolt= op (keyword #f "var")) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) and__13__auto)) (if (jolt= op (keyword #f "host")) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) pure-fn?))) (guard (e (#t #f)) (declare-var! "jolt.passes.inline" "ctor-shape")) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "pure?" (letrec ((pure? (lambda (node) (let fnrec2995 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((and__13__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "pure-fn?") (jolt-get node (keyword #f "fn"))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") node))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "args"))) and__13__auto)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec2996 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? c) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil)))))))) pure?))) + (def-var! "jolt.passes.inline" "pure?" (letrec ((pure? (lambda (node) (let fnrec3496 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((and__13__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "pure-fn?") (jolt-get node (keyword #f "fn"))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") node))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "args"))) and__13__auto)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec3497 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? c) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil)))))))) pure?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "const-key-map?" (letrec ((const-key-map? (lambda (node) (let fnrec2997 ((node node)) (let* ((prs (jolt-get node (keyword #f "pairs")))) (let* ((and__13__auto (> (jolt-count prs) 0))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec2998 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) prs) and__13__auto))))))) const-key-map?))) + (def-var! "jolt.passes.inline" "const-key-map?" (letrec ((const-key-map? (lambda (node) (let fnrec3498 ((node node)) (let* ((prs (jolt-get node (keyword #f "pairs")))) (let* ((and__13__auto (> (jolt-count prs) 0))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec3499 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) prs) and__13__auto))))))) const-key-map?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "all-vals-pure?" (letrec ((all-vals-pure? (lambda (node) (let fnrec2999 ((node node)) (let* ((_a$3001 (var-deref "clojure.core" "every?")) (_a$3002 (lambda (pr) (let fnrec3000 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.inline" "pure?") (jolt-nth pr 1))))) (_a$3003 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$3001 _a$3002 _a$3003)))))) all-vals-pure?))) + (def-var! "jolt.passes.inline" "all-vals-pure?" (letrec ((all-vals-pure? (lambda (node) (let fnrec3500 ((node node)) (let* ((_a$3502 (var-deref "clojure.core" "every?")) (_a$3503 (lambda (pr) (let fnrec3501 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.inline" "pure?") (jolt-nth pr 1))))) (_a$3504 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$3502 _a$3503 _a$3504)))))) all-vals-pure?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "map-val" (letrec ((map-val (lambda (mapnode k) (let fnrec3004 ((mapnode mapnode) (k k)) (let* ((prs (jolt-get mapnode (keyword #f "pairs"))) (n (jolt-count prs))) (let* ((i 0)) (let loop3005 ((i i)) (if (< i n) (let* ((pr (jolt-nth prs i))) (if (jolt= (jolt-get (jolt-nth pr 0) (keyword #f "val")) k) (jolt-nth pr 1) (loop3005 (jolt-inc i)))) (let* ((_o$3006 (keyword #f "op")) (_o$3007 (keyword #f "const")) (_o$3008 (keyword #f "val")) (_o$3009 jolt-nil)) (jolt-hash-map _o$3006 _o$3007 _o$3008 _o$3009)))))))))) map-val))) + (def-var! "jolt.passes.inline" "map-val" (letrec ((map-val (lambda (mapnode k) (let fnrec3505 ((mapnode mapnode) (k k)) (let* ((prs (jolt-get mapnode (keyword #f "pairs"))) (n (jolt-count prs))) (let* ((i 0)) (let loop3506 ((i i)) (if (< i n) (let* ((pr (jolt-nth prs i))) (if (jolt= (jolt-get (jolt-nth pr 0) (keyword #f "val")) k) (jolt-nth pr 1) (loop3506 (jolt-inc i)))) (let* ((_o$3507 (keyword #f "op")) (_o$3508 (keyword #f "const")) (_o$3509 (keyword #f "val")) (_o$3510 jolt-nil)) (jolt-hash-map _o$3507 _o$3508 _o$3509 _o$3510)))))))))) map-val))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "lookup-key" (letrec ((lookup-key (lambda (node nm) (let fnrec3010 ((node node) (nm nm)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get f (keyword #f "val")) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth args 1)) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get (jolt-nth args 1) (keyword #f "val")) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) jolt-nil))))) lookup-key))) + (def-var! "jolt.passes.inline" "lookup-key" (letrec ((lookup-key (lambda (node nm) (let fnrec3511 ((node node) (nm nm)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get f (keyword #f "val")) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth args 1)) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get (jolt-nth args 1) (keyword #f "val")) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) jolt-nil))))) lookup-key))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "any-binding-named?" (letrec ((any-binding-named? (lambda (binds nm) (let fnrec3011 ((binds binds) (nm nm)) (let* ((i 0)) (let loop3012 ((i i)) (if (< i (jolt-count binds)) (if (jolt= nm (jolt-nth (jolt-nth binds i) 0)) #t (loop3012 (jolt-inc i))) #f))))))) any-binding-named?))) + (def-var! "jolt.passes.inline" "any-binding-named?" (letrec ((any-binding-named? (lambda (binds nm) (let fnrec3512 ((binds binds) (nm nm)) (let* ((i 0)) (let loop3513 ((i i)) (if (< i (jolt-count binds)) (if (jolt= nm (jolt-nth (jolt-nth binds i) 0)) #t (loop3513 (jolt-inc i))) #f))))))) any-binding-named?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "any-name?" (letrec ((any-name? (lambda (names nm) (let fnrec3013 ((names names) (nm nm)) (let* ((i 0)) (let loop3014 ((i i)) (if (< i (jolt-count names)) (if (jolt= nm (jolt-nth names i)) #t (loop3014 (jolt-inc i))) #f))))))) any-name?))) + (def-var! "jolt.passes.inline" "any-name?" (letrec ((any-name? (lambda (names nm) (let fnrec3514 ((names names) (nm nm)) (let* ((i 0)) (let loop3515 ((i i)) (if (< i (jolt-count names)) (if (jolt= nm (jolt-nth names i)) #t (loop3515 (jolt-inc i))) #f))))))) any-name?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "local-escapes?" (letrec ((local-escapes? (lambda (node nm) (let fnrec3015 ((node node) (nm nm)) (let* ((op (jolt-get node (keyword #f "op"))) (k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (let* ((args (jolt-get node (keyword #f "args")))) (if (> (jolt-count args) 1) (let* ((i 1)) (let loop3016 ((i i)) (if (< i (jolt-count args)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth args i) nm)) #t (loop3016 (jolt-inc i))) #f))) #f)) (if (jolt= op (keyword #f "local")) (jolt= nm (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "const")) #f (if (jolt= op (keyword #f "var")) #f (if (jolt= op (keyword #f "host")) #f (if (jolt= op (keyword #f "the-var")) #f (if (jolt= op (keyword #f "quote")) #f (if (jolt= op (keyword #f "if")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "test")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "then")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "else")) nm))))) (if (jolt= op (keyword #f "do")) (let* ((or__14__auto (let* ((i 0) (ss (jolt-get node (keyword #f "statements")))) (let loop3017 ((i i) (ss ss)) (if (< i (jolt-count ss)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth ss i) nm)) #t (loop3017 (jolt-inc i) ss)) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "ret")) nm))) (if (jolt= op (keyword #f "throw")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "expr")) nm) (if (jolt= op (keyword #f "invoke")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "fn")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3018 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3018 (jolt-inc i) as)) #f))))) (if (jolt= op (keyword #f "vector")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3019 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3019 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "set")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3020 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3020 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "map")) (let* ((i 0) (ps (jolt-get node (keyword #f "pairs")))) (let loop3021 ((i i) (ps ps)) (if (< i (jolt-count ps)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 0) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 1) nm)))) #t (loop3021 (jolt-inc i) ps)) #f))) (if (jolt= op (keyword #f "let")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3022 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3022 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "recur")) (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3023 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3023 (jolt-inc i) as)) #f))) (if (jolt= op (keyword #f "loop")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3024 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3024 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "fn")) (let* ((i 0) (ars (jolt-get node (keyword #f "arities")))) (let loop3025 ((i i) (ars ars)) (if (< i (jolt-count ars)) (let* ((ar (jolt-nth ars i)) (ps (jolt-get ar (keyword #f "params")))) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "any-name?") ps nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= nm (jolt-get ar (keyword #f "rest")))))) #t (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-get ar (keyword #f "body")) nm)) #t (loop3025 (jolt-inc i) ars)))) #f))) (if (jolt= op (keyword #f "try")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (let* ((cb (jolt-get node (keyword #f "catch-body")))) (let* ((and__13__auto cb)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt= nm (jolt-get node (keyword #f "catch-sym")))))) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? cb nm) and__13__auto)) and__13__auto))))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((f (jolt-get node (keyword #f "finally")))) (let* ((and__13__auto f)) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? f nm) and__13__auto))))))) (if (jolt= op (keyword #f "def")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "init")) nm) (if (jolt-truthy? (keyword #f "else")) #t jolt-nil)))))))))))))))))))))))))) local-escapes?))) + (def-var! "jolt.passes.inline" "local-escapes?" (letrec ((local-escapes? (lambda (node nm) (let fnrec3516 ((node node) (nm nm)) (let* ((op (jolt-get node (keyword #f "op"))) (k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (let* ((args (jolt-get node (keyword #f "args")))) (if (> (jolt-count args) 1) (let* ((i 1)) (let loop3517 ((i i)) (if (< i (jolt-count args)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth args i) nm)) #t (loop3517 (jolt-inc i))) #f))) #f)) (if (jolt= op (keyword #f "local")) (jolt= nm (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "const")) #f (if (jolt= op (keyword #f "var")) #f (if (jolt= op (keyword #f "host")) #f (if (jolt= op (keyword #f "the-var")) #f (if (jolt= op (keyword #f "quote")) #f (if (jolt= op (keyword #f "if")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "test")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "then")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "else")) nm))))) (if (jolt= op (keyword #f "do")) (let* ((or__14__auto (let* ((i 0) (ss (jolt-get node (keyword #f "statements")))) (let loop3518 ((i i) (ss ss)) (if (< i (jolt-count ss)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth ss i) nm)) #t (loop3518 (jolt-inc i) ss)) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "ret")) nm))) (if (jolt= op (keyword #f "throw")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "expr")) nm) (if (jolt= op (keyword #f "invoke")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "fn")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3519 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3519 (jolt-inc i) as)) #f))))) (if (jolt= op (keyword #f "vector")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3520 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3520 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "set")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3521 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3521 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "map")) (let* ((i 0) (ps (jolt-get node (keyword #f "pairs")))) (let loop3522 ((i i) (ps ps)) (if (< i (jolt-count ps)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 0) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 1) nm)))) #t (loop3522 (jolt-inc i) ps)) #f))) (if (jolt= op (keyword #f "let")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3523 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3523 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "recur")) (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3524 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3524 (jolt-inc i) as)) #f))) (if (jolt= op (keyword #f "loop")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3525 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3525 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "fn")) (let* ((i 0) (ars (jolt-get node (keyword #f "arities")))) (let loop3526 ((i i) (ars ars)) (if (< i (jolt-count ars)) (let* ((ar (jolt-nth ars i)) (ps (jolt-get ar (keyword #f "params")))) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "any-name?") ps nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= nm (jolt-get ar (keyword #f "rest")))))) #t (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-get ar (keyword #f "body")) nm)) #t (loop3526 (jolt-inc i) ars)))) #f))) (if (jolt= op (keyword #f "try")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (let* ((cb (jolt-get node (keyword #f "catch-body")))) (let* ((and__13__auto cb)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt= nm (jolt-get node (keyword #f "catch-sym")))))) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? cb nm) and__13__auto)) and__13__auto))))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((f (jolt-get node (keyword #f "finally")))) (let* ((and__13__auto f)) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? f nm) and__13__auto))))))) (if (jolt= op (keyword #f "def")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "init")) nm) (if (jolt-truthy? (keyword #f "else")) #t jolt-nil)))))))))))))))))))))))))) local-escapes?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "ctor-shape" (letrec ((ctor-shape (lambda (node) (let fnrec3026 ((node node)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((f (jolt-get node (keyword #f "fn")))) (if (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))) (let* ((rs (let* ((_a$3031 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "rec-shapes"))) (_a$3032 (let* ((_a$3027 (var-deref "clojure.core" "str")) (_a$3028 (jolt-get f (keyword #f "ns"))) (_a$3029 "/") (_a$3030 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$3027 _a$3028 _a$3029 _a$3030)))) (jolt-get _a$3031 _a$3032)))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((_a$3033 (jolt-count (jolt-get rs (keyword #f "fields")))) (_a$3034 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt= _a$3033 _a$3034)) and__13__auto))) rs jolt-nil)) jolt-nil)) jolt-nil))))) ctor-shape))) + (def-var! "jolt.passes.inline" "ctor-shape" (letrec ((ctor-shape (lambda (node) (let fnrec3527 ((node node)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((f (jolt-get node (keyword #f "fn")))) (if (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))) (let* ((rs (let* ((_a$3532 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "rec-shapes"))) (_a$3533 (let* ((_a$3528 (var-deref "clojure.core" "str")) (_a$3529 (jolt-get f (keyword #f "ns"))) (_a$3530 "/") (_a$3531 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$3528 _a$3529 _a$3530 _a$3531)))) (jolt-get _a$3532 _a$3533)))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((_a$3534 (jolt-count (jolt-get rs (keyword #f "fields")))) (_a$3535 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt= _a$3534 _a$3535)) and__13__auto))) rs jolt-nil)) jolt-nil)) jolt-nil))))) ctor-shape))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "ctor-all-args-pure?" (letrec ((ctor-all-args-pure? (lambda (node) (let fnrec3035 ((node node)) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.inline" "pure?") (jolt-get node (keyword #f "args"))))))) ctor-all-args-pure?))) + (def-var! "jolt.passes.inline" "ctor-all-args-pure?" (letrec ((ctor-all-args-pure? (lambda (node) (let fnrec3536 ((node node)) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.inline" "pure?") (jolt-get node (keyword #f "args"))))))) ctor-all-args-pure?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "field-index" (letrec ((field-index (lambda (fields k) (let fnrec3036 ((fields fields) (k k)) (let* ((n (jolt-count fields))) (let* ((i 0)) (let loop3037 ((i i)) (if (< i n) (if (jolt= (jolt-nth fields i) k) i (loop3037 (jolt-inc i))) jolt-nil)))))))) field-index))) + (def-var! "jolt.passes.inline" "field-index" (letrec ((field-index (lambda (fields k) (let fnrec3537 ((fields fields) (k k)) (let* ((n (jolt-count fields))) (let* ((i 0)) (let loop3538 ((i i)) (if (< i n) (if (jolt= (jolt-nth fields i) k) i (loop3538 (jolt-inc i))) jolt-nil)))))))) field-index))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "ctor-val" (letrec ((ctor-val (lambda (ctor rs k) (let fnrec3038 ((ctor ctor) (rs rs) (k k)) (let* ((_a$3039 (jolt-get ctor (keyword #f "args"))) (_a$3040 (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k))) (jolt-nth _a$3039 _a$3040)))))) ctor-val))) + (def-var! "jolt.passes.inline" "ctor-val" (letrec ((ctor-val (lambda (ctor rs k) (let fnrec3539 ((ctor ctor) (rs rs) (k k)) (let* ((_a$3540 (jolt-get ctor (keyword #f "args"))) (_a$3541 (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k))) (jolt-nth _a$3540 _a$3541)))))) ctor-val))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "collect-keys!" (letrec ((collect-keys! (lambda (node nm acc) (let fnrec3041 ((node node) (nm nm) (acc acc)) (let* ((k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (jolt-invoke (var-deref "clojure.core" "swap!") acc jolt-conj k) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3042 ((c c)) (begin (jolt-invoke collect-keys! c nm acc) c))) node))))))) collect-keys!))) + (def-var! "jolt.passes.inline" "collect-keys!" (letrec ((collect-keys! (lambda (node nm acc) (let fnrec3542 ((node node) (nm nm) (acc acc)) (let* ((k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (jolt-invoke (var-deref "clojure.core" "swap!") acc jolt-conj k) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3543 ((c c)) (begin (jolt-invoke collect-keys! c nm acc) c))) node))))))) collect-keys!))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "lookups-all-fields?" (letrec ((lookups-all-fields? (lambda (nodes nm fields) (let fnrec3043 ((nodes nodes) (nm nm) (fields fields)) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (node) (let fnrec3044 ((node node)) (let* ((acc (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set)))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "collect-keys!") node nm acc) (let* ((_a$3046 (var-deref "clojure.core" "every?")) (_a$3047 (lambda (k) (let fnrec3045 ((k k)) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") fields k)))) (_a$3048 (jolt-invoke (var-deref "clojure.core" "deref") acc))) (jolt-invoke _a$3046 _a$3047 _a$3048)))))) nodes))))) lookups-all-fields?))) + (def-var! "jolt.passes.inline" "lookups-all-fields?" (letrec ((lookups-all-fields? (lambda (nodes nm fields) (let fnrec3544 ((nodes nodes) (nm nm) (fields fields)) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (node) (let fnrec3545 ((node node)) (let* ((acc (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set)))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "collect-keys!") node nm acc) (let* ((_a$3547 (var-deref "clojure.core" "every?")) (_a$3548 (lambda (k) (let fnrec3546 ((k k)) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") fields k)))) (_a$3549 (jolt-invoke (var-deref "clojure.core" "deref") acc))) (jolt-invoke _a$3547 _a$3548 _a$3549)))))) nodes))))) lookups-all-fields?))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "src-val" (letrec ((src-val (lambda (src k) (let fnrec3049 ((src src) (k k)) (if (jolt= (keyword #f "map") (jolt-get src (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") src k) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") src (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") src) k)))))) src-val))) + (def-var! "jolt.passes.inline" "src-val" (letrec ((src-val (lambda (src k) (let fnrec3550 ((src src) (k k)) (if (jolt= (keyword #f "map") (jolt-get src (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") src k) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") src (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") src) k)))))) src-val))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "subst-lookup" (letrec ((subst-lookup (lambda (node nm src) (let fnrec3050 ((node node) (nm nm) (src src)) (let* ((k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (jolt-invoke (var-deref "jolt.passes.inline" "src-val") src k) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3051 ((c c)) (jolt-invoke subst-lookup c nm src))) node))))))) subst-lookup))) + (def-var! "jolt.passes.inline" "subst-lookup" (letrec ((subst-lookup (lambda (node nm src) (let fnrec3551 ((node node) (nm nm) (src src)) (let* ((k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (jolt-invoke (var-deref "jolt.passes.inline" "src-val") src k) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec3552 ((c c)) (jolt-invoke subst-lookup c nm src))) node))))))) subst-lookup))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "fold-kw-literal" (letrec ((fold-kw-literal (lambda (node) (let fnrec3052 ((node node)) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (jolt= 1 (jolt-count args)) and__13__auto)) and__13__auto))) (let* ((m (jolt-nth args 0)) (k (jolt-get f (keyword #f "val")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get m (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") m) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") m k)) (let* ((rs (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") m))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") m rs k)) node)))) node)))))) fold-kw-literal))) + (def-var! "jolt.passes.inline" "fold-kw-literal" (letrec ((fold-kw-literal (lambda (node) (let fnrec3553 ((node node)) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (jolt= 1 (jolt-count args)) and__13__auto)) and__13__auto))) (let* ((m (jolt-nth args 0)) (k (jolt-get f (keyword #f "val")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get m (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") m) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") m k)) (let* ((rs (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") m))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") m rs k)) node)))) node)))))) fold-kw-literal))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "elim-let-structs" (letrec ((elim-let-structs (lambda (node) (let fnrec3053 ((node node)) (let* ((binds (jolt-get node (keyword #f "bindings"))) (n (jolt-count binds)) (body (jolt-get node (keyword #f "body")))) (let* ((i 0)) (let loop3054 ((i i)) (if (< i n) (let* ((b (jolt-nth binds i)) (nm (jolt-nth b 0)) (init (jolt-nth b 1)) (ismap (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get init (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") init))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") init) and__13__auto)) and__13__auto))) (rs (if (jolt-not ismap) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") init) jolt-nil)) (isrec (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") init) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto isrec)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n) nm)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (let* ((j (jolt-inc i))) (let loop3055 ((j j)) (if (< j n) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") (jolt-nth (jolt-nth binds j) 1) nm)) #t (loop3055 (jolt-inc j))) #f)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") body nm)))) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((_a$3060 (var-deref "jolt.passes.inline" "lookups-all-fields?")) (_a$3061 (jolt-conj (let* ((_a$3057 (var-deref "clojure.core" "mapv")) (_a$3058 (lambda (bb) (let fnrec3056 ((bb bb)) (jolt-nth bb 1)))) (_a$3059 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3057 _a$3058 _a$3059)) body)) (_a$3062 nm) (_a$3063 (jolt-get rs (keyword #f "fields")))) (jolt-invoke _a$3060 _a$3061 _a$3062 _a$3063)))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((head (jolt-invoke (var-deref "clojure.core" "subvec") binds 0 i)) (tail (let* ((_a$3067 (var-deref "clojure.core" "mapv")) (_a$3068 (lambda (bb) (let fnrec3064 ((bb bb)) (let* ((_o$3065 (jolt-nth bb 0)) (_o$3066 (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") (jolt-nth bb 1) nm init))) (jolt-vector _o$3065 _o$3066))))) (_a$3069 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3067 _a$3068 _a$3069))) (newbinds (jolt-reduce jolt-conj head tail)) (newbody (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") body nm init))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count newbinds)) newbody (jolt-assoc node (keyword #f "bindings") newbinds (keyword #f "body") newbody)))) (loop3054 (jolt-inc i)))) node)))))))) elim-let-structs))) + (def-var! "jolt.passes.inline" "elim-let-structs" (letrec ((elim-let-structs (lambda (node) (let fnrec3554 ((node node)) (let* ((binds (jolt-get node (keyword #f "bindings"))) (n (jolt-count binds)) (body (jolt-get node (keyword #f "body")))) (let* ((i 0)) (let loop3555 ((i i)) (if (< i n) (let* ((b (jolt-nth binds i)) (nm (jolt-nth b 0)) (init (jolt-nth b 1)) (ismap (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get init (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") init))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") init) and__13__auto)) and__13__auto))) (rs (if (jolt-not ismap) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") init) jolt-nil)) (isrec (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") init) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto isrec)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n) nm)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (let* ((j (jolt-inc i))) (let loop3556 ((j j)) (if (< j n) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") (jolt-nth (jolt-nth binds j) 1) nm)) #t (loop3556 (jolt-inc j))) #f)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") body nm)))) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((_a$3561 (var-deref "jolt.passes.inline" "lookups-all-fields?")) (_a$3562 (jolt-conj (let* ((_a$3558 (var-deref "clojure.core" "mapv")) (_a$3559 (lambda (bb) (let fnrec3557 ((bb bb)) (jolt-nth bb 1)))) (_a$3560 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3558 _a$3559 _a$3560)) body)) (_a$3563 nm) (_a$3564 (jolt-get rs (keyword #f "fields")))) (jolt-invoke _a$3561 _a$3562 _a$3563 _a$3564)))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((head (jolt-invoke (var-deref "clojure.core" "subvec") binds 0 i)) (tail (let* ((_a$3568 (var-deref "clojure.core" "mapv")) (_a$3569 (lambda (bb) (let fnrec3565 ((bb bb)) (let* ((_o$3566 (jolt-nth bb 0)) (_o$3567 (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") (jolt-nth bb 1) nm init))) (jolt-vector _o$3566 _o$3567))))) (_a$3570 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3568 _a$3569 _a$3570))) (newbinds (jolt-reduce jolt-conj head tail)) (newbody (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") body nm init))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count newbinds)) newbody (jolt-assoc node (keyword #f "bindings") newbinds (keyword #f "body") newbody)))) (loop3555 (jolt-inc i)))) node)))))))) elim-let-structs))) (guard (e (#t #f)) - (def-var! "jolt.passes.inline" "scalar-replace" (letrec ((scalar-replace (lambda (node) (let fnrec3070 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.passes.inline" "fold-kw-literal") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt= op (keyword #f "let")) (jolt-invoke (var-deref "jolt.passes.inline" "elim-let-structs") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node) jolt-nil)))))))) scalar-replace))) + (def-var! "jolt.passes.inline" "scalar-replace" (letrec ((scalar-replace (lambda (node) (let fnrec3571 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.passes.inline" "fold-kw-literal") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt= op (keyword #f "let")) (jolt-invoke (var-deref "jolt.passes.inline" "elim-let-structs") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node) jolt-nil)))))))) scalar-replace))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "velem" (letrec ((velem (lambda (t) (let fnrec3071 ((t t)) (jolt-get t (keyword #f "vec")))))) velem))) + (def-var! "jolt.passes.types.lattice" "velem" (letrec ((velem (lambda (t) (let fnrec3572 ((t t)) (jolt-get t (keyword #f "vec")))))) velem))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "selem" (letrec ((selem (lambda (t) (let fnrec3072 ((t t)) (jolt-get t (keyword #f "set")))))) selem))) + (def-var! "jolt.passes.types.lattice" "selem" (letrec ((selem (lambda (t) (let fnrec3573 ((t t)) (jolt-get t (keyword #f "set")))))) selem))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "sfields" (letrec ((sfields (lambda (t) (let fnrec3073 ((t t)) (jolt-get t (keyword #f "struct")))))) sfields))) + (def-var! "jolt.passes.types.lattice" "sfields" (letrec ((sfields (lambda (t) (let fnrec3574 ((t t)) (jolt-get t (keyword #f "struct")))))) sfields))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "vec-type?" (letrec ((vec-type? (lambda (t) (let fnrec3074 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "velem") t)))))) vec-type?))) + (def-var! "jolt.passes.types.lattice" "vec-type?" (letrec ((vec-type? (lambda (t) (let fnrec3575 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") t)))))) vec-type?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-type?" (letrec ((set-type? (lambda (t) (let fnrec3075 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "selem") t)))))) set-type?))) + (def-var! "jolt.passes.types.lattice" "set-type?" (letrec ((set-type? (lambda (t) (let fnrec3576 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") t)))))) set-type?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "struct-type?" (letrec ((struct-type? (lambda (t) (let fnrec3076 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "sfields") t)))))) struct-type?))) + (def-var! "jolt.passes.types.lattice" "struct-type?" (letrec ((struct-type? (lambda (t) (let fnrec3577 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t)))))) struct-type?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "mk-vec" (letrec ((mk-vec (lambda (t) (let fnrec3077 ((t t)) (let* ((_o$3078 (keyword #f "vec")) (_o$3079 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3078 _o$3079)))))) mk-vec))) + (def-var! "jolt.passes.types.lattice" "mk-vec" (letrec ((mk-vec (lambda (t) (let fnrec3578 ((t t)) (let* ((_o$3579 (keyword #f "vec")) (_o$3580 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3579 _o$3580)))))) mk-vec))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "mk-set" (letrec ((mk-set (lambda (t) (let fnrec3080 ((t t)) (let* ((_o$3081 (keyword #f "set")) (_o$3082 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3081 _o$3082)))))) mk-set))) + (def-var! "jolt.passes.types.lattice" "mk-set" (letrec ((mk-set (lambda (t) (let fnrec3581 ((t t)) (let* ((_o$3582 (keyword #f "set")) (_o$3583 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3582 _o$3583)))))) mk-set))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "mk-struct" (letrec ((mk-struct (lambda (fs) (let fnrec3083 ((fs fs)) (let* ((_o$3084 (keyword #f "struct")) (_o$3085 fs)) (jolt-hash-map _o$3084 _o$3085)))))) mk-struct))) + (def-var! "jolt.passes.types.lattice" "mk-struct" (letrec ((mk-struct (lambda (fs) (let fnrec3584 ((fs fs)) (let* ((_o$3585 (keyword #f "struct")) (_o$3586 fs)) (jolt-hash-map _o$3585 _o$3586)))))) mk-struct))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "union-cap" 4 (jolt-hash-map (keyword #f "private") #t))) + (def-var! "jolt.passes.types.lattice" "union-cap" 4)) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "scalar-t?" (letrec ((scalar-t? (lambda (t) (let fnrec3086 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "phm")))))))))))))) scalar-t?))) + (def-var! "jolt.passes.types.lattice" "scalar-t?" (letrec ((scalar-t? (lambda (t) (let fnrec3587 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "phm")))))))))))))) scalar-t?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "union-type?" (letrec ((union-type? (lambda (t) (let fnrec3087 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "union"))))))) union-type?))) + (def-var! "jolt.passes.types.lattice" "union-type?" (letrec ((union-type? (lambda (t) (let fnrec3588 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "union"))))))) union-type?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "umembers" (letrec ((umembers (lambda (t) (let fnrec3088 ((t t)) (jolt-get t (keyword #f "union")))))) umembers))) + (def-var! "jolt.passes.types.lattice" "umembers" (letrec ((umembers (lambda (t) (let fnrec3589 ((t t)) (jolt-get t (keyword #f "union")))))) umembers))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "union-of" (letrec ((union-of (lambda (ts) (let fnrec3089 ((ts ts)) (let* ((flat (let* ((_a$3091 (lambda (acc t) (let fnrec3090 ((acc acc) (t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-reduce jolt-conj acc (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (jolt-conj acc t))))) (_a$3092 (jolt-hash-set)) (_a$3093 ts)) (jolt-reduce _a$3091 _a$3092 _a$3093)))) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.types" "scalar-t?") flat)) (keyword #f "any") (if (jolt= 0 (jolt-count flat)) (keyword #f "any") (if (jolt= 1 (jolt-count flat)) (jolt-first flat) (if (> (jolt-count flat) (var-deref "jolt.passes.types" "union-cap")) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3094 (keyword #f "union")) (_o$3095 flat)) (jolt-hash-map _o$3094 _o$3095)) jolt-nil)))))))))) union-of))) + (def-var! "jolt.passes.types.lattice" "union-of" (letrec ((union-of (lambda (ts) (let fnrec3590 ((ts ts)) (let* ((flat (let* ((_a$3592 (lambda (acc t) (let fnrec3591 ((acc acc) (t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (jolt-reduce jolt-conj acc (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t)) (jolt-conj acc t))))) (_a$3593 (jolt-hash-set)) (_a$3594 ts)) (jolt-reduce _a$3592 _a$3593 _a$3594)))) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.types.lattice" "scalar-t?") flat)) (keyword #f "any") (if (jolt= 0 (jolt-count flat)) (keyword #f "any") (if (jolt= 1 (jolt-count flat)) (jolt-first flat) (if (> (jolt-count flat) (var-deref "jolt.passes.types.lattice" "union-cap")) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3595 (keyword #f "union")) (_o$3596 flat)) (jolt-hash-map _o$3595 _o$3596)) jolt-nil)))))))))) union-of))) (guard (e (#t #f)) - (declare-var! "jolt.passes.types" "join-t")) + (declare-var! "jolt.passes.types.lattice" "join-t")) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "merge-fields" (letrec ((merge-fields (lambda (fa fb) (let fnrec3096 ((fa fa) (fb fb)) (let* ((m1 (let* ((_a$3101 (lambda (m k) (let fnrec3097 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3098 (var-deref "jolt.passes.types" "join-t")) (_a$3099 (jolt-get fa k (keyword #f "any"))) (_a$3100 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3098 _a$3099 _a$3100)))))) (_a$3102 (jolt-hash-map)) (_a$3103 (jolt-keys fa))) (jolt-reduce _a$3101 _a$3102 _a$3103)))) (let* ((_a$3108 (lambda (m k) (let fnrec3104 ((m m) (k k)) (if (jolt-truthy? (jolt-get m k)) m (jolt-assoc m k (let* ((_a$3105 (var-deref "jolt.passes.types" "join-t")) (_a$3106 (jolt-get fa k (keyword #f "any"))) (_a$3107 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3105 _a$3106 _a$3107))))))) (_a$3109 m1) (_a$3110 (jolt-keys fb))) (jolt-reduce _a$3108 _a$3109 _a$3110))))))) merge-fields))) + (def-var! "jolt.passes.types.lattice" "merge-fields" (letrec ((merge-fields (lambda (fa fb) (let fnrec3597 ((fa fa) (fb fb)) (let* ((m1 (let* ((_a$3602 (lambda (m k) (let fnrec3598 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3599 (var-deref "jolt.passes.types.lattice" "join-t")) (_a$3600 (jolt-get fa k (keyword #f "any"))) (_a$3601 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3599 _a$3600 _a$3601)))))) (_a$3603 (jolt-hash-map)) (_a$3604 (jolt-keys fa))) (jolt-reduce _a$3602 _a$3603 _a$3604)))) (let* ((_a$3609 (lambda (m k) (let fnrec3605 ((m m) (k k)) (if (jolt-truthy? (jolt-get m k)) m (jolt-assoc m k (let* ((_a$3606 (var-deref "jolt.passes.types.lattice" "join-t")) (_a$3607 (jolt-get fa k (keyword #f "any"))) (_a$3608 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3606 _a$3607 _a$3608))))))) (_a$3610 m1) (_a$3611 (jolt-keys fb))) (jolt-reduce _a$3609 _a$3610 _a$3611))))))) merge-fields))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "join-t" (letrec ((join-t (lambda (a b) (let fnrec3111 ((a a) (b b)) (if (jolt= a b) a (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") a)) b (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") b)) a (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") b) and__13__auto))) (let* ((merged (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3112 (var-deref "jolt.passes.types" "merge-fields")) (_a$3113 (jolt-invoke (var-deref "jolt.passes.types" "sfields") a)) (_a$3114 (jolt-invoke (var-deref "jolt.passes.types" "sfields") b))) (jolt-invoke _a$3112 _a$3113 _a$3114))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-get a (keyword #f "shape")))) (if (jolt-truthy? and__13__auto) (let* ((_a$3115 (jolt-get a (keyword #f "shape"))) (_a$3116 (jolt-get b (keyword #f "shape")))) (jolt= _a$3115 _a$3116)) and__13__auto))) (jolt-assoc merged (keyword #f "shape") (jolt-get a (keyword #f "shape"))) merged)) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3117 join-t) (_a$3118 (jolt-invoke (var-deref "jolt.passes.types" "velem") a)) (_a$3119 (jolt-invoke (var-deref "jolt.passes.types" "velem") b))) (jolt-invoke _a$3117 _a$3118 _a$3119))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "set-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-set") (let* ((_a$3120 join-t) (_a$3121 (jolt-invoke (var-deref "jolt.passes.types" "selem") a)) (_a$3122 (jolt-invoke (var-deref "jolt.passes.types" "selem") b))) (jolt-invoke _a$3120 _a$3121 _a$3122))) (if (jolt-truthy? (keyword #f "else")) (let* ((ma (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") a)) (jolt-invoke (var-deref "jolt.passes.types" "umembers") a) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "scalar-t?") a)) (jolt-hash-set a) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (mb (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") b)) (jolt-invoke (var-deref "jolt.passes.types" "umembers") b) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "scalar-t?") b)) (jolt-hash-set b) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt-truthy? (let* ((and__13__auto ma)) (if (jolt-truthy? and__13__auto) mb and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "union-of") (jolt-reduce jolt-conj ma mb)) (keyword #f "any"))) jolt-nil))))))))))) join-t))) + (def-var! "jolt.passes.types.lattice" "join-t" (letrec ((join-t (lambda (a b) (let fnrec3612 ((a a) (b b)) (if (jolt= a b) a (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") a)) b (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") b)) a (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") b) and__13__auto))) (let* ((merged (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") (let* ((_a$3613 (var-deref "jolt.passes.types.lattice" "merge-fields")) (_a$3614 (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") a)) (_a$3615 (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") b))) (jolt-invoke _a$3613 _a$3614 _a$3615))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-get a (keyword #f "shape")))) (if (jolt-truthy? and__13__auto) (let* ((_a$3616 (jolt-get a (keyword #f "shape"))) (_a$3617 (jolt-get b (keyword #f "shape")))) (jolt= _a$3616 _a$3617)) and__13__auto))) (jolt-assoc merged (keyword #f "shape") (jolt-get a (keyword #f "shape"))) merged)) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (let* ((_a$3618 join-t) (_a$3619 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") a)) (_a$3620 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") b))) (jolt-invoke _a$3618 _a$3619 _a$3620))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-set") (let* ((_a$3621 join-t) (_a$3622 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") a)) (_a$3623 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") b))) (jolt-invoke _a$3621 _a$3622 _a$3623))) (if (jolt-truthy? (keyword #f "else")) (let* ((ma (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") a)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") a) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "scalar-t?") a)) (jolt-hash-set a) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (mb (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") b)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") b) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "scalar-t?") b)) (jolt-hash-set b) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt-truthy? (let* ((and__13__auto ma)) (if (jolt-truthy? and__13__auto) mb and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-of") (jolt-reduce jolt-conj ma mb)) (keyword #f "any"))) jolt-nil))))))))))) join-t))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "join" (letrec ((join (lambda (a b) (let fnrec3123 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types" "join-t") a b))))) join))) + (def-var! "jolt.passes.types.lattice" "join" (letrec ((join (lambda (a b) (let fnrec3624 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join-t") a b))))) join))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "type-depth" 4 (jolt-hash-map (keyword #f "private") #t))) + (def-var! "jolt.passes.types.lattice" "type-depth" 4)) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "cap" (letrec ((cap (lambda (t d) (let fnrec3124 ((t t) (d d)) (if (<= d 0) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)))))) (keyword #f "any") t) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) (let* ((capped (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3129 (lambda (m k) (let fnrec3125 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3126 cap) (_a$3127 (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "sfields") t) k)) (_a$3128 (jolt-dec d))) (jolt-invoke _a$3126 _a$3127 _a$3128)))))) (_a$3130 (jolt-hash-map)) (_a$3131 (jolt-keys (jolt-invoke (var-deref "jolt.passes.types" "sfields") t)))) (jolt-reduce _a$3129 _a$3130 _a$3131)))) (capped (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc capped (keyword #f "shape") (jolt-get t (keyword #f "shape"))) capped)) (capped (if (jolt-truthy? (jolt-get t (keyword #f "type"))) (jolt-assoc capped (keyword #f "type") (jolt-get t (keyword #f "type"))) capped))) capped) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3132 cap) (_a$3133 (jolt-invoke (var-deref "jolt.passes.types" "velem") t)) (_a$3134 (jolt-dec d))) (jolt-invoke _a$3132 _a$3133 _a$3134))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)) (jolt-invoke (var-deref "jolt.passes.types" "mk-set") (let* ((_a$3135 cap) (_a$3136 (jolt-invoke (var-deref "jolt.passes.types" "selem") t)) (_a$3137 (jolt-dec d))) (jolt-invoke _a$3135 _a$3136 _a$3137))) (if (jolt-truthy? (keyword #f "else")) t jolt-nil))))))))) cap))) + (def-var! "jolt.passes.types.lattice" "cap" (letrec ((cap (lambda (t d) (let fnrec3625 ((t t) (d d)) (if (<= d 0) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t)))))) (keyword #f "any") t) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t)) (let* ((capped (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") (let* ((_a$3630 (lambda (m k) (let fnrec3626 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3627 cap) (_a$3628 (jolt-get (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t) k)) (_a$3629 (jolt-dec d))) (jolt-invoke _a$3627 _a$3628 _a$3629)))))) (_a$3631 (jolt-hash-map)) (_a$3632 (jolt-keys (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t)))) (jolt-reduce _a$3630 _a$3631 _a$3632)))) (capped (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc capped (keyword #f "shape") (jolt-get t (keyword #f "shape"))) capped)) (capped (if (jolt-truthy? (jolt-get t (keyword #f "type"))) (jolt-assoc capped (keyword #f "type") (jolt-get t (keyword #f "type"))) capped))) capped) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (let* ((_a$3633 cap) (_a$3634 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") t)) (_a$3635 (jolt-dec d))) (jolt-invoke _a$3633 _a$3634 _a$3635))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-set") (let* ((_a$3636 cap) (_a$3637 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") t)) (_a$3638 (jolt-dec d))) (jolt-invoke _a$3636 _a$3637 _a$3638))) (if (jolt-truthy? (keyword #f "else")) t jolt-nil))))))))) cap))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "struct-safe?" (letrec ((struct-safe? (lambda (t) (let fnrec3138 ((t t)) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))))) struct-safe?))) + (def-var! "jolt.passes.types.lattice" "struct-safe?" (letrec ((struct-safe? (lambda (t) (let fnrec3639 ((t t)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))))) struct-safe?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "field-type" (letrec ((field-type (lambda (t k) (let fnrec3139 ((t t) (k k)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "sfields") t) k (keyword #f "any")) (keyword #f "any")))))) field-type))) + (def-var! "jolt.passes.types.lattice" "field-type" (letrec ((field-type (lambda (t k) (let fnrec3640 ((t t) (k k)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t)) (jolt-get (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t) k (keyword #f "any")) (keyword #f "any")))))) field-type))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "shape-order" (letrec ((shape-order (lambda (ks) (let fnrec3140 ((ks ks)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "sort") (lambda (a b) (let fnrec3141 ((a a) (b b)) (let* ((_a$3142 (var-deref "clojure.core" "compare")) (_a$3143 (jolt-invoke (var-deref "clojure.core" "str") a)) (_a$3144 (jolt-invoke (var-deref "clojure.core" "str") b))) (jolt-invoke _a$3142 _a$3143 _a$3144)))) ks)))))) shape-order))) + (def-var! "jolt.passes.types.lattice" "shape-order" (letrec ((shape-order (lambda (ks) (let fnrec3641 ((ks ks)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "sort") (lambda (a b) (let fnrec3642 ((a a) (b b)) (let* ((_a$3643 (var-deref "clojure.core" "compare")) (_a$3644 (jolt-invoke (var-deref "clojure.core" "str") a)) (_a$3645 (jolt-invoke (var-deref "clojure.core" "str") b))) (jolt-invoke _a$3643 _a$3644 _a$3645)))) ks)))))) shape-order))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "type-shape" (letrec ((type-shape (lambda (t) (let fnrec3145 ((t t)) (jolt-get t (keyword #f "shape")))))) type-shape))) + (def-var! "jolt.passes.types.lattice" "type-shape" (letrec ((type-shape (lambda (t) (let fnrec3646 ((t t)) (jolt-get t (keyword #f "shape")))))) type-shape))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "mark-struct" (letrec ((mark-struct (lambda (node t) (let fnrec3146 ((node node) (t t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc n (keyword #f "shape") (jolt-get t (keyword #f "shape"))) n)))))) mark-struct))) + (def-var! "jolt.passes.types.lattice" "mark-struct" (letrec ((mark-struct (lambda (node t) (let fnrec3647 ((node node) (t t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc n (keyword #f "shape") (jolt-get t (keyword #f "shape"))) n)))))) mark-struct))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "truthy-type?" (letrec ((truthy-type? (lambda (t) (let fnrec3147 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t))))))))))))))))))) truthy-type?))) + (def-var! "jolt.passes.types.lattice" "truthy-type?" (letrec ((truthy-type? (lambda (t) (let fnrec3648 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t))))))))))))))))))) truthy-type?))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "num-ret-fns" (let* ((_o$3148 "+") (_o$3149 "-") (_o$3150 "*") (_o$3151 "/") (_o$3152 "inc") (_o$3153 "dec") (_o$3154 "mod") (_o$3155 "rem") (_o$3156 "quot") (_o$3157 "min") (_o$3158 "max") (_o$3159 "abs") (_o$3160 "bit-and") (_o$3161 "bit-or") (_o$3162 "bit-xor") (_o$3163 "count")) (jolt-hash-set _o$3148 _o$3149 _o$3150 _o$3151 _o$3152 _o$3153 _o$3154 _o$3155 _o$3156 _o$3157 _o$3158 _o$3159 _o$3160 _o$3161 _o$3162 _o$3163)) (jolt-hash-map (keyword #f "private") #t))) + (def-var! "jolt.passes.types.lattice" "num-ret-fns" (let* ((_o$3649 "+") (_o$3650 "-") (_o$3651 "*") (_o$3652 "/") (_o$3653 "inc") (_o$3654 "dec") (_o$3655 "mod") (_o$3656 "rem") (_o$3657 "quot") (_o$3658 "min") (_o$3659 "max") (_o$3660 "abs") (_o$3661 "bit-and") (_o$3662 "bit-or") (_o$3663 "bit-xor") (_o$3664 "count")) (jolt-hash-set _o$3649 _o$3650 _o$3651 _o$3652 _o$3653 _o$3654 _o$3655 _o$3656 _o$3657 _o$3658 _o$3659 _o$3660 _o$3661 _o$3662 _o$3663 _o$3664)))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "vector-ret-fns" (let* ((_o$3164 "vec") (_o$3165 "vector") (_o$3166 "mapv") (_o$3167 "filterv") (_o$3168 "subvec")) (jolt-hash-set _o$3164 _o$3165 _o$3166 _o$3167 _o$3168)) (jolt-hash-map (keyword #f "private") #t))) + (def-var! "jolt.passes.types.lattice" "vector-ret-fns" (let* ((_o$3665 "vec") (_o$3666 "vector") (_o$3667 "mapv") (_o$3668 "filterv") (_o$3669 "subvec")) (jolt-hash-set _o$3665 _o$3666 _o$3667 _o$3668 _o$3669)))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.types" "rtenv-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) @@ -357,9 +357,9 @@ (guard (e (#t #f)) (declare-var! "jolt.passes.types" "record-type-from-entry")) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "field-type-from-tag" (letrec ((field-type-from-tag (lambda (tag depth) (let fnrec3169 ((tag tag) (depth depth)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") tag))) (if (jolt-truthy? or__14__auto) or__14__auto (<= depth 0)))) (keyword #f "any") (if (jolt= tag "num") (keyword #f "num") (if (jolt-truthy? (keyword #f "else")) (let* ((e (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) tag))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e depth) (keyword #f "any"))) jolt-nil))))))) field-type-from-tag))) + (def-var! "jolt.passes.types" "field-type-from-tag" (letrec ((field-type-from-tag (lambda (tag depth) (let fnrec2877 ((tag tag) (depth depth)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") tag))) (if (jolt-truthy? or__14__auto) or__14__auto (<= depth 0)))) (keyword #f "any") (if (jolt= tag "num") (keyword #f "num") (if (jolt-truthy? (keyword #f "else")) (let* ((e (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) tag))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e depth) (keyword #f "any"))) jolt-nil))))))) field-type-from-tag))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "record-type-from-entry" (letrec ((record-type-from-entry (lambda (rs depth) (let fnrec3170 ((rs rs) (depth depth)) (let* ((fields (jolt-get rs (keyword #f "fields"))) (tags (jolt-get rs (keyword #f "tags"))) (fmap (let* ((_a$3178 (lambda (m i) (let fnrec3171 ((m m) (i i)) (let* ((_a$3175 m) (_a$3176 (jolt-nth fields i)) (_a$3177 (let* ((_a$3172 (var-deref "jolt.passes.types" "field-type-from-tag")) (_a$3173 (if (jolt-truthy? tags) (jolt-nth tags i) jolt-nil)) (_a$3174 (jolt-dec depth))) (jolt-invoke _a$3172 _a$3173 _a$3174)))) (jolt-assoc _a$3175 _a$3176 _a$3177))))) (_a$3179 (jolt-hash-map)) (_a$3180 (jolt-range (jolt-count fields)))) (jolt-reduce _a$3178 _a$3179 _a$3180)))) (let* ((_a$3181 (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") fmap)) (_a$3182 (keyword #f "shape")) (_a$3183 (jolt-invoke (var-deref "clojure.core" "vec") fields)) (_a$3184 (keyword #f "type")) (_a$3185 (jolt-get rs (keyword #f "type")))) (jolt-assoc _a$3181 _a$3182 _a$3183 _a$3184 _a$3185))))))) record-type-from-entry))) + (def-var! "jolt.passes.types" "record-type-from-entry" (letrec ((record-type-from-entry (lambda (rs depth) (let fnrec2878 ((rs rs) (depth depth)) (let* ((fields (jolt-get rs (keyword #f "fields"))) (tags (jolt-get rs (keyword #f "tags"))) (fmap (let* ((_a$2886 (lambda (m i) (let fnrec2879 ((m m) (i i)) (let* ((_a$2883 m) (_a$2884 (jolt-nth fields i)) (_a$2885 (let* ((_a$2880 (var-deref "jolt.passes.types" "field-type-from-tag")) (_a$2881 (if (jolt-truthy? tags) (jolt-nth tags i) jolt-nil)) (_a$2882 (jolt-dec depth))) (jolt-invoke _a$2880 _a$2881 _a$2882)))) (jolt-assoc _a$2883 _a$2884 _a$2885))))) (_a$2887 (jolt-hash-map)) (_a$2888 (jolt-range (jolt-count fields)))) (jolt-reduce _a$2886 _a$2887 _a$2888)))) (let* ((_a$2889 (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") fmap)) (_a$2890 (keyword #f "shape")) (_a$2891 (jolt-invoke (var-deref "clojure.core" "vec") fields)) (_a$2892 (keyword #f "type")) (_a$2893 (jolt-get rs (keyword #f "type")))) (jolt-assoc _a$2889 _a$2890 _a$2891 _a$2892 _a$2893))))))) record-type-from-entry))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.types" "map-shapes-box" (jolt-invoke (var-deref "clojure.core" "atom") #f) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) @@ -371,86 +371,86 @@ (guard (e (#t #f)) (def-var-with-meta! "jolt.passes.types" "checking?" (jolt-invoke (var-deref "clojure.core" "atom") #f) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "elem-fns" (let* ((_o$3186 "rand-nth") (_o$3187 "first") (_o$3188 "peek") (_o$3189 "last") (_o$3190 "nth") (_o$3191 "fnext") (_o$3192 "second")) (jolt-hash-set _o$3186 _o$3187 _o$3188 _o$3189 _o$3190 _o$3191 _o$3192)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "elem-fns" (let* ((_o$2894 "rand-nth") (_o$2895 "first") (_o$2896 "peek") (_o$2897 "last") (_o$2898 "nth") (_o$2899 "fnext") (_o$2900 "second")) (jolt-hash-set _o$2894 _o$2895 _o$2896 _o$2897 _o$2898 _o$2899 _o$2900)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) (begin (declare-var! "jolt.passes.types" "check-invoke") (declare-var! "jolt.passes.types" "check-user-call") (declare-var! "jolt.passes.types" "register-user-fn!") (declare-var! "jolt.passes.types" "not-callable?") (declare-var! "jolt.passes.types" "type-name"))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "var-key" (letrec ((var-key (lambda (fnode) (let fnrec3193 ((fnode fnode)) (let* ((_a$3194 (var-deref "clojure.core" "str")) (_a$3195 (jolt-get fnode (keyword #f "ns"))) (_a$3196 "/") (_a$3197 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$3194 _a$3195 _a$3196 _a$3197)))))) var-key))) + (def-var! "jolt.passes.types" "var-key" (letrec ((var-key (lambda (fnode) (let fnrec2901 ((fnode fnode)) (let* ((_a$2902 (var-deref "clojure.core" "str")) (_a$2903 (jolt-get fnode (keyword #f "ns"))) (_a$2904 "/") (_a$2905 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$2902 _a$2903 _a$2904 _a$2905)))))) var-key))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "call-ret-type" (letrec ((call-ret-type (lambda (fnode) (let fnrec3198 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (jolt= op (keyword #f "var")) (let* ((rs (let* ((_a$3199 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3200 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3199 _a$3200)))) (if (jolt-truthy? rs) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") rs (var-deref "jolt.passes.types" "type-depth")) (let* ((r (let* ((_a$3201 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "rtenv-box"))) (_a$3202 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3201 _a$3202)))) (if (jolt-truthy? r) r (let* ((nm (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-get fnode (keyword #f "name")) and__13__auto)))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") nm)) (keyword #f "any") (if (jolt-contains? (var-deref "jolt.passes.types" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))))))) (if (jolt= op (keyword #f "host")) (let* ((nm (jolt-get fnode (keyword #f "name")))) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))))))) call-ret-type))) + (def-var! "jolt.passes.types" "call-ret-type" (letrec ((call-ret-type (lambda (fnode) (let fnrec2906 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (jolt= op (keyword #f "var")) (let* ((rs (let* ((_a$2907 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$2908 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$2907 _a$2908)))) (if (jolt-truthy? rs) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") rs (var-deref "jolt.passes.types.lattice" "type-depth")) (let* ((r (let* ((_a$2909 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "rtenv-box"))) (_a$2910 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$2909 _a$2910)))) (if (jolt-truthy? r) r (let* ((nm (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-get fnode (keyword #f "name")) and__13__auto)))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") nm)) (keyword #f "any") (if (jolt-contains? (var-deref "jolt.passes.types.lattice" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types.lattice" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))))))) (if (jolt= op (keyword #f "host")) (let* ((nm (jolt-get fnode (keyword #f "name")))) (if (jolt-contains? (var-deref "jolt.passes.types.lattice" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types.lattice" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))))))) call-ret-type))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "fold-preds" (let* ((_o$3203 "number?") (_o$3204 "string?") (_o$3205 "keyword?") (_o$3206 "record?") (_o$3207 "nil?") (_o$3208 "some?")) (jolt-hash-set _o$3203 _o$3204 _o$3205 _o$3206 _o$3207 _o$3208)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "fold-preds" (let* ((_o$2911 "number?") (_o$2912 "string?") (_o$2913 "keyword?") (_o$2914 "record?") (_o$2915 "nil?") (_o$2916 "some?")) (jolt-hash-set _o$2911 _o$2912 _o$2913 _o$2914 _o$2915 _o$2916)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "record-t?" (letrec ((record-t? (lambda (t) (let fnrec3209 ((t t)) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "type"))) and__13__auto)))))) record-t?))) + (def-var! "jolt.passes.types" "record-t?" (letrec ((record-t? (lambda (t) (let fnrec2917 ((t t)) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "type"))) and__13__auto)))))) record-t?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "pred-on" (letrec ((pred-on (lambda (pname t) (let fnrec3210 ((pname pname) (t t)) (if (jolt-truthy? (let* ((or__14__auto (jolt= t (keyword #f "any")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "truthy"))))) jolt-nil (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (let* ((vs (let* ((_a$3212 (lambda (m) (let fnrec3211 ((m m)) (jolt-invoke pred-on pname m)))) (_a$3213 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-map _a$3212 _a$3213)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-seq vs))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") (jolt-first vs))))) (if (jolt-truthy? and__13__auto) (jolt-apply jolt= vs) and__13__auto)) and__13__auto))) (jolt-first vs) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) (let* ((G__33 pname)) (if (jolt= G__33 "number?") (jolt= t (keyword #f "num")) (if (jolt= G__33 "string?") (jolt= t (keyword #f "str")) (if (jolt= G__33 "keyword?") (jolt= t (keyword #f "kw")) (if (jolt= G__33 "record?") (jolt-invoke (var-deref "jolt.passes.types" "record-t?") t) (if (jolt= G__33 "nil?") #f (if (jolt= G__33 "some?") #t jolt-nil))))))) jolt-nil))))))) pred-on))) + (def-var! "jolt.passes.types" "pred-on" (letrec ((pred-on (lambda (pname t) (let fnrec2918 ((pname pname) (t t)) (if (jolt-truthy? (let* ((or__14__auto (jolt= t (keyword #f "any")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "truthy"))))) jolt-nil (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (let* ((vs (let* ((_a$2920 (lambda (m) (let fnrec2919 ((m m)) (jolt-invoke pred-on pname m)))) (_a$2921 (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t))) (jolt-map _a$2920 _a$2921)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-seq vs))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") (jolt-first vs))))) (if (jolt-truthy? and__13__auto) (jolt-apply jolt= vs) and__13__auto)) and__13__auto))) (jolt-first vs) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) (let* ((G__33 pname)) (if (jolt= G__33 "number?") (jolt= t (keyword #f "num")) (if (jolt= G__33 "string?") (jolt= t (keyword #f "str")) (if (jolt= G__33 "keyword?") (jolt= t (keyword #f "kw")) (if (jolt= G__33 "record?") (jolt-invoke (var-deref "jolt.passes.types" "record-t?") t) (if (jolt= G__33 "nil?") #f (if (jolt= G__33 "some?") #t jolt-nil))))))) jolt-nil))))))) pred-on))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "pure-node?" (letrec ((pure-node? (lambda (n) (let fnrec3214 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "local"))))))))) pure-node?))) + (def-var! "jolt.passes.types" "pure-node?" (letrec ((pure-node? (lambda (n) (let fnrec2922 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "local"))))))))) pure-node?))) (guard (e (#t #f)) (declare-var! "jolt.passes.types" "infer")) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "hof-table" (let* ((_o$3231 "map") (_o$3232 (let* ((_o$3215 (keyword #f "epos")) (_o$3216 0)) (jolt-hash-map _o$3215 _o$3216))) (_o$3233 "mapv") (_o$3234 (let* ((_o$3217 (keyword #f "epos")) (_o$3218 0)) (jolt-hash-map _o$3217 _o$3218))) (_o$3235 "filter") (_o$3236 (let* ((_o$3219 (keyword #f "epos")) (_o$3220 0)) (jolt-hash-map _o$3219 _o$3220))) (_o$3237 "filterv") (_o$3238 (let* ((_o$3221 (keyword #f "epos")) (_o$3222 0)) (jolt-hash-map _o$3221 _o$3222))) (_o$3239 "keep") (_o$3240 (let* ((_o$3223 (keyword #f "epos")) (_o$3224 0)) (jolt-hash-map _o$3223 _o$3224))) (_o$3241 "remove") (_o$3242 (let* ((_o$3225 (keyword #f "epos")) (_o$3226 0)) (jolt-hash-map _o$3225 _o$3226))) (_o$3243 "run!") (_o$3244 (let* ((_o$3227 (keyword #f "epos")) (_o$3228 0)) (jolt-hash-map _o$3227 _o$3228))) (_o$3245 "mapcat") (_o$3246 (let* ((_o$3229 (keyword #f "epos")) (_o$3230 0)) (jolt-hash-map _o$3229 _o$3230)))) (jolt-hash-map _o$3231 _o$3232 _o$3233 _o$3234 _o$3235 _o$3236 _o$3237 _o$3238 _o$3239 _o$3240 _o$3241 _o$3242 _o$3243 _o$3244 _o$3245 _o$3246)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "hof-table" (let* ((_o$2939 "map") (_o$2940 (let* ((_o$2923 (keyword #f "epos")) (_o$2924 0)) (jolt-hash-map _o$2923 _o$2924))) (_o$2941 "mapv") (_o$2942 (let* ((_o$2925 (keyword #f "epos")) (_o$2926 0)) (jolt-hash-map _o$2925 _o$2926))) (_o$2943 "filter") (_o$2944 (let* ((_o$2927 (keyword #f "epos")) (_o$2928 0)) (jolt-hash-map _o$2927 _o$2928))) (_o$2945 "filterv") (_o$2946 (let* ((_o$2929 (keyword #f "epos")) (_o$2930 0)) (jolt-hash-map _o$2929 _o$2930))) (_o$2947 "keep") (_o$2948 (let* ((_o$2931 (keyword #f "epos")) (_o$2932 0)) (jolt-hash-map _o$2931 _o$2932))) (_o$2949 "remove") (_o$2950 (let* ((_o$2933 (keyword #f "epos")) (_o$2934 0)) (jolt-hash-map _o$2933 _o$2934))) (_o$2951 "run!") (_o$2952 (let* ((_o$2935 (keyword #f "epos")) (_o$2936 0)) (jolt-hash-map _o$2935 _o$2936))) (_o$2953 "mapcat") (_o$2954 (let* ((_o$2937 (keyword #f "epos")) (_o$2938 0)) (jolt-hash-map _o$2937 _o$2938)))) (jolt-hash-map _o$2939 _o$2940 _o$2941 _o$2942 _o$2943 _o$2944 _o$2945 _o$2946 _o$2947 _o$2948 _o$2949 _o$2950 _o$2951 _o$2952 _o$2953 _o$2954)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "infer-fn-seeded" (letrec ((infer-fn-seeded (lambda (node seeds tenv) (let fnrec3247 ((node node) (seeds seeds) (tenv tenv)) (let* ((res (let* ((_a$3258 (var-deref "clojure.core" "mapv")) (_a$3259 (lambda (a) (let fnrec3248 ((a a)) (let* ((params (jolt-get a (keyword #f "params"))) (pe (let* ((_a$3253 (lambda (e i) (let fnrec3249 ((e e) (i i)) (let* ((_a$3250 e) (_a$3251 (jolt-nth params i)) (_a$3252 (let* ((s (jolt-get seeds i))) (if (jolt-truthy? s) s (keyword #f "any"))))) (jolt-assoc _a$3250 _a$3251 _a$3252))))) (_a$3254 tenv) (_a$3255 (jolt-range (jolt-count params)))) (jolt-reduce _a$3253 _a$3254 _a$3255))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe)) (br (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pe))) (let* ((_o$3256 (jolt-nth br 0)) (_o$3257 (jolt-assoc a (keyword #f "body") (jolt-nth br 1)))) (jolt-vector _o$3256 _o$3257)))))) (_a$3260 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3258 _a$3259 _a$3260))) (rets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3261 ((r r)) (jolt-nth r 0))) res)) (ret (if (jolt-empty? rets) (keyword #f "any") (let* ((_a$3262 (var-deref "jolt.passes.types" "join")) (_a$3263 (jolt-first rets)) (_a$3264 (jolt-rest rets))) (jolt-reduce _a$3262 _a$3263 _a$3264))))) (let* ((_o$3266 ret) (_o$3267 (jolt-assoc node (keyword #f "arities") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3265 ((r r)) (jolt-nth r 1))) res)))) (jolt-vector _o$3266 _o$3267))))))) infer-fn-seeded))) + (def-var! "jolt.passes.types" "infer-fn-seeded" (letrec ((infer-fn-seeded (lambda (node seeds tenv) (let fnrec2955 ((node node) (seeds seeds) (tenv tenv)) (let* ((res (let* ((_a$2966 (var-deref "clojure.core" "mapv")) (_a$2967 (lambda (a) (let fnrec2956 ((a a)) (let* ((params (jolt-get a (keyword #f "params"))) (pe (let* ((_a$2961 (lambda (e i) (let fnrec2957 ((e e) (i i)) (let* ((_a$2958 e) (_a$2959 (jolt-nth params i)) (_a$2960 (let* ((s (jolt-get seeds i))) (if (jolt-truthy? s) s (keyword #f "any"))))) (jolt-assoc _a$2958 _a$2959 _a$2960))))) (_a$2962 tenv) (_a$2963 (jolt-range (jolt-count params)))) (jolt-reduce _a$2961 _a$2962 _a$2963))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe)) (br (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pe))) (let* ((_o$2964 (jolt-nth br 0)) (_o$2965 (jolt-assoc a (keyword #f "body") (jolt-nth br 1)))) (jolt-vector _o$2964 _o$2965)))))) (_a$2968 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$2966 _a$2967 _a$2968))) (rets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec2969 ((r r)) (jolt-nth r 0))) res)) (ret (if (jolt-empty? rets) (keyword #f "any") (let* ((_a$2970 (var-deref "jolt.passes.types.lattice" "join")) (_a$2971 (jolt-first rets)) (_a$2972 (jolt-rest rets))) (jolt-reduce _a$2970 _a$2971 _a$2972))))) (let* ((_o$2974 ret) (_o$2975 (jolt-assoc node (keyword #f "arities") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec2973 ((r r)) (jolt-nth r 1))) res)))) (jolt-vector _o$2974 _o$2975))))))) infer-fn-seeded))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "infer" (letrec ((infer (lambda (node tenv) (let fnrec3268 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$3269 (let* ((v (jolt-get node (keyword #f "val")))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (keyword #f "num") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (keyword #f "str") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (keyword #f "kw") (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= #f v)))) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (keyword #f "truthy") jolt-nil))))))) (_o$3270 node)) (jolt-vector _o$3269 _o$3270)) (if (jolt= op (keyword #f "local")) (let* ((t (jolt-get tenv (jolt-get node (keyword #f "name"))))) (let* ((_o$3271 (if (jolt-truthy? t) t (keyword #f "any"))) (_o$3272 (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "type-shape") t)) (jolt-assoc n (keyword #f "shape") (jolt-invoke (var-deref "jolt.passes.types" "type-shape") t)) n)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) (jolt-assoc node (keyword #f "hint") (keyword #f "vector")) (if (jolt-truthy? (keyword #f "else")) node jolt-nil))))) (jolt-vector _o$3271 _o$3272))) (if (jolt= op (keyword #f "map")) (let* ((pairs (jolt-get node (keyword #f "pairs"))) (res (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (pr) (let fnrec3273 ((pr pr)) (let* ((kr (jolt-invoke infer (jolt-nth pr 0) tenv)) (vr (jolt-invoke infer (jolt-nth pr 1) tenv))) (let* ((_o$3274 (jolt-nth kr 1)) (_o$3275 (jolt-nth vr 1)) (_o$3276 (jolt-nth vr 0)) (_o$3277 (jolt-get (jolt-nth pr 0) (keyword #f "val")))) (jolt-vector _o$3274 _o$3275 _o$3276 _o$3277))))) pairs)) (struct? (let* ((and__13__auto (> (jolt-count res) 0))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec3278 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) pairs))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (r) (let fnrec3279 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "truthy-type?") (jolt-nth r 2)))) res) and__13__auto)) and__13__auto))) (base (if (jolt-truthy? struct?) (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3284 (lambda (m r) (let fnrec3280 ((m m) (r r)) (let* ((_a$3281 m) (_a$3282 (jolt-nth r 3)) (_a$3283 (jolt-nth r 2))) (jolt-assoc _a$3281 _a$3282 _a$3283))))) (_a$3285 (jolt-hash-map)) (_a$3286 res)) (jolt-reduce _a$3284 _a$3285 _a$3286))) (var-deref "jolt.passes.types" "type-depth")) jolt-nil)) (shp (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "map-shapes-box")))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto base)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") base) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "shape-order") (jolt-keys (jolt-invoke (var-deref "jolt.passes.types" "sfields") base))) jolt-nil)) (t (if (jolt-truthy? base) (if (jolt-truthy? shp) (jolt-assoc base (keyword #f "shape") shp) base) (keyword #f "any"))) (node_PRIME_ (jolt-assoc node (keyword #f "pairs") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3287 ((r r)) (let* ((_o$3288 (jolt-nth r 0)) (_o$3289 (jolt-nth r 1))) (jolt-vector _o$3288 _o$3289)))) res)))) (let* ((_o$3290 t) (_o$3291 (if (jolt-truthy? shp) (jolt-assoc node_PRIME_ (keyword #f "shape") shp) node_PRIME_))) (jolt-vector _o$3290 _o$3291))) (if (jolt= op (keyword #f "vector")) (let* ((irs (let* ((_a$3293 (var-deref "clojure.core" "mapv")) (_a$3294 (lambda (x) (let fnrec3292 ((x x)) (jolt-invoke infer x tenv)))) (_a$3295 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3293 _a$3294 _a$3295))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3296 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3297 (var-deref "jolt.passes.types" "join")) (_a$3298 (jolt-first ets)) (_a$3299 (jolt-rest ets))) (jolt-reduce _a$3297 _a$3298 _a$3299))))) (let* ((_o$3301 (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") el) (var-deref "jolt.passes.types" "type-depth"))) (_o$3302 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3300 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3301 _o$3302))) (if (jolt= op (keyword #f "set")) (let* ((irs (let* ((_a$3304 (var-deref "clojure.core" "mapv")) (_a$3305 (lambda (x) (let fnrec3303 ((x x)) (jolt-invoke infer x tenv)))) (_a$3306 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3304 _a$3305 _a$3306))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3307 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3308 (var-deref "jolt.passes.types" "join")) (_a$3309 (jolt-first ets)) (_a$3310 (jolt-rest ets))) (jolt-reduce _a$3308 _a$3309 _a$3310))))) (let* ((_o$3312 (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-set") el) (var-deref "jolt.passes.types" "type-depth"))) (_o$3313 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3311 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3312 _o$3313))) (if (jolt= op (keyword #f "if")) (let* ((tr (jolt-invoke infer (jolt-get node (keyword #f "test")) tenv)) (thn (jolt-invoke infer (jolt-get node (keyword #f "then")) tenv)) (els (jolt-invoke infer (jolt-get node (keyword #f "else")) tenv))) (let* ((_o$3324 (let* ((_a$3314 (var-deref "jolt.passes.types" "join")) (_a$3315 (jolt-nth thn 0)) (_a$3316 (jolt-nth els 0))) (jolt-invoke _a$3314 _a$3315 _a$3316))) (_o$3325 (let* ((_a$3317 node) (_a$3318 (keyword #f "test")) (_a$3319 (jolt-nth tr 1)) (_a$3320 (keyword #f "then")) (_a$3321 (jolt-nth thn 1)) (_a$3322 (keyword #f "else")) (_a$3323 (jolt-nth els 1))) (jolt-assoc _a$3317 _a$3318 _a$3319 _a$3320 _a$3321 _a$3322 _a$3323)))) (jolt-vector _o$3324 _o$3325))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$3327 (var-deref "clojure.core" "mapv")) (_a$3328 (lambda (s) (let fnrec3326 ((s s)) (jolt-nth (jolt-invoke infer s tenv) 1)))) (_a$3329 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$3327 _a$3328 _a$3329))) (r (jolt-invoke infer (jolt-get node (keyword #f "ret")) tenv))) (let* ((_o$3330 (jolt-nth r 0)) (_o$3331 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$3330 _o$3331))) (if (jolt= op (keyword #f "throw")) (let* ((_o$3332 (keyword #f "any")) (_o$3333 (jolt-assoc node (keyword #f "expr") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "expr")) tenv) 1)))) (jolt-vector _o$3332 _o$3333)) (if (jolt= op (keyword #f "var")) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "escapes-box") jolt-conj (jolt-invoke (var-deref "jolt.passes.types" "var-key") node)) (let* ((_o$3336 (let* ((vt (let* ((_a$3334 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3335 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-get _a$3334 _a$3335)))) (if (jolt-truthy? vt) vt (keyword #f "any")))) (_o$3337 node)) (jolt-vector _o$3336 _o$3337))) (if (jolt= op (keyword #f "invoke")) (let* ((fnode (jolt-get node (keyword #f "fn"))) (iscall-var (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op")))) (cn (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__13__auto))) (jolt-get fnode (keyword #f "name")) jolt-nil)) (args (jolt-get node (keyword #f "args"))) (n (jolt-count args))) (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "fold-preds") cn))) (if (jolt-truthy? and__13__auto) (jolt= n 1) and__13__auto)) and__13__auto))) (let* ((ar (jolt-invoke infer (jolt-nth args 0) tenv)) (v (jolt-invoke (var-deref "jolt.passes.types" "pred-on") cn (jolt-nth ar 0)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") v)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "pure-node?") (jolt-nth ar 1)) and__13__auto))) (let* ((_o$3342 (keyword #f "any")) (_o$3343 (let* ((_o$3338 (keyword #f "op")) (_o$3339 (keyword #f "const")) (_o$3340 (keyword #f "val")) (_o$3341 v)) (jolt-hash-map _o$3338 _o$3339 _o$3340 _o$3341)))) (jolt-vector _o$3342 _o$3343)) (let* ((_o$3344 (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode)) (_o$3345 (jolt-assoc node (keyword #f "args") (jolt-vector (jolt-nth ar 1))))) (jolt-vector _o$3344 _o$3345)))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 1))) (if (jolt-truthy? and__13__auto) (<= n 2) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (ft (jolt-invoke (var-deref "jolt.passes.types" "field-type") mt (jolt-get fnode (keyword #f "val")))) (dr (if (jolt= n 2) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil))) (let* ((_o$3348 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3349 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3346 msub) (_o$3347 (jolt-nth dr 1))) (jolt-vector _o$3346 _o$3347)) (jolt-vector msub))))) (jolt-vector _o$3348 _o$3349))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get (jolt-nth args 1) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get (jolt-nth args 1) (keyword #f "val"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (kr (jolt-invoke infer (jolt-nth args 1) tenv)) (ft (jolt-invoke (var-deref "jolt.passes.types" "field-type") mt (jolt-get (jolt-nth args 1) (keyword #f "val")))) (dr (if (jolt= n 3) (jolt-invoke infer (jolt-nth args 2) tenv) jolt-nil))) (let* ((_o$3355 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3356 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3350 msub) (_o$3351 (jolt-nth kr 1)) (_o$3352 (jolt-nth dr 1))) (jolt-vector _o$3350 _o$3351 _o$3352)) (let* ((_o$3353 msub) (_o$3354 (jolt-nth kr 1))) (jolt-vector _o$3353 _o$3354)))))) (jolt-vector _o$3355 _o$3356))) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "reduce"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto))) (let* ((three (>= n 3)) (coll-r (jolt-invoke infer (jolt-nth args (if (jolt-truthy? three) 2 1)) tenv)) (init-r (if (jolt-truthy? three) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types" "velem") ct) (keyword #f "any")))) (init-t (if (jolt-truthy? init-r) (jolt-nth init-r 0) (keyword #f "any"))) (fn-r (let* ((_a$3361 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3362 (jolt-nth args 0)) (_a$3363 (let* ((_o$3357 0) (_o$3358 init-t) (_o$3359 1) (_o$3360 et)) (jolt-hash-map _o$3357 _o$3358 _o$3359 _o$3360))) (_a$3364 tenv)) (jolt-invoke _a$3361 _a$3362 _a$3363 _a$3364)))) (let* ((_o$3370 (jolt-invoke (var-deref "jolt.passes.types" "join") init-t (jolt-nth fn-r 0))) (_o$3371 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? three) (let* ((_o$3365 (jolt-nth fn-r 1)) (_o$3366 (jolt-nth init-r 1)) (_o$3367 (jolt-nth coll-r 1))) (jolt-vector _o$3365 _o$3366 _o$3367)) (let* ((_o$3368 (jolt-nth fn-r 1)) (_o$3369 (jolt-nth coll-r 1))) (jolt-vector _o$3368 _o$3369)))))) (jolt-vector _o$3370 _o$3371))) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get (var-deref "jolt.passes.types" "hof-table") cn))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((coll-r (jolt-invoke infer (jolt-nth args 1) tenv)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types" "velem") ct) (keyword #f "any")))) (fn-r (let* ((_a$3374 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3375 (jolt-nth args 0)) (_a$3376 (let* ((_o$3372 (jolt-get (jolt-get (var-deref "jolt.passes.types" "hof-table") cn) (keyword #f "epos"))) (_o$3373 et)) (jolt-hash-map _o$3372 _o$3373))) (_a$3377 tenv)) (jolt-invoke _a$3374 _a$3375 _a$3376 _a$3377))) (rt (if (jolt= cn "mapv") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (jolt-nth fn-r 0)) (if (jolt= cn "filterv") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") et) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))) (let* ((_o$3380 rt) (_o$3381 (jolt-assoc node (keyword #f "args") (let* ((_o$3378 (jolt-nth fn-r 1)) (_o$3379 (jolt-nth coll-r 1))) (jolt-vector _o$3378 _o$3379))))) (jolt-vector _o$3380 _o$3381))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (jolt= cn "conj"))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= cn "into"))))) (if (jolt-truthy? and__13__auto) (>= n 1) and__13__auto))) (let* ((ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3382 ((a a)) (jolt-invoke infer a tenv))) args)) (base (jolt-nth (jolt-nth ares 0) 0)) (rest-ts (let* ((_a$3384 (var-deref "clojure.core" "mapv")) (_a$3385 (lambda (r) (let fnrec3383 ((r r)) (jolt-nth r 0)))) (_a$3386 (jolt-rest ares))) (jolt-invoke _a$3384 _a$3385 _a$3386))) (rt (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "conj"))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") base) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (jolt-reduce (var-deref "jolt.passes.types" "join") (jolt-invoke (var-deref "jolt.passes.types" "velem") base) rest-ts)) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "into"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") base))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 n))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") (jolt-nth rest-ts 0)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3387 (var-deref "jolt.passes.types" "join")) (_a$3388 (jolt-invoke (var-deref "jolt.passes.types" "velem") base)) (_a$3389 (jolt-invoke (var-deref "jolt.passes.types" "velem") (jolt-nth rest-ts 0)))) (jolt-invoke _a$3387 _a$3388 _a$3389))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil))))) (let* ((_o$3391 rt) (_o$3392 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3390 ((r r)) (jolt-nth r 1))) ares)))) (jolt-vector _o$3391 _o$3392))) (if (jolt-truthy? (keyword #f "else")) (let* ((fr (if (jolt-not iscall-var) (jolt-invoke infer fnode tenv) jolt-nil)) (fnode_PRIME_ (if (jolt-truthy? iscall-var) fnode (jolt-nth fr 1))) (callee-t (if (jolt-truthy? iscall-var) (let* ((_a$3393 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3394 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3393 _a$3394)) (jolt-nth fr 0))) (ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3395 ((a a)) (jolt-invoke infer a tenv))) args))) (begin (if (jolt-truthy? iscall-var) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "calls-box") jolt-conj (let* ((_o$3397 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_o$3398 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3396 ((r r)) (jolt-nth r 0))) ares))) (jolt-vector _o$3397 _o$3398))) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (let* ((ats (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3399 ((r r)) (jolt-nth r 0))) ares)) (pos (jolt-get node (keyword #f "pos")))) (begin (if (jolt-truthy? cn) (jolt-invoke (var-deref "jolt.passes.types" "check-invoke") cn args ats pos) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-callable?") callee-t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3400 (keyword #f "op")) (_o$3401 (keyword #f "call")) (_o$3402 (keyword #f "type")) (_o$3403 (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t)) (_o$3404 (keyword #f "pos")) (_o$3405 pos) (_o$3406 (keyword #f "msg")) (_o$3407 (jolt-invoke (var-deref "clojure.core" "str") "cannot call " (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t) " as a function"))) (jolt-hash-map _o$3400 _o$3401 _o$3402 _o$3403 _o$3404 _o$3405 _o$3406 _o$3407))) jolt-nil) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "strict-box")))) (if (jolt-truthy? and__13__auto) iscall-var and__13__auto))) (let* ((k (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (usig (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "user-sig-box")) k))) (if (jolt-truthy? usig) (jolt-invoke (var-deref "jolt.passes.types" "check-user-call") k usig ats pos) jolt-nil)) jolt-nil))) jolt-nil) (let* ((pm (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((_a$3408 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "protocol-methods-box"))) (_a$3409 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3408 _a$3409)) and__13__auto))) (rtype (if (jolt-truthy? (let* ((and__13__auto pm)) (if (jolt-truthy? and__13__auto) (jolt-pos? n) and__13__auto))) (jolt-get (jolt-nth (jolt-nth ares 0) 0) (keyword #f "type")) jolt-nil)) (base (jolt-assoc node (keyword #f "fn") fnode_PRIME_ (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3410 ((r r)) (jolt-nth r 1))) ares)))) (let* ((_o$3418 (if (jolt= cn "range") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "num")) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "elem-fns") cn))) (if (jolt-truthy? and__13__auto) (> n 0) and__13__auto)) and__13__auto))) (let* ((a0 (jolt-nth (jolt-nth ares 0) 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") a0)) (jolt-invoke (var-deref "jolt.passes.types" "velem") a0) (keyword #f "any"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil)))) (_o$3419 (if (jolt-truthy? rtype) (let* ((_a$3411 base) (_a$3412 (keyword #f "devirt-type")) (_a$3413 rtype) (_a$3414 (keyword #f "devirt-proto")) (_a$3415 (jolt-nth pm 0)) (_a$3416 (keyword #f "devirt-method")) (_a$3417 (jolt-nth pm 1))) (jolt-assoc _a$3411 _a$3412 _a$3413 _a$3414 _a$3415 _a$3416 _a$3417)) base))) (jolt-vector _o$3418 _o$3419))))) jolt-nil)))))))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3430 (lambda (acc b) (let fnrec3420 ((acc acc) (b b)) (let* ((te (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (ir (jolt-invoke infer (jolt-nth b 1) te))) (let* ((_o$3426 (let* ((_a$3421 te) (_a$3422 (jolt-nth b 0)) (_a$3423 (jolt-nth ir 0))) (jolt-assoc _a$3421 _a$3422 _a$3423))) (_o$3427 (jolt-conj binds (let* ((_o$3424 (jolt-nth b 0)) (_o$3425 (jolt-nth ir 1))) (jolt-vector _o$3424 _o$3425))))) (jolt-vector _o$3426 _o$3427)))))) (_a$3431 (let* ((_o$3428 tenv) (_o$3429 (jolt-vector))) (jolt-vector _o$3428 _o$3429))) (_a$3432 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3430 _a$3431 _a$3432))) (br (let* ((_a$3433 infer) (_a$3434 (jolt-get node (keyword #f "body"))) (_a$3435 (jolt-nth res 0))) (jolt-invoke _a$3433 _a$3434 _a$3435)))) (let* ((_o$3441 (jolt-nth br 0)) (_o$3442 (let* ((_a$3436 node) (_a$3437 (keyword #f "bindings")) (_a$3438 (jolt-nth res 1)) (_a$3439 (keyword #f "body")) (_a$3440 (jolt-nth br 1))) (jolt-assoc _a$3436 _a$3437 _a$3438 _a$3439 _a$3440)))) (jolt-vector _o$3441 _o$3442))) (if (jolt= op (keyword #f "loop")) (let* ((_o$3454 (keyword #f "any")) (_o$3455 (let* ((_a$3449 node) (_a$3450 (keyword #f "bindings")) (_a$3451 (let* ((_a$3446 (var-deref "clojure.core" "mapv")) (_a$3447 (lambda (b) (let fnrec3443 ((b b)) (let* ((_o$3444 (jolt-nth b 0)) (_o$3445 (jolt-nth (jolt-invoke infer (jolt-nth b 1) tenv) 1))) (jolt-vector _o$3444 _o$3445))))) (_a$3448 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$3446 _a$3447 _a$3448))) (_a$3452 (keyword #f "body")) (_a$3453 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1))) (jolt-assoc _a$3449 _a$3450 _a$3451 _a$3452 _a$3453)))) (jolt-vector _o$3454 _o$3455)) (if (jolt= op (keyword #f "recur")) (let* ((_o$3460 (keyword #f "any")) (_o$3461 (jolt-assoc node (keyword #f "args") (let* ((_a$3457 (var-deref "clojure.core" "mapv")) (_a$3458 (lambda (a) (let fnrec3456 ((a a)) (jolt-nth (jolt-invoke infer a tenv) 1)))) (_a$3459 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$3457 _a$3458 _a$3459))))) (jolt-vector _o$3460 _o$3461)) (if (jolt= op (keyword #f "fn")) (let* ((_o$3479 (keyword #f "any")) (_o$3480 (jolt-assoc node (keyword #f "arities") (let* ((_a$3476 (var-deref "clojure.core" "mapv")) (_a$3477 (lambda (a) (let fnrec3462 ((a a)) (let* ((phm (let* ((_a$3467 (lambda (m pr) (let fnrec3463 ((m m) (pr pr)) (let* ((_a$3464 m) (_a$3465 (jolt-nth pr 0)) (_a$3466 (jolt-nth pr 1))) (jolt-assoc _a$3464 _a$3465 _a$3466))))) (_a$3468 (jolt-hash-map)) (_a$3469 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3467 _a$3468 _a$3469))) (pe (let* ((_a$3473 (lambda (e p) (let fnrec3470 ((e e) (p p)) (jolt-assoc e p (let* ((ent (let* ((_a$3471 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3472 (jolt-get phm p))) (jolt-get _a$3471 _a$3472)))) (if (jolt-truthy? ent) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") ent (var-deref "jolt.passes.types" "type-depth")) (keyword #f "any"))))))) (_a$3474 tenv) (_a$3475 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$3473 _a$3474 _a$3475))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke infer (jolt-get a (keyword #f "body")) pe) 1)))))) (_a$3478 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3476 _a$3477 _a$3478))))) (jolt-vector _o$3479 _o$3480)) (if (jolt= op (keyword #f "def")) (begin (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (jolt-invoke (var-deref "jolt.passes.types" "register-user-fn!") node) jolt-nil) (let* ((_o$3481 (keyword #f "any")) (_o$3482 (jolt-assoc node (keyword #f "init") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "init")) tenv) 1)))) (jolt-vector _o$3481 _o$3482))) (if (jolt= op (keyword #f "try")) (let* ((_o$3490 (keyword #f "any")) (_o$3491 (let* ((_a$3483 node) (_a$3484 (keyword #f "body")) (_a$3485 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1)) (_a$3486 (keyword #f "catch-body")) (_a$3487 (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "catch-body")) tenv) 1) jolt-nil)) (_a$3488 (keyword #f "finally")) (_a$3489 (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "finally")) tenv) 1) jolt-nil))) (jolt-assoc _a$3483 _a$3484 _a$3485 _a$3486 _a$3487 _a$3488 _a$3489)))) (jolt-vector _o$3490 _o$3491)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3492 (keyword #f "any")) (_o$3493 node)) (jolt-vector _o$3492 _o$3493)) jolt-nil)))))))))))))))))))))) infer))) + (def-var! "jolt.passes.types" "infer" (letrec ((infer (lambda (node tenv) (let fnrec2976 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$2977 (let* ((v (jolt-get node (keyword #f "val")))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (keyword #f "num") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (keyword #f "str") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (keyword #f "kw") (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= #f v)))) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (keyword #f "truthy") jolt-nil))))))) (_o$2978 node)) (jolt-vector _o$2977 _o$2978)) (if (jolt= op (keyword #f "local")) (let* ((t (jolt-get tenv (jolt-get node (keyword #f "name"))))) (let* ((_o$2979 (if (jolt-truthy? t) t (keyword #f "any"))) (_o$2980 (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-safe?") t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "type-shape") t)) (jolt-assoc n (keyword #f "shape") (jolt-invoke (var-deref "jolt.passes.types.lattice" "type-shape") t)) n)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t)) (jolt-assoc node (keyword #f "hint") (keyword #f "vector")) (if (jolt-truthy? (keyword #f "else")) node jolt-nil))))) (jolt-vector _o$2979 _o$2980))) (if (jolt= op (keyword #f "map")) (let* ((pairs (jolt-get node (keyword #f "pairs"))) (res (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (pr) (let fnrec2981 ((pr pr)) (let* ((kr (jolt-invoke infer (jolt-nth pr 0) tenv)) (vr (jolt-invoke infer (jolt-nth pr 1) tenv))) (let* ((_o$2982 (jolt-nth kr 1)) (_o$2983 (jolt-nth vr 1)) (_o$2984 (jolt-nth vr 0)) (_o$2985 (jolt-get (jolt-nth pr 0) (keyword #f "val")))) (jolt-vector _o$2982 _o$2983 _o$2984 _o$2985))))) pairs)) (struct? (let* ((and__13__auto (> (jolt-count res) 0))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec2986 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) pairs))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (r) (let fnrec2987 ((r r)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "truthy-type?") (jolt-nth r 2)))) res) and__13__auto)) and__13__auto))) (base (if (jolt-truthy? struct?) (jolt-invoke (var-deref "jolt.passes.types.lattice" "cap") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") (let* ((_a$2992 (lambda (m r) (let fnrec2988 ((m m) (r r)) (let* ((_a$2989 m) (_a$2990 (jolt-nth r 3)) (_a$2991 (jolt-nth r 2))) (jolt-assoc _a$2989 _a$2990 _a$2991))))) (_a$2993 (jolt-hash-map)) (_a$2994 res)) (jolt-reduce _a$2992 _a$2993 _a$2994))) (var-deref "jolt.passes.types.lattice" "type-depth")) jolt-nil)) (shp (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "map-shapes-box")))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto base)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") base) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "shape-order") (jolt-keys (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") base))) jolt-nil)) (t (if (jolt-truthy? base) (if (jolt-truthy? shp) (jolt-assoc base (keyword #f "shape") shp) base) (keyword #f "any"))) (node_PRIME_ (jolt-assoc node (keyword #f "pairs") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec2995 ((r r)) (let* ((_o$2996 (jolt-nth r 0)) (_o$2997 (jolt-nth r 1))) (jolt-vector _o$2996 _o$2997)))) res)))) (let* ((_o$2998 t) (_o$2999 (if (jolt-truthy? shp) (jolt-assoc node_PRIME_ (keyword #f "shape") shp) node_PRIME_))) (jolt-vector _o$2998 _o$2999))) (if (jolt= op (keyword #f "vector")) (let* ((irs (let* ((_a$3001 (var-deref "clojure.core" "mapv")) (_a$3002 (lambda (x) (let fnrec3000 ((x x)) (jolt-invoke infer x tenv)))) (_a$3003 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3001 _a$3002 _a$3003))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3004 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3005 (var-deref "jolt.passes.types.lattice" "join")) (_a$3006 (jolt-first ets)) (_a$3007 (jolt-rest ets))) (jolt-reduce _a$3005 _a$3006 _a$3007))))) (let* ((_o$3009 (jolt-invoke (var-deref "jolt.passes.types.lattice" "cap") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") el) (var-deref "jolt.passes.types.lattice" "type-depth"))) (_o$3010 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3008 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3009 _o$3010))) (if (jolt= op (keyword #f "set")) (let* ((irs (let* ((_a$3012 (var-deref "clojure.core" "mapv")) (_a$3013 (lambda (x) (let fnrec3011 ((x x)) (jolt-invoke infer x tenv)))) (_a$3014 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3012 _a$3013 _a$3014))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3015 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3016 (var-deref "jolt.passes.types.lattice" "join")) (_a$3017 (jolt-first ets)) (_a$3018 (jolt-rest ets))) (jolt-reduce _a$3016 _a$3017 _a$3018))))) (let* ((_o$3020 (jolt-invoke (var-deref "jolt.passes.types.lattice" "cap") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-set") el) (var-deref "jolt.passes.types.lattice" "type-depth"))) (_o$3021 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3019 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3020 _o$3021))) (if (jolt= op (keyword #f "if")) (let* ((tr (jolt-invoke infer (jolt-get node (keyword #f "test")) tenv)) (thn (jolt-invoke infer (jolt-get node (keyword #f "then")) tenv)) (els (jolt-invoke infer (jolt-get node (keyword #f "else")) tenv))) (let* ((_o$3032 (let* ((_a$3022 (var-deref "jolt.passes.types.lattice" "join")) (_a$3023 (jolt-nth thn 0)) (_a$3024 (jolt-nth els 0))) (jolt-invoke _a$3022 _a$3023 _a$3024))) (_o$3033 (let* ((_a$3025 node) (_a$3026 (keyword #f "test")) (_a$3027 (jolt-nth tr 1)) (_a$3028 (keyword #f "then")) (_a$3029 (jolt-nth thn 1)) (_a$3030 (keyword #f "else")) (_a$3031 (jolt-nth els 1))) (jolt-assoc _a$3025 _a$3026 _a$3027 _a$3028 _a$3029 _a$3030 _a$3031)))) (jolt-vector _o$3032 _o$3033))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$3035 (var-deref "clojure.core" "mapv")) (_a$3036 (lambda (s) (let fnrec3034 ((s s)) (jolt-nth (jolt-invoke infer s tenv) 1)))) (_a$3037 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$3035 _a$3036 _a$3037))) (r (jolt-invoke infer (jolt-get node (keyword #f "ret")) tenv))) (let* ((_o$3038 (jolt-nth r 0)) (_o$3039 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$3038 _o$3039))) (if (jolt= op (keyword #f "throw")) (let* ((_o$3040 (keyword #f "any")) (_o$3041 (jolt-assoc node (keyword #f "expr") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "expr")) tenv) 1)))) (jolt-vector _o$3040 _o$3041)) (if (jolt= op (keyword #f "var")) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "escapes-box") jolt-conj (jolt-invoke (var-deref "jolt.passes.types" "var-key") node)) (let* ((_o$3044 (let* ((vt (let* ((_a$3042 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3043 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-get _a$3042 _a$3043)))) (if (jolt-truthy? vt) vt (keyword #f "any")))) (_o$3045 node)) (jolt-vector _o$3044 _o$3045))) (if (jolt= op (keyword #f "invoke")) (let* ((fnode (jolt-get node (keyword #f "fn"))) (iscall-var (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op")))) (cn (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__13__auto))) (jolt-get fnode (keyword #f "name")) jolt-nil)) (args (jolt-get node (keyword #f "args"))) (n (jolt-count args))) (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "fold-preds") cn))) (if (jolt-truthy? and__13__auto) (jolt= n 1) and__13__auto)) and__13__auto))) (let* ((ar (jolt-invoke infer (jolt-nth args 0) tenv)) (v (jolt-invoke (var-deref "jolt.passes.types" "pred-on") cn (jolt-nth ar 0)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") v)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "pure-node?") (jolt-nth ar 1)) and__13__auto))) (let* ((_o$3050 (keyword #f "any")) (_o$3051 (let* ((_o$3046 (keyword #f "op")) (_o$3047 (keyword #f "const")) (_o$3048 (keyword #f "val")) (_o$3049 v)) (jolt-hash-map _o$3046 _o$3047 _o$3048 _o$3049)))) (jolt-vector _o$3050 _o$3051)) (let* ((_o$3052 (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode)) (_o$3053 (jolt-assoc node (keyword #f "args") (jolt-vector (jolt-nth ar 1))))) (jolt-vector _o$3052 _o$3053)))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 1))) (if (jolt-truthy? and__13__auto) (<= n 2) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (ft (jolt-invoke (var-deref "jolt.passes.types.lattice" "field-type") mt (jolt-get fnode (keyword #f "val")))) (dr (if (jolt= n 2) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil))) (let* ((_o$3056 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") ft (jolt-nth dr 0)) ft)) (_o$3057 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3054 msub) (_o$3055 (jolt-nth dr 1))) (jolt-vector _o$3054 _o$3055)) (jolt-vector msub))))) (jolt-vector _o$3056 _o$3057))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get (jolt-nth args 1) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get (jolt-nth args 1) (keyword #f "val"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (kr (jolt-invoke infer (jolt-nth args 1) tenv)) (ft (jolt-invoke (var-deref "jolt.passes.types.lattice" "field-type") mt (jolt-get (jolt-nth args 1) (keyword #f "val")))) (dr (if (jolt= n 3) (jolt-invoke infer (jolt-nth args 2) tenv) jolt-nil))) (let* ((_o$3063 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") ft (jolt-nth dr 0)) ft)) (_o$3064 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3058 msub) (_o$3059 (jolt-nth kr 1)) (_o$3060 (jolt-nth dr 1))) (jolt-vector _o$3058 _o$3059 _o$3060)) (let* ((_o$3061 msub) (_o$3062 (jolt-nth kr 1))) (jolt-vector _o$3061 _o$3062)))))) (jolt-vector _o$3063 _o$3064))) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "reduce"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto))) (let* ((three (>= n 3)) (coll-r (jolt-invoke infer (jolt-nth args (if (jolt-truthy? three) 2 1)) tenv)) (init-r (if (jolt-truthy? three) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") ct) (keyword #f "any")))) (init-t (if (jolt-truthy? init-r) (jolt-nth init-r 0) (keyword #f "any"))) (fn-r (let* ((_a$3069 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3070 (jolt-nth args 0)) (_a$3071 (let* ((_o$3065 0) (_o$3066 init-t) (_o$3067 1) (_o$3068 et)) (jolt-hash-map _o$3065 _o$3066 _o$3067 _o$3068))) (_a$3072 tenv)) (jolt-invoke _a$3069 _a$3070 _a$3071 _a$3072)))) (let* ((_o$3078 (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") init-t (jolt-nth fn-r 0))) (_o$3079 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? three) (let* ((_o$3073 (jolt-nth fn-r 1)) (_o$3074 (jolt-nth init-r 1)) (_o$3075 (jolt-nth coll-r 1))) (jolt-vector _o$3073 _o$3074 _o$3075)) (let* ((_o$3076 (jolt-nth fn-r 1)) (_o$3077 (jolt-nth coll-r 1))) (jolt-vector _o$3076 _o$3077)))))) (jolt-vector _o$3078 _o$3079))) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get (var-deref "jolt.passes.types" "hof-table") cn))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((coll-r (jolt-invoke infer (jolt-nth args 1) tenv)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") ct) (keyword #f "any")))) (fn-r (let* ((_a$3082 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3083 (jolt-nth args 0)) (_a$3084 (let* ((_o$3080 (jolt-get (jolt-get (var-deref "jolt.passes.types" "hof-table") cn) (keyword #f "epos"))) (_o$3081 et)) (jolt-hash-map _o$3080 _o$3081))) (_a$3085 tenv)) (jolt-invoke _a$3082 _a$3083 _a$3084 _a$3085))) (rt (if (jolt= cn "mapv") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (jolt-nth fn-r 0)) (if (jolt= cn "filterv") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") et) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))) (let* ((_o$3088 rt) (_o$3089 (jolt-assoc node (keyword #f "args") (let* ((_o$3086 (jolt-nth fn-r 1)) (_o$3087 (jolt-nth coll-r 1))) (jolt-vector _o$3086 _o$3087))))) (jolt-vector _o$3088 _o$3089))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (jolt= cn "conj"))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= cn "into"))))) (if (jolt-truthy? and__13__auto) (>= n 1) and__13__auto))) (let* ((ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3090 ((a a)) (jolt-invoke infer a tenv))) args)) (base (jolt-nth (jolt-nth ares 0) 0)) (rest-ts (let* ((_a$3092 (var-deref "clojure.core" "mapv")) (_a$3093 (lambda (r) (let fnrec3091 ((r r)) (jolt-nth r 0)))) (_a$3094 (jolt-rest ares))) (jolt-invoke _a$3092 _a$3093 _a$3094))) (rt (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "conj"))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") base) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (jolt-reduce (var-deref "jolt.passes.types.lattice" "join") (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") base) rest-ts)) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "into"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") base))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 n))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") (jolt-nth rest-ts 0)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (let* ((_a$3095 (var-deref "jolt.passes.types.lattice" "join")) (_a$3096 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") base)) (_a$3097 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") (jolt-nth rest-ts 0)))) (jolt-invoke _a$3095 _a$3096 _a$3097))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil))))) (let* ((_o$3099 rt) (_o$3100 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3098 ((r r)) (jolt-nth r 1))) ares)))) (jolt-vector _o$3099 _o$3100))) (if (jolt-truthy? (keyword #f "else")) (let* ((fr (if (jolt-not iscall-var) (jolt-invoke infer fnode tenv) jolt-nil)) (fnode_PRIME_ (if (jolt-truthy? iscall-var) fnode (jolt-nth fr 1))) (callee-t (if (jolt-truthy? iscall-var) (let* ((_a$3101 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3102 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3101 _a$3102)) (jolt-nth fr 0))) (ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3103 ((a a)) (jolt-invoke infer a tenv))) args))) (begin (if (jolt-truthy? iscall-var) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "calls-box") jolt-conj (let* ((_o$3105 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_o$3106 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3104 ((r r)) (jolt-nth r 0))) ares))) (jolt-vector _o$3105 _o$3106))) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (let* ((ats (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3107 ((r r)) (jolt-nth r 0))) ares)) (pos (jolt-get node (keyword #f "pos")))) (begin (if (jolt-truthy? cn) (jolt-invoke (var-deref "jolt.passes.types" "check-invoke") cn args ats pos) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-callable?") callee-t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3108 (keyword #f "op")) (_o$3109 (keyword #f "call")) (_o$3110 (keyword #f "type")) (_o$3111 (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t)) (_o$3112 (keyword #f "pos")) (_o$3113 pos) (_o$3114 (keyword #f "msg")) (_o$3115 (jolt-invoke (var-deref "clojure.core" "str") "cannot call " (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t) " as a function"))) (jolt-hash-map _o$3108 _o$3109 _o$3110 _o$3111 _o$3112 _o$3113 _o$3114 _o$3115))) jolt-nil) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "strict-box")))) (if (jolt-truthy? and__13__auto) iscall-var and__13__auto))) (let* ((k (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (usig (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "user-sig-box")) k))) (if (jolt-truthy? usig) (jolt-invoke (var-deref "jolt.passes.types" "check-user-call") k usig ats pos) jolt-nil)) jolt-nil))) jolt-nil) (let* ((pm (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((_a$3116 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "protocol-methods-box"))) (_a$3117 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3116 _a$3117)) and__13__auto))) (rtype (if (jolt-truthy? (let* ((and__13__auto pm)) (if (jolt-truthy? and__13__auto) (jolt-pos? n) and__13__auto))) (jolt-get (jolt-nth (jolt-nth ares 0) 0) (keyword #f "type")) jolt-nil)) (base (jolt-assoc node (keyword #f "fn") fnode_PRIME_ (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3118 ((r r)) (jolt-nth r 1))) ares)))) (let* ((_o$3126 (if (jolt= cn "range") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (keyword #f "num")) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "elem-fns") cn))) (if (jolt-truthy? and__13__auto) (> n 0) and__13__auto)) and__13__auto))) (let* ((a0 (jolt-nth (jolt-nth ares 0) 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") a0)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") a0) (keyword #f "any"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil)))) (_o$3127 (if (jolt-truthy? rtype) (let* ((_a$3119 base) (_a$3120 (keyword #f "devirt-type")) (_a$3121 rtype) (_a$3122 (keyword #f "devirt-proto")) (_a$3123 (jolt-nth pm 0)) (_a$3124 (keyword #f "devirt-method")) (_a$3125 (jolt-nth pm 1))) (jolt-assoc _a$3119 _a$3120 _a$3121 _a$3122 _a$3123 _a$3124 _a$3125)) base))) (jolt-vector _o$3126 _o$3127))))) jolt-nil)))))))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3138 (lambda (acc b) (let fnrec3128 ((acc acc) (b b)) (let* ((te (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (ir (jolt-invoke infer (jolt-nth b 1) te))) (let* ((_o$3134 (let* ((_a$3129 te) (_a$3130 (jolt-nth b 0)) (_a$3131 (jolt-nth ir 0))) (jolt-assoc _a$3129 _a$3130 _a$3131))) (_o$3135 (jolt-conj binds (let* ((_o$3132 (jolt-nth b 0)) (_o$3133 (jolt-nth ir 1))) (jolt-vector _o$3132 _o$3133))))) (jolt-vector _o$3134 _o$3135)))))) (_a$3139 (let* ((_o$3136 tenv) (_o$3137 (jolt-vector))) (jolt-vector _o$3136 _o$3137))) (_a$3140 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3138 _a$3139 _a$3140))) (br (let* ((_a$3141 infer) (_a$3142 (jolt-get node (keyword #f "body"))) (_a$3143 (jolt-nth res 0))) (jolt-invoke _a$3141 _a$3142 _a$3143)))) (let* ((_o$3149 (jolt-nth br 0)) (_o$3150 (let* ((_a$3144 node) (_a$3145 (keyword #f "bindings")) (_a$3146 (jolt-nth res 1)) (_a$3147 (keyword #f "body")) (_a$3148 (jolt-nth br 1))) (jolt-assoc _a$3144 _a$3145 _a$3146 _a$3147 _a$3148)))) (jolt-vector _o$3149 _o$3150))) (if (jolt= op (keyword #f "loop")) (let* ((_o$3162 (keyword #f "any")) (_o$3163 (let* ((_a$3157 node) (_a$3158 (keyword #f "bindings")) (_a$3159 (let* ((_a$3154 (var-deref "clojure.core" "mapv")) (_a$3155 (lambda (b) (let fnrec3151 ((b b)) (let* ((_o$3152 (jolt-nth b 0)) (_o$3153 (jolt-nth (jolt-invoke infer (jolt-nth b 1) tenv) 1))) (jolt-vector _o$3152 _o$3153))))) (_a$3156 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$3154 _a$3155 _a$3156))) (_a$3160 (keyword #f "body")) (_a$3161 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1))) (jolt-assoc _a$3157 _a$3158 _a$3159 _a$3160 _a$3161)))) (jolt-vector _o$3162 _o$3163)) (if (jolt= op (keyword #f "recur")) (let* ((_o$3168 (keyword #f "any")) (_o$3169 (jolt-assoc node (keyword #f "args") (let* ((_a$3165 (var-deref "clojure.core" "mapv")) (_a$3166 (lambda (a) (let fnrec3164 ((a a)) (jolt-nth (jolt-invoke infer a tenv) 1)))) (_a$3167 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$3165 _a$3166 _a$3167))))) (jolt-vector _o$3168 _o$3169)) (if (jolt= op (keyword #f "fn")) (let* ((_o$3187 (keyword #f "any")) (_o$3188 (jolt-assoc node (keyword #f "arities") (let* ((_a$3184 (var-deref "clojure.core" "mapv")) (_a$3185 (lambda (a) (let fnrec3170 ((a a)) (let* ((phm (let* ((_a$3175 (lambda (m pr) (let fnrec3171 ((m m) (pr pr)) (let* ((_a$3172 m) (_a$3173 (jolt-nth pr 0)) (_a$3174 (jolt-nth pr 1))) (jolt-assoc _a$3172 _a$3173 _a$3174))))) (_a$3176 (jolt-hash-map)) (_a$3177 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3175 _a$3176 _a$3177))) (pe (let* ((_a$3181 (lambda (e p) (let fnrec3178 ((e e) (p p)) (jolt-assoc e p (let* ((ent (let* ((_a$3179 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3180 (jolt-get phm p))) (jolt-get _a$3179 _a$3180)))) (if (jolt-truthy? ent) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") ent (var-deref "jolt.passes.types.lattice" "type-depth")) (keyword #f "any"))))))) (_a$3182 tenv) (_a$3183 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$3181 _a$3182 _a$3183))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke infer (jolt-get a (keyword #f "body")) pe) 1)))))) (_a$3186 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3184 _a$3185 _a$3186))))) (jolt-vector _o$3187 _o$3188)) (if (jolt= op (keyword #f "def")) (begin (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (jolt-invoke (var-deref "jolt.passes.types" "register-user-fn!") node) jolt-nil) (let* ((_o$3189 (keyword #f "any")) (_o$3190 (jolt-assoc node (keyword #f "init") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "init")) tenv) 1)))) (jolt-vector _o$3189 _o$3190))) (if (jolt= op (keyword #f "try")) (let* ((_o$3198 (keyword #f "any")) (_o$3199 (let* ((_a$3191 node) (_a$3192 (keyword #f "body")) (_a$3193 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1)) (_a$3194 (keyword #f "catch-body")) (_a$3195 (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "catch-body")) tenv) 1) jolt-nil)) (_a$3196 (keyword #f "finally")) (_a$3197 (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "finally")) tenv) 1) jolt-nil))) (jolt-assoc _a$3191 _a$3192 _a$3193 _a$3194 _a$3195 _a$3196 _a$3197)))) (jolt-vector _o$3198 _o$3199)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3200 (keyword #f "any")) (_o$3201 node)) (jolt-vector _o$3200 _o$3201)) jolt-nil)))))))))))))))))))))) infer))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "infer-top" (letrec ((infer-top (lambda (node) (let fnrec3494 ((node node)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) 1))))) infer-top))) + (def-var! "jolt.passes.types" "infer-top" (letrec ((infer-top (lambda (node) (let fnrec3202 ((node node)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) 1))))) infer-top))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "not-number?" (letrec ((not-number? (lambda (t) (let fnrec3495 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-number? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)))))))))))))))) not-number?))) + (def-var! "jolt.passes.types" "not-number?" (letrec ((not-number? (lambda (t) (let fnrec3203 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-number? (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t)))))))))))))))) not-number?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "not-seqable?" (letrec ((not-seqable? (lambda (t) (let fnrec3496 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-seqable? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "kw"))))))))) not-seqable?))) + (def-var! "jolt.passes.types" "not-seqable?" (letrec ((not-seqable? (lambda (t) (let fnrec3204 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-seqable? (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "kw"))))))))) not-seqable?))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "not-callable?" (letrec ((not-callable? (lambda (t) (let fnrec3497 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-callable? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "str"))))))))) not-callable?))) + (def-var! "jolt.passes.types" "not-callable?" (letrec ((not-callable? (lambda (t) (let fnrec3205 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-callable? (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "str"))))))))) not-callable?))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "num-ops" (let* ((_o$3498 "+") (_o$3499 "-") (_o$3500 "*") (_o$3501 "/") (_o$3502 "inc") (_o$3503 "dec") (_o$3504 "mod") (_o$3505 "rem") (_o$3506 "quot") (_o$3507 "min") (_o$3508 "max") (_o$3509 "abs") (_o$3510 "bit-and") (_o$3511 "bit-or") (_o$3512 "bit-xor") (_o$3513 "bit-not") (_o$3514 "bit-shift-left") (_o$3515 "bit-shift-right")) (jolt-hash-set _o$3498 _o$3499 _o$3500 _o$3501 _o$3502 _o$3503 _o$3504 _o$3505 _o$3506 _o$3507 _o$3508 _o$3509 _o$3510 _o$3511 _o$3512 _o$3513 _o$3514 _o$3515)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "num-ops" (let* ((_o$3206 "+") (_o$3207 "-") (_o$3208 "*") (_o$3209 "/") (_o$3210 "inc") (_o$3211 "dec") (_o$3212 "mod") (_o$3213 "rem") (_o$3214 "quot") (_o$3215 "min") (_o$3216 "max") (_o$3217 "abs") (_o$3218 "bit-and") (_o$3219 "bit-or") (_o$3220 "bit-xor") (_o$3221 "bit-not") (_o$3222 "bit-shift-left") (_o$3223 "bit-shift-right")) (jolt-hash-set _o$3206 _o$3207 _o$3208 _o$3209 _o$3210 _o$3211 _o$3212 _o$3213 _o$3214 _o$3215 _o$3216 _o$3217 _o$3218 _o$3219 _o$3220 _o$3221 _o$3222 _o$3223)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "seq-ops" (let* ((_o$3516 "count") (_o$3517 "first") (_o$3518 "rest") (_o$3519 "next") (_o$3520 "seq") (_o$3521 "nth")) (jolt-hash-set _o$3516 _o$3517 _o$3518 _o$3519 _o$3520 _o$3521)) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "seq-ops" (let* ((_o$3224 "count") (_o$3225 "first") (_o$3226 "rest") (_o$3227 "next") (_o$3228 "seq") (_o$3229 "nth")) (jolt-hash-set _o$3224 _o$3225 _o$3226 _o$3227 _o$3228 _o$3229)) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "type-name" (letrec ((type-name (lambda (t) (let fnrec3522 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (let* ((_a$3524 (lambda (s m) (let fnrec3523 ((s s) (m m)) (if (jolt= s "") (jolt-invoke type-name m) (jolt-invoke (var-deref "clojure.core" "str") s " or " (jolt-invoke type-name m)))))) (_a$3525 "") (_a$3526 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-reduce _a$3524 _a$3525 _a$3526)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) "a map" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) "a vector" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)) "a set" (if (jolt= t (keyword #f "str")) "a string" (if (jolt= t (keyword #f "kw")) "a keyword" (if (jolt= t (keyword #f "num")) "a number" (if (jolt= t (keyword #f "phm")) "a map" (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") t) jolt-nil))))))))))))) type-name))) + (def-var! "jolt.passes.types" "type-name" (letrec ((type-name (lambda (t) (let fnrec3230 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (let* ((_a$3232 (lambda (s m) (let fnrec3231 ((s s) (m m)) (if (jolt= s "") (jolt-invoke type-name m) (jolt-invoke (var-deref "clojure.core" "str") s " or " (jolt-invoke type-name m)))))) (_a$3233 "") (_a$3234 (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t))) (jolt-reduce _a$3232 _a$3233 _a$3234)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t)) "a map" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t)) "a vector" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t)) "a set" (if (jolt= t (keyword #f "str")) "a string" (if (jolt= t (keyword #f "kw")) "a keyword" (if (jolt= t (keyword #f "num")) "a number" (if (jolt= t (keyword #f "phm")) "a map" (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") t) jolt-nil))))))))))))) type-name))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "check-invoke" (letrec ((check-invoke (lambda (cn args arg-types pos) (let fnrec3527 ((cn cn) (args args) (arg-types arg-types) (pos pos)) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ops") cn) (let* ((_a$3546 (lambda (_ i) (let fnrec3528 ((_ _) (i i)) (begin (let* ((t (jolt-nth arg-types i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-number?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3536 (keyword #f "op")) (_o$3537 cn) (_o$3538 (keyword #f "argpos")) (_o$3539 i) (_o$3540 (keyword #f "type")) (_o$3541 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3542 (keyword #f "pos")) (_o$3543 pos) (_o$3544 (keyword #f "msg")) (_o$3545 (let* ((_a$3529 (var-deref "clojure.core" "str")) (_a$3530 "`") (_a$3531 cn) (_a$3532 "` requires a number, but argument ") (_a$3533 (jolt-inc i)) (_a$3534 " is ") (_a$3535 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3529 _a$3530 _a$3531 _a$3532 _a$3533 _a$3534 _a$3535)))) (jolt-hash-map _o$3536 _o$3537 _o$3538 _o$3539 _o$3540 _o$3541 _o$3542 _o$3543 _o$3544 _o$3545))) jolt-nil)) jolt-nil)))) (_a$3547 jolt-nil) (_a$3548 (jolt-range (jolt-count args)))) (jolt-reduce _a$3546 _a$3547 _a$3548)) (if (jolt-truthy? (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "seq-ops") cn))) (if (jolt-truthy? and__13__auto) (> (jolt-count args) 0) and__13__auto))) (let* ((t (jolt-nth arg-types 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-seqable?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3556 (keyword #f "op")) (_o$3557 cn) (_o$3558 (keyword #f "argpos")) (_o$3559 0) (_o$3560 (keyword #f "type")) (_o$3561 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3562 (keyword #f "pos")) (_o$3563 pos) (_o$3564 (keyword #f "msg")) (_o$3565 (let* ((_a$3549 (var-deref "clojure.core" "str")) (_a$3550 "`") (_a$3551 cn) (_a$3552 "` requires ") (_a$3553 (if (jolt= cn "count") "a countable collection" "a seqable")) (_a$3554 ", but argument 1 is ") (_a$3555 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3549 _a$3550 _a$3551 _a$3552 _a$3553 _a$3554 _a$3555)))) (jolt-hash-map _o$3556 _o$3557 _o$3558 _o$3559 _o$3560 _o$3561 _o$3562 _o$3563 _o$3564 _o$3565))) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))) check-invoke))) + (def-var! "jolt.passes.types" "check-invoke" (letrec ((check-invoke (lambda (cn args arg-types pos) (let fnrec3235 ((cn cn) (args args) (arg-types arg-types) (pos pos)) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ops") cn) (let* ((_a$3254 (lambda (_ i) (let fnrec3236 ((_ _) (i i)) (begin (let* ((t (jolt-nth arg-types i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-number?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3244 (keyword #f "op")) (_o$3245 cn) (_o$3246 (keyword #f "argpos")) (_o$3247 i) (_o$3248 (keyword #f "type")) (_o$3249 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3250 (keyword #f "pos")) (_o$3251 pos) (_o$3252 (keyword #f "msg")) (_o$3253 (let* ((_a$3237 (var-deref "clojure.core" "str")) (_a$3238 "`") (_a$3239 cn) (_a$3240 "` requires a number, but argument ") (_a$3241 (jolt-inc i)) (_a$3242 " is ") (_a$3243 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3237 _a$3238 _a$3239 _a$3240 _a$3241 _a$3242 _a$3243)))) (jolt-hash-map _o$3244 _o$3245 _o$3246 _o$3247 _o$3248 _o$3249 _o$3250 _o$3251 _o$3252 _o$3253))) jolt-nil)) jolt-nil)))) (_a$3255 jolt-nil) (_a$3256 (jolt-range (jolt-count args)))) (jolt-reduce _a$3254 _a$3255 _a$3256)) (if (jolt-truthy? (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "seq-ops") cn))) (if (jolt-truthy? and__13__auto) (> (jolt-count args) 0) and__13__auto))) (let* ((t (jolt-nth arg-types 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-seqable?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3264 (keyword #f "op")) (_o$3265 cn) (_o$3266 (keyword #f "argpos")) (_o$3267 0) (_o$3268 (keyword #f "type")) (_o$3269 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3270 (keyword #f "pos")) (_o$3271 pos) (_o$3272 (keyword #f "msg")) (_o$3273 (let* ((_a$3257 (var-deref "clojure.core" "str")) (_a$3258 "`") (_a$3259 cn) (_a$3260 "` requires ") (_a$3261 (if (jolt= cn "count") "a countable collection" "a seqable")) (_a$3262 ", but argument 1 is ") (_a$3263 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3257 _a$3258 _a$3259 _a$3260 _a$3261 _a$3262 _a$3263)))) (jolt-hash-map _o$3264 _o$3265 _o$3266 _o$3267 _o$3268 _o$3269 _o$3270 _o$3271 _o$3272 _o$3273))) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))) check-invoke))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "all-any-env" (letrec ((all-any-env (lambda (params) (let fnrec3566 ((params params)) (let* ((_a$3568 (lambda (e p) (let fnrec3567 ((e e) (p p)) (jolt-assoc e p (keyword #f "any"))))) (_a$3569 (jolt-hash-map)) (_a$3570 params)) (jolt-reduce _a$3568 _a$3569 _a$3570)))))) all-any-env))) + (def-var! "jolt.passes.types" "all-any-env" (letrec ((all-any-env (lambda (params) (let fnrec3274 ((params params)) (let* ((_a$3276 (lambda (e p) (let fnrec3275 ((e e) (p p)) (jolt-assoc e p (keyword #f "any"))))) (_a$3277 (jolt-hash-map)) (_a$3278 params)) (jolt-reduce _a$3276 _a$3277 _a$3278)))))) all-any-env))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "isolated-diag-count" (letrec ((isolated-diag-count (lambda (body tenv) (let fnrec3571 ((body body) (tenv tenv)) (let* ((saved (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv) (let* ((n (jolt-count (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") saved) n)))))))) isolated-diag-count))) + (def-var! "jolt.passes.types" "isolated-diag-count" (letrec ((isolated-diag-count (lambda (body tenv) (let fnrec3279 ((body body) (tenv tenv)) (let* ((saved (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv) (let* ((n (jolt-count (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") saved) n)))))))) isolated-diag-count))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "register-user-fn!" (letrec ((register-user-fn! (lambda (node) (let fnrec3572 ((node node)) (let* ((init (jolt-get node (keyword #f "init"))) (m (jolt-get node (keyword #f "meta"))) (redefable (let* ((and__13__auto m)) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto (jolt-get m (keyword #f "redef")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-get m (keyword #f "dynamic")))) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not redefable))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get init (keyword #f "op"))) and__13__auto))) (let* ((arities (jolt-get init (keyword #f "arities")))) (if (jolt= 1 (jolt-count arities)) (let* ((ar (jolt-first arities))) (if (jolt-not (jolt-get ar (keyword #f "rest"))) (let* ((_a$3583 (var-deref "clojure.core" "swap!")) (_a$3584 (var-deref "jolt.passes.types" "user-sig-box")) (_a$3585 jolt-assoc) (_a$3586 (let* ((_a$3573 (var-deref "clojure.core" "str")) (_a$3574 (jolt-get node (keyword #f "ns"))) (_a$3575 "/") (_a$3576 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$3573 _a$3574 _a$3575 _a$3576))) (_a$3587 (let* ((_o$3577 (keyword #f "name")) (_o$3578 (jolt-get node (keyword #f "name"))) (_o$3579 (keyword #f "params")) (_o$3580 (jolt-get ar (keyword #f "params"))) (_o$3581 (keyword #f "body")) (_o$3582 (jolt-get ar (keyword #f "body")))) (jolt-hash-map _o$3577 _o$3578 _o$3579 _o$3580 _o$3581 _o$3582)))) (jolt-invoke _a$3583 _a$3584 _a$3585 _a$3586 _a$3587)) jolt-nil)) jolt-nil)) jolt-nil)))))) register-user-fn!))) + (def-var! "jolt.passes.types" "register-user-fn!" (letrec ((register-user-fn! (lambda (node) (let fnrec3280 ((node node)) (let* ((init (jolt-get node (keyword #f "init"))) (m (jolt-get node (keyword #f "meta"))) (redefable (let* ((and__13__auto m)) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto (jolt-get m (keyword #f "redef")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-get m (keyword #f "dynamic")))) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not redefable))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get init (keyword #f "op"))) and__13__auto))) (let* ((arities (jolt-get init (keyword #f "arities")))) (if (jolt= 1 (jolt-count arities)) (let* ((ar (jolt-first arities))) (if (jolt-not (jolt-get ar (keyword #f "rest"))) (let* ((_a$3291 (var-deref "clojure.core" "swap!")) (_a$3292 (var-deref "jolt.passes.types" "user-sig-box")) (_a$3293 jolt-assoc) (_a$3294 (let* ((_a$3281 (var-deref "clojure.core" "str")) (_a$3282 (jolt-get node (keyword #f "ns"))) (_a$3283 "/") (_a$3284 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$3281 _a$3282 _a$3283 _a$3284))) (_a$3295 (let* ((_o$3285 (keyword #f "name")) (_o$3286 (jolt-get node (keyword #f "name"))) (_o$3287 (keyword #f "params")) (_o$3288 (jolt-get ar (keyword #f "params"))) (_o$3289 (keyword #f "body")) (_o$3290 (jolt-get ar (keyword #f "body")))) (jolt-hash-map _o$3285 _o$3286 _o$3287 _o$3288 _o$3289 _o$3290)))) (jolt-invoke _a$3291 _a$3292 _a$3293 _a$3294 _a$3295)) jolt-nil)) jolt-nil)) jolt-nil)))))) register-user-fn!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "check-user-call" (letrec ((check-user-call (lambda (key sig arg-types pos) (let fnrec3588 ((key key) (sig sig) (arg-types arg-types) (pos pos)) (if (jolt-not (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")) key)) (let* ((prev (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-conj prev key)) (let* ((params (jolt-get sig (keyword #f "params"))) (body (jolt-get sig (keyword #f "body"))) (npar (jolt-count params)) (nargs (jolt-count arg-types))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") npar nargs)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3589 (keyword #f "op")) (_o$3590 (keyword #f "user-call")) (_o$3591 (keyword #f "type")) (_o$3592 (keyword #f "arity")) (_o$3593 (keyword #f "pos")) (_o$3594 pos) (_o$3595 (keyword #f "msg")) (_o$3596 (jolt-invoke (var-deref "clojure.core" "str") "wrong number of args (" nargs ") passed to `" (jolt-get sig (keyword #f "name")) "` (expected " npar ")"))) (jolt-hash-map _o$3589 _o$3590 _o$3591 _o$3592 _o$3593 _o$3594 _o$3595 _o$3596))) (let* ((base-env (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)) (base (let* ((bk (let* ((_o$3597 (keyword #f "base")) (_o$3598 key)) (jolt-vector _o$3597 _o$3598)))) (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) bk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) bk) (let* ((b (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body base-env))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-memo-box") jolt-assoc bk b) b)))))) (let* ((_a$3622 (lambda (_ i) (let fnrec3599 ((_ _) (i i)) (begin (let* ((at (jolt-nth arg-types i))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "any")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "truthy")) and__13__auto))) (let* ((mk (let* ((_o$3600 (keyword #f "arg")) (_o$3601 key) (_o$3602 i) (_o$3603 at)) (jolt-vector _o$3600 _o$3601 _o$3602 _o$3603))) (rejects (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) mk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) mk) (let* ((r (> (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body (jolt-assoc base-env (jolt-nth params i) at)) base))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-memo-box") jolt-assoc mk r) r))))) (if (jolt-truthy? rejects) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3612 (keyword #f "op")) (_o$3613 (keyword #f "user-call")) (_o$3614 (keyword #f "argpos")) (_o$3615 i) (_o$3616 (keyword #f "type")) (_o$3617 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_o$3618 (keyword #f "pos")) (_o$3619 pos) (_o$3620 (keyword #f "msg")) (_o$3621 (let* ((_a$3604 (var-deref "clojure.core" "str")) (_a$3605 "argument ") (_a$3606 (jolt-inc i)) (_a$3607 " to `") (_a$3608 (jolt-get sig (keyword #f "name"))) (_a$3609 "` is ") (_a$3610 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_a$3611 ", which its body provably rejects")) (jolt-invoke _a$3604 _a$3605 _a$3606 _a$3607 _a$3608 _a$3609 _a$3610 _a$3611)))) (jolt-hash-map _o$3612 _o$3613 _o$3614 _o$3615 _o$3616 _o$3617 _o$3618 _o$3619 _o$3620 _o$3621))) jolt-nil)) jolt-nil)) jolt-nil)))) (_a$3623 jolt-nil) (_a$3624 (jolt-range npar))) (jolt-reduce _a$3622 _a$3623 _a$3624))))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") prev))) jolt-nil))))) check-user-call))) + (def-var! "jolt.passes.types" "check-user-call" (letrec ((check-user-call (lambda (key sig arg-types pos) (let fnrec3296 ((key key) (sig sig) (arg-types arg-types) (pos pos)) (if (jolt-not (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")) key)) (let* ((prev (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-conj prev key)) (let* ((params (jolt-get sig (keyword #f "params"))) (body (jolt-get sig (keyword #f "body"))) (npar (jolt-count params)) (nargs (jolt-count arg-types))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") npar nargs)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3297 (keyword #f "op")) (_o$3298 (keyword #f "user-call")) (_o$3299 (keyword #f "type")) (_o$3300 (keyword #f "arity")) (_o$3301 (keyword #f "pos")) (_o$3302 pos) (_o$3303 (keyword #f "msg")) (_o$3304 (jolt-invoke (var-deref "clojure.core" "str") "wrong number of args (" nargs ") passed to `" (jolt-get sig (keyword #f "name")) "` (expected " npar ")"))) (jolt-hash-map _o$3297 _o$3298 _o$3299 _o$3300 _o$3301 _o$3302 _o$3303 _o$3304))) (let* ((base-env (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)) (base (let* ((bk (let* ((_o$3305 (keyword #f "base")) (_o$3306 key)) (jolt-vector _o$3305 _o$3306)))) (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) bk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) bk) (let* ((b (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body base-env))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-memo-box") jolt-assoc bk b) b)))))) (let* ((_a$3330 (lambda (_ i) (let fnrec3307 ((_ _) (i i)) (begin (let* ((at (jolt-nth arg-types i))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "any")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "truthy")) and__13__auto))) (let* ((mk (let* ((_o$3308 (keyword #f "arg")) (_o$3309 key) (_o$3310 i) (_o$3311 at)) (jolt-vector _o$3308 _o$3309 _o$3310 _o$3311))) (rejects (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) mk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-memo-box")) mk) (let* ((r (> (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body (jolt-assoc base-env (jolt-nth params i) at)) base))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-memo-box") jolt-assoc mk r) r))))) (if (jolt-truthy? rejects) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3320 (keyword #f "op")) (_o$3321 (keyword #f "user-call")) (_o$3322 (keyword #f "argpos")) (_o$3323 i) (_o$3324 (keyword #f "type")) (_o$3325 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_o$3326 (keyword #f "pos")) (_o$3327 pos) (_o$3328 (keyword #f "msg")) (_o$3329 (let* ((_a$3312 (var-deref "clojure.core" "str")) (_a$3313 "argument ") (_a$3314 (jolt-inc i)) (_a$3315 " to `") (_a$3316 (jolt-get sig (keyword #f "name"))) (_a$3317 "` is ") (_a$3318 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_a$3319 ", which its body provably rejects")) (jolt-invoke _a$3312 _a$3313 _a$3314 _a$3315 _a$3316 _a$3317 _a$3318 _a$3319)))) (jolt-hash-map _o$3320 _o$3321 _o$3322 _o$3323 _o$3324 _o$3325 _o$3326 _o$3327 _o$3328 _o$3329))) jolt-nil)) jolt-nil)) jolt-nil)))) (_a$3331 jolt-nil) (_a$3332 (jolt-range npar))) (jolt-reduce _a$3330 _a$3331 _a$3332))))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") prev))) jolt-nil))))) check-user-call))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-rtenv!" (letrec ((set-rtenv! (lambda (m) (let fnrec3625 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "rtenv-box") m))))) set-rtenv!))) + (def-var! "jolt.passes.types" "set-rtenv!" (letrec ((set-rtenv! (lambda (m) (let fnrec3333 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "rtenv-box") m))))) set-rtenv!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-record-shapes!" (letrec ((set-record-shapes! (lambda (m) (let fnrec3626 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "record-shapes-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-record-shapes!))) + (def-var! "jolt.passes.types" "set-record-shapes!" (letrec ((set-record-shapes! (lambda (m) (let fnrec3334 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "record-shapes-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-record-shapes!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-protocol-methods!" (letrec ((set-protocol-methods! (lambda (m) (let fnrec3627 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "protocol-methods-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-protocol-methods!))) + (def-var! "jolt.passes.types" "set-protocol-methods!" (letrec ((set-protocol-methods! (lambda (m) (let fnrec3335 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "protocol-methods-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-protocol-methods!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-map-shapes!" (letrec ((set-map-shapes! (lambda (b) (let fnrec3628 ((b b)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "map-shapes-box") (jolt-invoke (var-deref "clojure.core" "boolean") b)))))) set-map-shapes!))) + (def-var! "jolt.passes.types" "set-map-shapes!" (letrec ((set-map-shapes! (lambda (b) (let fnrec3336 ((b b)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "map-shapes-box") (jolt-invoke (var-deref "clojure.core" "boolean") b)))))) set-map-shapes!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-vtypes!" (letrec ((set-vtypes! (lambda (m) (let fnrec3629 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "vtype-box") m))))) set-vtypes!))) + (def-var! "jolt.passes.types" "set-vtypes!" (letrec ((set-vtypes! (lambda (m) (let fnrec3337 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "vtype-box") m))))) set-vtypes!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "join-types" (letrec ((join-types (lambda (a b) (let fnrec3630 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types" "join-t") a b))))) join-types))) + (def-var! "jolt.passes.types" "join-types" (letrec ((join-types (lambda (a b) (let fnrec3338 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join-t") a b))))) join-types))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "reset-escapes!" (letrec ((reset-escapes! (lambda () (let fnrec3631 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "escapes-box") (jolt-hash-set)))))) reset-escapes!))) + (def-var! "jolt.passes.types" "reset-escapes!" (letrec ((reset-escapes! (lambda () (let fnrec3339 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "escapes-box") (jolt-hash-set)))))) reset-escapes!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "collected-escapes" (letrec ((collected-escapes (lambda () (let fnrec3632 () (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "escapes-box"))))))) collected-escapes))) + (def-var! "jolt.passes.types" "collected-escapes" (letrec ((collected-escapes (lambda () (let fnrec3340 () (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "escapes-box"))))))) collected-escapes))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "check-form" (letrec ((check-form (case-lambda ((node) (let fnrec3633 ((node node)) (jolt-invoke check-form node #f))) ((node strict?) (let fnrec3634 ((node node) (strict? strict?)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (if (jolt-truthy? strict?) #t #f)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-memo-box") (jolt-hash-map)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))))))) check-form))) + (def-var! "jolt.passes.types" "check-form" (letrec ((check-form (case-lambda ((node) (let fnrec3341 ((node node)) (jolt-invoke check-form node #f))) ((node strict?) (let fnrec3342 ((node node) (strict? strict?)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (if (jolt-truthy? strict?) #t #f)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-memo-box") (jolt-hash-map)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))))))) check-form))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "infer-body" (letrec ((infer-body (lambda (body tenv) (let fnrec3635 ((body body) (tenv tenv)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "calls-box") (jolt-vector)) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv))) (let* ((_o$3636 (jolt-nth r 0)) (_o$3637 (jolt-nth r 1)) (_o$3638 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "calls-box")))) (jolt-vector _o$3636 _o$3637 _o$3638)))))))) infer-body))) + (def-var! "jolt.passes.types" "infer-body" (letrec ((infer-body (lambda (body tenv) (let fnrec3343 ((body body) (tenv tenv)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "calls-box") (jolt-vector)) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv))) (let* ((_o$3344 (jolt-nth r 0)) (_o$3345 (jolt-nth r 1)) (_o$3346 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "calls-box")))) (jolt-vector _o$3344 _o$3345 _o$3346)))))))) infer-body))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "reinfer-def" (letrec ((reinfer-def (lambda (def-node ptmap) (let fnrec3639 ((def-node def-node) (ptmap ptmap)) (let* ((fnode (jolt-get def-node (keyword #f "init")))) (if (jolt= (keyword #f "fn") (jolt-get fnode (keyword #f "op"))) (jolt-assoc def-node (keyword #f "init") (jolt-assoc fnode (keyword #f "arities") (let* ((_a$3647 (var-deref "clojure.core" "mapv")) (_a$3648 (lambda (a) (let fnrec3640 ((a a)) (let* ((pt (let* ((_a$3644 (lambda (m pr) (let fnrec3641 ((m m) (pr pr)) (let* ((nm (jolt-nth pr 0)) (e (let* ((_a$3642 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3643 (jolt-nth pr 1))) (jolt-get _a$3642 _a$3643)))) (if (jolt-truthy? (let* ((and__13__auto e)) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-contains? m nm)) and__13__auto))) (jolt-assoc m nm (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types" "type-depth"))) m))))) (_a$3645 ptmap) (_a$3646 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3644 _a$3645 _a$3646)))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pt) 1)))))) (_a$3649 (jolt-get fnode (keyword #f "arities")))) (jolt-invoke _a$3647 _a$3648 _a$3649)))) def-node)))))) reinfer-def))) + (def-var! "jolt.passes.types" "reinfer-def" (letrec ((reinfer-def (lambda (def-node ptmap) (let fnrec3347 ((def-node def-node) (ptmap ptmap)) (let* ((fnode (jolt-get def-node (keyword #f "init")))) (if (jolt= (keyword #f "fn") (jolt-get fnode (keyword #f "op"))) (jolt-assoc def-node (keyword #f "init") (jolt-assoc fnode (keyword #f "arities") (let* ((_a$3355 (var-deref "clojure.core" "mapv")) (_a$3356 (lambda (a) (let fnrec3348 ((a a)) (let* ((pt (let* ((_a$3352 (lambda (m pr) (let fnrec3349 ((m m) (pr pr)) (let* ((nm (jolt-nth pr 0)) (e (let* ((_a$3350 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3351 (jolt-nth pr 1))) (jolt-get _a$3350 _a$3351)))) (if (jolt-truthy? (let* ((and__13__auto e)) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-contains? m nm)) and__13__auto))) (jolt-assoc m nm (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types.lattice" "type-depth"))) m))))) (_a$3353 ptmap) (_a$3354 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3352 _a$3353 _a$3354)))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pt) 1)))))) (_a$3357 (jolt-get fnode (keyword #f "arities")))) (jolt-invoke _a$3355 _a$3356 _a$3357)))) def-node)))))) reinfer-def))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "phint-seed" (letrec ((phint-seed (lambda (params phints) (let fnrec3650 ((params params) (phints phints)) (let* ((m (let* ((_a$3655 (lambda (acc pr) (let fnrec3651 ((acc acc) (pr pr)) (let* ((_a$3652 acc) (_a$3653 (jolt-nth pr 0)) (_a$3654 (jolt-nth pr 1))) (jolt-assoc _a$3652 _a$3653 _a$3654))))) (_a$3656 (jolt-hash-map)) (_a$3657 phints)) (jolt-reduce _a$3655 _a$3656 _a$3657)))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nm) (let fnrec3658 ((nm nm)) (let* ((ck (jolt-get m nm)) (e (let* ((and__13__auto ck)) (if (jolt-truthy? and__13__auto) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) ck) and__13__auto)))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types" "type-depth")) jolt-nil)))) params)))))) phint-seed))) + (def-var! "jolt.passes.types" "phint-seed" (letrec ((phint-seed (lambda (params phints) (let fnrec3358 ((params params) (phints phints)) (let* ((m (let* ((_a$3363 (lambda (acc pr) (let fnrec3359 ((acc acc) (pr pr)) (let* ((_a$3360 acc) (_a$3361 (jolt-nth pr 0)) (_a$3362 (jolt-nth pr 1))) (jolt-assoc _a$3360 _a$3361 _a$3362))))) (_a$3364 (jolt-hash-map)) (_a$3365 phints)) (jolt-reduce _a$3363 _a$3364 _a$3365)))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nm) (let fnrec3366 ((nm nm)) (let* ((ck (jolt-get m nm)) (e (let* ((and__13__auto ck)) (if (jolt-truthy? and__13__auto) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) ck) and__13__auto)))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types.lattice" "type-depth")) jolt-nil)))) params)))))) phint-seed))) (guard (e (#t #f)) - (def-var-with-meta! "jolt.passes.types" "check-mode-box" (jolt-invoke (var-deref "clojure.core" "atom") (let* ((_o$3659 (keyword #f "on")) (_o$3660 #f) (_o$3661 (keyword #f "strict")) (_o$3662 #f)) (jolt-hash-map _o$3659 _o$3660 _o$3661 _o$3662))) (jolt-hash-map (keyword #f "private") #t))) + (def-var-with-meta! "jolt.passes.types" "check-mode-box" (jolt-invoke (var-deref "clojure.core" "atom") (let* ((_o$3367 (keyword #f "on")) (_o$3368 #f) (_o$3369 (keyword #f "strict")) (_o$3370 #f)) (jolt-hash-map _o$3367 _o$3368 _o$3369 _o$3370))) (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "set-check-mode!" (letrec ((set-check-mode! (lambda (on strict?) (let fnrec3663 ((on on) (strict? strict?)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "check-mode-box") (let* ((_o$3664 (keyword #f "on")) (_o$3665 (if (jolt-truthy? on) #t #f)) (_o$3666 (keyword #f "strict")) (_o$3667 (if (jolt-truthy? strict?) #t #f))) (jolt-hash-map _o$3664 _o$3665 _o$3666 _o$3667))))))) set-check-mode!))) + (def-var! "jolt.passes.types" "set-check-mode!" (letrec ((set-check-mode! (lambda (on strict?) (let fnrec3371 ((on on) (strict? strict?)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "check-mode-box") (let* ((_o$3372 (keyword #f "on")) (_o$3373 (if (jolt-truthy? on) #t #f)) (_o$3374 (keyword #f "strict")) (_o$3375 (if (jolt-truthy? strict?) #t #f))) (jolt-hash-map _o$3372 _o$3373 _o$3374 _o$3375))))))) set-check-mode!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "take-diags!" (letrec ((take-diags! (lambda () (let fnrec3668 () (let* ((d (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) d)))))) take-diags!))) + (def-var! "jolt.passes.types" "take-diags!" (letrec ((take-diags! (lambda () (let fnrec3376 () (let* ((d (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) d)))))) take-diags!))) (guard (e (#t #f)) - (def-var! "jolt.passes.types" "run-inference" (letrec ((run-inference (lambda (opt) (let fnrec3669 ((opt opt)) (if (jolt-truthy? (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "on"))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "strict"))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) r))) (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt)))))) run-inference))) + (def-var! "jolt.passes.types" "run-inference" (letrec ((run-inference (lambda (opt) (let fnrec3377 ((opt opt)) (if (jolt-truthy? (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "on"))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "strict"))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) r))) (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt)))))) run-inference))) (guard (e (#t #f)) (def-var-with-meta! "jolt.passes" "inline-fixpoint-cap" 8 (jolt-hash-map (keyword #f "private") #t))) (guard (e (#t #f)) - (def-var! "jolt.passes" "run-passes" (letrec ((run-passes (lambda (node ctx) (let fnrec2877 ((node node) (ctx ctx)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "inline-enabled?") ctx)) (let* ((_ (jolt-invoke (var-deref "jolt.passes.inline" "set-rec-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (_ (jolt-invoke (var-deref "jolt.passes.types" "set-record-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (opt (let* ((i 0) (n (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node))) (let loop2878 ((i i) (n n)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #f) (let* ((n2 (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.inline" "scalar-replace") (jolt-invoke (var-deref "jolt.passes.inline" "flatten-lets") (jolt-invoke (var-deref "jolt.passes.inline" "inline-node") n ctx)))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "dirty")))) (if (jolt-truthy? and__13__auto) (< i (var-deref "jolt.passes" "inline-fixpoint-cap")) and__13__auto))) (loop2878 (jolt-inc i) n2) n2))))))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.types" "run-inference") opt))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node)))))) run-passes))) \ No newline at end of file + (def-var! "jolt.passes" "run-passes" (letrec ((run-passes (lambda (node ctx) (let fnrec3378 ((node node) (ctx ctx)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "inline-enabled?") ctx)) (let* ((_ (jolt-invoke (var-deref "jolt.passes.inline" "set-rec-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (_ (jolt-invoke (var-deref "jolt.passes.types" "set-record-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (opt (let* ((i 0) (n (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node))) (let loop3379 ((i i) (n n)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #f) (let* ((n2 (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.inline" "scalar-replace") (jolt-invoke (var-deref "jolt.passes.inline" "flatten-lets") (jolt-invoke (var-deref "jolt.passes.inline" "inline-node") n ctx)))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "dirty")))) (if (jolt-truthy? and__13__auto) (< i (var-deref "jolt.passes" "inline-fixpoint-cap")) and__13__auto))) (loop3379 (jolt-inc i) n2) n2))))))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.types" "run-inference") opt))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node)))))) run-passes))) \ No newline at end of file