Arithmetic and comparisons lowered to raw Chez ops, so an operand outside Chez's tower (BigDecimal) crashed with a raw condition, and Chez contagion leaked: (* 1.0 0) gave exact 0 where the JVM gives 0.0, (* ##Inf 0) gave 0 instead of ##NaN, (/ 1 0) raised an untyped error. One seam now (host/chez/seq.ss): call position emits jolt-n* macros with the both-Chez-numbers fast path open-coded; value position folds through the same binary ops. Anything outside the tower falls to per-op slow hooks that java/bigdec.ss extends, so bigdec arithmetic works in every position (the old static-only :bigdec typing limitation is gone). JVM rules patched into the fast path: a double operand wins, an exact zero divisor throws ArithmeticException while a double zero divisor yields Inf/NaN, quot/rem/mod cover ratios and doubles, min/max return the original operand with NaN winning, a nil operand is NPE and a non-number CCE, zero-arg -// throw ArityException at runtime instead of failing expansion. Also: with-precision now binds *math-context* and bigdec results round with real RoundingMode semantics (UNNECESSARY throws; division rounds to precision instead of throwing); rationalize goes through the shortest decimal print like BigDecimal.valueOf (the identity stub is gone); ratios coerce to bigdec like Numbers.toBigDecimal; min/max int-literal operands no longer coerce to flonum in the numeric pass. Perf neutral: fib and seq benches unchanged (the fast path is two type checks the optimizer folds); hinted fl/fx paths untouched. 19 JVM-certified corpus rows; cts baseline 5614->5730 pass, 192->88 errors, 84->79 baselined namespaces.
616 lines
No EOL
362 KiB
Scheme
616 lines
No EOL
362 KiB
Scheme
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "const" (letrec ((const (lambda (v) (let fnrec8344 ((v v)) (let* ((_o$8345 (keyword #f "op")) (_o$8346 (keyword #f "const")) (_o$8347 (keyword #f "val")) (_o$8348 v)) (jolt-hash-map _o$8345 _o$8346 _o$8347 _o$8348)))))) const)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "local" (letrec ((local (lambda (name) (let fnrec8349 ((name name)) (let* ((_o$8350 (keyword #f "op")) (_o$8351 (keyword #f "local")) (_o$8352 (keyword #f "name")) (_o$8353 name)) (jolt-hash-map _o$8350 _o$8351 _o$8352 _o$8353)))))) local)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "var-ref" (letrec ((var-ref (lambda (ns name) (let fnrec8354 ((ns ns) (name name)) (let* ((_o$8355 (keyword #f "op")) (_o$8356 (keyword #f "var")) (_o$8357 (keyword #f "ns")) (_o$8358 ns) (_o$8359 (keyword #f "name")) (_o$8360 name)) (jolt-hash-map _o$8355 _o$8356 _o$8357 _o$8358 _o$8359 _o$8360)))))) var-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "the-var" (letrec ((the-var (lambda (ns name) (let fnrec8361 ((ns ns) (name name)) (let* ((_o$8362 (keyword #f "op")) (_o$8363 (keyword #f "the-var")) (_o$8364 (keyword #f "ns")) (_o$8365 ns) (_o$8366 (keyword #f "name")) (_o$8367 name)) (jolt-hash-map _o$8362 _o$8363 _o$8364 _o$8365 _o$8366 _o$8367)))))) the-var)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-ref" (letrec ((host-ref (lambda (name) (let fnrec8368 ((name name)) (let* ((_o$8369 (keyword #f "op")) (_o$8370 (keyword #f "host")) (_o$8371 (keyword #f "name")) (_o$8372 name)) (jolt-hash-map _o$8369 _o$8370 _o$8371 _o$8372)))))) host-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-static" (letrec ((host-static (lambda (class member) (let fnrec8373 ((class class) (member member)) (let* ((_o$8374 (keyword #f "op")) (_o$8375 (keyword #f "host-static")) (_o$8376 (keyword #f "class")) (_o$8377 class) (_o$8378 (keyword #f "member")) (_o$8379 member)) (jolt-hash-map _o$8374 _o$8375 _o$8376 _o$8377 _o$8378 _o$8379)))))) host-static)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-new" (letrec ((host-new (lambda (class args) (let fnrec8380 ((class class) (args args)) (let* ((_o$8381 (keyword #f "op")) (_o$8382 (keyword #f "host-new")) (_o$8383 (keyword #f "class")) (_o$8384 class) (_o$8385 (keyword #f "args")) (_o$8386 args)) (jolt-hash-map _o$8381 _o$8382 _o$8383 _o$8384 _o$8385 _o$8386)))))) host-new)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "if-node" (letrec ((if-node (lambda (test then _else) (let fnrec8387 ((test test) (then then) (_else _else)) (let* ((_o$8388 (keyword #f "op")) (_o$8389 (keyword #f "if")) (_o$8390 (keyword #f "test")) (_o$8391 test) (_o$8392 (keyword #f "then")) (_o$8393 then) (_o$8394 (keyword #f "else")) (_o$8395 _else)) (jolt-hash-map _o$8388 _o$8389 _o$8390 _o$8391 _o$8392 _o$8393 _o$8394 _o$8395)))))) if-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "do-node" (letrec ((do-node (lambda (statements ret) (let fnrec8396 ((statements statements) (ret ret)) (let* ((_o$8397 (keyword #f "op")) (_o$8398 (keyword #f "do")) (_o$8399 (keyword #f "statements")) (_o$8400 statements) (_o$8401 (keyword #f "ret")) (_o$8402 ret)) (jolt-hash-map _o$8397 _o$8398 _o$8399 _o$8400 _o$8401 _o$8402)))))) do-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "invoke" (letrec ((invoke (lambda (f args) (let fnrec8403 ((f f) (args args)) (let* ((_o$8404 (keyword #f "op")) (_o$8405 (keyword #f "invoke")) (_o$8406 (keyword #f "fn")) (_o$8407 f) (_o$8408 (keyword #f "args")) (_o$8409 args)) (jolt-hash-map _o$8404 _o$8405 _o$8406 _o$8407 _o$8408 _o$8409)))))) invoke)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "def-node" (letrec ((def-node (case-lambda ((ns name init) (let fnrec8410 ((ns ns) (name name) (init init)) (let* ((_o$8411 (keyword #f "op")) (_o$8412 (keyword #f "def")) (_o$8413 (keyword #f "ns")) (_o$8414 ns) (_o$8415 (keyword #f "name")) (_o$8416 name) (_o$8417 (keyword #f "init")) (_o$8418 init)) (jolt-hash-map _o$8411 _o$8412 _o$8413 _o$8414 _o$8415 _o$8416 _o$8417 _o$8418)))) ((ns name init meta) (let fnrec8419 ((ns ns) (name name) (init init) (meta meta)) (if (jolt-truthy? meta) (let* ((_o$8420 (keyword #f "op")) (_o$8421 (keyword #f "def")) (_o$8422 (keyword #f "ns")) (_o$8423 ns) (_o$8424 (keyword #f "name")) (_o$8425 name) (_o$8426 (keyword #f "init")) (_o$8427 init) (_o$8428 (keyword #f "meta")) (_o$8429 meta)) (jolt-hash-map _o$8420 _o$8421 _o$8422 _o$8423 _o$8424 _o$8425 _o$8426 _o$8427 _o$8428 _o$8429)) (let* ((_o$8430 (keyword #f "op")) (_o$8431 (keyword #f "def")) (_o$8432 (keyword #f "ns")) (_o$8433 ns) (_o$8434 (keyword #f "name")) (_o$8435 name) (_o$8436 (keyword #f "init")) (_o$8437 init)) (jolt-hash-map _o$8430 _o$8431 _o$8432 _o$8433 _o$8434 _o$8435 _o$8436 _o$8437)))))))) def-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "let-node" (letrec ((let-node (lambda (bindings body) (let fnrec8438 ((bindings bindings) (body body)) (let* ((_o$8439 (keyword #f "op")) (_o$8440 (keyword #f "let")) (_o$8441 (keyword #f "bindings")) (_o$8442 bindings) (_o$8443 (keyword #f "body")) (_o$8444 body)) (jolt-hash-map _o$8439 _o$8440 _o$8441 _o$8442 _o$8443 _o$8444)))))) let-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "fn-node" (letrec ((fn-node (lambda (name arities) (let fnrec8445 ((name name) (arities arities)) (if (jolt-truthy? name) (let* ((_o$8446 (keyword #f "op")) (_o$8447 (keyword #f "fn")) (_o$8448 (keyword #f "name")) (_o$8449 name) (_o$8450 (keyword #f "arities")) (_o$8451 arities)) (jolt-hash-map _o$8446 _o$8447 _o$8448 _o$8449 _o$8450 _o$8451)) (let* ((_o$8452 (keyword #f "op")) (_o$8453 (keyword #f "fn")) (_o$8454 (keyword #f "arities")) (_o$8455 arities)) (jolt-hash-map _o$8452 _o$8453 _o$8454 _o$8455))))))) fn-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "vector-node" (letrec ((vector-node (lambda (items) (let fnrec8456 ((items items)) (let* ((_o$8457 (keyword #f "op")) (_o$8458 (keyword #f "vector")) (_o$8459 (keyword #f "items")) (_o$8460 items)) (jolt-hash-map _o$8457 _o$8458 _o$8459 _o$8460)))))) vector-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-node" (letrec ((map-node (lambda (pairs) (let fnrec8461 ((pairs pairs)) (let* ((_o$8462 (keyword #f "op")) (_o$8463 (keyword #f "map")) (_o$8464 (keyword #f "pairs")) (_o$8465 pairs)) (jolt-hash-map _o$8462 _o$8463 _o$8464 _o$8465)))))) map-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "set-node" (letrec ((set-node (lambda (items) (let fnrec8466 ((items items)) (let* ((_o$8467 (keyword #f "op")) (_o$8468 (keyword #f "set")) (_o$8469 (keyword #f "items")) (_o$8470 items)) (jolt-hash-map _o$8467 _o$8468 _o$8469 _o$8470)))))) set-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "quote-node" (letrec ((quote-node (lambda (form) (let fnrec8471 ((form form)) (let* ((_o$8472 (keyword #f "op")) (_o$8473 (keyword #f "quote")) (_o$8474 (keyword #f "form")) (_o$8475 form)) (jolt-hash-map _o$8472 _o$8473 _o$8474 _o$8475)))))) quote-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "throw-node" (letrec ((throw-node (lambda (expr) (let fnrec8476 ((expr expr)) (let* ((_o$8477 (keyword #f "op")) (_o$8478 (keyword #f "throw")) (_o$8479 (keyword #f "expr")) (_o$8480 expr)) (jolt-hash-map _o$8477 _o$8478 _o$8479 _o$8480)))))) throw-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "coerce-node" (letrec ((coerce-node (lambda (kind expr) (let fnrec8481 ((kind kind) (expr expr)) (let* ((_o$8482 (keyword #f "op")) (_o$8483 (keyword #f "coerce")) (_o$8484 (keyword #f "kind")) (_o$8485 kind) (_o$8486 (keyword #f "expr")) (_o$8487 expr)) (jolt-hash-map _o$8482 _o$8483 _o$8484 _o$8485 _o$8486 _o$8487)))))) coerce-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-ir-children" (letrec ((map-ir-children (lambda (f node) (let fnrec8488 ((f f) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$8489 node) (_a$8490 (keyword #f "test")) (_a$8491 (jolt-invoke f (jolt-get node (keyword #f "test")))) (_a$8492 (keyword #f "then")) (_a$8493 (jolt-invoke f (jolt-get node (keyword #f "then")))) (_a$8494 (keyword #f "else")) (_a$8495 (jolt-invoke f (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$8489 _a$8490 _a$8491 _a$8492 _a$8493 _a$8494 _a$8495)) (if (jolt= op (keyword #f "do")) (let* ((_a$8496 node) (_a$8497 (keyword #f "statements")) (_a$8498 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "statements")))) (_a$8499 (keyword #f "ret")) (_a$8500 (jolt-invoke f (jolt-get node (keyword #f "ret"))))) (jolt-assoc _a$8496 _a$8497 _a$8498 _a$8499 _a$8500)) (if (jolt= op (keyword #f "throw")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "coerce")) (jolt-assoc node (keyword #f "expr") (jolt-invoke f (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "set-var")) (jolt-assoc node (keyword #f "val") (jolt-invoke f (jolt-get node (keyword #f "val")))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$8501 node) (_a$8502 (keyword #f "obj")) (_a$8503 (jolt-invoke f (jolt-get node (keyword #f "obj")))) (_a$8504 (keyword #f "val")) (_a$8505 (jolt-invoke f (jolt-get node (keyword #f "val"))))) (jolt-assoc _a$8501 _a$8502 _a$8503 _a$8504 _a$8505)) (if (jolt= op (keyword #f "defmacro")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-assoc node (keyword #f "fn") (jolt-invoke f (jolt-get node (keyword #f "fn")))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$8506 node) (_a$8507 (keyword #f "fn")) (_a$8508 (jolt-invoke f (jolt-get node (keyword #f "fn")))) (_a$8509 (keyword #f "args")) (_a$8510 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$8506 _a$8507 _a$8508 _a$8509 _a$8510)) (if (jolt= op (keyword #f "vector")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "set")) (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "items")))) (if (jolt= op (keyword #f "map")) (jolt-assoc node (keyword #f "pairs") (let* ((_a$8514 (var-deref "clojure.core" "mapv")) (_a$8515 (lambda (pr) (let fnrec8511 ((pr pr)) (let* ((_o$8512 (jolt-invoke f (jolt-nth pr 0))) (_o$8513 (jolt-invoke f (jolt-nth pr 1)))) (jolt-vector _o$8512 _o$8513))))) (_a$8516 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$8514 _a$8515 _a$8516))) (if (jolt= op (keyword #f "let")) (let* ((_a$8523 node) (_a$8524 (keyword #f "bindings")) (_a$8525 (let* ((_a$8520 (var-deref "clojure.core" "mapv")) (_a$8521 (lambda (b) (let fnrec8517 ((b b)) (let* ((_o$8518 (jolt-nth b 0)) (_o$8519 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$8518 _o$8519))))) (_a$8522 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$8520 _a$8521 _a$8522))) (_a$8526 (keyword #f "body")) (_a$8527 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$8523 _a$8524 _a$8525 _a$8526 _a$8527)) (if (jolt= op (keyword #f "loop")) (let* ((_a$8534 node) (_a$8535 (keyword #f "bindings")) (_a$8536 (let* ((_a$8531 (var-deref "clojure.core" "mapv")) (_a$8532 (lambda (b) (let fnrec8528 ((b b)) (let* ((_o$8529 (jolt-nth b 0)) (_o$8530 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$8529 _o$8530))))) (_a$8533 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$8531 _a$8532 _a$8533))) (_a$8537 (keyword #f "body")) (_a$8538 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$8534 _a$8535 _a$8536 _a$8537 _a$8538)) (if (jolt= op (keyword #f "recur")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "fn")) (jolt-assoc node (keyword #f "arities") (let* ((_a$8540 (var-deref "clojure.core" "mapv")) (_a$8541 (lambda (a) (let fnrec8539 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-invoke f (jolt-get a (keyword #f "body"))))))) (_a$8542 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$8540 _a$8541 _a$8542))) (if (jolt= op (keyword #f "def")) (let* ((n (jolt-assoc node (keyword #f "init") (jolt-invoke f (jolt-get node (keyword #f "init")))))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-assoc n (keyword #f "meta-expr") (jolt-invoke f (jolt-get node (keyword #f "meta-expr")))) n)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$8543 node) (_a$8544 (keyword #f "target")) (_a$8545 (jolt-invoke f (jolt-get node (keyword #f "target")))) (_a$8546 (keyword #f "args")) (_a$8547 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$8543 _a$8544 _a$8545 _a$8546 _a$8547)) (if (jolt= op (keyword #f "host-new")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "try")) (let* ((n (jolt-assoc node (keyword #f "body") (jolt-invoke f (jolt-get node (keyword #f "body"))))) (n (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-assoc n (keyword #f "catch-body") (jolt-invoke f (jolt-get node (keyword #f "catch-body")))) n)) (n (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-assoc n (keyword #f "finally") (jolt-invoke f (jolt-get node (keyword #f "finally")))) n))) n) (if (jolt-truthy? (keyword #f "else")) node jolt-nil)))))))))))))))))))))))))) map-ir-children)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "reduce-ir-children" (letrec ((reduce-ir-children (lambda (f acc node) (let fnrec8548 ((f f) (acc acc) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$8552 f) (_a$8553 (let* ((_a$8549 f) (_a$8550 (jolt-invoke f acc (jolt-get node (keyword #f "test")))) (_a$8551 (jolt-get node (keyword #f "then")))) (jolt-invoke _a$8549 _a$8550 _a$8551))) (_a$8554 (jolt-get node (keyword #f "else")))) (jolt-invoke _a$8552 _a$8553 _a$8554)) (if (jolt= op (keyword #f "do")) (let* ((_a$8555 f) (_a$8556 (jolt-reduce f acc (jolt-get node (keyword #f "statements")))) (_a$8557 (jolt-get node (keyword #f "ret")))) (jolt-invoke _a$8555 _a$8556 _a$8557)) (if (jolt= op (keyword #f "throw")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "coerce")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "set-var")) (jolt-invoke f acc (jolt-get node (keyword #f "val"))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$8558 f) (_a$8559 (jolt-invoke f acc (jolt-get node (keyword #f "obj")))) (_a$8560 (jolt-get node (keyword #f "val")))) (jolt-invoke _a$8558 _a$8559 _a$8560)) (if (jolt= op (keyword #f "defmacro")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "ffi-callable")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$8561 f) (_a$8562 (jolt-invoke f acc (jolt-get node (keyword #f "fn")))) (_a$8563 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$8561 _a$8562 _a$8563)) (if (jolt= op (keyword #f "vector")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "set")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "map")) (let* ((_a$8568 (lambda (a pr) (let fnrec8564 ((a a) (pr pr)) (let* ((_a$8565 f) (_a$8566 (jolt-invoke f a (jolt-nth pr 0))) (_a$8567 (jolt-nth pr 1))) (jolt-invoke _a$8565 _a$8566 _a$8567))))) (_a$8569 acc) (_a$8570 (jolt-get node (keyword #f "pairs")))) (jolt-reduce _a$8568 _a$8569 _a$8570)) (if (jolt= op (keyword #f "let")) (let* ((_a$8575 f) (_a$8576 (let* ((_a$8572 (lambda (a b) (let fnrec8571 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$8573 acc) (_a$8574 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$8572 _a$8573 _a$8574))) (_a$8577 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$8575 _a$8576 _a$8577)) (if (jolt= op (keyword #f "loop")) (let* ((_a$8582 f) (_a$8583 (let* ((_a$8579 (lambda (a b) (let fnrec8578 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$8580 acc) (_a$8581 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$8579 _a$8580 _a$8581))) (_a$8584 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$8582 _a$8583 _a$8584)) (if (jolt= op (keyword #f "recur")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "fn")) (let* ((_a$8586 (lambda (a ar) (let fnrec8585 ((a a) (ar ar)) (jolt-invoke f a (jolt-get ar (keyword #f "body")))))) (_a$8587 acc) (_a$8588 (jolt-get node (keyword #f "arities")))) (jolt-reduce _a$8586 _a$8587 _a$8588)) (if (jolt= op (keyword #f "def")) (let* ((a (if (jolt-truthy? (jolt-get node (keyword #f "init"))) (jolt-invoke f acc (jolt-get node (keyword #f "init"))) acc))) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke f a (jolt-get node (keyword #f "meta-expr"))) a)) (if (jolt= op (keyword #f "host-call")) (let* ((_a$8589 f) (_a$8590 (jolt-invoke f acc (jolt-get node (keyword #f "target")))) (_a$8591 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$8589 _a$8590 _a$8591)) (if (jolt= op (keyword #f "host-new")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "try")) (let* ((a (jolt-invoke f acc (jolt-get node (keyword #f "body")))) (a (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-invoke f a (jolt-get node (keyword #f "catch-body"))) a)) (a (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-invoke f a (jolt-get node (keyword #f "finally"))) a))) a) (if (jolt-truthy? (keyword #f "else")) acc jolt-nil)))))))))))))))))))))))))) reduce-ir-children)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.analyzer" "analyze"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "handled" (let* ((_o$8592 "quote") (_o$8593 "if") (_o$8594 "do") (_o$8595 "def") (_o$8596 "fn*") (_o$8597 "let*") (_o$8598 "loop*") (_o$8599 "recur") (_o$8600 "throw") (_o$8601 "try") (_o$8602 "syntax-quote") (_o$8603 "var") (_o$8604 "letfn*") (_o$8605 "set!") (_o$8606 "defmacro")) (jolt-hash-set _o$8592 _o$8593 _o$8594 _o$8595 _o$8596 _o$8597 _o$8598 _o$8599 _o$8600 _o$8601 _o$8602 _o$8603 _o$8604 _o$8605 _o$8606)) (let* ((_o$8607 (keyword #f "private")) (_o$8608 #t)) (jolt-hash-map _o$8607 _o$8608))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "uncompilable" (letrec ((uncompilable (lambda (why) (let fnrec8609 ((why why)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt/uncompilable: " why)))))) uncompilable) (let* ((_o$8610 (keyword #f "private")) (_o$8611 #t)) (jolt-hash-map _o$8610 _o$8611))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (let* ((_o$8612 (keyword #f "private")) (_o$8613 #t)) (jolt-hash-map _o$8612 _o$8613))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "gen-name" (letrec ((gen-name (lambda (prefix) (let fnrec8614 ((prefix prefix)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.analyzer" "gensym-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.analyzer" "gensym-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") "_r$" prefix n))))))) gen-name) (let* ((_o$8615 (keyword #f "private")) (_o$8616 #t)) (jolt-hash-map _o$8615 _o$8616))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "empty-env" (letrec ((empty-env (lambda () (let fnrec8617 () (let* ((_o$8618 (keyword #f "locals")) (_o$8619 (jolt-hash-set)) (_o$8620 (keyword #f "hints")) (_o$8621 (jolt-hash-map))) (jolt-hash-map _o$8618 _o$8619 _o$8620 _o$8621)))))) empty-env) (let* ((_o$8622 (keyword #f "private")) (_o$8623 #t)) (jolt-hash-map _o$8622 _o$8623))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "local?" (letrec ((local? (lambda (env nm) (let fnrec8624 ((env env) (nm nm)) (jolt-contains? (jolt-get env (keyword #f "locals")) nm))))) local?) (let* ((_o$8625 (keyword #f "private")) (_o$8626 #t)) (jolt-hash-map _o$8625 _o$8626))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "add-locals" (letrec ((add-locals (lambda (env names) (let fnrec8627 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__97_) (let fnrec8628 ((p__97_ p__97_)) (jolt-reduce jolt-conj p__97_ names)))))))) add-locals) (let* ((_o$8629 (keyword #f "private")) (_o$8630 #t)) (jolt-hash-map _o$8629 _o$8630))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "amp-env-map" (letrec ((amp-env-map (lambda (env) (let fnrec8631 ((env env)) (let* ((_a$8633 (lambda (m n) (let fnrec8632 ((m m) (n n)) (jolt-assoc m (jolt-invoke (var-deref "clojure.core" "symbol") n) jolt-nil)))) (_a$8634 (jolt-hash-map)) (_a$8635 (jolt-get env (keyword #f "locals")))) (jolt-reduce _a$8633 _a$8634 _a$8635)))))) amp-env-map) (let* ((_o$8636 (keyword #f "private")) (_o$8637 #t)) (jolt-hash-map _o$8636 _o$8637))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec8638 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur) (let* ((_o$8639 (keyword #f "private")) (_o$8640 #t)) (jolt-hash-map _o$8639 _o$8640))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec8641 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-nil? m) jolt-nil (if (jolt-truthy? (jolt-get m (keyword #f "struct"))) (keyword #f "struct") (if (jolt-truthy? (keyword #f "else")) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? (let* ((and__25__auto t)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "record-type?") ctx t) and__25__auto))) (keyword #f "struct") jolt-nil)) jolt-nil)))))))) hint-of) (let* ((_o$8642 (keyword #f "private")) (_o$8643 #t)) (jolt-hash-map _o$8642 _o$8643))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec8644 ((env env) (nm nm) (h h)) (if (jolt-truthy? h) (jolt-assoc env (keyword #f "hints") (jolt-assoc (jolt-get env (keyword #f "hints")) nm h)) env))))) add-hint) (let* ((_o$8645 (keyword #f "private")) (_o$8646 #t)) (jolt-hash-map _o$8645 _o$8646))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec8647 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? t) (jolt-invoke (var-deref "jolt.host" "record-ctor-key") ctx t) jolt-nil)) jolt-nil)))))) phint-of) (let* ((_o$8648 (keyword #f "private")) (_o$8649 #t)) (jolt-hash-map _o$8648 _o$8649))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "tag->nkind" (letrec ((tag->nkind (lambda (t) (let fnrec8650 ((t t)) (let* ((s (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") t)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") t) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") t)) t (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt= s "double") (keyword #f "double") (if (jolt= s "long") (keyword #f "long") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))))))) tag->nkind) (let* ((_o$8651 (keyword #f "private")) (_o$8652 #t)) (jolt-hash-map _o$8651 _o$8652))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "nhint-of" (letrec ((nhint-of (lambda (ctx sym) (let fnrec8653 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") (jolt-get m (keyword #f "tag"))) jolt-nil)))))) nhint-of) (let* ((_o$8654 (keyword #f "private")) (_o$8655 #t)) (jolt-hash-map _o$8654 _o$8655))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "with-ret-nhint" (letrec ((with-ret-nhint (lambda (node kind) (let fnrec8656 ((node node) (kind kind)) (if (jolt-truthy? (let* ((and__25__auto kind)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "arities") (let* ((_a$8658 (var-deref "clojure.core" "mapv")) (_a$8659 (lambda (a) (let fnrec8657 ((a a)) (if (jolt-truthy? (jolt-get a (keyword #f "ret-nhint"))) a (jolt-assoc a (keyword #f "ret-nhint") kind))))) (_a$8660 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$8658 _a$8659 _a$8660))) node))))) with-ret-nhint) (let* ((_o$8661 (keyword #f "private")) (_o$8662 #t)) (jolt-hash-map _o$8661 _o$8662))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec8663 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__98_) (let fnrec8664 ((p__98_ p__98_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__98_ env))) forms)) (n (jolt-count v))) (if (jolt-zero? n) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil) (if (jolt= 1 n) (jolt-first v) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$8665 (var-deref "jolt.ir" "do-node")) (_a$8666 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$8667 (jolt-peek v))) (jolt-invoke _a$8665 _a$8666 _a$8667)) jolt-nil)))))))) analyze-seq) (let* ((_o$8668 (keyword #f "private")) (_o$8669 #t)) (jolt-hash-map _o$8668 _o$8669))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec8670 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop8671 ((i i) (env env) (pairs pairs)) (if (jolt-n< i (jolt-count bvec)) (let* ((bsym (jolt-nth bvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") bsym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring binding") jolt-nil) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") bsym)) (init (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth bvec (jolt-inc i)) env))) (let* ((_a$8678 (jolt-n+ i 2)) (_a$8679 (let* ((_a$8672 (var-deref "jolt.analyzer" "add-hint")) (_a$8673 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$8674 nm) (_a$8675 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$8672 _a$8673 _a$8674 _a$8675))) (_a$8680 (jolt-conj pairs (let* ((_o$8676 nm) (_o$8677 init)) (jolt-vector _o$8676 _o$8677))))) (loop8671 _a$8678 _a$8679 _a$8680))))) (let* ((_o$8681 pairs) (_o$8682 env)) (jolt-vector _o$8681 _o$8682))))))))) analyze-bindings) (let* ((_o$8683 (keyword #f "private")) (_o$8684 #t)) (jolt-hash-map _o$8683 _o$8684))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec8685 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector)) (nhints (jolt-vector))) (let loop8686 ((i i) (fixed fixed) (rest-name rest-name) (hints hints) (phints phints) (nhints nhints)) (if (jolt-n< i (jolt-count pvec)) (let* ((p (jolt-nth pvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") p)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn param") jolt-nil) (if (jolt= "&" (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (let* ((r (jolt-nth pvec (jolt-inc i)))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") r)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn rest") jolt-nil) (let* ((_a$8687 (jolt-n+ i 2)) (_a$8688 fixed) (_a$8689 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$8690 hints) (_a$8691 phints) (_a$8692 nhints)) (loop8686 _a$8687 _a$8688 _a$8689 _a$8690 _a$8691 _a$8692)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (h (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx p)) (ph (jolt-invoke (var-deref "jolt.analyzer" "phint-of") ctx p)) (nh (jolt-invoke (var-deref "jolt.analyzer" "nhint-of") ctx p))) (let* ((_a$8699 (jolt-inc i)) (_a$8700 (jolt-conj fixed nm)) (_a$8701 rest-name) (_a$8702 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$8693 nm) (_o$8694 h)) (jolt-vector _o$8693 _o$8694))) hints)) (_a$8703 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$8695 nm) (_o$8696 ph)) (jolt-vector _o$8695 _o$8696))) phints)) (_a$8704 (if (jolt-truthy? nh) (jolt-conj nhints (let* ((_o$8697 nm) (_o$8698 nh)) (jolt-vector _o$8697 _o$8698))) nhints))) (loop8686 _a$8699 _a$8700 _a$8701 _a$8702 _a$8703 _a$8704)))))) (let* ((_o$8705 (keyword #f "fixed")) (_o$8706 fixed) (_o$8707 (keyword #f "rest")) (_o$8708 rest-name) (_o$8709 (keyword #f "hints")) (_o$8710 hints) (_o$8711 (keyword #f "phints")) (_o$8712 phints) (_o$8713 (keyword #f "nhints")) (_o$8714 nhints)) (jolt-hash-map _o$8705 _o$8706 _o$8707 _o$8708 _o$8709 _o$8710 _o$8711 _o$8712 _o$8713 _o$8714))))))))) parse-params) (let* ((_o$8715 (keyword #f "private")) (_o$8716 #t)) (jolt-hash-map _o$8715 _o$8716))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec8717 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop8718 ((i i) (out out)) (if (jolt-n< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop8719 ((j j)) (if (jolt-n>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop8719 (jolt-inc j)) jolt-nil))))))) (let* ((_a$8720 (jolt-inc i)) (_a$8721 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop8718 _a$8720 _a$8721))) out)))))))) uniquify-params) (let* ((_o$8722 (keyword #f "private")) (_o$8723 #t)) (jolt-hash-map _o$8722 _o$8723))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec8724 ((ctx ctx) (pvec pvec) (body body) (env env) (fn-name fn-name)) (let* ((pp (jolt-invoke (var-deref "jolt.analyzer" "parse-params") ctx (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") pvec)))) (fixed (jolt-invoke (var-deref "jolt.analyzer" "uniquify-params") (jolt-get pp (keyword #f "fixed")))) (rst (jolt-get pp (keyword #f "rest"))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (let* ((_a$8725 (var-deref "clojure.core" "str")) (_a$8726 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$8727 "/") (_a$8728 (let* ((or__26__auto fn-name)) (if (jolt-truthy? or__26__auto) or__26__auto "fn"))) (_a$8729 "--")) (jolt-invoke _a$8725 _a$8726 _a$8727 _a$8728 _a$8729)))) (names (let* ((G__149 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__150 (if (jolt-truthy? rst) (jolt-conj G__149 rst) G__149))) (let* ((G__151 (if (jolt-truthy? fn-name) (jolt-conj G__150 fn-name) G__150))) G__151)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$8735 (lambda (e pr) (let fnrec8730 ((e e) (pr pr)) (let* ((_a$8731 (var-deref "jolt.analyzer" "add-hint")) (_a$8732 e) (_a$8733 (jolt-nth pr 0)) (_a$8734 (jolt-nth pr 1))) (jolt-invoke _a$8731 _a$8732 _a$8733 _a$8734))))) (_a$8736 env0) (_a$8737 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$8735 _a$8736 _a$8737))) (arity (let* ((_o$8738 (keyword #f "params")) (_o$8739 fixed) (_o$8740 (keyword #f "recur-name")) (_o$8741 rname) (_o$8742 (keyword #f "body")) (_o$8743 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$8738 _o$8739 _o$8740 _o$8741 _o$8742 _o$8743))) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "phints")))) (jolt-assoc arity (keyword #f "phints") (jolt-get pp (keyword #f "phints"))) arity)) (arity (if (jolt-truthy? (jolt-seq (jolt-get pp (keyword #f "nhints")))) (jolt-assoc arity (keyword #f "nhints") (jolt-get pp (keyword #f "nhints"))) arity))) (if (jolt-truthy? rst) (jolt-assoc arity (keyword #f "rest") rst) arity)))))) analyze-arity) (let* ((_o$8744 (keyword #f "private")) (_o$8745 #t)) (jolt-hash-map _o$8744 _o$8745))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec8746 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (let* ((es (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-truthy? (let* ((and__25__auto (jolt= 3 (jolt-count es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first es)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "with-meta" (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first es))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-vec?") (jolt-nth es 1)) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-nth es 1) form)) form))))) strip-arglist-meta) (let* ((_o$8747 (keyword #f "private")) (_o$8748 #t)) (jolt-hash-map _o$8747 _o$8748))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec8749 ((ctx ctx) (items items) (env env)) (let* ((named (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1))) (fn-name (if (jolt-truthy? named) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1)) jolt-nil)) (rest-items (if (jolt-truthy? named) (jolt-drop 2 items) (jolt-drop 1 items))) (first* (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first rest-items)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze-arity") ctx first* (jolt-rest rest-items) env fn-name))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") first*)) (jolt-invoke (var-deref "jolt.ir" "fn-node") fn-name (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (clause) (let fnrec8750 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$8751 (var-deref "jolt.analyzer" "analyze-arity")) (_a$8752 ctx) (_a$8753 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$8754 (jolt-rest cl)) (_a$8755 env) (_a$8756 fn-name)) (jolt-invoke _a$8751 _a$8752 _a$8753 _a$8754 _a$8755 _a$8756))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn) (let* ((_o$8757 (keyword #f "private")) (_o$8758 #t)) (jolt-hash-map _o$8757 _o$8758))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "catch-all-names" (let* ((_o$8759 "Throwable") (_o$8760 "java.lang.Throwable") (_o$8761 "Object") (_o$8762 "java.lang.Object")) (jolt-hash-set _o$8759 _o$8760 _o$8761 _o$8762)) (let* ((_o$8763 (keyword #f "private")) (_o$8764 #t)) (jolt-hash-map _o$8763 _o$8764))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec8765 ((ctx ctx) (items items) (env env)) (let* ((clauses (jolt-rest items)) (body (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (catches (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (finally-body (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil))) (begin (begin (jolt-count (jolt-map (lambda (c) (let fnrec8766 ((c c)) (begin (let* ((head (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") c)) (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c))) jolt-nil)) (hname (if (jolt-truthy? (let* ((and__25__auto head)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") head) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil))) (if (jolt= hname "catch") (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (begin (if (let* ((or__26__auto (jolt-n< (jolt-count cl) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth cl 2))))) (jolt-throw "Unable to parse catch clause; expected (catch class binding body*)") jolt-nil) (jolt-invoke (var-deref "clojure.core" "swap!") catches jolt-conj cl))) (if (jolt= hname "finally") (jolt-invoke (var-deref "clojure.core" "reset!") finally-body (jolt-rest (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") c)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "swap!") body jolt-conj c) jolt-nil)))) jolt-nil))) clauses)) jolt-nil) (let* ((n (let* ((_o$8767 (keyword #f "op")) (_o$8768 (keyword #f "try")) (_o$8769 (keyword #f "body")) (_o$8770 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$8767 _o$8768 _o$8769 _o$8770))) (n (if (jolt-truthy? (jolt-seq (jolt-invoke (var-deref "clojure.core" "deref") catches))) (let* ((evar-name (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "catch")) (raw-name (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "catch-raw")) (evar (jolt-invoke (var-deref "clojure.core" "symbol") evar-name)) (dispatch (let* ((_a$8775 (lambda (_else cl) (let fnrec8771 ((_else _else) (cl cl)) (let* ((cform (jolt-nth cl 1)) (bindsym (jolt-nth cl 2)) (bodyf (jolt-drop 3 cl)) (letform (jolt-cons (jolt-symbol #f "let") (jolt-cons (jolt-vector bindsym evar) bodyf))) (fullname (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") cform) jolt-nil)) (catch-all? (let* ((or__26__auto (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") cform)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-contains? (var-deref "jolt.analyzer" "catch-all-names") fullname))))) (if (jolt-truthy? catch-all?) letform (jolt-list (jolt-symbol #f "if") (let* ((_a$8772 (jolt-symbol #f "or")) (_a$8773 (jolt-list (jolt-symbol #f "instance?") cform evar)) (_a$8774 (jolt-list (jolt-symbol #f "__catch-broad?") fullname evar))) (jolt-list _a$8772 _a$8773 _a$8774)) letform _else)))))) (_a$8776 (jolt-list (jolt-symbol #f "throw") evar)) (_a$8777 (jolt-reverse (jolt-invoke (var-deref "clojure.core" "deref") catches)))) (jolt-reduce _a$8775 _a$8776 _a$8777)))) (jolt-assoc n (keyword #f "catch-sym") evar-name (keyword #f "catch-raw-sym") raw-name (keyword #f "catch-body") (let* ((_a$8778 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8779 ctx) (_a$8780 (jolt-list dispatch)) (_a$8781 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector evar-name)))) (jolt-invoke _a$8778 _a$8779 _a$8780 _a$8781)))) n)) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") finally-body)) (jolt-assoc n (keyword #f "finally") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") finally-body) env)) n))) n))))))) analyze-try) (let* ((_o$8782 (keyword #f "private")) (_o$8783 #t)) (jolt-hash-map _o$8782 _o$8783))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-letfn*" (letrec ((analyze-letfn* (lambda (ctx items env) (let fnrec8784 ((ctx ctx) (items items) (env env)) (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (n (jolt-quot (jolt-count bvec) 2)) (names (let* ((_a$8786 (var-deref "clojure.core" "mapv")) (_a$8787 (lambda (i) (let fnrec8785 ((i i)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth bvec (jolt-n* 2 i)))))) (_a$8788 (jolt-range n))) (jolt-invoke _a$8786 _a$8787 _a$8788))) (env* (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names)) (binds (let* ((_a$8792 (var-deref "clojure.core" "mapv")) (_a$8793 (lambda (i) (let fnrec8789 ((i i)) (let* ((_o$8790 (jolt-nth names i)) (_o$8791 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth bvec (jolt-inc (jolt-n* 2 i))) env*))) (jolt-vector _o$8790 _o$8791))))) (_a$8794 (jolt-range n))) (jolt-invoke _a$8792 _a$8793 _a$8794)))) (let* ((_o$8795 (keyword #f "op")) (_o$8796 (keyword #f "let")) (_o$8797 (keyword #f "letrec")) (_o$8798 #t) (_o$8799 (keyword #f "bindings")) (_o$8800 binds) (_o$8801 (keyword #f "body")) (_o$8802 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$8795 _o$8796 _o$8797 _o$8798 _o$8799 _o$8800 _o$8801 _o$8802))))))) analyze-letfn*) (let* ((_o$8803 (keyword #f "private")) (_o$8804 #t)) (jolt-hash-map _o$8803 _o$8804))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec8805 ((nm nm)) (let* ((and__25__auto (jolt-n> (jolt-count nm) 2))) (if (jolt-truthy? and__25__auto) (jolt= ".-" (jolt-invoke (var-deref "clojure.core" "subs") nm 0 2)) and__25__auto)))))) field-head?) (let* ((_o$8806 (keyword #f "private")) (_o$8807 #t)) (jolt-hash-map _o$8806 _o$8807))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "def-meta-expr" (letrec ((def-meta-expr (lambda (ctx base env) (let fnrec8808 ((ctx ctx) (base base) (env env)) (if (jolt-pos? (jolt-count base)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$8812 (var-deref "clojure.core" "mapv")) (_a$8813 (lambda (p) (let fnrec8809 ((p p)) (let* ((k (jolt-first p)) (v (jolt-invoke (var-deref "clojure.core" "second") p))) (let* ((_o$8810 (jolt-invoke (var-deref "jolt.ir" "const") k)) (_o$8811 (if (jolt= k (keyword #f "tag")) (jolt-invoke (var-deref "jolt.ir" "quote-node") v) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx v env)))) (jolt-vector _o$8810 _o$8811)))))) (_a$8814 (jolt-seq base))) (jolt-invoke _a$8812 _a$8813 _a$8814))) jolt-nil))))) def-meta-expr) (let* ((_o$8815 (keyword #f "private")) (_o$8816 #t)) (jolt-hash-map _o$8815 _o$8816))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec8817 ((ctx ctx) (items items) (env env)) (let* ((name-sym (jolt-nth items 1))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") name-sym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "def name with map metadata") jolt-nil) (if (jolt-n< (jolt-count items) 3) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8818 (keyword #f "op")) (_o$8819 (keyword #f "def")) (_o$8820 (keyword #f "ns")) (_o$8821 cur) (_o$8822 (keyword #f "name")) (_o$8823 nm) (_o$8824 (keyword #f "no-init")) (_o$8825 #t)) (jolt-hash-map _o$8818 _o$8819 _o$8820 _o$8821 _o$8822 _o$8823 _o$8824 _o$8825)))) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (has-doc (let* ((and__25__auto (jolt-n> (jolt-count items) 3))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "string?") (jolt-nth items 2)) and__25__auto))) (val-form (jolt-nth items (if (jolt-truthy? has-doc) 3 2))) (base0 (let* ((or__26__auto (jolt-invoke (var-deref "jolt.host" "form-sym-meta") name-sym))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))) (tag (jolt-get base0 (keyword #f "tag"))) (tag-name (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") tag)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") tag) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") tag)) tag (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (base-meta (if (jolt-truthy? tag-name) (let* ((c (jolt-invoke (var-deref "jolt.host" "resolve-class-hint") tag-name))) (if (jolt-truthy? c) (jolt-assoc base0 (keyword #f "tag") c) base0)) base0)) (node-meta (if (jolt-truthy? has-doc) (jolt-assoc base-meta (keyword #f "doc") (jolt-nth items 2)) base-meta))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((node (jolt-invoke (var-deref "jolt.ir" "def-node") cur nm (let* ((_a$8826 (var-deref "jolt.analyzer" "with-ret-nhint")) (_a$8827 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env)) (_a$8828 (jolt-invoke (var-deref "jolt.analyzer" "tag->nkind") tag))) (jolt-invoke _a$8826 _a$8827 _a$8828)) node-meta)) (me (jolt-invoke (var-deref "jolt.analyzer" "def-meta-expr") ctx node-meta env))) (if (jolt-truthy? me) (jolt-assoc node (keyword #f "meta-expr") me) node))))))))))) analyze-def) (let* ((_o$8829 (keyword #f "private")) (_o$8830 #t)) (jolt-hash-map _o$8829 _o$8830))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec8831 ((ctx ctx) (items items) (env env)) (let* ((target (jolt-nth items 1)) (val-node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (ti (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") target)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") target)) jolt-nil)) (thead (if (jolt-truthy? (let* ((and__25__auto ti)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count ti)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first ti)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first ti)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto thead)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") thead) and__25__auto))) (let* ((_o$8832 (keyword #f "op")) (_o$8833 (keyword #f "set-field")) (_o$8834 (keyword #f "obj")) (_o$8835 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$8836 (keyword #f "field")) (_o$8837 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$8838 (keyword #f "val")) (_o$8839 val-node)) (jolt-hash-map _o$8832 _o$8833 _o$8834 _o$8835 _o$8836 _o$8837 _o$8838 _o$8839)) (if (jolt-truthy? (let* ((and__25__auto (jolt= thead "."))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= (jolt-count ti) 3))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth ti 2)))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "class") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "kind"))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$8843 (var-deref "jolt.ir" "invoke")) (_a$8844 (jolt-invoke (var-deref "jolt.ir" "var-ref") "jolt.host" "set-static-field!")) (_a$8845 (let* ((_o$8840 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx (jolt-nth ti 1)) (keyword #f "name")))) (_o$8841 (jolt-invoke (var-deref "jolt.ir" "const") (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth ti 2)))) (_o$8842 val-node)) (jolt-vector _o$8840 _o$8841 _o$8842)))) (jolt-invoke _a$8843 _a$8844 _a$8845)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") target)) (begin (if (jolt-truthy? (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a local") jolt-nil) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (begin (if (jolt-not (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind")))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of a non-var") jolt-nil) (let* ((_o$8849 (keyword #f "op")) (_o$8850 (keyword #f "set-var")) (_o$8851 (keyword #f "the-var")) (_o$8852 (let* ((_a$8846 (var-deref "jolt.ir" "the-var")) (_a$8847 (jolt-get r (keyword #f "ns"))) (_a$8848 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8846 _a$8847 _a$8848))) (_o$8853 (keyword #f "val")) (_o$8854 val-node)) (jolt-hash-map _o$8849 _o$8850 _o$8851 _o$8852 _o$8853 _o$8854))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil))))))))) analyze-set!) (let* ((_o$8855 (keyword #f "private")) (_o$8856 #t)) (jolt-hash-map _o$8855 _o$8856))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec8857 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__152 op)) (if (jolt= G__152 "quote") (let* ((qf (jolt-invoke (var-deref "clojure.core" "second") items)) (m (jolt-invoke (var-deref "jolt.host" "form-coll-meta") qf)) (m (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") m)) (let* ((u (jolt-dissoc m (keyword #f "line") (keyword #f "column") (keyword #f "end-line") (keyword #f "end-column") (keyword #f "file")))) (if (jolt-truthy? (jolt-seq u)) u jolt-nil)) jolt-nil))) (if (jolt-nil? m) (jolt-invoke (var-deref "jolt.ir" "quote-node") qf) (let* ((_a$8860 (var-deref "jolt.ir" "invoke")) (_a$8861 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$8862 (let* ((_o$8858 (jolt-invoke (var-deref "jolt.ir" "quote-node") qf)) (_o$8859 (jolt-invoke (var-deref "jolt.ir" "quote-node") m))) (jolt-vector _o$8858 _o$8859)))) (jolt-invoke _a$8860 _a$8861 _a$8862)))) (if (jolt= G__152 "if") (begin (if (let* ((or__26__auto (jolt-n< (jolt-count items) 3))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-n> (jolt-count items) 4))) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Wrong number of args (" (jolt-dec (jolt-count items)) ") passed to: if")) jolt-nil) (let* ((_a$8863 (var-deref "jolt.ir" "if-node")) (_a$8864 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$8865 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$8866 (if (jolt-n> (jolt-count items) 3) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 3) env) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil)))) (jolt-invoke _a$8863 _a$8864 _a$8865 _a$8866))) (if (jolt= G__152 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__152 "throw") (jolt-invoke (var-deref "jolt.ir" "throw-node") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (if (jolt= G__152 "def") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (if (jolt= G__152 "let*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env))) (let* ((_a$8871 (var-deref "jolt.ir" "let-node")) (_a$8872 (jolt-first r)) (_a$8873 (let* ((_a$8867 (var-deref "jolt.analyzer" "analyze-seq")) (_a$8868 ctx) (_a$8869 (jolt-drop 2 items)) (_a$8870 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$8867 _a$8868 _a$8869 _a$8870)))) (jolt-invoke _a$8871 _a$8872 _a$8873))) (if (jolt= G__152 "loop*") (let* ((bvec (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (rname (jolt-invoke (var-deref "jolt.analyzer" "gen-name") "loop")) (r (jolt-invoke (var-deref "jolt.analyzer" "analyze-bindings") ctx bvec env)) (env** (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "clojure.core" "second") r) rname))) (let* ((_o$8874 (keyword #f "op")) (_o$8875 (keyword #f "loop")) (_o$8876 (keyword #f "recur-name")) (_o$8877 rname) (_o$8878 (keyword #f "bindings")) (_o$8879 (jolt-first r)) (_o$8880 (keyword #f "body")) (_o$8881 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$8874 _o$8875 _o$8876 _o$8877 _o$8878 _o$8879 _o$8880 _o$8881))) (if (jolt= G__152 "recur") (let* ((rt (jolt-get env (keyword #f "recur")))) (begin (if (jolt-not rt) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "recur outside loop/fn") jolt-nil) (let* ((_o$8886 (keyword #f "op")) (_o$8887 (keyword #f "recur")) (_o$8888 (keyword #f "recur-name")) (_o$8889 rt) (_o$8890 (keyword #f "args")) (_o$8891 (let* ((_a$8883 (var-deref "clojure.core" "mapv")) (_a$8884 (lambda (p__99_) (let fnrec8882 ((p__99_ p__99_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__99_ env)))) (_a$8885 (jolt-rest items))) (jolt-invoke _a$8883 _a$8884 _a$8885)))) (jolt-hash-map _o$8886 _o$8887 _o$8888 _o$8889 _o$8890 _o$8891)))) (if (jolt= G__152 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__152 "letfn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn*") ctx items env) (if (jolt= G__152 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__152 "syntax-quote") (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-syntax-quote-lower") ctx (jolt-invoke (var-deref "clojure.core" "second") items)) env) (if (jolt= G__152 "var") (let* ((sym (jolt-invoke (var-deref "clojure.core" "second") items)) (r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx sym))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((_a$8892 (var-deref "jolt.ir" "the-var")) (_a$8893 (jolt-get r (keyword #f "ns"))) (_a$8894 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$8892 _a$8893 _a$8894)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "var of non-var " (jolt-invoke (var-deref "jolt.host" "form-sym-name") sym))))) (if (jolt= G__152 "defmacro") (let* ((name-sym (jolt-nth items 1)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (after (jolt-drop 2 items)) (after (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") (jolt-first after))) (jolt-rest after) after)) (after (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") (jolt-first after))) (jolt-rest after) after)) (fn-form (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") after))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$8895 (keyword #f "op")) (_o$8896 (keyword #f "defmacro")) (_o$8897 (keyword #f "ns")) (_o$8898 cur) (_o$8899 (keyword #f "name")) (_o$8900 nm) (_o$8901 (keyword #f "fn")) (_o$8902 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$8895 _o$8896 _o$8897 _o$8898 _o$8899 _o$8900 _o$8901 _o$8902)))) (if (jolt= G__152 "set!") (jolt-invoke (var-deref "jolt.analyzer" "analyze-set!") ctx items env) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " op)))))))))))))))))))))) analyze-special) (let* ((_o$8903 (keyword #f "private")) (_o$8904 #t)) (jolt-hash-map _o$8903 _o$8904))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec8905 ((nm nm)) (let* ((and__25__auto (jolt-n> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt= "-" (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))) and__25__auto)) and__25__auto)) and__25__auto)))))) method-head?) (let* ((_o$8906 (keyword #f "private")) (_o$8907 #t)) (jolt-hash-map _o$8906 _o$8907))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec8908 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (jolt-n< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed member expression, expecting (.method target ...): " hname)) jolt-nil) (let* ((_o$8913 (keyword #f "op")) (_o$8914 (keyword #f "host-call")) (_o$8915 (keyword #f "method")) (_o$8916 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8917 (keyword #f "target")) (_o$8918 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8919 (keyword #f "args")) (_o$8920 (let* ((_a$8910 (var-deref "clojure.core" "mapv")) (_a$8911 (lambda (p__100_) (let fnrec8909 ((p__100_ p__100_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__100_ env)))) (_a$8912 (jolt-drop 2 items))) (jolt-invoke _a$8910 _a$8911 _a$8912)))) (jolt-hash-map _o$8913 _o$8914 _o$8915 _o$8916 _o$8917 _o$8918 _o$8919 _o$8920))))))) analyze-host-call) (let* ((_o$8921 (keyword #f "private")) (_o$8922 #t)) (jolt-hash-map _o$8921 _o$8922))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec8923 ((nm nm)) (let* ((and__25__auto (jolt-n> (jolt-count nm) 1))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "." (let* ((_a$8924 (var-deref "clojure.core" "subs")) (_a$8925 nm) (_a$8926 (jolt-dec (jolt-count nm))) (_a$8927 (jolt-count nm))) (jolt-invoke _a$8924 _a$8925 _a$8926 _a$8927))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1))) and__25__auto)) and__25__auto)))))) ctor-head?) (let* ((_o$8928 (keyword #f "private")) (_o$8929 #t)) (jolt-hash-map _o$8928 _o$8929))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec8930 ((ctx ctx) (class class) (args args) (env env)) (let* ((_a$8932 (var-deref "jolt.ir" "host-new")) (_a$8933 (let* ((or__26__auto (jolt-invoke (var-deref "jolt.host" "deftype-ctor-class") ctx class))) (if (jolt-truthy? or__26__auto) or__26__auto class))) (_a$8934 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__101_) (let fnrec8931 ((p__101_ p__101_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__101_ env))) args))) (jolt-invoke _a$8932 _a$8933 _a$8934)))))) analyze-ctor) (let* ((_o$8935 (keyword #f "private")) (_o$8936 #t)) (jolt-hash-map _o$8935 _o$8936))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec8937 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (jolt-n<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-fn expects (foreign-fn \"sym\" [argtypes] rettype [:blocking])")) jolt-nil) (let* ((_o$8938 (keyword #f "op")) (_o$8939 (keyword #f "ffi-fn")) (_o$8940 (keyword #f "csym")) (_o$8941 (jolt-nth items 1)) (_o$8942 (keyword #f "argtypes")) (_o$8943 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8944 (keyword #f "rettype")) (_o$8945 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8946 (keyword #f "blocking")) (_o$8947 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "blocking" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8938 _o$8939 _o$8940 _o$8941 _o$8942 _o$8943 _o$8944 _o$8945 _o$8946 _o$8947))))))) analyze-ffi-fn) (let* ((_o$8948 (keyword #f "private")) (_o$8949 #t)) (jolt-hash-map _o$8948 _o$8949))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-ffi-callable" (letrec ((analyze-ffi-callable (lambda (ctx items env) (let fnrec8950 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (jolt-n<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-callable expects (foreign-callable f [argtypes] rettype [:collect-safe])")) jolt-nil) (let* ((_o$8951 (keyword #f "op")) (_o$8952 (keyword #f "ffi-callable")) (_o$8953 (keyword #f "fn")) (_o$8954 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$8955 (keyword #f "argtypes")) (_o$8956 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "clojure.core" "name") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 2)))) (_o$8957 (keyword #f "rettype")) (_o$8958 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$8959 (keyword #f "collect-safe")) (_o$8960 (let* ((and__25__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__25__auto) (jolt= "collect-safe" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__25__auto)))) (jolt-hash-map _o$8951 _o$8952 _o$8953 _o$8954 _o$8955 _o$8956 _o$8957 _o$8958 _o$8959 _o$8960))))))) analyze-ffi-callable) (let* ((_o$8961 (keyword #f "private")) (_o$8962 #t)) (jolt-hash-map _o$8961 _o$8962))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec8963 ((ctx ctx) (items items) (env env)) (begin (if (jolt-n< (jolt-count items) 3) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (. target member ...) form")) jolt-nil) (let* ((member0 (jolt-nth items 2)) (items (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") member0)) (let* ((ml (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") member0)))) (let* ((_a$8967 (let* ((_o$8964 (jolt-nth items 0)) (_o$8965 (jolt-nth items 1)) (_o$8966 (jolt-first ml))) (jolt-vector _o$8964 _o$8965 _o$8966))) (_a$8968 (jolt-rest ml))) (jolt-into _a$8967 _a$8968))) items)) (target (jolt-nth items 1)) (member (jolt-nth items 2)) (class-target (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") target))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.analyzer" "local?") env (jolt-invoke (var-deref "jolt.host" "form-sym-name") target))) and__25__auto))) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx target))) (if (jolt= (keyword #f "class") (jolt-get r (keyword #f "kind"))) (jolt-get r (keyword #f "name")) jolt-nil)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto class-target)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") member) and__25__auto))) (let* ((_a$8973 (var-deref "jolt.ir" "invoke")) (_a$8974 (jolt-invoke (var-deref "jolt.ir" "host-static") class-target (jolt-invoke (var-deref "jolt.host" "form-sym-name") member))) (_a$8975 (let* ((_a$8970 (var-deref "clojure.core" "mapv")) (_a$8971 (lambda (p__102_) (let fnrec8969 ((p__102_ p__102_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__102_ env)))) (_a$8972 (jolt-drop 3 items))) (jolt-invoke _a$8970 _a$8971 _a$8972)))) (jolt-invoke _a$8973 _a$8974 _a$8975)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$8980 (keyword #f "op")) (_o$8981 (keyword #f "host-call")) (_o$8982 (keyword #f "method")) (_o$8983 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$8984 (keyword #f "target")) (_o$8985 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx target env)) (_o$8986 (keyword #f "args")) (_o$8987 (let* ((_a$8977 (var-deref "clojure.core" "mapv")) (_a$8978 (lambda (p__103_) (let fnrec8976 ((p__103_ p__103_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__103_ env)))) (_a$8979 (jolt-drop 3 items))) (jolt-invoke _a$8977 _a$8978 _a$8979)))) (jolt-hash-map _o$8980 _o$8981 _o$8982 _o$8983 _o$8984 _o$8985 _o$8986 _o$8987)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$8988 (var-deref "jolt.ir" "invoke")) (_a$8989 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$8990 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$8988 _a$8989 _a$8990)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil)))))))))) analyze-dot) (let* ((_o$8991 (keyword #f "private")) (_o$8992 #t)) (jolt-hash-map _o$8991 _o$8992))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec8993 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (jolt-n< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (.-field target) form")) jolt-nil) (let* ((_o$8994 (keyword #f "op")) (_o$8995 (keyword #f "host-call")) (_o$8996 (keyword #f "method")) (_o$8997 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$8998 (keyword #f "target")) (_o$8999 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$9000 (keyword #f "args")) (_o$9001 (jolt-vector))) (jolt-hash-map _o$8994 _o$8995 _o$8996 _o$8997 _o$8998 _o$8999 _o$9000 _o$9001))))))) analyze-field) (let* ((_o$9002 (keyword #f "private")) (_o$9003 #t)) (jolt-hash-map _o$9002 _o$9003))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec9004 ((ctx ctx) (form form) (env env)) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form)) (ns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form))) (if (jolt-truthy? (let* ((and__25__auto (jolt-nil? ns))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env nm) and__25__auto))) (let* ((h (jolt-get (jolt-get env (keyword #f "hints")) nm))) (if (jolt-truthy? h) (jolt-assoc (jolt-invoke (var-deref "jolt.ir" "local") nm) (keyword #f "hint") h) (jolt-invoke (var-deref "jolt.ir" "local") nm))) (if (jolt-truthy? ns) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (if (jolt= (keyword #f "var") (jolt-get r (keyword #f "kind"))) (let* ((G__153 (let* ((_a$9005 (var-deref "jolt.ir" "var-ref")) (_a$9006 (jolt-get r (keyword #f "ns"))) (_a$9007 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$9005 _a$9006 _a$9007)))) (let* ((G__154 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__153 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__153))) G__154)) (jolt-invoke (var-deref "jolt.ir" "host-static") ns nm))) (if (jolt-truthy? (keyword #f "else")) (let* ((r (jolt-invoke (var-deref "jolt.host" "resolve-global") ctx form))) (let* ((G__155 (jolt-get r (keyword #f "kind")))) (if (jolt= G__155 (keyword #f "var")) (let* ((G__156 (let* ((_a$9008 (var-deref "jolt.ir" "var-ref")) (_a$9009 (jolt-get r (keyword #f "ns"))) (_a$9010 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$9008 _a$9009 _a$9010)))) (let* ((G__157 (if (jolt-truthy? (jolt-get r (keyword #f "num-ret"))) (jolt-assoc G__156 (keyword #f "num-ret") (jolt-get r (keyword #f "num-ret"))) G__156))) G__157)) (if (jolt= G__155 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt= G__155 (keyword #f "class")) (jolt-invoke (var-deref "jolt.ir" "const") (jolt-get r (keyword #f "name"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "late-bind?") ctx)) (jolt-invoke (var-deref "jolt.ir" "var-ref") (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx) nm) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "Unable to resolve symbol: " nm " in this context")))))))) jolt-nil)))))))) analyze-symbol) (let* ((_o$9011 (keyword #f "private")) (_o$9012 #t)) (jolt-hash-map _o$9011 _o$9012))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "unchecked-arith" (letrec ((unchecked-arith (lambda (hname n) (let fnrec9013 ((hname hname) (n n)) (if (jolt= hname "+") "unchecked-add" (if (jolt= hname "*") "unchecked-multiply" (if (jolt= hname "-") (if (jolt= n 2) "unchecked-negate" "unchecked-subtract") (if (jolt= hname "inc") "unchecked-inc" (if (jolt= hname "dec") "unchecked-dec" (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))))))))) unchecked-arith) (let* ((_o$9014 (keyword #f "private")) (_o$9015 #t)) (jolt-hash-map _o$9014 _o$9015))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec9016 ((ctx ctx) (form form) (env env)) (let* ((items (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") form)))) (if (jolt-zero? (jolt-count items)) (jolt-invoke (var-deref "jolt.ir" "quote-node") form) (let* ((head (jolt-first items)) (hname (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (jolt-nil? (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)) (sf-name (let* ((or__26__auto hname)) (if (jolt-truthy? or__26__auto) or__26__auto (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)))) (shadowed (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env hname) and__25__auto))) (unm (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "unchecked-math?"))) (let* ((opn (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (jolt-not shadowed) and__25__auto))) hname (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)) and__25__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)))) (if (jolt-truthy? opn) (jolt-invoke (var-deref "jolt.analyzer" "unchecked-arith") opn (jolt-count items)) jolt-nil)) jolt-nil))) (if (jolt-truthy? unm) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (let* ((_a$9017 (jolt-invoke (var-deref "clojure.core" "symbol") unm)) (_a$9018 (jolt-rest items))) (jolt-cons _a$9017 _a$9018)) env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-macro?") ctx head) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-expand-1") ctx form (jolt-invoke (var-deref "jolt.analyzer" "amp-env-map") env)) env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__cfn" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-fn") ctx items env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__25__auto) (jolt= "__ccallable" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-callable") ctx items env) (if (jolt-truthy? (let* ((and__25__auto sf-name)) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") sf-name) and__25__auto))) (let* ((node (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx sf-name items env)) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? (let* ((and__25__auto p)) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) and__25__auto))) (jolt-assoc node (keyword #f "pos") p) node)) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "method-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-host-call") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "ctor-head?") hname) and__25__auto)) and__25__auto))) (let* ((_a$9019 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$9020 ctx) (_a$9021 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$9022 (jolt-rest items)) (_a$9023 env)) (jolt-invoke _a$9019 _a$9020 _a$9021 _a$9022 _a$9023)) (if (jolt-truthy? (let* ((and__25__auto (jolt= hname "new"))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= (jolt-count items) 2))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_a$9024 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$9025 ctx) (_a$9026 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$9027 (jolt-drop 2 items)) (_a$9028 env)) (jolt-invoke _a$9024 _a$9025 _a$9026 _a$9027 _a$9028)) (if (let* ((and__25__auto (jolt= hname "."))) (if (jolt-truthy? and__25__auto) (jolt-not shadowed) and__25__auto)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-dot") ctx items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-field") ctx hname items env) (if (jolt-truthy? (let* ((and__25__auto hname)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not shadowed))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.host" "form-special?") hname) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " hname)) (if (jolt-truthy? (keyword #f "else")) (let* ((n (let* ((_a$9033 (var-deref "jolt.ir" "invoke")) (_a$9034 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$9035 (let* ((_a$9030 (var-deref "clojure.core" "mapv")) (_a$9031 (lambda (p__104_) (let fnrec9029 ((p__104_ p__104_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__104_ env)))) (_a$9032 (jolt-rest items))) (jolt-invoke _a$9030 _a$9031 _a$9032)))) (jolt-invoke _a$9033 _a$9034 _a$9035))) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? p) (jolt-assoc n (keyword #f "pos") p) n)) jolt-nil))))))))))))))))))) analyze-list) (let* ((_o$9036 (keyword #f "private")) (_o$9037 #t)) (jolt-hash-map _o$9036 _o$9037))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "with-coll-meta" (letrec ((with-coll-meta (lambda (ctx form env node) (let fnrec9038 ((ctx ctx) (form form) (env env) (node node)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-coll-meta") form))) (if (jolt-nil? m) node (let* ((_a$9041 (var-deref "jolt.ir" "invoke")) (_a$9042 (jolt-invoke (var-deref "jolt.ir" "var-ref") "clojure.core" "with-meta")) (_a$9043 (let* ((_o$9039 node) (_o$9040 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx m env))) (jolt-vector _o$9039 _o$9040)))) (jolt-invoke _a$9041 _a$9042 _a$9043)))))))) with-coll-meta) (let* ((_o$9044 (keyword #f "private")) (_o$9045 #t)) (jolt-hash-map _o$9044 _o$9045))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec9046 ((ctx ctx) (form form)) (analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec9047 ((ctx ctx) (form form) (env env)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.ir" "const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-symbol") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "vector-node") (let* ((_a$9049 (var-deref "clojure.core" "mapv")) (_a$9050 (lambda (p__105_) (let fnrec9048 ((p__105_ p__105_)) (analyze ctx p__105_ env)))) (_a$9051 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$9049 _a$9050 _a$9051)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$9055 (var-deref "clojure.core" "mapv")) (_a$9056 (lambda (p) (let fnrec9052 ((p p)) (let* ((_o$9053 (analyze ctx (jolt-first p) env)) (_o$9054 (analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$9053 _o$9054))))) (_a$9057 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$9055 _a$9056 _a$9057)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "jolt.analyzer" "with-coll-meta") ctx form env (jolt-invoke (var-deref "jolt.ir" "set-node") (let* ((_a$9059 (var-deref "clojure.core" "mapv")) (_a$9060 (lambda (p__106_) (let fnrec9058 ((p__106_ p__106_)) (analyze ctx p__106_ env)))) (_a$9061 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$9059 _a$9060 _a$9061)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "jolt.analyzer" "analyze-list") ctx form env) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (let* ((_o$9062 (keyword #f "op")) (_o$9063 (keyword #f "regex")) (_o$9064 (keyword #f "source")) (_o$9065 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$9062 _o$9063 _o$9064 _o$9065)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$9066 (keyword #f "op")) (_o$9067 (keyword #f "inst")) (_o$9068 (keyword #f "source")) (_o$9069 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$9066 _o$9067 _o$9068 _o$9069)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$9070 (keyword #f "op")) (_o$9071 (keyword #f "uuid")) (_o$9072 (keyword #f "source")) (_o$9073 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$9070 _o$9071 _o$9072 _o$9073)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$9074 (keyword #f "op")) (_o$9075 (keyword #f "bigdec")) (_o$9076 (keyword #f "source")) (_o$9077 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$9074 _o$9075 _o$9076 _o$9077)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$9078 (keyword #f "op")) (_o$9079 (keyword #f "the-ns")) (_o$9080 (keyword #f "name")) (_o$9081 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$9078 _o$9079 _o$9080 _o$9081)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-var-value?") form)) (let* ((_a$9082 (var-deref "jolt.ir" "the-var")) (_a$9083 (jolt-invoke (var-deref "jolt.host" "form-var-value-ns") form)) (_a$9084 (jolt-invoke (var-deref "jolt.host" "form-var-value-name") form))) (jolt-invoke _a$9082 _a$9083 _a$9084)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "unsupported form") jolt-nil)))))))))))))))))) analyze)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "native-ops" (let* ((_o$7190 "+") (_o$7191 "jolt-n+") (_o$7192 "-") (_o$7193 "jolt-n-") (_o$7194 "*") (_o$7195 "jolt-n*") (_o$7196 "/") (_o$7197 "jolt-n-div") (_o$7198 "<") (_o$7199 "jolt-n<") (_o$7200 ">") (_o$7201 "jolt-n>") (_o$7202 "<=") (_o$7203 "jolt-n<=") (_o$7204 ">=") (_o$7205 "jolt-n>=") (_o$7206 "=") (_o$7207 "jolt=") (_o$7208 "inc") (_o$7209 "jolt-inc") (_o$7210 "dec") (_o$7211 "jolt-dec") (_o$7212 "not") (_o$7213 "jolt-not") (_o$7214 "min") (_o$7215 "jolt-n-min") (_o$7216 "max") (_o$7217 "jolt-n-max") (_o$7218 "mod") (_o$7219 "jolt-mod") (_o$7220 "rem") (_o$7221 "jolt-rem") (_o$7222 "quot") (_o$7223 "jolt-quot") (_o$7224 "vector") (_o$7225 "jolt-vector") (_o$7226 "hash-map") (_o$7227 "jolt-hash-map-fn") (_o$7228 "hash-set") (_o$7229 "jolt-hash-set") (_o$7230 "conj") (_o$7231 "jolt-conj") (_o$7232 "get") (_o$7233 "jolt-get") (_o$7234 "nth") (_o$7235 "jolt-nth") (_o$7236 "count") (_o$7237 "jolt-count") (_o$7238 "assoc") (_o$7239 "jolt-assoc") (_o$7240 "dissoc") (_o$7241 "jolt-dissoc") (_o$7242 "contains?") (_o$7243 "jolt-contains?") (_o$7244 "empty?") (_o$7245 "jolt-empty?") (_o$7246 "peek") (_o$7247 "jolt-peek") (_o$7248 "pop") (_o$7249 "jolt-pop") (_o$7250 "first") (_o$7251 "jolt-first") (_o$7252 "rest") (_o$7253 "jolt-rest") (_o$7254 "next") (_o$7255 "jolt-next") (_o$7256 "seq") (_o$7257 "jolt-seq") (_o$7258 "cons") (_o$7259 "jolt-cons") (_o$7260 "list") (_o$7261 "jolt-list") (_o$7262 "reverse") (_o$7263 "jolt-reverse") (_o$7264 "last") (_o$7265 "jolt-last") (_o$7266 "map") (_o$7267 "jolt-map") (_o$7268 "filter") (_o$7269 "jolt-filter") (_o$7270 "remove") (_o$7271 "jolt-remove") (_o$7272 "reduce") (_o$7273 "jolt-reduce") (_o$7274 "into") (_o$7275 "jolt-into") (_o$7276 "concat") (_o$7277 "jolt-concat") (_o$7278 "apply") (_o$7279 "jolt-apply") (_o$7280 "range") (_o$7281 "jolt-range") (_o$7282 "take") (_o$7283 "jolt-take") (_o$7284 "drop") (_o$7285 "jolt-drop") (_o$7286 "keys") (_o$7287 "jolt-keys") (_o$7288 "vals") (_o$7289 "jolt-vals") (_o$7290 "even?") (_o$7291 "jolt-even?") (_o$7292 "odd?") (_o$7293 "jolt-odd?") (_o$7294 "pos?") (_o$7295 "jolt-pos?") (_o$7296 "neg?") (_o$7297 "jolt-neg?") (_o$7298 "zero?") (_o$7299 "jolt-zero?") (_o$7300 "identity") (_o$7301 "jolt-identity") (_o$7302 "nil?") (_o$7303 "jolt-nil?") (_o$7304 "some?") (_o$7305 "jolt-some?") (_o$7306 "ex-info") (_o$7307 "jolt-ex-info") (_o$7308 "bit-and") (_o$7309 "bitwise-and") (_o$7310 "bit-or") (_o$7311 "bitwise-ior") (_o$7312 "bit-xor") (_o$7313 "bitwise-xor") (_o$7314 "bit-not") (_o$7315 "bitwise-not") (_o$7316 "bit-shift-left") (_o$7317 "jolt-bit-shift-left") (_o$7318 "bit-shift-right") (_o$7319 "jolt-bit-shift-right") (_o$7320 "unsigned-bit-shift-right") (_o$7321 "jolt-unsigned-bit-shift-right") (_o$7322 "protocol-dispatch1") (_o$7323 "protocol-dispatch1") (_o$7324 "protocol-dispatch2") (_o$7325 "protocol-dispatch2") (_o$7326 "protocol-dispatch3") (_o$7327 "protocol-dispatch3")) (jolt-hash-map _o$7190 _o$7191 _o$7192 _o$7193 _o$7194 _o$7195 _o$7196 _o$7197 _o$7198 _o$7199 _o$7200 _o$7201 _o$7202 _o$7203 _o$7204 _o$7205 _o$7206 _o$7207 _o$7208 _o$7209 _o$7210 _o$7211 _o$7212 _o$7213 _o$7214 _o$7215 _o$7216 _o$7217 _o$7218 _o$7219 _o$7220 _o$7221 _o$7222 _o$7223 _o$7224 _o$7225 _o$7226 _o$7227 _o$7228 _o$7229 _o$7230 _o$7231 _o$7232 _o$7233 _o$7234 _o$7235 _o$7236 _o$7237 _o$7238 _o$7239 _o$7240 _o$7241 _o$7242 _o$7243 _o$7244 _o$7245 _o$7246 _o$7247 _o$7248 _o$7249 _o$7250 _o$7251 _o$7252 _o$7253 _o$7254 _o$7255 _o$7256 _o$7257 _o$7258 _o$7259 _o$7260 _o$7261 _o$7262 _o$7263 _o$7264 _o$7265 _o$7266 _o$7267 _o$7268 _o$7269 _o$7270 _o$7271 _o$7272 _o$7273 _o$7274 _o$7275 _o$7276 _o$7277 _o$7278 _o$7279 _o$7280 _o$7281 _o$7282 _o$7283 _o$7284 _o$7285 _o$7286 _o$7287 _o$7288 _o$7289 _o$7290 _o$7291 _o$7292 _o$7293 _o$7294 _o$7295 _o$7296 _o$7297 _o$7298 _o$7299 _o$7300 _o$7301 _o$7302 _o$7303 _o$7304 _o$7305 _o$7306 _o$7307 _o$7308 _o$7309 _o$7310 _o$7311 _o$7312 _o$7313 _o$7314 _o$7315 _o$7316 _o$7317 _o$7318 _o$7319 _o$7320 _o$7321 _o$7322 _o$7323 _o$7324 _o$7325 _o$7326 _o$7327)) (let* ((_o$7328 (keyword #f "private")) (_o$7329 #t)) (jolt-hash-map _o$7328 _o$7329))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "core-value-procs" (jolt-invoke (var-deref "clojure.core" "merge") (var-deref "jolt.backend-scheme" "native-ops") (let* ((_o$7330 "+") (_o$7331 "jolt-add") (_o$7332 "-") (_o$7333 "jolt-sub") (_o$7334 "*") (_o$7335 "jolt-mul") (_o$7336 "/") (_o$7337 "jolt-div") (_o$7338 "min") (_o$7339 "jolt-min") (_o$7340 "max") (_o$7341 "jolt-max") (_o$7342 "<") (_o$7343 "jolt-lt") (_o$7344 ">") (_o$7345 "jolt-gt") (_o$7346 "<=") (_o$7347 "jolt-le") (_o$7348 ">=") (_o$7349 "jolt-ge")) (jolt-hash-map _o$7330 _o$7331 _o$7332 _o$7333 _o$7334 _o$7335 _o$7336 _o$7337 _o$7338 _o$7339 _o$7340 _o$7341 _o$7342 _o$7343 _o$7344 _o$7345 _o$7346 _o$7347 _o$7348 _o$7349))) (let* ((_o$7350 (keyword #f "private")) (_o$7351 #t)) (jolt-hash-map _o$7350 _o$7351))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "op-arity" (let* ((_o$7405 "inc") (_o$7406 (lambda (p__42_) (let fnrec7352 ((p__42_ p__42_)) (jolt= p__42_ 1)))) (_o$7407 "dec") (_o$7408 (lambda (p__43_) (let fnrec7353 ((p__43_ p__43_)) (jolt= p__43_ 1)))) (_o$7409 "not") (_o$7410 (lambda (p__44_) (let fnrec7354 ((p__44_ p__44_)) (jolt= p__44_ 1)))) (_o$7411 "count") (_o$7412 (lambda (p__45_) (let fnrec7355 ((p__45_ p__45_)) (jolt= p__45_ 1)))) (_o$7413 "empty?") (_o$7414 (lambda (p__46_) (let fnrec7356 ((p__46_ p__46_)) (jolt= p__46_ 1)))) (_o$7415 "peek") (_o$7416 (lambda (p__47_) (let fnrec7357 ((p__47_ p__47_)) (jolt= p__47_ 1)))) (_o$7417 "pop") (_o$7418 (lambda (p__48_) (let fnrec7358 ((p__48_ p__48_)) (jolt= p__48_ 1)))) (_o$7419 "mod") (_o$7420 (lambda (p__49_) (let fnrec7359 ((p__49_ p__49_)) (jolt= p__49_ 2)))) (_o$7421 "rem") (_o$7422 (lambda (p__50_) (let fnrec7360 ((p__50_ p__50_)) (jolt= p__50_ 2)))) (_o$7423 "quot") (_o$7424 (lambda (p__51_) (let fnrec7361 ((p__51_ p__51_)) (jolt= p__51_ 2)))) (_o$7425 "contains?") (_o$7426 (lambda (p__52_) (let fnrec7362 ((p__52_ p__52_)) (jolt= p__52_ 2)))) (_o$7427 "get") (_o$7428 (lambda (p__53_) (let fnrec7363 ((p__53_ p__53_)) (let* ((or__26__auto (jolt= p__53_ 2))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= p__53_ 3)))))) (_o$7429 "nth") (_o$7430 (lambda (p__54_) (let fnrec7364 ((p__54_ p__54_)) (let* ((or__26__auto (jolt= p__54_ 2))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= p__54_ 3)))))) (_o$7431 "assoc") (_o$7432 (lambda (p__55_) (let fnrec7365 ((p__55_ p__55_)) (let* ((and__25__auto (jolt-n>= p__55_ 3))) (if (jolt-truthy? and__25__auto) (jolt-odd? p__55_) and__25__auto))))) (_o$7433 "dissoc") (_o$7434 (lambda (p__56_) (let fnrec7366 ((p__56_ p__56_)) (jolt-n>= p__56_ 1)))) (_o$7435 "conj") (_o$7436 (lambda (p__57_) (let fnrec7367 ((p__57_ p__57_)) (jolt-n>= p__57_ 1)))) (_o$7437 "first") (_o$7438 (lambda (p__58_) (let fnrec7368 ((p__58_ p__58_)) (jolt= p__58_ 1)))) (_o$7439 "rest") (_o$7440 (lambda (p__59_) (let fnrec7369 ((p__59_ p__59_)) (jolt= p__59_ 1)))) (_o$7441 "next") (_o$7442 (lambda (p__60_) (let fnrec7370 ((p__60_ p__60_)) (jolt= p__60_ 1)))) (_o$7443 "seq") (_o$7444 (lambda (p__61_) (let fnrec7371 ((p__61_ p__61_)) (jolt= p__61_ 1)))) (_o$7445 "reverse") (_o$7446 (lambda (p__62_) (let fnrec7372 ((p__62_ p__62_)) (jolt= p__62_ 1)))) (_o$7447 "last") (_o$7448 (lambda (p__63_) (let fnrec7373 ((p__63_ p__63_)) (jolt= p__63_ 1)))) (_o$7449 "keys") (_o$7450 (lambda (p__64_) (let fnrec7374 ((p__64_ p__64_)) (jolt= p__64_ 1)))) (_o$7451 "vals") (_o$7452 (lambda (p__65_) (let fnrec7375 ((p__65_ p__65_)) (jolt= p__65_ 1)))) (_o$7453 "even?") (_o$7454 (lambda (p__66_) (let fnrec7376 ((p__66_ p__66_)) (jolt= p__66_ 1)))) (_o$7455 "odd?") (_o$7456 (lambda (p__67_) (let fnrec7377 ((p__67_ p__67_)) (jolt= p__67_ 1)))) (_o$7457 "pos?") (_o$7458 (lambda (p__68_) (let fnrec7378 ((p__68_ p__68_)) (jolt= p__68_ 1)))) (_o$7459 "neg?") (_o$7460 (lambda (p__69_) (let fnrec7379 ((p__69_ p__69_)) (jolt= p__69_ 1)))) (_o$7461 "zero?") (_o$7462 (lambda (p__70_) (let fnrec7380 ((p__70_ p__70_)) (jolt= p__70_ 1)))) (_o$7463 "identity") (_o$7464 (lambda (p__71_) (let fnrec7381 ((p__71_ p__71_)) (jolt= p__71_ 1)))) (_o$7465 "nil?") (_o$7466 (lambda (p__72_) (let fnrec7382 ((p__72_ p__72_)) (jolt= p__72_ 1)))) (_o$7467 "some?") (_o$7468 (lambda (p__73_) (let fnrec7383 ((p__73_ p__73_)) (jolt= p__73_ 1)))) (_o$7469 "protocol-dispatch1") (_o$7470 (lambda (p__74_) (let fnrec7384 ((p__74_ p__74_)) (jolt= p__74_ 3)))) (_o$7471 "protocol-dispatch2") (_o$7472 (lambda (p__75_) (let fnrec7385 ((p__75_ p__75_)) (jolt= p__75_ 4)))) (_o$7473 "protocol-dispatch3") (_o$7474 (lambda (p__76_) (let fnrec7386 ((p__76_ p__76_)) (jolt= p__76_ 5)))) (_o$7475 "cons") (_o$7476 (lambda (p__77_) (let fnrec7387 ((p__77_ p__77_)) (jolt= p__77_ 2)))) (_o$7477 "filter") (_o$7478 (lambda (p__78_) (let fnrec7388 ((p__78_ p__78_)) (jolt= p__78_ 2)))) (_o$7479 "remove") (_o$7480 (lambda (p__79_) (let fnrec7389 ((p__79_ p__79_)) (jolt= p__79_ 2)))) (_o$7481 "into") (_o$7482 (lambda (p__80_) (let fnrec7390 ((p__80_ p__80_)) (jolt= p__80_ 2)))) (_o$7483 "take") (_o$7484 (lambda (p__81_) (let fnrec7391 ((p__81_ p__81_)) (jolt= p__81_ 2)))) (_o$7485 "drop") (_o$7486 (lambda (p__82_) (let fnrec7392 ((p__82_ p__82_)) (jolt= p__82_ 2)))) (_o$7487 "map") (_o$7488 (lambda (p__83_) (let fnrec7393 ((p__83_ p__83_)) (jolt-n>= p__83_ 2)))) (_o$7489 "apply") (_o$7490 (lambda (p__84_) (let fnrec7394 ((p__84_ p__84_)) (jolt-n>= p__84_ 2)))) (_o$7491 "reduce") (_o$7492 (lambda (p__85_) (let fnrec7395 ((p__85_ p__85_)) (let* ((or__26__auto (jolt= p__85_ 2))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= p__85_ 3)))))) (_o$7493 "range") (_o$7494 (lambda (p__86_) (let fnrec7396 ((p__86_ p__86_)) (let* ((and__25__auto (jolt-n>= p__86_ 0))) (if (jolt-truthy? and__25__auto) (jolt-n<= p__86_ 3) and__25__auto))))) (_o$7495 "ex-info") (_o$7496 (lambda (p__87_) (let fnrec7397 ((p__87_ p__87_)) (let* ((or__26__auto (jolt= p__87_ 2))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= p__87_ 3)))))) (_o$7497 "bit-and") (_o$7498 (lambda (p__88_) (let fnrec7398 ((p__88_ p__88_)) (jolt= p__88_ 2)))) (_o$7499 "bit-or") (_o$7500 (lambda (p__89_) (let fnrec7399 ((p__89_ p__89_)) (jolt= p__89_ 2)))) (_o$7501 "bit-xor") (_o$7502 (lambda (p__90_) (let fnrec7400 ((p__90_ p__90_)) (jolt= p__90_ 2)))) (_o$7503 "bit-not") (_o$7504 (lambda (p__91_) (let fnrec7401 ((p__91_ p__91_)) (jolt= p__91_ 1)))) (_o$7505 "bit-shift-left") (_o$7506 (lambda (p__92_) (let fnrec7402 ((p__92_ p__92_)) (jolt= p__92_ 2)))) (_o$7507 "bit-shift-right") (_o$7508 (lambda (p__93_) (let fnrec7403 ((p__93_ p__93_)) (jolt= p__93_ 2)))) (_o$7509 "unsigned-bit-shift-right") (_o$7510 (lambda (p__94_) (let fnrec7404 ((p__94_ p__94_)) (jolt= p__94_ 2))))) (jolt-hash-map _o$7405 _o$7406 _o$7407 _o$7408 _o$7409 _o$7410 _o$7411 _o$7412 _o$7413 _o$7414 _o$7415 _o$7416 _o$7417 _o$7418 _o$7419 _o$7420 _o$7421 _o$7422 _o$7423 _o$7424 _o$7425 _o$7426 _o$7427 _o$7428 _o$7429 _o$7430 _o$7431 _o$7432 _o$7433 _o$7434 _o$7435 _o$7436 _o$7437 _o$7438 _o$7439 _o$7440 _o$7441 _o$7442 _o$7443 _o$7444 _o$7445 _o$7446 _o$7447 _o$7448 _o$7449 _o$7450 _o$7451 _o$7452 _o$7453 _o$7454 _o$7455 _o$7456 _o$7457 _o$7458 _o$7459 _o$7460 _o$7461 _o$7462 _o$7463 _o$7464 _o$7465 _o$7466 _o$7467 _o$7468 _o$7469 _o$7470 _o$7471 _o$7472 _o$7473 _o$7474 _o$7475 _o$7476 _o$7477 _o$7478 _o$7479 _o$7480 _o$7481 _o$7482 _o$7483 _o$7484 _o$7485 _o$7486 _o$7487 _o$7488 _o$7489 _o$7490 _o$7491 _o$7492 _o$7493 _o$7494 _o$7495 _o$7496 _o$7497 _o$7498 _o$7499 _o$7500 _o$7501 _o$7502 _o$7503 _o$7504 _o$7505 _o$7506 _o$7507 _o$7508 _o$7509 _o$7510)) (let* ((_o$7511 (keyword #f "private")) (_o$7512 #t)) (jolt-hash-map _o$7511 _o$7512))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "cmp1-ops" (let* ((_o$7513 "jolt-n<") (_o$7514 "jolt-n>") (_o$7515 "jolt-n<=") (_o$7516 "jolt-n>=")) (jolt-hash-set _o$7513 _o$7514 _o$7515 _o$7516)) (let* ((_o$7517 (keyword #f "private")) (_o$7518 #t)) (jolt-hash-map _o$7517 _o$7518))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "supported-host-methods" (let* ((_o$7519 "isDirectory") (_o$7520 "listFiles")) (jolt-hash-set _o$7519 _o$7520)) (let* ((_o$7521 (keyword #f "private")) (_o$7522 #t)) (jolt-hash-map _o$7521 _o$7522))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "bool-returning-ops" (let* ((_o$7523 "jolt-n<") (_o$7524 "jolt-n<=") (_o$7525 "jolt-n>") (_o$7526 "jolt-n>=") (_o$7527 "jolt=") (_o$7528 "jolt-not") (_o$7529 "jolt-even?") (_o$7530 "jolt-odd?") (_o$7531 "jolt-pos?") (_o$7532 "jolt-neg?") (_o$7533 "jolt-zero?") (_o$7534 "jolt-empty?") (_o$7535 "jolt-contains?") (_o$7536 "jolt-nil?") (_o$7537 "jolt-some?")) (jolt-hash-set _o$7523 _o$7524 _o$7525 _o$7526 _o$7527 _o$7528 _o$7529 _o$7530 _o$7531 _o$7532 _o$7533 _o$7534 _o$7535 _o$7536 _o$7537)) (let* ((_o$7538 (keyword #f "private")) (_o$7539 #t)) (jolt-hash-map _o$7538 _o$7539))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "dbl-ops" (let* ((_o$7540 "+") (_o$7541 "fl+") (_o$7542 "-") (_o$7543 "fl-") (_o$7544 "*") (_o$7545 "fl*") (_o$7546 "/") (_o$7547 "fl/") (_o$7548 "min") (_o$7549 "flmin") (_o$7550 "max") (_o$7551 "flmax") (_o$7552 "<") (_o$7553 "fl<?") (_o$7554 ">") (_o$7555 "fl>?") (_o$7556 "<=") (_o$7557 "fl<=?") (_o$7558 ">=") (_o$7559 "fl>=?") (_o$7560 "=") (_o$7561 "fl=?") (_o$7562 "==") (_o$7563 "fl=?")) (jolt-hash-map _o$7540 _o$7541 _o$7542 _o$7543 _o$7544 _o$7545 _o$7546 _o$7547 _o$7548 _o$7549 _o$7550 _o$7551 _o$7552 _o$7553 _o$7554 _o$7555 _o$7556 _o$7557 _o$7558 _o$7559 _o$7560 _o$7561 _o$7562 _o$7563)) (let* ((_o$7564 (keyword #f "private")) (_o$7565 #t)) (jolt-hash-map _o$7564 _o$7565))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "lng-ops" (let* ((_o$7566 "+") (_o$7567 "fx+") (_o$7568 "-") (_o$7569 "fx-") (_o$7570 "*") (_o$7571 "fx*") (_o$7572 "min") (_o$7573 "jolt-l-min") (_o$7574 "max") (_o$7575 "jolt-l-max") (_o$7576 "unchecked-add") (_o$7577 "jolt-uncadd2") (_o$7578 "unchecked-subtract") (_o$7579 "jolt-uncsub2") (_o$7580 "unchecked-multiply") (_o$7581 "jolt-uncmul2") (_o$7582 "quot") (_o$7583 "jolt-l-quot") (_o$7584 "rem") (_o$7585 "jolt-l-rem") (_o$7586 "mod") (_o$7587 "jolt-l-mod") (_o$7588 "<") (_o$7589 "jolt-l<") (_o$7590 ">") (_o$7591 "jolt-l>") (_o$7592 "<=") (_o$7593 "jolt-l<=") (_o$7594 ">=") (_o$7595 "jolt-l>=") (_o$7596 "=") (_o$7597 "jolt-l=") (_o$7598 "==") (_o$7599 "jolt-l=")) (jolt-hash-map _o$7566 _o$7567 _o$7568 _o$7569 _o$7570 _o$7571 _o$7572 _o$7573 _o$7574 _o$7575 _o$7576 _o$7577 _o$7578 _o$7579 _o$7580 _o$7581 _o$7582 _o$7583 _o$7584 _o$7585 _o$7586 _o$7587 _o$7588 _o$7589 _o$7590 _o$7591 _o$7592 _o$7593 _o$7594 _o$7595 _o$7596 _o$7597 _o$7598 _o$7599)) (let* ((_o$7600 (keyword #f "private")) (_o$7601 #t)) (jolt-hash-map _o$7600 _o$7601))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "bd-ops" (let* ((_o$7602 "+") (_o$7603 "jbd-add") (_o$7604 "-") (_o$7605 "jbd-sub") (_o$7606 "*") (_o$7607 "jbd-mul") (_o$7608 "/") (_o$7609 "jbd-div") (_o$7610 "min") (_o$7611 "jbd-min") (_o$7612 "max") (_o$7613 "jbd-max") (_o$7614 "quot") (_o$7615 "jbd-quot") (_o$7616 "rem") (_o$7617 "jbd-rem") (_o$7618 "<") (_o$7619 "jbd-lt?") (_o$7620 ">") (_o$7621 "jbd-gt?") (_o$7622 "<=") (_o$7623 "jbd-le?") (_o$7624 ">=") (_o$7625 "jbd-ge?") (_o$7626 "zero?") (_o$7627 "jbd-zero?") (_o$7628 "pos?") (_o$7629 "jbd-pos?") (_o$7630 "neg?") (_o$7631 "jbd-neg?")) (jolt-hash-map _o$7602 _o$7603 _o$7604 _o$7605 _o$7606 _o$7607 _o$7608 _o$7609 _o$7610 _o$7611 _o$7612 _o$7613 _o$7614 _o$7615 _o$7616 _o$7617 _o$7618 _o$7619 _o$7620 _o$7621 _o$7622 _o$7623 _o$7624 _o$7625 _o$7626 _o$7627 _o$7628 _o$7629 _o$7630 _o$7631)) (let* ((_o$7632 (keyword #f "private")) (_o$7633 #t)) (jolt-hash-map _o$7632 _o$7633))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "prelude-mode?" (jolt-invoke (var-deref "clojure.core" "atom") #f)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "set-prelude-mode!" (letrec ((set-prelude-mode! (lambda (on) (let fnrec7634 ((on on)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "prelude-mode?") on))))) set-prelude-mode!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "direct-link?" (jolt-invoke (var-deref "clojure.core" "atom") #f)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "set-direct-link!" (letrec ((set-direct-link! (lambda (on) (let fnrec7635 ((on on)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "direct-link?") on))))) set-direct-link!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "direct-link-defined" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "direct-link-fns" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "direct-link-reset!" (letrec ((direct-link-reset! (lambda () (let fnrec7636 () (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "direct-link-defined") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "direct-link-fns") (jolt-hash-set))))))) direct-link-reset!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "var-cache?" (jolt-invoke (var-deref "clojure.core" "atom") #f)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "set-var-cache!" (letrec ((set-var-cache! (lambda (on) (let fnrec7637 ((on on)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "var-cache?") on))))) set-var-cache!)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "dl-munge" (letrec ((dl-munge (lambda (s) (let fnrec7638 ((s s)) (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") s "$" "_D_") "#" "_H_") "'" "_Q_"))))) dl-munge) (let* ((_o$7639 (keyword #f "private")) (_o$7640 #t)) (jolt-hash-map _o$7639 _o$7640))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "dl-name" (letrec ((dl-name (lambda (ns nm) (let fnrec7641 ((ns ns) (nm nm)) (let* ((_a$7642 (var-deref "clojure.core" "str")) (_a$7643 "jv$") (_a$7644 (jolt-invoke (var-deref "jolt.backend-scheme" "dl-munge") ns)) (_a$7645 "$") (_a$7646 (jolt-invoke (var-deref "jolt.backend-scheme" "dl-munge") nm))) (jolt-invoke _a$7642 _a$7643 _a$7644 _a$7645 _a$7646)))))) dl-name) (let* ((_o$7647 (keyword #f "private")) (_o$7648 #t)) (jolt-hash-map _o$7647 _o$7648))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "dl-fqn" (letrec ((dl-fqn (lambda (ns nm) (let fnrec7649 ((ns ns) (nm nm)) (jolt-invoke (var-deref "clojure.core" "str") ns "/" nm))))) dl-fqn) (let* ((_o$7650 (keyword #f "private")) (_o$7651 #t)) (jolt-hash-map _o$7650 _o$7651))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "direct-linkable?" (letrec ((direct-linkable? (lambda (ns nm) (let fnrec7652 ((ns ns) (nm nm)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link?")))) (if (jolt-truthy? and__25__auto) (let* ((_a$7653 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link-defined"))) (_a$7654 (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm))) (jolt-contains? _a$7653 _a$7654)) and__25__auto)))))) direct-linkable?) (let* ((_o$7655 (keyword #f "private")) (_o$7656 #t)) (jolt-hash-map _o$7655 _o$7656))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "direct-link-fn?" (letrec ((direct-link-fn? (lambda (ns nm) (let fnrec7657 ((ns ns) (nm nm)) (let* ((_a$7658 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link-fns"))) (_a$7659 (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm))) (jolt-contains? _a$7658 _a$7659)))))) direct-link-fn?) (let* ((_o$7660 (keyword #f "private")) (_o$7661 #t)) (jolt-hash-map _o$7660 _o$7661))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "*recur-target*" jolt-nil (let* ((_o$7662 (keyword #f "dynamic")) (_o$7663 #t)) (jolt-hash-map _o$7662 _o$7663))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "*known-procs*" (jolt-hash-set) (let* ((_o$7664 (keyword #f "dynamic")) (_o$7665 #t)) (jolt-hash-map _o$7664 _o$7665))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (let* ((_o$7666 (keyword #f "private")) (_o$7667 #t)) (jolt-hash-map _o$7666 _o$7667))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "fresh-label" (letrec ((fresh-label (lambda (prefix) (let fnrec7668 ((prefix prefix)) (jolt-invoke (var-deref "clojure.core" "str") prefix (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "gensym-counter") jolt-inc)))))) fresh-label) (let* ((_o$7669 (keyword #f "private")) (_o$7670 #t)) (jolt-hash-map _o$7669 _o$7670))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "cache-cells" (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil) (let* ((_o$7671 (keyword #f "private")) (_o$7672 #t)) (jolt-hash-map _o$7671 _o$7672))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-with-cells" (letrec ((emit-with-cells (lambda (emit-thunk) (let fnrec7673 ((emit-thunk emit-thunk)) (let* ((cells (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (prev (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "cache-cells"))) (_ (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "cache-cells") cells)) (raw (jolt-invoke emit-thunk)) (_ (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.backend-scheme" "cache-cells") prev))) (if (jolt-truthy? (jolt-seq (jolt-invoke (var-deref "clojure.core" "deref") cells))) (jolt-invoke (var-deref "clojure.core" "str") "(let (" (jolt-invoke (var-deref "clojure.string" "join") " " (let* ((_a$7675 (lambda (c) (let fnrec7674 ((c c)) (jolt-invoke (var-deref "clojure.core" "str") "(" c " #f)")))) (_a$7676 (jolt-invoke (var-deref "clojure.core" "deref") cells))) (jolt-map _a$7675 _a$7676))) ") " raw ")") raw)))))) emit-with-cells) (let* ((_o$7677 (keyword #f "private")) (_o$7678 #t)) (jolt-hash-map _o$7677 _o$7678))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "scheme-reserved" (let* ((_o$7679 "if") (_o$7680 "begin") (_o$7681 "lambda") (_o$7682 "let") (_o$7683 "let*") (_o$7684 "letrec") (_o$7685 "letrec*") (_o$7686 "quote") (_o$7687 "quasiquote") (_o$7688 "unquote") (_o$7689 "set!") (_o$7690 "define") (_o$7691 "define-syntax") (_o$7692 "cond") (_o$7693 "case") (_o$7694 "when") (_o$7695 "unless") (_o$7696 "and") (_o$7697 "or") (_o$7698 "do") (_o$7699 "else") (_o$7700 "guard") (_o$7701 "parameterize") (_o$7702 "delay") (_o$7703 "values")) (jolt-hash-set _o$7679 _o$7680 _o$7681 _o$7682 _o$7683 _o$7684 _o$7685 _o$7686 _o$7687 _o$7688 _o$7689 _o$7690 _o$7691 _o$7692 _o$7693 _o$7694 _o$7695 _o$7696 _o$7697 _o$7698 _o$7699 _o$7700 _o$7701 _o$7702 _o$7703)) (let* ((_o$7704 (keyword #f "private")) (_o$7705 #t)) (jolt-hash-map _o$7704 _o$7705))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "bare-native-names" (jolt-invoke (var-deref "clojure.core" "set") (jolt-invoke (var-deref "clojure.core" "keep") (lambda (G__139) (let fnrec7706 ((G__139 G__139)) (let* ((G__140 G__139) (k (jolt-nth G__140 0 jolt-nil)) (v (jolt-nth G__140 1 jolt-nil))) (if (jolt= k v) k jolt-nil)))) (var-deref "jolt.backend-scheme" "native-ops"))) (let* ((_o$7707 (keyword #f "private")) (_o$7708 #t)) (jolt-hash-map _o$7707 _o$7708))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "munge-name" (letrec ((munge-name (lambda (s) (let fnrec7709 ((s s)) (let* ((s (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") s "#" "_") "'" "_PRIME_"))) (if (let* ((or__26__auto (jolt-contains? (var-deref "jolt.backend-scheme" "scheme-reserved") s))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-contains? (var-deref "jolt.backend-scheme" "bare-native-names") s))) (jolt-invoke (var-deref "clojure.core" "str") "_" s) s)))))) munge-name) (let* ((_o$7710 (keyword #f "private")) (_o$7711 #t)) (jolt-hash-map _o$7710 _o$7711))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.backend-scheme" "emit"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "char-escape" (letrec ((char-escape (lambda (cp) (let fnrec7712 ((cp cp)) (if (jolt= cp 34) "\\\"" (if (jolt= cp 92) "\\\\" (if (jolt= cp 10) "\\n" (if (jolt= cp 9) "\\t" (if (jolt= cp 13) "\\r" (if (let* ((and__25__auto (jolt-n>= cp 32))) (if (jolt-truthy? and__25__auto) (jolt-n< cp 127) and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") (jolt-invoke (var-deref "clojure.core" "char") cp)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "\\x" (jolt-invoke (var-deref "clojure.core" "format") "%x" cp) ";") jolt-nil))))))))))) char-escape) (let* ((_o$7713 (keyword #f "private")) (_o$7714 #t)) (jolt-hash-map _o$7713 _o$7714))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "chez-str-lit" (letrec ((chez-str-lit (lambda (s) (let fnrec7715 ((s s)) (jolt-invoke (var-deref "clojure.core" "str") "\"" (jolt-apply (var-deref "clojure.core" "str") (jolt-map (lambda (c) (let fnrec7716 ((c c)) (jolt-invoke (var-deref "jolt.backend-scheme" "char-escape") (jolt-invoke (var-deref "clojure.core" "int") c)))) s)) "\""))))) chez-str-lit) (let* ((_o$7717 (keyword #f "private")) (_o$7718 #t)) (jolt-hash-map _o$7717 _o$7718))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-const" (letrec ((emit-const (lambda (v) (let fnrec7719 ((v v)) (if (jolt-nil? v) "jolt-nil" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "boolean?") v)) (if (jolt-truthy? v) "#t" "#f") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (if (jolt= v +inf.0) "+inf.0" (if (jolt= v -inf.0) "-inf.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") v v)) "+nan.0" (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "float?") v)) (let* ((s (jolt-invoke (var-deref "clojure.core" "str") v))) (if (jolt-truthy? (let* ((or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "."))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "e")))) s (jolt-invoke (var-deref "clojure.core" "str") s ".0"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") v) jolt-nil))))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") v) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (let* ((temp__16__auto (jolt-invoke (var-deref "clojure.core" "namespace") v))) (if (jolt-truthy? temp__16__auto) (let* ((kns temp__16__auto)) (let* ((_a$7720 (var-deref "clojure.core" "str")) (_a$7721 "(keyword ") (_a$7722 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") kns)) (_a$7723 " ") (_a$7724 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v))) (_a$7725 ")")) (jolt-invoke _a$7720 _a$7721 _a$7722 _a$7723 _a$7724 _a$7725))) (jolt-invoke (var-deref "clojure.core" "str") "(keyword #f " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v)) ")"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") v)) (jolt-invoke (var-deref "clojure.core" "str") "(integer->char " (jolt-invoke (var-deref "jolt.host" "form-char-code") v) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7726 (jolt-invoke (var-deref "clojure.core" "str") "emit-const: unsupported literal " (jolt-invoke (var-deref "clojure.core" "pr-str") v))) (_a$7727 (jolt-hash-map))) (jolt-ex-info _a$7726 _a$7727))) jolt-nil))))))))))) emit-const) (let* ((_o$7728 (keyword #f "private")) (_o$7729 #t)) (jolt-hash-map _o$7728 _o$7729))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-ordered" (letrec ((emit-ordered (lambda (ctor arg-strs) (let fnrec7730 ((ctor ctor) (arg-strs arg-strs)) (if (jolt-n< (jolt-count arg-strs) 2) (jolt-invoke (var-deref "clojure.core" "str") "(" ctor (if (jolt-empty? arg-strs) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " arg-strs))) ")") (let* ((tmps (jolt-map (lambda (_) (let fnrec7731 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_o$"))) arg-strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7732 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps arg-strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") (" ctor " " (jolt-invoke (var-deref "clojure.string" "join") " " tmps) "))"))))))) emit-ordered) (let* ((_o$7733 (keyword #f "private")) (_o$7734 #t)) (jolt-hash-map _o$7733 _o$7734))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "side-effect-free?" (letrec ((side-effect-free? (lambda (n) (let fnrec7735 ((n n)) (let* ((_a$7741 (let* ((_o$7736 (keyword #f "const")) (_o$7737 (keyword #f "local")) (_o$7738 (keyword #f "var")) (_o$7739 (keyword #f "the-var")) (_o$7740 (keyword #f "quote"))) (jolt-hash-set _o$7736 _o$7737 _o$7738 _o$7739 _o$7740))) (_a$7742 (jolt-get n (keyword #f "op")))) (jolt-contains? _a$7741 _a$7742)))))) side-effect-free?) (let* ((_o$7743 (keyword #f "private")) (_o$7744 #t)) (jolt-hash-map _o$7743 _o$7744))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "needs-order?" (letrec ((needs-order? (lambda (nodes) (let fnrec7745 ((nodes nodes)) (jolt-n> (jolt-count (jolt-remove (var-deref "jolt.backend-scheme" "side-effect-free?") nodes)) 1))))) needs-order?) (let* ((_o$7746 (keyword #f "private")) (_o$7747 #t)) (jolt-hash-map _o$7746 _o$7747))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "ordered-call" (letrec ((ordered-call (lambda (nodes strs build) (let fnrec7748 ((nodes nodes) (strs strs) (build build)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "needs-order?") nodes)) (let* ((tmps (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (_) (let fnrec7749 ((_ _)) (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_a$"))) strs)) (binds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (t a) (let fnrec7750 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") " (jolt-invoke build tmps) ")")) (jolt-invoke build strs)))))) ordered-call) (let* ((_o$7751 (keyword #f "private")) (_o$7752 #t)) (jolt-hash-map _o$7751 _o$7752))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.backend-scheme" "emit-quoted"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-quoted-map" (letrec ((emit-quoted-map (lambda (pairs) (let fnrec7753 ((pairs pairs)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "mapcat") (lambda (p) (let fnrec7754 ((p p)) (let* ((_o$7755 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 0))) (_o$7756 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 1)))) (jolt-vector _o$7755 _o$7756)))) pairs)) ")"))))) emit-quoted-map) (let* ((_o$7757 (keyword #f "private")) (_o$7758 #t)) (jolt-hash-map _o$7757 _o$7758))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-quoted-map-value" (letrec ((emit-quoted-map-value (lambda (m) (let fnrec7759 ((m m)) (let* ((pairs (jolt-invoke (var-deref "clojure.core" "sort") (let* ((_a$7765 (lambda (k) (let fnrec7760 ((k k)) (let* ((_a$7761 (var-deref "clojure.core" "str")) (_a$7762 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") k)) (_a$7763 " ") (_a$7764 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get m k)))) (jolt-invoke _a$7761 _a$7762 _a$7763 _a$7764))))) (_a$7766 (jolt-keys m))) (jolt-map _a$7765 _a$7766))))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " pairs) ")")))))) emit-quoted-map-value) (let* ((_o$7767 (keyword #f "private")) (_o$7768 #t)) (jolt-hash-map _o$7767 _o$7768))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-quoted" (letrec ((emit-quoted (lambda (form) (let fnrec7769 ((form form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-char?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-literal?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") form) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") form)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") form)) (sns (jolt-invoke (var-deref "jolt.host" "form-sym-ns") form)) (nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") form))) (if (jolt-truthy? (let* ((and__25__auto m)) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto))) (let* ((_a$7770 (var-deref "clojure.core" "str")) (_a$7771 "(jolt-symbol/meta ") (_a$7772 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7773 " ") (_a$7774 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7775 " ") (_a$7776 (emit-quoted m)) (_a$7777 ")")) (jolt-invoke _a$7770 _a$7771 _a$7772 _a$7773 _a$7774 _a$7775 _a$7776 _a$7777)) (let* ((_a$7778 (var-deref "clojure.core" "str")) (_a$7779 "(jolt-symbol ") (_a$7780 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$7781 " ") (_a$7782 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$7783 ")")) (jolt-invoke _a$7778 _a$7779 _a$7780 _a$7781 _a$7782 _a$7783)))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-set-items") form)))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-elements") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-vec?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map") (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-regex?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "jolt.host" "form-regex-source") form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-inst-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "jolt.host" "form-inst-source") form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uuid-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form)) ")") (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") form))) (if (jolt-truthy? and__25__auto) (jolt= (keyword "jolt" "tagged") (jolt-get form (keyword "jolt" "type"))) and__25__auto))) (let* ((nm (jolt-invoke (var-deref "clojure.core" "name") (jolt-get form (keyword #f "tag")))) (tsym (if (jolt= (integer->char 35) (jolt-first nm)) (jolt-invoke (var-deref "clojure.core" "subs") nm 1) nm))) (let* ((_a$7784 (var-deref "clojure.core" "str")) (_a$7785 "(jolt-tagged-literal (jolt-symbol #f ") (_a$7786 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") tsym)) (_a$7787 ") ") (_a$7788 (emit-quoted (jolt-get form (keyword #f "form")))) (_a$7789 ")")) (jolt-invoke _a$7784 _a$7785 _a$7786 _a$7787 _a$7788 _a$7789))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "map?") form)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted-map-value") form) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "vector?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-vector " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "set?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-set " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-invoke (var-deref "clojure.core" "sort") (jolt-map emit-quoted form))) ")") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "seq?") form)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-list " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-quoted form)) ")") (if (jolt-truthy? (keyword #f "else")) (jolt-throw (let* ((_a$7790 (jolt-invoke (var-deref "clojure.core" "str") "emit-quoted: unsupported quoted form " (jolt-invoke (var-deref "clojure.core" "pr-str") form))) (_a$7791 (jolt-hash-map))) (jolt-ex-info _a$7790 _a$7791))) jolt-nil)))))))))))))))))))) emit-quoted) (let* ((_o$7792 (keyword #f "private")) (_o$7793 #t)) (jolt-hash-map _o$7792 _o$7793))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "jmeta-nonempty?" (letrec ((jmeta-nonempty? (lambda (m) (let fnrec7794 ((m m)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") m))) (if (jolt-truthy? and__25__auto) (jolt-pos? (jolt-count m)) and__25__auto)))))) jmeta-nonempty?) (let* ((_o$7795 (keyword #f "private")) (_o$7796 #t)) (jolt-hash-map _o$7795 _o$7796))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-def-meta" (letrec ((emit-def-meta (lambda (node) (let fnrec7797 ((node node)) (if (jolt-truthy? (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "meta-expr"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "meta")))))))) emit-def-meta) (let* ((_o$7798 (keyword #f "private")) (_o$7799 #t)) (jolt-hash-map _o$7798 _o$7799))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-binding" (letrec ((emit-binding (lambda (b) (let fnrec7800 ((b b)) (let* ((_a$7801 (var-deref "clojure.core" "str")) (_a$7802 "(") (_a$7803 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth b 0))) (_a$7804 " ") (_a$7805 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth b 1))) (_a$7806 ")")) (jolt-invoke _a$7801 _a$7802 _a$7803 _a$7804 _a$7805 _a$7806)))))) emit-binding) (let* ((_o$7807 (keyword #f "private")) (_o$7808 #t)) (jolt-hash-map _o$7807 _o$7808))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-let" (letrec ((emit-let (lambda (node) (let fnrec7809 ((node node)) (let* ((kw (if (jolt-truthy? (jolt-get node (keyword #f "letrec"))) "letrec*" "let*"))) (let* ((_a$7810 (var-deref "clojure.core" "str")) (_a$7811 "(") (_a$7812 kw) (_a$7813 " (") (_a$7814 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "emit-binding") (jolt-get node (keyword #f "bindings"))))) (_a$7815 ") ") (_a$7816 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$7817 ")")) (jolt-invoke _a$7810 _a$7811 _a$7812 _a$7813 _a$7814 _a$7815 _a$7816 _a$7817))))))) emit-let) (let* ((_o$7818 (keyword #f "private")) (_o$7819 #t)) (jolt-hash-map _o$7818 _o$7819))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-loop" (letrec ((emit-loop (lambda (node) (let fnrec7820 ((node node)) (let* ((label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "loop")) (pairs (jolt-get node (keyword #f "bindings"))) (names (jolt-map (lambda (p__95_) (let fnrec7821 ((p__95_ p__95_)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth p__95_ 0)))) pairs)) (inits (jolt-map (lambda (p__96_) (let fnrec7822 ((p__96_ p__96_)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth p__96_ 1)))) pairs)) (seq-bs (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n i) (let fnrec7823 ((n n) (i i)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " i ")"))) names inits))) (rebinds (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n) (let fnrec7824 ((n n)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " n ")"))) names))) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings")))))))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" seq-bs ") (let " label " (" rebinds ") " body "))")))))) emit-loop) (let* ((_o$7825 (keyword #f "private")) (_o$7826 #t)) (jolt-hash-map _o$7825 _o$7826))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "ffi-types" (let* ((_o$7827 "int") (_o$7828 "int") (_o$7829 "uint") (_o$7830 "unsigned-int") (_o$7831 "long") (_o$7832 "long") (_o$7833 "ulong") (_o$7834 "unsigned-long") (_o$7835 "int64") (_o$7836 "integer-64") (_o$7837 "uint64") (_o$7838 "unsigned-64") (_o$7839 "size_t") (_o$7840 "size_t") (_o$7841 "ssize_t") (_o$7842 "ssize_t") (_o$7843 "iptr") (_o$7844 "iptr") (_o$7845 "uptr") (_o$7846 "uptr") (_o$7847 "double") (_o$7848 "double") (_o$7849 "float") (_o$7850 "float") (_o$7851 "pointer") (_o$7852 "void*") (_o$7853 "void*") (_o$7854 "void*") (_o$7855 "string") (_o$7856 "string") (_o$7857 "void") (_o$7858 "void") (_o$7859 "uint8") (_o$7860 "unsigned-8") (_o$7861 "u8") (_o$7862 "unsigned-8") (_o$7863 "byte") (_o$7864 "unsigned-8") (_o$7865 "char") (_o$7866 "char")) (jolt-hash-map _o$7827 _o$7828 _o$7829 _o$7830 _o$7831 _o$7832 _o$7833 _o$7834 _o$7835 _o$7836 _o$7837 _o$7838 _o$7839 _o$7840 _o$7841 _o$7842 _o$7843 _o$7844 _o$7845 _o$7846 _o$7847 _o$7848 _o$7849 _o$7850 _o$7851 _o$7852 _o$7853 _o$7854 _o$7855 _o$7856 _o$7857 _o$7858 _o$7859 _o$7860 _o$7861 _o$7862 _o$7863 _o$7864 _o$7865 _o$7866)) (let* ((_o$7867 (keyword #f "private")) (_o$7868 #t)) (jolt-hash-map _o$7867 _o$7868))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "ffi-type->chez" (letrec ((ffi-type->chez (lambda (t) (let fnrec7869 ((t t)) (let* ((or__26__auto (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-types") t))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-throw (let* ((_a$7870 (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi: unknown foreign type :" t)) (_a$7871 (jolt-hash-map))) (jolt-ex-info _a$7870 _a$7871))))))))) ffi-type->chez) (let* ((_o$7872 (keyword #f "private")) (_o$7873 #t)) (jolt-hash-map _o$7872 _o$7873))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-ffi-fn" (letrec ((emit-ffi-fn (lambda (node) (let fnrec7874 ((node node)) (let* ((_a$7875 (var-deref "clojure.core" "str")) (_a$7876 "(foreign-procedure ") (_a$7877 (if (jolt-truthy? (jolt-get node (keyword #f "blocking"))) "__collect_safe " jolt-nil)) (_a$7878 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "csym")))) (_a$7879 " (") (_a$7880 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7881 ") ") (_a$7882 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7883 ")")) (jolt-invoke _a$7875 _a$7876 _a$7877 _a$7878 _a$7879 _a$7880 _a$7881 _a$7882 _a$7883)))))) emit-ffi-fn) (let* ((_o$7884 (keyword #f "private")) (_o$7885 #t)) (jolt-hash-map _o$7884 _o$7885))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-ffi-callable" (letrec ((emit-ffi-callable (lambda (node) (let fnrec7886 ((node node)) (let* ((_a$7887 (var-deref "clojure.core" "str")) (_a$7888 "(jolt-ffi-register-callable! (foreign-callable ") (_a$7889 (if (jolt-truthy? (jolt-get node (keyword #f "collect-safe"))) "__collect_safe " jolt-nil)) (_a$7890 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "fn")))) (_a$7891 " (") (_a$7892 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$7893 ") ") (_a$7894 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$7895 "))")) (jolt-invoke _a$7887 _a$7888 _a$7889 _a$7890 _a$7891 _a$7892 _a$7893 _a$7894 _a$7895)))))) emit-ffi-callable) (let* ((_o$7896 (keyword #f "private")) (_o$7897 #t)) (jolt-hash-map _o$7896 _o$7897))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-recur" (letrec ((emit-recur (lambda (node) (let fnrec7898 ((node node)) (begin (if (jolt-not (var-deref "jolt.backend-scheme" "*recur-target*")) (jolt-throw (jolt-ex-info "emit: recur outside a loop/fn target" (jolt-hash-map))) jolt-nil) (let* ((arg-nodes (jolt-get node (keyword #f "args")))) (let* ((_a$7900 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7901 arg-nodes) (_a$7902 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (_a$7903 (lambda (as) (let fnrec7899 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" (var-deref "jolt.backend-scheme" "*recur-target*") " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) (jolt-invoke _a$7900 _a$7901 _a$7902 _a$7903)))))))) emit-recur) (let* ((_o$7904 (keyword #f "private")) (_o$7905 #t)) (jolt-hash-map _o$7904 _o$7905))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "nhint-init" (letrec ((nhint-init (lambda (nh orig munged) (let fnrec7906 ((nh nh) (orig orig) (munged munged)) (let* ((k (jolt-get nh orig))) (if (jolt= k (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " munged ")") (if (jolt= k (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " munged ")") (if (jolt-truthy? (keyword #f "else")) munged jolt-nil)))))))) nhint-init) (let* ((_o$7907 (keyword #f "private")) (_o$7908 #t)) (jolt-hash-map _o$7907 _o$7908))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-arity-clause" (letrec ((emit-arity-clause (lambda (a) (let fnrec7909 ((a a)) (let* ((orig (jolt-get a (keyword #f "params"))) (nh (let* ((_a$7910 (jolt-hash-map)) (_a$7911 (jolt-get a (keyword #f "nhints")))) (jolt-into _a$7910 _a$7911))) (params (jolt-map (var-deref "jolt.backend-scheme" "munge-name") orig)) (restp (let* ((temp__27__auto (jolt-get a (keyword #f "rest")))) (if (jolt-truthy? temp__27__auto) (let* ((r temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") r)) jolt-nil))) (label (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "fnrec")) (body (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*recur-target*") label))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get a (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (paramlist (if (jolt-truthy? (let* ((and__25__auto restp)) (if (jolt-truthy? and__25__auto) (jolt-empty? params) and__25__auto))) restp (if (jolt-truthy? restp) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) " . " restp ")") (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "(" (jolt-invoke (var-deref "clojure.string" "join") " " params) ")") jolt-nil)))) (pbind (jolt-map (lambda (o p) (let fnrec7912 ((o o) (p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " (jolt-invoke (var-deref "jolt.backend-scheme" "nhint-init") nh o p) ")"))) orig params)) (binds (if (jolt-truthy? restp) (jolt-concat pbind (jolt-vector (jolt-invoke (var-deref "clojure.core" "str") "(" restp " (list->cseq " restp "))"))) pbind)) (lett (jolt-invoke (var-deref "clojure.core" "str") "(let " label " (" (jolt-invoke (var-deref "clojure.string" "join") " " binds) ") " body ")")) (ret (jolt-get a (keyword #f "ret-nhint")))) (let* ((_o$7913 paramlist) (_o$7914 (if (jolt= ret (keyword #f "double")) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " lett ")") (if (jolt= ret (keyword #f "long")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " lett ")") (if (jolt-truthy? (keyword #f "else")) lett jolt-nil))))) (jolt-vector _o$7913 _o$7914))))))) emit-arity-clause) (let* ((_o$7915 (keyword #f "private")) (_o$7916 #t)) (jolt-hash-map _o$7915 _o$7916))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-fn" (letrec ((emit-fn (lambda (node) (let fnrec7917 ((node node)) (let* ((arities (jolt-get node (keyword #f "arities"))) (self (let* ((temp__27__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__27__auto) (let* ((nm temp__27__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm)) jolt-nil))) (clauses (let* ((frame__20__auto (jolt-invoke (var-deref "clojure.core" "array-map") (jolt-var "jolt.backend-scheme" "*known-procs*") (if (jolt-truthy? self) (jolt-conj (var-deref "jolt.backend-scheme" "*known-procs*") self) (var-deref "jolt.backend-scheme" "*known-procs*"))))) (begin (jolt-invoke (var-deref "clojure.core" "push-thread-bindings") frame__20__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit-arity-clause") arities)) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings"))))))) (_lambda (if (jolt= 1 (jolt-count clauses)) (let* ((c (jolt-first clauses))) (let* ((_a$7918 (var-deref "clojure.core" "str")) (_a$7919 "(lambda ") (_a$7920 (jolt-nth c 0)) (_a$7921 " ") (_a$7922 (jolt-nth c 1)) (_a$7923 ")")) (jolt-invoke _a$7918 _a$7919 _a$7920 _a$7921 _a$7922 _a$7923))) (jolt-invoke (var-deref "clojure.core" "str") "(case-lambda " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (c) (let fnrec7924 ((c c)) (let* ((_a$7925 (var-deref "clojure.core" "str")) (_a$7926 "(") (_a$7927 (jolt-nth c 0)) (_a$7928 " ") (_a$7929 (jolt-nth c 1)) (_a$7930 ")")) (jolt-invoke _a$7925 _a$7926 _a$7927 _a$7928 _a$7929 _a$7930)))) clauses)) ")")))) (let* ((temp__16__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((nm temp__16__auto)) (let* ((m (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm))) (jolt-invoke (var-deref "clojure.core" "str") "(letrec ((" m " " _lambda ")) " m ")"))) _lambda))))))) emit-fn) (let* ((_o$7931 (keyword #f "private")) (_o$7932 #t)) (jolt-hash-map _o$7931 _o$7932))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "native-op" (letrec ((native-op (lambda (fnode nargs) (let fnrec7933 ((fnode fnode) (nargs nargs)) (let* ((nm (let* ((G__141 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__141 (keyword #f "var")) (if (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) (jolt-get fnode (keyword #f "name")) jolt-nil) (if (jolt= G__141 (keyword #f "host")) (jolt-get fnode (keyword #f "name")) jolt-nil)))) (op (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "native-ops") nm) jolt-nil)) (arity-ok (if (jolt-truthy? nm) (jolt-invoke (var-deref "jolt.backend-scheme" "op-arity") nm) jolt-nil))) (if (jolt-nil? op) jolt-nil (if (jolt-truthy? (let* ((and__25__auto arity-ok)) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke arity-ok nargs)) and__25__auto))) jolt-nil (if (jolt-truthy? (keyword #f "else")) op jolt-nil)))))))) native-op) (let* ((_o$7934 (keyword #f "private")) (_o$7935 #t)) (jolt-hash-map _o$7934 _o$7935))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "ifn-kind" (letrec ((ifn-kind (lambda (fnode) (let fnrec7936 ((fnode fnode)) (let* ((G__142 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__142 (keyword #f "const")) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val")))) (keyword #f "keyword") jolt-nil) (if (let* ((or__26__auto (jolt= G__142 (keyword #f "map")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= G__142 (keyword #f "set")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= G__142 (keyword #f "vector")))))) (keyword #f "coll") jolt-nil))))))) ifn-kind) (let* ((_o$7937 (keyword #f "private")) (_o$7938 #t)) (jolt-hash-map _o$7937 _o$7938))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "stdlib-var?" (letrec ((stdlib-var? (lambda (n) (let fnrec7939 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.string" "starts-with?") (let* ((or__26__auto (jolt-get n (keyword #f "ns")))) (if (jolt-truthy? or__26__auto) or__26__auto "")) "clojure.") and__25__auto)))))) stdlib-var?) (let* ((_o$7940 (keyword #f "private")) (_o$7941 #t)) (jolt-hash-map _o$7940 _o$7941))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-numeric" (letrec ((emit-numeric (lambda (kind nm args order-args) (let fnrec7942 ((kind kind) (nm nm) (args args) (order-args order-args)) (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "inc") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl+ " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (jolt= nm "dec") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(fl- " (jolt-first args) " 1.0)") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (jolt= nm "inc") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-l-inc " (jolt-first args) ")") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (jolt= nm "dec") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-l-dec " (jolt-first args) ")") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (jolt= nm "unchecked-inc") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uncinc " (jolt-first args) ")") (if (let* ((and__25__auto (jolt= kind (keyword #f "long")))) (if (jolt-truthy? and__25__auto) (jolt= nm "unchecked-dec") and__25__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uncdec " (jolt-first args) ")") (if (jolt-truthy? (keyword #f "else")) (let* ((op (let* ((G__143 kind)) (if (jolt= G__143 (keyword #f "double")) (jolt-invoke (var-deref "jolt.backend-scheme" "dbl-ops") nm) (if (jolt= G__143 (keyword #f "long")) (jolt-invoke (var-deref "jolt.backend-scheme" "lng-ops") nm) (if (jolt= G__143 (keyword #f "bigdec")) (jolt-invoke (var-deref "jolt.backend-scheme" "bd-ops") nm) (jolt-throw (let* ((_a$7943 (jolt-invoke (var-deref "clojure.core" "str") "No matching clause: " G__143)) (_a$7944 (jolt-hash-map))) (jolt-ex-info _a$7943 _a$7944))))))))) (jolt-invoke order-args (lambda (as) (let fnrec7945 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" op " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")"))))) jolt-nil))))))))))) emit-numeric) (let* ((_o$7946 (keyword #f "private")) (_o$7947 #t)) (jolt-hash-map _o$7946 _o$7947))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "struct-field-index" (letrec ((struct-field-index (lambda (shape kw) (let fnrec7948 ((shape shape) (kw kw)) (if (jolt-truthy? shape) (let* ((i 0)) (let loop7949 ((i i)) (if (jolt-n>= i (jolt-count shape)) jolt-nil (if (jolt= (jolt-nth shape i) kw) i (if (jolt-truthy? (keyword #f "else")) (loop7949 (jolt-inc i)) jolt-nil))))) jolt-nil))))) struct-field-index) (let* ((_o$7950 (keyword #f "private")) (_o$7951 #t)) (jolt-hash-map _o$7950 _o$7951))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-invoke" (letrec ((emit-invoke (lambda (node) (let fnrec7952 ((node node)) (let* ((fnode (jolt-get node (keyword #f "fn"))) (arg-nodes (jolt-get node (keyword #f "args"))) (args (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (nop (jolt-invoke (var-deref "jolt.backend-scheme" "native-op") fnode (jolt-count args))) (kind (jolt-invoke (var-deref "jolt.backend-scheme" "ifn-kind") fnode)) (order-args (lambda (build) (let fnrec7953 ((build build)) (jolt-invoke (var-deref "jolt.backend-scheme" "ordered-call") arg-nodes args build)))) (defstr (lambda (as) (let fnrec7954 ((as as)) (if (jolt-n> (jolt-count as) 1) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-nth as 1)) "")))) (invoke (lambda () (let fnrec7955 () (let* ((_a$7957 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$7958 (jolt-cons fnode arg-nodes)) (_a$7959 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$7960 (lambda (G__144) (let fnrec7956 ((G__144 G__144)) (let* ((G__145 G__144) (f (jolt-nth G__145 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__145 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-invoke " f (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "") ")")))))) (jolt-invoke _a$7957 _a$7958 _a$7959 _a$7960)))))) (if (jolt-truthy? (jolt-get node (keyword #f "devirt-type"))) (jolt-invoke order-args (lambda (as) (let fnrec7961 ((as as)) (let* ((r (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_r$")) (dv (let* ((_a$7962 (var-deref "clojure.core" "str")) (_a$7963 "(devirt-resolve ") (_a$7964 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-type")))) (_a$7965 " ") (_a$7966 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-proto")))) (_a$7967 " ") (_a$7968 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "devirt-method")))) (_a$7969 " ") (_a$7970 r) (_a$7971 ")")) (jolt-invoke _a$7962 _a$7963 _a$7964 _a$7965 _a$7966 _a$7967 _a$7968 _a$7969 _a$7970 _a$7971))) (cells (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "cache-cells"))) (resolver (if (jolt-truthy? cells) (let* ((c (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_dvc$"))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") cells jolt-conj c) (jolt-invoke (var-deref "clojure.core" "str") "(or " c " (let ((_f " dv ")) (set! " c " _f) _f))"))) dv))) (let* ((_a$7972 (var-deref "clojure.core" "str")) (_a$7973 "(let* ((") (_a$7974 r) (_a$7975 " ") (_a$7976 (jolt-first as)) (_a$7977 ")) (") (_a$7978 resolver) (_a$7979 " ") (_a$7980 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-cons r (jolt-rest as)))) (_a$7981 "))")) (jolt-invoke _a$7972 _a$7973 _a$7974 _a$7975 _a$7976 _a$7977 _a$7978 _a$7979 _a$7980 _a$7981)))))) (if (jolt-truthy? (jolt-get node (keyword #f "num-kind"))) (let* ((_a$7982 (var-deref "jolt.backend-scheme" "emit-numeric")) (_a$7983 (jolt-get node (keyword #f "num-kind"))) (_a$7984 (jolt-get fnode (keyword #f "name"))) (_a$7985 args) (_a$7986 order-args)) (jolt-invoke _a$7982 _a$7983 _a$7984 _a$7985 _a$7986)) (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "+") and__25__auto)) and__25__auto))) "0" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-empty? args))) (if (jolt-truthy? and__25__auto) (jolt= nop "*") and__25__auto)) and__25__auto))) "1" (if (jolt-truthy? (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "cmp1-ops") nop) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "clojure.core" "str") "(begin " (jolt-first args) " #t)") (if (jolt-truthy? nop) (jolt-invoke order-args (lambda (as) (let fnrec7987 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" nop " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))) (if (jolt= kind (keyword #f "keyword")) (let* ((recv (jolt-first arg-nodes)) (idx (if (let* ((and__25__auto (jolt= (keyword #f "struct") (jolt-get recv (keyword #f "hint"))))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count arg-nodes)) and__25__auto)) (let* ((_a$7988 (var-deref "jolt.backend-scheme" "struct-field-index")) (_a$7989 (jolt-get recv (keyword #f "shape"))) (_a$7990 (jolt-get fnode (keyword #f "val")))) (jolt-invoke _a$7988 _a$7989 _a$7990)) jolt-nil))) (if (jolt-truthy? idx) (jolt-invoke order-args (lambda (as) (let fnrec7991 ((as as)) (let* ((_a$7992 (var-deref "clojure.core" "str")) (_a$7993 "(jrec-field-at ") (_a$7994 (jolt-first as)) (_a$7995 " ") (_a$7996 idx) (_a$7997 " ") (_a$7998 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$7999 ")")) (jolt-invoke _a$7992 _a$7993 _a$7994 _a$7995 _a$7996 _a$7997 _a$7998 _a$7999))))) (jolt-invoke order-args (lambda (as) (let fnrec8000 ((as as)) (let* ((_a$8001 (var-deref "clojure.core" "str")) (_a$8002 "(jolt-get ") (_a$8003 (jolt-first as)) (_a$8004 " ") (_a$8005 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$8006 (jolt-invoke defstr as)) (_a$8007 ")")) (jolt-invoke _a$8001 _a$8002 _a$8003 _a$8004 _a$8005 _a$8006 _a$8007))))))) (if (jolt= kind (keyword #f "coll")) (let* ((_a$8009 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$8010 (jolt-cons fnode arg-nodes)) (_a$8011 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$8012 (lambda (G__146) (let fnrec8008 ((G__146 G__146)) (let* ((G__147 G__146) (c (jolt-nth G__147 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__147 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-get " c " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))))) (jolt-invoke _a$8009 _a$8010 _a$8011 _a$8012)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") fnode))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$8019 (let* ((_a$8013 (var-deref "clojure.core" "str")) (_a$8014 "emit: unsupported stdlib fn `") (_a$8015 (jolt-get fnode (keyword #f "ns"))) (_a$8016 "/") (_a$8017 (jolt-get fnode (keyword #f "name"))) (_a$8018 "` (no core on Chez yet)")) (jolt-invoke _a$8013 _a$8014 _a$8015 _a$8016 _a$8017 _a$8018))) (_a$8020 (jolt-hash-map))) (jolt-ex-info _a$8019 _a$8020))) (if (jolt= (keyword #f "host-static") (jolt-get fnode (keyword #f "op"))) (jolt-invoke order-args (lambda (as) (let fnrec8021 ((as as)) (let* ((_a$8022 (var-deref "clojure.core" "str")) (_a$8023 "(host-static-call ") (_a$8024 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "class")))) (_a$8025 " ") (_a$8026 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "member")))) (_a$8027 (if (jolt-empty? as) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)))) (_a$8028 ")")) (jolt-invoke _a$8022 _a$8023 _a$8024 _a$8025 _a$8026 _a$8027 _a$8028))))) (if (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))) (jolt-throw (let* ((_a$8029 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host call `" (jolt-get fnode (keyword #f "name")) "`")) (_a$8030 (jolt-hash-map))) (jolt-ex-info _a$8029 _a$8030))) (if (jolt= (keyword #f "local") (jolt-get fnode (keyword #f "op"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "*known-procs*") (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name"))))) (jolt-invoke order-args (lambda (as) (let fnrec8031 ((as as)) (let* ((_a$8032 (var-deref "clojure.core" "str")) (_a$8033 "(") (_a$8034 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name")))) (_a$8035 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$8036 ")")) (jolt-invoke _a$8032 _a$8033 _a$8034 _a$8035 _a$8036))))) (jolt-invoke invoke)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (let* ((_a$8037 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$8038 (jolt-get fnode (keyword #f "ns"))) (_a$8039 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$8037 _a$8038 _a$8039)))) (if (jolt-truthy? and__25__auto) (let* ((_a$8040 (var-deref "jolt.backend-scheme" "direct-link-fn?")) (_a$8041 (jolt-get fnode (keyword #f "ns"))) (_a$8042 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$8040 _a$8041 _a$8042)) and__25__auto)) and__25__auto))) (jolt-invoke order-args (lambda (as) (let fnrec8043 ((as as)) (let* ((_a$8047 (var-deref "clojure.core" "str")) (_a$8048 "(") (_a$8049 (let* ((_a$8044 (var-deref "jolt.backend-scheme" "dl-name")) (_a$8045 (jolt-get fnode (keyword #f "ns"))) (_a$8046 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$8044 _a$8045 _a$8046))) (_a$8050 (if (jolt-truthy? (jolt-seq as)) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)) "")) (_a$8051 ")")) (jolt-invoke _a$8047 _a$8048 _a$8049 _a$8050 _a$8051))))) (if (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))) (jolt-invoke invoke) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke invoke) jolt-nil)))))))))))))))))))) emit-invoke) (let* ((_o$8052 (keyword #f "private")) (_o$8053 #t)) (jolt-hash-map _o$8052 _o$8053))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-try" (letrec ((emit-try (lambda (node) (let fnrec8054 ((node node)) (let* ((core (let* ((temp__16__auto (jolt-get node (keyword #f "catch-sym")))) (if (jolt-truthy? temp__16__auto) (let* ((cs temp__16__auto)) (let* ((raw (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get node (keyword #f "catch-raw-sym"))))) (let* ((_a$8055 (var-deref "clojure.core" "str")) (_a$8056 "(guard (") (_a$8057 raw) (_a$8058 " (else (let ((") (_a$8059 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") cs)) (_a$8060 " (jolt-unwrap-throw ") (_a$8061 raw) (_a$8062 "))) ") (_a$8063 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "catch-body")))) (_a$8064 "))) ") (_a$8065 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$8066 ")")) (jolt-invoke _a$8055 _a$8056 _a$8057 _a$8058 _a$8059 _a$8060 _a$8061 _a$8062 _a$8063 _a$8064 _a$8065 _a$8066)))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body"))))))) (let* ((temp__16__auto (jolt-get node (keyword #f "finally")))) (if (jolt-truthy? temp__16__auto) (let* ((fin temp__16__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(dynamic-wind (lambda () #f) (lambda () " core ") (lambda () " (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fin) "))")) core))))))) emit-try) (let* ((_o$8067 (keyword #f "private")) (_o$8068 #t)) (jolt-hash-map _o$8067 _o$8068))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "returns-scheme-bool?" (letrec ((returns-scheme-bool? (case-lambda ((node) (let fnrec8069 ((node node)) (returns-scheme-bool? node (jolt-hash-set)))) ((node bools) (let fnrec8070 ((node node) (bools bools)) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "boolean?") (jolt-get node (keyword #f "val"))) and__25__auto))) #t (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((nop (let* ((_a$8071 (var-deref "jolt.backend-scheme" "native-op")) (_a$8072 (jolt-get node (keyword #f "fn"))) (_a$8073 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt-invoke _a$8071 _a$8072 _a$8073)))) (jolt-invoke (var-deref "clojure.core" "boolean") (let* ((and__25__auto nop)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "bool-returning-ops") nop) and__25__auto)))) (if (jolt= (keyword #f "local") (jolt-get node (keyword #f "op"))) (jolt-contains? bools (jolt-get node (keyword #f "name"))) (if (jolt= (keyword #f "if") (jolt-get node (keyword #f "op"))) (let* ((and__25__auto (returns-scheme-bool? (jolt-get node (keyword #f "then")) bools))) (if (jolt-truthy? and__25__auto) (returns-scheme-bool? (jolt-get node (keyword #f "else")) bools) and__25__auto)) (if (jolt= (keyword #f "let") (jolt-get node (keyword #f "op"))) (let* ((bools_PRIME_ (let* ((_a$8075 (lambda (s b) (let fnrec8074 ((s s) (b b)) (if (jolt-truthy? (returns-scheme-bool? (jolt-nth b 1) s)) (jolt-conj s (jolt-nth b 0)) (jolt-invoke (var-deref "clojure.core" "disj") s (jolt-nth b 0)))))) (_a$8076 bools) (_a$8077 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$8075 _a$8076 _a$8077)))) (returns-scheme-bool? (jolt-get node (keyword #f "body")) bools_PRIME_)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))))) returns-scheme-bool?) (let* ((_o$8078 (keyword #f "private")) (_o$8079 #t)) (jolt-hash-map _o$8078 _o$8079))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit" (letrec ((emit (lambda (node) (let fnrec8080 ((node node)) (let* ((G__148 (jolt-get node (keyword #f "op")))) (if (jolt= G__148 (keyword #f "const")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") (jolt-get node (keyword #f "val"))) (if (jolt= G__148 (keyword #f "local")) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get node (keyword #f "name"))) (if (jolt= G__148 (keyword #f "var")) (let* ((core-proc (let* ((and__25__auto (jolt= "clojure.core" (jolt-get node (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "core-value-procs") (jolt-get node (keyword #f "name"))) and__25__auto)))) (if (jolt-truthy? core-proc) core-proc (if (jolt-truthy? (let* ((_a$8081 (var-deref "jolt.backend-scheme" "direct-linkable?")) (_a$8082 (jolt-get node (keyword #f "ns"))) (_a$8083 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$8081 _a$8082 _a$8083))) (let* ((_a$8084 (var-deref "jolt.backend-scheme" "dl-name")) (_a$8085 (jolt-get node (keyword #f "ns"))) (_a$8086 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$8084 _a$8085 _a$8086)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") node))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__25__auto))) (jolt-throw (let* ((_a$8093 (let* ((_a$8087 (var-deref "clojure.core" "str")) (_a$8088 "emit: unsupported stdlib ref `") (_a$8089 (jolt-get node (keyword #f "ns"))) (_a$8090 "/") (_a$8091 (jolt-get node (keyword #f "name"))) (_a$8092 "` (no core on Chez yet)")) (jolt-invoke _a$8087 _a$8088 _a$8089 _a$8090 _a$8091 _a$8092))) (_a$8094 (jolt-hash-map))) (jolt-ex-info _a$8093 _a$8094))) (if (jolt-truthy? (keyword #f "else")) (let* ((cells (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "cache-cells"))) (nslit (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (nmlit (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name"))))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "var-cache?")))) (if (jolt-truthy? and__25__auto) cells and__25__auto))) (let* ((c (jolt-invoke (var-deref "jolt.backend-scheme" "fresh-label") "_vc$"))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") cells jolt-conj c) (jolt-invoke (var-deref "clojure.core" "str") "(var-cell-deref (or " c " (let ((_v (jolt-var " nslit " " nmlit "))) (set! " c " _v) _v)))"))) (jolt-invoke (var-deref "clojure.core" "str") "(var-deref " nslit " " nmlit ")"))) jolt-nil))))) (if (jolt= G__148 (keyword #f "the-var")) (let* ((_a$8095 (var-deref "clojure.core" "str")) (_a$8096 "(jolt-var ") (_a$8097 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8098 " ") (_a$8099 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8100 ")")) (jolt-invoke _a$8095 _a$8096 _a$8097 _a$8098 _a$8099 _a$8100)) (if (jolt= G__148 (keyword #f "set-var")) (let* ((_a$8101 (var-deref "clojure.core" "str")) (_a$8102 "(jolt-var-set ") (_a$8103 (emit (jolt-get node (keyword #f "the-var")))) (_a$8104 " ") (_a$8105 (emit (jolt-get node (keyword #f "val")))) (_a$8106 ")")) (jolt-invoke _a$8101 _a$8102 _a$8103 _a$8104 _a$8105 _a$8106)) (if (jolt= G__148 (keyword #f "set-field")) (let* ((_a$8107 (var-deref "clojure.core" "str")) (_a$8108 "(jolt-set-field! ") (_a$8109 (emit (jolt-get node (keyword #f "obj")))) (_a$8110 " (keyword #f ") (_a$8111 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "field")))) (_a$8112 ") ") (_a$8113 (emit (jolt-get node (keyword #f "val")))) (_a$8114 ")")) (jolt-invoke _a$8107 _a$8108 _a$8109 _a$8110 _a$8111 _a$8112 _a$8113 _a$8114)) (if (jolt= G__148 (keyword #f "defmacro")) (let* ((_a$8115 (var-deref "clojure.core" "str")) (_a$8116 "(begin (def-var! ") (_a$8117 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8118 " ") (_a$8119 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8120 " ") (_a$8121 (emit (jolt-get node (keyword #f "fn")))) (_a$8122 ") (mark-macro! ") (_a$8123 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8124 " ") (_a$8125 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8126 ") jolt-nil)")) (jolt-invoke _a$8115 _a$8116 _a$8117 _a$8118 _a$8119 _a$8120 _a$8121 _a$8122 _a$8123 _a$8124 _a$8125 _a$8126)) (if (jolt= G__148 (keyword #f "host")) (jolt-throw (let* ((_a$8127 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host ref `" (jolt-get node (keyword #f "name")) "`")) (_a$8128 (jolt-hash-map))) (jolt-ex-info _a$8127 _a$8128))) (if (jolt= G__148 (keyword #f "host-static")) (let* ((_a$8129 (var-deref "clojure.core" "str")) (_a$8130 "(host-static-ref ") (_a$8131 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$8132 " ") (_a$8133 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "member")))) (_a$8134 ")")) (jolt-invoke _a$8129 _a$8130 _a$8131 _a$8132 _a$8133 _a$8134)) (if (jolt= G__148 (keyword #f "host-new")) (let* ((_a$8135 (var-deref "clojure.core" "str")) (_a$8136 "(host-new ") (_a$8137 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$8138 (let* ((args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args))))) (_a$8139 ")")) (jolt-invoke _a$8135 _a$8136 _a$8137 _a$8138 _a$8139)) (if (jolt= G__148 (keyword #f "if")) (let* ((test (jolt-get node (keyword #f "test"))) (t (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "returns-scheme-bool?") test)) (emit test) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-truthy? " (emit test) ")")))) (let* ((_a$8140 (var-deref "clojure.core" "str")) (_a$8141 "(if ") (_a$8142 t) (_a$8143 " ") (_a$8144 (emit (jolt-get node (keyword #f "then")))) (_a$8145 " ") (_a$8146 (emit (jolt-get node (keyword #f "else")))) (_a$8147 ")")) (jolt-invoke _a$8140 _a$8141 _a$8142 _a$8143 _a$8144 _a$8145 _a$8146 _a$8147))) (if (jolt= G__148 (keyword #f "do")) (let* ((_a$8148 (var-deref "clojure.core" "str")) (_a$8149 "(begin ") (_a$8150 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit (jolt-get node (keyword #f "statements"))))) (_a$8151 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$8152 (emit (jolt-get node (keyword #f "ret")))) (_a$8153 ")")) (jolt-invoke _a$8148 _a$8149 _a$8150 _a$8151 _a$8152 _a$8153)) (if (jolt= G__148 (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-invoke") node) (if (jolt= G__148 (keyword #f "vector")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-vector" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__148 (keyword #f "set")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-set" (jolt-map emit (jolt-get node (keyword #f "items")))) (if (jolt= G__148 (keyword #f "map")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-map" (let* ((_a$8157 (var-deref "clojure.core" "mapcat")) (_a$8158 (lambda (p) (let fnrec8154 ((p p)) (let* ((_o$8155 (emit (jolt-nth p 0))) (_o$8156 (emit (jolt-nth p 1)))) (jolt-vector _o$8155 _o$8156))))) (_a$8159 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$8157 _a$8158 _a$8159))) (if (jolt= G__148 (keyword #f "quote")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "form"))) (if (jolt= G__148 (keyword #f "throw")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-throw " (emit (jolt-get node (keyword #f "expr"))) ")") (if (jolt= G__148 (keyword #f "coerce")) (let* ((e (emit (jolt-get node (keyword #f "expr"))))) (if (jolt= (keyword #f "double") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(exact->inexact " e ")") (if (jolt= (keyword #f "long") (jolt-get node (keyword #f "kind"))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt->fx " e ")") (if (jolt-truthy? (keyword #f "else")) e jolt-nil)))) (if (jolt= G__148 (keyword #f "try")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-try") node) (if (jolt= G__148 (keyword #f "regex")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-regex " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__148 (keyword #f "inst")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-inst-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__148 (keyword #f "uuid")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-uuid-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__148 (keyword #f "bigdec")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-bigdec-from-string " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "source"))) ")") (if (jolt= G__148 (keyword #f "the-ns")) (jolt-invoke (var-deref "clojure.core" "str") "(intern-ns! " (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name"))) ")") (if (jolt= G__148 (keyword #f "host-call")) (let* ((m (jolt-get node (keyword #f "method"))) (target (emit (jolt-get node (keyword #f "target")))) (args (jolt-map emit (jolt-get node (keyword #f "args"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "supported-host-methods") m)) (let* ((_a$8160 (var-deref "clojure.core" "str")) (_a$8161 "(jolt-host-call ") (_a$8162 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$8163 " ") (_a$8164 target) (_a$8165 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$8166 ")")) (jolt-invoke _a$8160 _a$8161 _a$8162 _a$8163 _a$8164 _a$8165 _a$8166)) (let* ((_a$8167 (var-deref "clojure.core" "str")) (_a$8168 "(record-method-dispatch ") (_a$8169 target) (_a$8170 " ") (_a$8171 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$8172 " (jolt-vector") (_a$8173 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$8174 "))")) (jolt-invoke _a$8167 _a$8168 _a$8169 _a$8170 _a$8171 _a$8172 _a$8173 _a$8174)))) (if (jolt= G__148 (keyword #f "let")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-let") node) (if (jolt= G__148 (keyword #f "loop")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-loop") node) (if (jolt= G__148 (keyword #f "recur")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-recur") node) (if (jolt= G__148 (keyword #f "ffi-fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-fn") node) (if (jolt= G__148 (keyword #f "ffi-callable")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-callable") node) (if (jolt= G__148 (keyword #f "fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-fn") node) (if (jolt= G__148 (keyword #f "def")) (if (jolt-truthy? (jolt-get node (keyword #f "no-init"))) (let* ((_a$8175 (var-deref "clojure.core" "str")) (_a$8176 "(declare-var! ") (_a$8177 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8178 " ") (_a$8179 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8180 ")")) (jolt-invoke _a$8175 _a$8176 _a$8177 _a$8178 _a$8179 _a$8180)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$8182 (var-deref "clojure.core" "str")) (_a$8183 "(def-var-with-meta! ") (_a$8184 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8185 " ") (_a$8186 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8187 " ") (_a$8188 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-with-cells") (lambda () (let fnrec8181 () (emit (jolt-get node (keyword #f "init"))))))) (_a$8189 " ") (_a$8190 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$8191 ")")) (jolt-invoke _a$8182 _a$8183 _a$8184 _a$8185 _a$8186 _a$8187 _a$8188 _a$8189 _a$8190 _a$8191)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$8193 (var-deref "clojure.core" "str")) (_a$8194 "(def-var! ") (_a$8195 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$8196 " ") (_a$8197 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$8198 " ") (_a$8199 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-with-cells") (lambda () (let fnrec8192 () (emit (jolt-get node (keyword #f "init"))))))) (_a$8200 ")")) (jolt-invoke _a$8193 _a$8194 _a$8195 _a$8196 _a$8197 _a$8198 _a$8199 _a$8200)) jolt-nil))) (jolt-throw (let* ((_a$8201 (jolt-invoke (var-deref "clojure.core" "str") "emit: op not yet ported / unhandled: " (jolt-invoke (var-deref "clojure.core" "pr-str") (jolt-get node (keyword #f "op"))))) (_a$8202 (jolt-hash-map))) (jolt-ex-info _a$8201 _a$8202))))))))))))))))))))))))))))))))))))))))) emit)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "dl-opt-out?" (letrec ((dl-opt-out? (lambda (m) (let fnrec8203 ((m m)) (let* ((or__26__auto (jolt-get m (keyword #f "dynamic")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-get m (keyword #f "redef")))))))) dl-opt-out?) (let* ((_o$8204 (keyword #f "private")) (_o$8205 #t)) (jolt-hash-map _o$8204 _o$8205))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "emit-def-cached" (letrec ((emit-def-cached (lambda (node) (let fnrec8206 ((node node)) (let* ((ns (jolt-get node (keyword #f "ns"))) (nm (jolt-get node (keyword #f "name"))) (dl? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link?")))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.backend-scheme" "dl-opt-out?") (jolt-get node (keyword #f "meta")))) and__25__auto))) (b (jolt-invoke (var-deref "jolt.backend-scheme" "dl-name") ns nm)) (fn? (jolt= (keyword #f "fn") (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "op")))) (pos (jolt-get node (keyword #f "pos"))) (frame-name (if (jolt-truthy? fn?) (let* ((temp__16__auto (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "name")))) (if (jolt-truthy? temp__16__auto) (let* ((fnm temp__16__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") fnm)) b)) jolt-nil)) (reg (if (jolt-truthy? (let* ((and__25__auto dl?)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto fn?)) (if (jolt-truthy? and__25__auto) pos and__25__auto)) and__25__auto))) (let* ((_a$8207 (var-deref "clojure.core" "str")) (_a$8208 " (jolt-register-source! ") (_a$8209 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") frame-name)) (_a$8210 " ") (_a$8211 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$8212 " ") (_a$8213 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$8214 " ") (_a$8215 (if (jolt-truthy? (jolt-get pos (keyword #f "file"))) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get pos (keyword #f "file"))) "jolt-nil")) (_a$8216 " ") (_a$8217 (let* ((or__26__auto (jolt-get pos (keyword #f "line")))) (if (jolt-truthy? or__26__auto) or__26__auto 0))) (_a$8218 ")")) (jolt-invoke _a$8207 _a$8208 _a$8209 _a$8210 _a$8211 _a$8212 _a$8213 _a$8214 _a$8215 _a$8216 _a$8217 _a$8218)) jolt-nil)) (_ (if (jolt-truthy? dl?) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-defined") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) (if (jolt-truthy? fn?) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "direct-link-fns") jolt-conj (jolt-invoke (var-deref "jolt.backend-scheme" "dl-fqn") ns nm)) jolt-nil)) jolt-nil)) (init (jolt-invoke (var-deref "jolt.backend-scheme" "emit-with-cells") (lambda () (let fnrec8219 () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "init")))))))) (if (jolt-truthy? dl?) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$8220 (var-deref "clojure.core" "str")) (_a$8221 "(begin (define ") (_a$8222 b) (_a$8223 " ") (_a$8224 init) (_a$8225 ") (def-var-with-meta! ") (_a$8226 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$8227 " ") (_a$8228 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$8229 " ") (_a$8230 b) (_a$8231 " ") (_a$8232 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$8233 ")") (_a$8234 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$8235 ")")) (jolt-invoke _a$8220 _a$8221 _a$8222 _a$8223 _a$8224 _a$8225 _a$8226 _a$8227 _a$8228 _a$8229 _a$8230 _a$8231 _a$8232 _a$8233 _a$8234 _a$8235)) (let* ((_a$8236 (var-deref "clojure.core" "str")) (_a$8237 "(begin (define ") (_a$8238 b) (_a$8239 " ") (_a$8240 init) (_a$8241 ") (def-var! ") (_a$8242 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$8243 " ") (_a$8244 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$8245 " ") (_a$8246 b) (_a$8247 ")") (_a$8248 (let* ((or__26__auto reg)) (if (jolt-truthy? or__26__auto) or__26__auto ""))) (_a$8249 ")")) (jolt-invoke _a$8236 _a$8237 _a$8238 _a$8239 _a$8240 _a$8241 _a$8242 _a$8243 _a$8244 _a$8245 _a$8246 _a$8247 _a$8248 _a$8249))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$8250 (var-deref "clojure.core" "str")) (_a$8251 "(def-var-with-meta! ") (_a$8252 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$8253 " ") (_a$8254 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$8255 " ") (_a$8256 init) (_a$8257 " ") (_a$8258 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-meta") node)) (_a$8259 ")")) (jolt-invoke _a$8250 _a$8251 _a$8252 _a$8253 _a$8254 _a$8255 _a$8256 _a$8257 _a$8258 _a$8259)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$8260 (var-deref "clojure.core" "str")) (_a$8261 "(def-var! ") (_a$8262 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") ns)) (_a$8263 " ") (_a$8264 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$8265 " ") (_a$8266 init) (_a$8267 ")")) (jolt-invoke _a$8260 _a$8261 _a$8262 _a$8263 _a$8264 _a$8265 _a$8266 _a$8267)) jolt-nil)))))))) emit-def-cached) (let* ((_o$8268 (keyword #f "private")) (_o$8269 #t)) (jolt-hash-map _o$8268 _o$8269))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-top-form" (letrec ((emit-top-form (lambda (node) (let fnrec8270 ((node node)) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "direct-link?"))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) (if (jolt= (keyword #f "do") (jolt-get node (keyword #f "op"))) (let* ((_a$8271 (var-deref "clojure.core" "str")) (_a$8272 "(begin ") (_a$8273 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit-top-form (jolt-get node (keyword #f "statements"))))) (_a$8274 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$8275 (emit-top-form (jolt-get node (keyword #f "ret")))) (_a$8276 ")")) (jolt-invoke _a$8271 _a$8272 _a$8273 _a$8274 _a$8275 _a$8276)) (if (let* ((and__25__auto (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-get node (keyword #f "no-init"))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-invoke (var-deref "jolt.backend-scheme" "dl-opt-out?") (jolt-get node (keyword #f "meta")))) and__25__auto)) and__25__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-def-cached") node) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") node) jolt-nil)))))))) emit-top-form)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "foldable" (let* ((_o$8277 "+") (_o$8278 jolt-add) (_o$8279 "-") (_o$8280 jolt-sub) (_o$8281 "*") (_o$8282 jolt-mul) (_o$8283 "/") (_o$8284 jolt-div) (_o$8285 "<") (_o$8286 jolt-lt) (_o$8287 ">") (_o$8288 jolt-gt) (_o$8289 "<=") (_o$8290 jolt-le) (_o$8291 ">=") (_o$8292 jolt-ge) (_o$8293 "=") (_o$8294 jolt=) (_o$8295 "inc") (_o$8296 jolt-inc) (_o$8297 "dec") (_o$8298 jolt-dec) (_o$8299 "mod") (_o$8300 jolt-mod) (_o$8301 "rem") (_o$8302 jolt-rem) (_o$8303 "quot") (_o$8304 jolt-quot) (_o$8305 "bit-and") (_o$8306 (var-deref "clojure.core" "__bit-and")) (_o$8307 "bit-or") (_o$8308 (var-deref "clojure.core" "__bit-or")) (_o$8309 "bit-xor") (_o$8310 (var-deref "clojure.core" "__bit-xor"))) (jolt-hash-map _o$8277 _o$8278 _o$8279 _o$8280 _o$8281 _o$8282 _o$8283 _o$8284 _o$8285 _o$8286 _o$8287 _o$8288 _o$8289 _o$8290 _o$8291 _o$8292 _o$8293 _o$8294 _o$8295 _o$8296 _o$8297 _o$8298 _o$8299 _o$8300 _o$8301 _o$8302 _o$8303 _o$8304 _o$8305 _o$8306 _o$8307 _o$8308 _o$8309 _o$8310)) (let* ((_o$8311 (keyword #f "private")) (_o$8312 #t)) (jolt-hash-map _o$8311 _o$8312))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "const?" (letrec ((const? (lambda (n) (let fnrec8313 ((n n)) (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))))) const?) (let* ((_o$8314 (keyword #f "private")) (_o$8315 #t)) (jolt-hash-map _o$8314 _o$8315))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "const-num?" (letrec ((const-num? (lambda (n) (let fnrec8316 ((n n)) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "const?") n))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "number?") (jolt-get n (keyword #f "val"))) and__25__auto)))))) const-num?) (let* ((_o$8317 (keyword #f "private")) (_o$8318 #t)) (jolt-hash-map _o$8317 _o$8318))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "fold-fn" (letrec ((fold-fn (lambda (fnode) (let fnrec8319 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (let* ((or__26__auto (let* ((and__25__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "host")))) (jolt-get (var-deref "jolt.passes.fold" "foldable") (jolt-get fnode (keyword #f "name"))) jolt-nil)))))) fold-fn) (let* ((_o$8320 (keyword #f "private")) (_o$8321 #t)) (jolt-hash-map _o$8320 _o$8321))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "const-fold" (letrec ((const-fold (lambda (node) (let fnrec8322 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((n (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node)) (ff (jolt-invoke (var-deref "jolt.passes.fold" "fold-fn") (jolt-get n (keyword #f "fn")))) (args (jolt-get n (keyword #f "args"))) (folded (if (jolt-truthy? (let* ((and__25__auto ff)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-pos? (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.fold" "const-num?") args) and__25__auto)) and__25__auto))) (guard (_r$catch-raw1587 (else (let ((_r$catch1586 (jolt-unwrap-throw _r$catch-raw1587))) (let* ((e _r$catch1586)) jolt-nil)))) (let* ((_o$8324 (keyword #f "op")) (_o$8325 (keyword #f "const")) (_o$8326 (keyword #f "val")) (_o$8327 (jolt-apply ff (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec8323 ((a a)) (jolt-get a (keyword #f "val")))) args)))) (jolt-hash-map _o$8324 _o$8325 _o$8326 _o$8327))) jolt-nil))) (let* ((or__26__auto folded)) (if (jolt-truthy? or__26__auto) or__26__auto n))) (if (jolt= op (keyword #f "if")) (let* ((t (const-fold (jolt-get node (keyword #f "test"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.fold" "const?") t)) (if (let* ((or__26__auto (jolt-nil? (jolt-get t (keyword #f "val"))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= #f (jolt-get t (keyword #f "val"))))) (const-fold (jolt-get node (keyword #f "else"))) (const-fold (jolt-get node (keyword #f "then")))) (let* ((_a$8328 node) (_a$8329 (keyword #f "test")) (_a$8330 t) (_a$8331 (keyword #f "then")) (_a$8332 (const-fold (jolt-get node (keyword #f "then")))) (_a$8333 (keyword #f "else")) (_a$8334 (const-fold (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$8328 _a$8329 _a$8330 _a$8331 _a$8332 _a$8333 _a$8334)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node) jolt-nil)))))))) const-fold) (let* ((_o$8335 (keyword #f "doc")) (_o$8336 "Bottom-up constant folding: a call of a foldable numeric fn whose args are\n all constant numbers becomes a constant; an if with a constant test becomes\n the taken branch.")) (jolt-hash-map _o$8335 _o$8336))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "scalar-const?" (letrec ((scalar-const? (lambda (n) (let fnrec8337 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "keyword?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "string?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.core" "boolean?") v)))))))) and__25__auto)))))) scalar-const?)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "kw-callee?" (letrec ((kw-callee? (lambda (fnode) (let fnrec8338 ((fnode fnode)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))) and__25__auto)))))) kw-callee?) (let* ((_o$8339 (keyword #f "doc")) (_o$8340 "True if fnode is a constant keyword used as a function head \x2014; the (:k m) form.")) (jolt-hash-map _o$8339 _o$8340))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "get-callee?" (letrec ((get-callee? (lambda (fnode) (let fnrec8341 ((fnode fnode)) (let* ((or__26__auto (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((and__25__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__25__auto)))))))) get-callee?) (let* ((_o$8342 (keyword #f "doc")) (_o$8343 "True if fnode is the clojure.core/get (or host get) callee \x2014; the (get m k) form.")) (jolt-hash-map _o$8342 _o$8343))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "int-lit?" (letrec ((int-lit? (lambda (n) (let fnrec6629 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "integer?") v) and__25__auto))) and__25__auto)))))) int-lit?) (let* ((_o$6630 (keyword #f "private")) (_o$6631 #t)) (jolt-hash-map _o$6630 _o$6631))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "float-lit?" (letrec ((float-lit? (lambda (n) (let fnrec6632 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "float?") v) and__25__auto))) and__25__auto)))))) float-lit?) (let* ((_o$6633 (keyword #f "private")) (_o$6634 #t)) (jolt-hash-map _o$6633 _o$6634))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "dbl-spec" (letrec ((dbl-spec (lambda (nm n) (let fnrec6635 ((nm nm) (n n)) (if (let* ((and__25__auto (jolt-n>= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6636 "+") (_o$6637 "-") (_o$6638 "*") (_o$6639 "/") (_o$6640 "min") (_o$6641 "max")) (jolt-hash-set _o$6636 _o$6637 _o$6638 _o$6639 _o$6640 _o$6641)) nm) and__25__auto)) (keyword #f "double") (if (let* ((and__25__auto (jolt= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6642 "inc") (_o$6643 "dec")) (jolt-hash-set _o$6642 _o$6643)) nm) and__25__auto)) (keyword #f "double") (if (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6644 "<") (_o$6645 ">") (_o$6646 "<=") (_o$6647 ">=") (_o$6648 "=") (_o$6649 "==")) (jolt-hash-set _o$6644 _o$6645 _o$6646 _o$6647 _o$6648 _o$6649)) nm) and__25__auto)) (keyword #f "bool") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))))))) dbl-spec) (let* ((_o$6650 (keyword #f "private")) (_o$6651 #t)) (jolt-hash-map _o$6650 _o$6651))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "lng-spec" (letrec ((lng-spec (lambda (nm n) (let fnrec6652 ((nm nm) (n n)) (if (let* ((and__25__auto (jolt-n>= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6653 "+") (_o$6654 "-") (_o$6655 "*") (_o$6656 "min") (_o$6657 "max") (_o$6658 "unchecked-add") (_o$6659 "unchecked-subtract") (_o$6660 "unchecked-multiply")) (jolt-hash-set _o$6653 _o$6654 _o$6655 _o$6656 _o$6657 _o$6658 _o$6659 _o$6660)) nm) and__25__auto)) (keyword #f "long") (if (let* ((and__25__auto (jolt= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6661 "inc") (_o$6662 "dec") (_o$6663 "unchecked-inc") (_o$6664 "unchecked-dec")) (jolt-hash-set _o$6661 _o$6662 _o$6663 _o$6664)) nm) and__25__auto)) (keyword #f "long") (if (let* ((and__25__auto (jolt= n 2))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6665 "quot") (_o$6666 "rem") (_o$6667 "mod")) (jolt-hash-set _o$6665 _o$6666 _o$6667)) nm) and__25__auto)) (keyword #f "long") (if (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6668 "<") (_o$6669 ">") (_o$6670 "<=") (_o$6671 ">=") (_o$6672 "=") (_o$6673 "==")) (jolt-hash-set _o$6668 _o$6669 _o$6670 _o$6671 _o$6672 _o$6673)) nm) and__25__auto)) (keyword #f "bool") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))))) lng-spec) (let* ((_o$6674 (keyword #f "private")) (_o$6675 #t)) (jolt-hash-map _o$6674 _o$6675))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "bd-spec" (letrec ((bd-spec (lambda (nm n) (let fnrec6676 ((nm nm) (n n)) (if (let* ((and__25__auto (jolt-n>= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6677 "+") (_o$6678 "-") (_o$6679 "*") (_o$6680 "/") (_o$6681 "min") (_o$6682 "max")) (jolt-hash-set _o$6677 _o$6678 _o$6679 _o$6680 _o$6681 _o$6682)) nm) and__25__auto)) (keyword #f "bigdec") (if (let* ((and__25__auto (jolt= n 2))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6683 "quot") (_o$6684 "rem")) (jolt-hash-set _o$6683 _o$6684)) nm) and__25__auto)) (keyword #f "bigdec") (if (let* ((and__25__auto (jolt= n 1))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6685 "zero?") (_o$6686 "pos?") (_o$6687 "neg?")) (jolt-hash-set _o$6685 _o$6686 _o$6687)) nm) and__25__auto)) (keyword #f "bool") (if (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (jolt-contains? (let* ((_o$6688 "<") (_o$6689 ">") (_o$6690 "<=") (_o$6691 ">=")) (jolt-hash-set _o$6688 _o$6689 _o$6690 _o$6691)) nm) and__25__auto)) (keyword #f "bool") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))))) bd-spec) (let* ((_o$6692 (keyword #f "private")) (_o$6693 #t)) (jolt-hash-map _o$6692 _o$6693))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "propagate" (letrec ((propagate (lambda (spec) (let fnrec6694 ((spec spec)) (if (jolt= spec (keyword #f "bool")) jolt-nil spec))))) propagate) (let* ((_o$6695 (keyword #f "private")) (_o$6696 #t)) (jolt-hash-map _o$6695 _o$6696))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.numeric" "an"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "recur-kinds" (letrec ((recur-kinds (lambda (node tenv) (let fnrec6697 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "recur")) (jolt-vector (let* ((_a$6699 (var-deref "clojure.core" "mapv")) (_a$6700 (lambda (a) (let fnrec6698 ((a a)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.numeric" "an") a tenv) 0)))) (_a$6701 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$6699 _a$6700 _a$6701))) (if (jolt= op (keyword #f "let")) (let* ((_a$6709 (jolt-get node (keyword #f "body"))) (_a$6710 (let* ((_a$6706 (lambda (te b) (let fnrec6702 ((te te) (b b)) (let* ((_a$6703 te) (_a$6704 (jolt-nth b 0)) (_a$6705 (jolt-nth (jolt-invoke (var-deref "jolt.passes.numeric" "an") (jolt-nth b 1) te) 0))) (jolt-assoc _a$6703 _a$6704 _a$6705))))) (_a$6707 tenv) (_a$6708 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$6706 _a$6707 _a$6708)))) (recur-kinds _a$6709 _a$6710)) (if (jolt= op (keyword #f "if")) (let* ((_a$6711 (recur-kinds (jolt-get node (keyword #f "then")) tenv)) (_a$6712 (recur-kinds (jolt-get node (keyword #f "else")) tenv))) (jolt-concat _a$6711 _a$6712)) (if (jolt= op (keyword #f "do")) (recur-kinds (jolt-get node (keyword #f "ret")) tenv) (if (jolt-truthy? (keyword #f "else")) (jolt-vector) jolt-nil)))))))))) recur-kinds) (let* ((_o$6713 (keyword #f "private")) (_o$6714 #t)) (jolt-hash-map _o$6713 _o$6714))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "recur-arg-lists" (letrec ((recur-arg-lists (lambda (node) (let fnrec6715 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "recur")) (jolt-vector (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "let")) (recur-arg-lists (jolt-get node (keyword #f "body"))) (if (jolt= op (keyword #f "if")) (let* ((_a$6716 (recur-arg-lists (jolt-get node (keyword #f "then")))) (_a$6717 (recur-arg-lists (jolt-get node (keyword #f "else"))))) (jolt-concat _a$6716 _a$6717)) (if (jolt= op (keyword #f "do")) (recur-arg-lists (jolt-get node (keyword #f "ret"))) (if (jolt-truthy? (keyword #f "else")) (jolt-vector) jolt-nil)))))))))) recur-arg-lists) (let* ((_o$6718 (keyword #f "private")) (_o$6719 #t)) (jolt-hash-map _o$6718 _o$6719))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "counter-step?" (letrec ((counter-step? (lambda (arg vname) (let fnrec6720 ((arg arg) (vname vname)) (if (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get arg (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= vname (jolt-get arg (keyword #f "name"))) and__25__auto)) #t (if (jolt= (keyword #f "invoke") (jolt-get arg (keyword #f "op"))) (let* ((f (jolt-get arg (keyword #f "fn"))) (as (jolt-get arg (keyword #f "args")))) (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (let* ((nm (jolt-get f (keyword #f "name"))) (v? (lambda (n) (let fnrec6721 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= vname (jolt-get n (keyword #f "name"))) and__25__auto)))))) (if (let* ((and__25__auto (jolt-contains? (let* ((_o$6722 "inc") (_o$6723 "dec") (_o$6724 "unchecked-inc") (_o$6725 "unchecked-dec")) (jolt-hash-set _o$6722 _o$6723 _o$6724 _o$6725)) nm))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count as)) and__25__auto)) (jolt-invoke v? (jolt-nth as 0)) (if (let* ((and__25__auto (jolt-contains? (let* ((_o$6726 "+") (_o$6727 "unchecked-add")) (jolt-hash-set _o$6726 _o$6727)) nm))) (if (jolt-truthy? and__25__auto) (jolt= 2 (jolt-count as)) and__25__auto)) (let* ((or__26__auto (let* ((and__25__auto (jolt-invoke v? (jolt-nth as 0)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") (jolt-nth as 1)) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((and__25__auto (jolt-invoke v? (jolt-nth as 1)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") (jolt-nth as 0)) and__25__auto)))) (if (let* ((and__25__auto (jolt-contains? (let* ((_o$6728 "-") (_o$6729 "unchecked-subtract")) (jolt-hash-set _o$6728 _o$6729)) nm))) (if (jolt-truthy? and__25__auto) (jolt= 2 (jolt-count as)) and__25__auto)) (let* ((and__25__auto (jolt-invoke v? (jolt-nth as 0)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") (jolt-nth as 1)) and__25__auto)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))) and__25__auto)) and__25__auto))) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))) counter-step?) (let* ((_o$6730 (keyword #f "private")) (_o$6731 #t)) (jolt-hash-map _o$6730 _o$6731))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "loop-kinds" (letrec ((loop-kinds (lambda (names seed body tenv) (let fnrec6732 ((names names) (seed seed) (body body) (tenv tenv)) (let* ((cur seed) (iter 0)) (let loop6733 ((cur cur) (iter iter)) (if (jolt-n> iter (jolt-count names)) cur (let* ((te (let* ((_a$6738 (lambda (t i) (let fnrec6734 ((t t) (i i)) (let* ((_a$6735 t) (_a$6736 (jolt-nth names i)) (_a$6737 (jolt-nth cur i))) (jolt-assoc _a$6735 _a$6736 _a$6737))))) (_a$6739 tenv) (_a$6740 (jolt-range (jolt-count names)))) (jolt-reduce _a$6738 _a$6739 _a$6740))) (rks (jolt-invoke (var-deref "jolt.passes.numeric" "recur-kinds") body te)) (nxt (let* ((_a$6743 (var-deref "clojure.core" "mapv")) (_a$6744 (lambda (j) (let fnrec6741 ((j j)) (let* ((k (jolt-nth cur j))) (if (jolt-truthy? (let* ((and__25__auto k)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (rk) (let fnrec6742 ((rk rk)) (jolt= k (jolt-nth rk j)))) rks) and__25__auto))) k jolt-nil))))) (_a$6745 (jolt-range (jolt-count names)))) (jolt-invoke _a$6743 _a$6744 _a$6745)))) (if (jolt= nxt cur) cur (loop6733 nxt (jolt-inc iter))))))))))) loop-kinds) (let* ((_o$6746 (keyword #f "private")) (_o$6747 #t)) (jolt-hash-map _o$6746 _o$6747))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "arity-env" (letrec ((arity-env (lambda (tenv a) (let fnrec6748 ((tenv tenv) (a a)) (let* ((nh (let* ((_a$6749 (jolt-hash-map)) (_a$6750 (jolt-get a (keyword #f "nhints")))) (jolt-into _a$6749 _a$6750))) (pe (let* ((_a$6752 (lambda (e p) (let fnrec6751 ((e e) (p p)) (jolt-assoc e p (jolt-get nh p))))) (_a$6753 tenv) (_a$6754 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$6752 _a$6753 _a$6754)))) (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) jolt-nil) pe)))))) arity-env) (let* ((_o$6755 (keyword #f "private")) (_o$6756 #t)) (jolt-hash-map _o$6755 _o$6756))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "an-invoke" (letrec ((an-invoke (lambda (node tenv) (let fnrec6757 ((node node) (tenv tenv)) (let* ((fnode (jolt-get node (keyword #f "fn"))) (nm (if (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__25__auto)) (jolt-get fnode (keyword #f "name")) jolt-nil)) (ars (let* ((_a$6759 (var-deref "clojure.core" "mapv")) (_a$6760 (lambda (a) (let fnrec6758 ((a a)) (jolt-invoke (var-deref "jolt.passes.numeric" "an") a tenv)))) (_a$6761 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$6759 _a$6760 _a$6761))) (argnodes (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec6762 ((r r)) (jolt-nth r 1))) ars)) (node1 (jolt-assoc node (keyword #f "args") argnodes)) (n (jolt-count ars))) (if (jolt= (keyword #f "double") (jolt-get node (keyword #f "num-read"))) (let* ((_o$6763 (keyword #f "double")) (_o$6764 node1)) (jolt-vector _o$6763 _o$6764)) (if (jolt-truthy? (jolt-get fnode (keyword #f "num-ret"))) (let* ((_o$6765 (jolt-get fnode (keyword #f "num-ret"))) (_o$6766 node1)) (jolt-vector _o$6765 _o$6766)) (if (jolt-nil? nm) (let* ((_o$6767 jolt-nil) (_o$6768 node1)) (jolt-vector _o$6767 _o$6768)) (if (jolt-truthy? (keyword #f "else")) (let* ((cls (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec6769 ((r r)) (let* ((k (jolt-nth r 0)) (nd (jolt-nth r 1))) (if (jolt= k (keyword #f "double")) (keyword #f "double") (if (jolt= k (keyword #f "long")) (keyword #f "long") (if (jolt= k (keyword #f "bigdec")) (keyword #f "bigdec") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") nd)) (keyword #f "wild") (if (jolt-truthy? (keyword #f "else")) (keyword #f "no") jolt-nil)))))))) ars)) (ok? (lambda (allowed need) (let fnrec6770 ((allowed allowed) (need need)) (let* ((and__25__auto (jolt-pos? n))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (c) (let fnrec6771 ((c c)) (let* ((or__26__auto (jolt= c (keyword #f "wild")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= c allowed))))) cls))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "some") (lambda (c) (let fnrec6772 ((c c)) (jolt= c need))) cls) and__25__auto)) and__25__auto))))) (ds (jolt-invoke (var-deref "jolt.passes.numeric" "dbl-spec") nm n)) (ls (jolt-invoke (var-deref "jolt.passes.numeric" "lng-spec") nm n)) (bs (jolt-invoke (var-deref "jolt.passes.numeric" "bd-spec") nm n))) (if (jolt-truthy? (let* ((and__25__auto ds)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke ok? (keyword #f "double") (keyword #f "double")))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt-not (jolt-contains? (let* ((_o$6773 "min") (_o$6774 "max")) (jolt-hash-set _o$6773 _o$6774)) nm)))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (c) (let fnrec6775 ((c c)) (jolt= c (keyword #f "double")))) cls))) and__25__auto)) and__25__auto))) (let* ((args_PRIME_ (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nd) (let fnrec6776 ((nd nd)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") nd)) (jolt-assoc nd (keyword #f "val") (jolt-invoke (var-deref "clojure.core" "double") (jolt-get nd (keyword #f "val")))) nd))) argnodes))) (let* ((_o$6777 (jolt-invoke (var-deref "jolt.passes.numeric" "propagate") ds)) (_o$6778 (jolt-assoc node1 (keyword #f "args") args_PRIME_ (keyword #f "num-kind") (keyword #f "double")))) (jolt-vector _o$6777 _o$6778))) (if (jolt-truthy? (let* ((and__25__auto ls)) (if (jolt-truthy? and__25__auto) (jolt-invoke ok? (keyword #f "long") (keyword #f "long")) and__25__auto))) (let* ((_o$6779 (jolt-invoke (var-deref "jolt.passes.numeric" "propagate") ls)) (_o$6780 (jolt-assoc node1 (keyword #f "num-kind") (keyword #f "long")))) (jolt-vector _o$6779 _o$6780)) (if (jolt-truthy? (let* ((and__25__auto bs)) (if (jolt-truthy? and__25__auto) (jolt-invoke ok? (keyword #f "bigdec") (keyword #f "bigdec")) and__25__auto))) (let* ((_o$6781 (jolt-invoke (var-deref "jolt.passes.numeric" "propagate") bs)) (_o$6782 (jolt-assoc node1 (keyword #f "num-kind") (keyword #f "bigdec")))) (jolt-vector _o$6781 _o$6782)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$6783 jolt-nil) (_o$6784 node1)) (jolt-vector _o$6783 _o$6784)) jolt-nil))))) jolt-nil))))))))) an-invoke) (let* ((_o$6785 (keyword #f "private")) (_o$6786 #t) (_o$6787 (keyword #f "doc")) (_o$6788 "Annotate an :invoke with its numeric kind. An arithmetic core op specializes to\n the Chez fl*/fx* op only when every operand is the same kind (:double or :long),\n except an integer literal is :wild \x2014; valid in either \x2014; so (+ ^double x 2) stays\n double. A call to a ^double/^long-returning var yields that kind without lowering\n the call (its body already coerces the return).")) (jolt-hash-map _o$6785 _o$6786 _o$6787 _o$6788))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "an" (letrec ((an (lambda (node tenv) (let fnrec6789 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$6790 (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.numeric" "float-lit?") node)) (keyword #f "double") jolt-nil)) (_o$6791 node)) (jolt-vector _o$6790 _o$6791)) (if (jolt= op (keyword #f "bigdec")) (let* ((_o$6792 (keyword #f "bigdec")) (_o$6793 node)) (jolt-vector _o$6792 _o$6793)) (if (jolt= op (keyword #f "local")) (let* ((_o$6794 (jolt-get tenv (jolt-get node (keyword #f "name")))) (_o$6795 node)) (jolt-vector _o$6794 _o$6795)) (if (jolt= op (keyword #f "coerce")) (let* ((_o$6796 (jolt-get node (keyword #f "kind"))) (_o$6797 (jolt-assoc node (keyword #f "expr") (jolt-nth (an (jolt-get node (keyword #f "expr")) tenv) 1)))) (jolt-vector _o$6796 _o$6797)) (if (jolt= op (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.passes.numeric" "an-invoke") node tenv) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$6808 (lambda (acc b) (let fnrec6798 ((acc acc) (b b)) (let* ((te (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (ir (an (jolt-nth b 1) te))) (let* ((_o$6804 (let* ((_a$6799 te) (_a$6800 (jolt-nth b 0)) (_a$6801 (jolt-nth ir 0))) (jolt-assoc _a$6799 _a$6800 _a$6801))) (_o$6805 (jolt-conj binds (let* ((_o$6802 (jolt-nth b 0)) (_o$6803 (jolt-nth ir 1))) (jolt-vector _o$6802 _o$6803))))) (jolt-vector _o$6804 _o$6805)))))) (_a$6809 (let* ((_o$6806 tenv) (_o$6807 (jolt-vector))) (jolt-vector _o$6806 _o$6807))) (_a$6810 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$6808 _a$6809 _a$6810))) (br (let* ((_a$6811 (jolt-get node (keyword #f "body"))) (_a$6812 (jolt-nth res 0))) (an _a$6811 _a$6812)))) (let* ((_o$6818 (jolt-nth br 0)) (_o$6819 (let* ((_a$6813 node) (_a$6814 (keyword #f "bindings")) (_a$6815 (jolt-nth res 1)) (_a$6816 (keyword #f "body")) (_a$6817 (jolt-nth br 1))) (jolt-assoc _a$6813 _a$6814 _a$6815 _a$6816 _a$6817)))) (jolt-vector _o$6818 _o$6819))) (if (jolt= op (keyword #f "loop")) (let* ((binds (jolt-get node (keyword #f "bindings"))) (names (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (b) (let fnrec6820 ((b b)) (jolt-nth b 0))) binds)) (ik (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (b) (let fnrec6821 ((b b)) (jolt-nth (an (jolt-nth b 1) tenv) 0))) binds)) (rlists (jolt-invoke (var-deref "jolt.passes.numeric" "recur-arg-lists") (jolt-get node (keyword #f "body")))) (seed (let* ((_a$6827 (var-deref "clojure.core" "mapv")) (_a$6828 (lambda (j) (let fnrec6822 ((j j)) (let* ((k (jolt-nth ik j)) (b (jolt-nth binds j))) (if (jolt-truthy? k) k (if (jolt-truthy? (let* ((and__25__auto (jolt-seq rlists))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.numeric" "int-lit?") (jolt-nth b 1)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (args) (let fnrec6823 ((args args)) (let* ((_a$6824 (var-deref "jolt.passes.numeric" "counter-step?")) (_a$6825 (jolt-nth args j)) (_a$6826 (jolt-nth b 0))) (jolt-invoke _a$6824 _a$6825 _a$6826)))) rlists) and__25__auto)) and__25__auto))) (keyword #f "long") (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))) (_a$6829 (jolt-range (jolt-count names)))) (jolt-invoke _a$6827 _a$6828 _a$6829))) (lk (jolt-invoke (var-deref "jolt.passes.numeric" "loop-kinds") names seed (jolt-get node (keyword #f "body")) tenv)) (te (let* ((_a$6834 (lambda (t i) (let fnrec6830 ((t t) (i i)) (let* ((_a$6831 t) (_a$6832 (jolt-nth names i)) (_a$6833 (jolt-nth lk i))) (jolt-assoc _a$6831 _a$6832 _a$6833))))) (_a$6835 tenv) (_a$6836 (jolt-range (jolt-count names)))) (jolt-reduce _a$6834 _a$6835 _a$6836)))) (let* ((_o$6845 jolt-nil) (_o$6846 (let* ((_a$6840 node) (_a$6841 (keyword #f "bindings")) (_a$6842 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (b) (let fnrec6837 ((b b)) (let* ((_o$6838 (jolt-nth b 0)) (_o$6839 (jolt-nth (an (jolt-nth b 1) tenv) 1))) (jolt-vector _o$6838 _o$6839)))) binds)) (_a$6843 (keyword #f "body")) (_a$6844 (jolt-nth (an (jolt-get node (keyword #f "body")) te) 1))) (jolt-assoc _a$6840 _a$6841 _a$6842 _a$6843 _a$6844)))) (jolt-vector _o$6845 _o$6846))) (if (jolt= op (keyword #f "if")) (let* ((tr (an (jolt-get node (keyword #f "test")) tenv)) (thn (an (jolt-get node (keyword #f "then")) tenv)) (els (an (jolt-get node (keyword #f "else")) tenv)) (tk (jolt-nth thn 0)) (ek (jolt-nth els 0))) (let* ((_o$6854 (if (jolt= tk ek) tk jolt-nil)) (_o$6855 (let* ((_a$6847 node) (_a$6848 (keyword #f "test")) (_a$6849 (jolt-nth tr 1)) (_a$6850 (keyword #f "then")) (_a$6851 (jolt-nth thn 1)) (_a$6852 (keyword #f "else")) (_a$6853 (jolt-nth els 1))) (jolt-assoc _a$6847 _a$6848 _a$6849 _a$6850 _a$6851 _a$6852 _a$6853)))) (jolt-vector _o$6854 _o$6855))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$6857 (var-deref "clojure.core" "mapv")) (_a$6858 (lambda (s) (let fnrec6856 ((s s)) (jolt-nth (an s tenv) 1)))) (_a$6859 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$6857 _a$6858 _a$6859))) (r (an (jolt-get node (keyword #f "ret")) tenv))) (let* ((_o$6860 (jolt-nth r 0)) (_o$6861 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$6860 _o$6861))) (if (jolt= op (keyword #f "fn")) (let* ((_o$6868 jolt-nil) (_o$6869 (jolt-assoc node (keyword #f "arities") (let* ((_a$6865 (var-deref "clojure.core" "mapv")) (_a$6866 (lambda (a) (let fnrec6862 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-nth (let* ((_a$6863 (jolt-get a (keyword #f "body"))) (_a$6864 (jolt-invoke (var-deref "jolt.passes.numeric" "arity-env") tenv a))) (an _a$6863 _a$6864)) 1))))) (_a$6867 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$6865 _a$6866 _a$6867))))) (jolt-vector _o$6868 _o$6869)) (if (jolt= op (keyword #f "def")) (let* ((_o$6870 jolt-nil) (_o$6871 (jolt-assoc node (keyword #f "init") (jolt-nth (an (jolt-get node (keyword #f "init")) tenv) 1)))) (jolt-vector _o$6870 _o$6871)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$6873 jolt-nil) (_o$6874 (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec6872 ((c c)) (jolt-nth (an c tenv) 1))) node))) (jolt-vector _o$6873 _o$6874)) jolt-nil))))))))))))))))) an) (let* ((_o$6875 (keyword #f "private")) (_o$6876 #t)) (jolt-hash-map _o$6875 _o$6876))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.numeric" "annotate" (letrec ((annotate (lambda (node) (let fnrec6877 ((node node)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.numeric" "an") node (jolt-hash-map)) 1))))) annotate) (let* ((_o$6878 (keyword #f "doc")) (_o$6879 "Tag arithmetic nodes with :num-kind from local numeric type-flow. Returns the\n rewritten IR (no kind escapes to the caller).")) (jolt-hash-map _o$6878 _o$6879))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "dirty" (jolt-invoke (var-deref "clojure.core" "atom") #f)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "mark!" (letrec ((mark! (lambda () (let fnrec6880 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #t))))) mark!) (let* ((_o$6881 (keyword #f "private")) (_o$6882 #t)) (jolt-hash-map _o$6881 _o$6882))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "rec-shapes" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (let* ((_o$6883 (keyword #f "private")) (_o$6884 #t)) (jolt-hash-map _o$6883 _o$6884))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "set-rec-shapes!" (letrec ((set-rec-shapes! (lambda (m) (let fnrec6885 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "rec-shapes") (let* ((or__26__auto m)) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))))))) set-rec-shapes!) (let* ((_o$6886 (keyword #f "doc")) (_o$6887 "Install the record-ctor shape registry the record fold consults.")) (jolt-hash-map _o$6886 _o$6887))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "fresh-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (let* ((_o$6888 (keyword #f "private")) (_o$6889 #t)) (jolt-hash-map _o$6888 _o$6889))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "fresh" (letrec ((fresh (lambda (base) (let fnrec6890 ((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) (let* ((_o$6891 (keyword #f "private")) (_o$6892 #t)) (jolt-hash-map _o$6891 _o$6892))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "safe-op?" (letrec ((safe-op? (lambda (op) (let fnrec6893 ((op op)) (let* ((or__26__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "host")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "the-var")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "quote")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "if")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "do")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "let")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "invoke")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "map")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "vector")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "set")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= op (keyword #f "throw")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "coerce")))))))))))))))))))))))))))))))))) safe-op?) (let* ((_o$6894 (keyword #f "private")) (_o$6895 #t)) (jolt-hash-map _o$6894 _o$6895))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "inline-budget" 120 (let* ((_o$6896 (keyword #f "private")) (_o$6897 #t)) (jolt-hash-map _o$6896 _o$6897))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "body-size" (letrec ((body-size (lambda (node) (let fnrec6898 ((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 fnrec6899 ((acc acc) (c c)) (jolt-n+ acc (body-size c)))) 1 node)))))) body-size) (let* ((_o$6900 (keyword #f "private")) (_o$6901 #t) (_o$6902 (keyword #f "doc")) (_o$6903 "Node count of an inline-eligible body. A disallowed op contributes a number\n larger than any budget, so the caller's (<= size budget) test fails and we\n never try to inline (or alpha-rename) such a body. Only reached for safe ops,\n so the shared child fold covers it exactly (leaves fold to 1).")) (jolt-hash-map _o$6900 _o$6901 _o$6902 _o$6903))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "subst" (letrec ((subst (lambda (node env) (let fnrec6904 ((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__25__auto (jolt= (keyword #f "local") (jolt-get r (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-get node (keyword #f "hint")))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-get r (keyword #f "hint"))) and__25__auto)) and__25__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$6916 (lambda (acc b) (let fnrec6905 ((acc acc) (b b)) (let* ((e (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (nm (jolt-nth b 0)) (init (subst (jolt-nth b 1) e)) (f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") nm))) (let* ((_o$6912 (jolt-assoc e nm (let* ((_o$6906 (keyword #f "op")) (_o$6907 (keyword #f "local")) (_o$6908 (keyword #f "name")) (_o$6909 f)) (jolt-hash-map _o$6906 _o$6907 _o$6908 _o$6909)))) (_o$6913 (jolt-conj binds (let* ((_o$6910 f) (_o$6911 init)) (jolt-vector _o$6910 _o$6911))))) (jolt-vector _o$6912 _o$6913)))))) (_a$6917 (let* ((_o$6914 env) (_o$6915 (jolt-vector))) (jolt-vector _o$6914 _o$6915))) (_a$6918 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$6916 _a$6917 _a$6918)))) (let* ((_a$6921 node) (_a$6922 (keyword #f "bindings")) (_a$6923 (jolt-nth res 1)) (_a$6924 (keyword #f "body")) (_a$6925 (let* ((_a$6919 (jolt-get node (keyword #f "body"))) (_a$6920 (jolt-nth res 0))) (subst _a$6919 _a$6920)))) (jolt-assoc _a$6921 _a$6922 _a$6923 _a$6924 _a$6925))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec6926 ((c c)) (subst c env))) node) jolt-nil)))))))) subst) (let* ((_o$6927 (keyword #f "private")) (_o$6928 #t) (_o$6929 (keyword #f "doc")) (_o$6930 "Substitute locals in node per env (a map name -> replacement IR node), and\n alpha-rename every inner :let binder to a globally fresh name (so the spliced\n body shares no name with the caller). env seeds the params: a trivial arg\n (local/const) maps a param straight to the arg node (copy propagation \x2014; this\n is what lets scalar-replace see a map-literal arg through the call boundary);\n a non-trivial arg maps the param to a fresh :local that a wrapping let binds.")) (jolt-hash-map _o$6927 _o$6928 _o$6929 _o$6930))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "trivial-arg?" (letrec ((trivial-arg? (lambda (n) (let fnrec6931 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__26__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "const"))))))))) trivial-arg?) (let* ((_o$6932 (keyword #f "private")) (_o$6933 #t)) (jolt-hash-map _o$6932 _o$6933))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "body-closed?" (letrec ((body-closed? (lambda (node scope) (let fnrec6934 ((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$6940 (lambda (acc b) (let fnrec6935 ((acc acc) (b b)) (let* ((sc (jolt-nth acc 0)) (ok (jolt-nth acc 1))) (if (jolt-not ok) acc (let* ((_o$6936 (jolt-conj sc (jolt-nth b 0))) (_o$6937 (body-closed? (jolt-nth b 1) sc))) (jolt-vector _o$6936 _o$6937))))))) (_a$6941 (let* ((_o$6938 scope) (_o$6939 #t)) (jolt-vector _o$6938 _o$6939))) (_a$6942 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$6940 _a$6941 _a$6942)))) (let* ((and__25__auto (jolt-nth res 1))) (if (jolt-truthy? and__25__auto) (let* ((_a$6943 (jolt-get node (keyword #f "body"))) (_a$6944 (jolt-nth res 0))) (body-closed? _a$6943 _a$6944)) and__25__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 fnrec6945 ((ok ok) (c c)) (let* ((and__25__auto ok)) (if (jolt-truthy? and__25__auto) (body-closed? c scope) and__25__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) body-closed?) (let* ((_o$6946 (keyword #f "private")) (_o$6947 #t) (_o$6948 (keyword #f "doc")) (_o$6949 "True if every :local in node is bound \x2014; by a param (in the initial scope set)\n or by an enclosing :let within the body. A self-recursive fn fails this: the\n analyzer binds the fn's own name as a local, so its body has a FREE local (the\n self-reference) that would dangle once the body is spliced elsewhere.")) (jolt-hash-map _o$6946 _o$6947 _o$6948 _o$6949))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "try-inline" (letrec ((try-inline (lambda (node ctx) (let fnrec6950 ((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$6951 (var-deref "jolt.host" "inline-ir")) (_a$6952 ctx) (_a$6953 (jolt-get f (keyword #f "ns"))) (_a$6954 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$6951 _a$6952 _a$6953 _a$6954)))) (if (jolt-truthy? stash) (let* ((params (jolt-get stash (keyword #f "params"))) (body (jolt-get stash (keyword #f "body"))) (nh (let* ((_a$6959 (lambda (m pr) (let fnrec6955 ((m m) (pr pr)) (let* ((_a$6956 m) (_a$6957 (jolt-nth pr 0)) (_a$6958 (jolt-nth pr 1))) (jolt-assoc _a$6956 _a$6957 _a$6958))))) (_a$6960 (jolt-hash-map)) (_a$6961 (jolt-get stash (keyword #f "nhints")))) (jolt-reduce _a$6959 _a$6960 _a$6961))) (ret (jolt-get stash (keyword #f "ret"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__25__auto (let* ((_a$6962 (jolt-count params)) (_a$6963 (jolt-count args))) (jolt= _a$6962 _a$6963)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n<= (jolt-invoke (var-deref "jolt.passes.inline" "body-size") body) (var-deref "jolt.passes.inline" "inline-budget")))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.inline" "body-closed?") body (jolt-reduce jolt-conj (jolt-hash-set) params)) and__25__auto)) and__25__auto))) (let* ((n (jolt-count params)) (res (let* ((i 0) (env (jolt-hash-map)) (binds (jolt-vector))) (let loop6964 ((i i) (env env) (binds binds)) (if (jolt-n< i n) (let* ((p (jolt-nth params i)) (a (jolt-nth args i)) (k (jolt-get nh p))) (if (jolt-truthy? k) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$6971 (jolt-inc i)) (_a$6972 (jolt-assoc env p (let* ((_o$6965 (keyword #f "op")) (_o$6966 (keyword #f "local")) (_o$6967 (keyword #f "name")) (_o$6968 f)) (jolt-hash-map _o$6965 _o$6966 _o$6967 _o$6968)))) (_a$6973 (jolt-conj binds (let* ((_o$6969 f) (_o$6970 (jolt-invoke (var-deref "jolt.ir" "coerce-node") k a))) (jolt-vector _o$6969 _o$6970))))) (loop6964 _a$6971 _a$6972 _a$6973))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "trivial-arg?") a)) (let* ((_a$6974 (jolt-inc i)) (_a$6975 (jolt-assoc env p a)) (_a$6976 binds)) (loop6964 _a$6974 _a$6975 _a$6976)) (if (jolt-truthy? (keyword #f "else")) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$6983 (jolt-inc i)) (_a$6984 (jolt-assoc env p (let* ((_o$6977 (keyword #f "op")) (_o$6978 (keyword #f "local")) (_o$6979 (keyword #f "name")) (_o$6980 f)) (jolt-hash-map _o$6977 _o$6978 _o$6979 _o$6980)))) (_a$6985 (jolt-conj binds (let* ((_o$6981 f) (_o$6982 a)) (jolt-vector _o$6981 _o$6982))))) (loop6964 _a$6983 _a$6984 _a$6985))) jolt-nil)))) (let* ((_o$6986 env) (_o$6987 binds)) (jolt-vector _o$6986 _o$6987)))))) (env (jolt-nth res 0)) (binds (jolt-nth res 1)) (rbody0 (jolt-invoke (var-deref "jolt.passes.inline" "subst") body env)) (rbody (if (jolt-truthy? ret) (jolt-invoke (var-deref "jolt.ir" "coerce-node") ret rbody0) rbody0))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count binds)) rbody (let* ((_o$6988 (keyword #f "op")) (_o$6989 (keyword #f "let")) (_o$6990 (keyword #f "bindings")) (_o$6991 binds) (_o$6992 (keyword #f "body")) (_o$6993 rbody)) (jolt-hash-map _o$6988 _o$6989 _o$6990 _o$6991 _o$6992 _o$6993))))) node)) node)) node)))))) try-inline) (let* ((_o$6994 (keyword #f "private")) (_o$6995 #t) (_o$6996 (keyword #f "doc")) (_o$6997 "node is an :invoke whose children are already inlined. If its :fn is a var\n with a stashed, in-budget, arity-matching inline body, return the spliced\n let; else node.")) (jolt-hash-map _o$6994 _o$6995 _o$6996 _o$6997))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "inline-node" (letrec ((inline-node (lambda (node ctx) (let fnrec6998 ((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 fnrec6999 ((c c)) (inline-node c ctx))) node) ctx) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec7000 ((c c)) (inline-node c ctx))) node)))))) inline-node) (let* ((_o$7001 (keyword #f "doc")) (_o$7002 "Bottom-up: inline children first, then attempt to inline this node.")) (jolt-hash-map _o$7001 _o$7002))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "flatten-let-bindings" (letrec ((flatten-let-bindings (lambda (binds) (let fnrec7003 ((binds binds)) (let* ((_a$7009 (lambda (out b) (let fnrec7004 ((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$7007 (jolt-reduce jolt-conj out (jolt-get init (keyword #f "bindings")))) (_a$7008 (let* ((_o$7005 nm) (_o$7006 (jolt-get init (keyword #f "body")))) (jolt-vector _o$7005 _o$7006)))) (jolt-conj _a$7007 _a$7008))) (jolt-conj out b)))))) (_a$7010 (jolt-vector)) (_a$7011 binds)) (jolt-reduce _a$7009 _a$7010 _a$7011)))))) flatten-let-bindings) (let* ((_o$7012 (keyword #f "private")) (_o$7013 #t)) (jolt-hash-map _o$7012 _o$7013))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "flatten-lets" (letrec ((flatten-lets (lambda (node) (let fnrec7014 ((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$7015 "+") (_o$7016 "-") (_o$7017 "*") (_o$7018 "/") (_o$7019 "<") (_o$7020 ">") (_o$7021 "<=") (_o$7022 ">=") (_o$7023 "=") (_o$7024 "not=") (_o$7025 "inc") (_o$7026 "dec") (_o$7027 "mod") (_o$7028 "rem") (_o$7029 "quot") (_o$7030 "min") (_o$7031 "max") (_o$7032 "abs") (_o$7033 "nil?") (_o$7034 "some?") (_o$7035 "not") (_o$7036 "get") (_o$7037 "zero?") (_o$7038 "pos?") (_o$7039 "neg?") (_o$7040 "even?") (_o$7041 "odd?") (_o$7042 "bit-and") (_o$7043 "bit-or") (_o$7044 "bit-xor")) (jolt-hash-set _o$7015 _o$7016 _o$7017 _o$7018 _o$7019 _o$7020 _o$7021 _o$7022 _o$7023 _o$7024 _o$7025 _o$7026 _o$7027 _o$7028 _o$7029 _o$7030 _o$7031 _o$7032 _o$7033 _o$7034 _o$7035 _o$7036 _o$7037 _o$7038 _o$7039 _o$7040 _o$7041 _o$7042 _o$7043 _o$7044)) (let* ((_o$7045 (keyword #f "private")) (_o$7046 #t)) (jolt-hash-map _o$7045 _o$7046))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "pure-fn?" (letrec ((pure-fn? (lambda (f) (let fnrec7047 ((f f)) (let* ((op (jolt-get f (keyword #f "op")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.fold" "kw-callee?") f)) #t (if (jolt= op (keyword #f "var")) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) and__25__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?) (let* ((_o$7048 (keyword #f "private")) (_o$7049 #t)) (jolt-hash-map _o$7048 _o$7049))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.inline" "ctor-shape"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "pure?" (letrec ((pure? (lambda (node) (let fnrec7050 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((and__25__auto (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.inline" "pure-fn?") (jolt-get node (keyword #f "fn"))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") node))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "args"))) and__25__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 fnrec7051 ((ok ok) (c c)) (let* ((and__25__auto ok)) (if (jolt-truthy? and__25__auto) (pure? c) and__25__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil)))))))) pure?) (let* ((_o$7052 (keyword #f "private")) (_o$7053 #t) (_o$7054 (keyword #f "doc")) (_o$7055 "Conservative: true only for expressions with no side effects that are safe to\n duplicate or discard. A var/host ref is a pure read; an invoke is pure for a\n known-pure fn (arithmetic, comparison, keyword lookup, get) or a record\n constructor (an immutable struct alloc) whose args are themselves pure.")) (jolt-hash-map _o$7052 _o$7053 _o$7054 _o$7055))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "const-key-map?" (letrec ((const-key-map? (lambda (node) (let fnrec7056 ((node node)) (let* ((prs (jolt-get node (keyword #f "pairs")))) (let* ((and__25__auto (jolt-n> (jolt-count prs) 0))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec7057 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) prs) and__25__auto))))))) const-key-map?) (let* ((_o$7058 (keyword #f "private")) (_o$7059 #t)) (jolt-hash-map _o$7058 _o$7059))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "all-vals-pure?" (letrec ((all-vals-pure? (lambda (node) (let fnrec7060 ((node node)) (let* ((_a$7062 (var-deref "clojure.core" "every?")) (_a$7063 (lambda (pr) (let fnrec7061 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.inline" "pure?") (jolt-nth pr 1))))) (_a$7064 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$7062 _a$7063 _a$7064)))))) all-vals-pure?) (let* ((_o$7065 (keyword #f "private")) (_o$7066 #t)) (jolt-hash-map _o$7065 _o$7066))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "map-val" (letrec ((map-val (lambda (mapnode k) (let fnrec7067 ((mapnode mapnode) (k k)) (let* ((prs (jolt-get mapnode (keyword #f "pairs"))) (n (jolt-count prs))) (let* ((i 0)) (let loop7068 ((i i)) (if (jolt-n< i n) (let* ((pr (jolt-nth prs i))) (if (jolt= (jolt-get (jolt-nth pr 0) (keyword #f "val")) k) (jolt-nth pr 1) (loop7068 (jolt-inc i)))) (let* ((_o$7069 (keyword #f "op")) (_o$7070 (keyword #f "const")) (_o$7071 (keyword #f "val")) (_o$7072 jolt-nil)) (jolt-hash-map _o$7069 _o$7070 _o$7071 _o$7072)))))))))) map-val) (let* ((_o$7073 (keyword #f "private")) (_o$7074 #t) (_o$7075 (keyword #f "doc")) (_o$7076 "The value IR at scalar key k in a const-key map node, or a nil constant when k\n is absent (struct-eligible literal: a missing key reads nil, like the back end).")) (jolt-hash-map _o$7073 _o$7074 _o$7075 _o$7076))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "lookup-key" (letrec ((lookup-key (lambda (node nm) (let fnrec7077 ((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__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "kw-callee?") f))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-get f (keyword #f "val")) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "get-callee?") f))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 2 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth args 1)) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-get (jolt-nth args 1) (keyword #f "val")) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) jolt-nil))))) lookup-key) (let* ((_o$7078 (keyword #f "private")) (_o$7079 #t) (_o$7080 (keyword #f "doc")) (_o$7081 "If node is a constant-keyword lookup of (:local nm) \x2014; either (:k nm) or\n (get nm :k) \x2014; return the keyword k; else nil.")) (jolt-hash-map _o$7078 _o$7079 _o$7080 _o$7081))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "any-binding-named?" (letrec ((any-binding-named? (lambda (binds nm) (let fnrec7082 ((binds binds) (nm nm)) (let* ((i 0)) (let loop7083 ((i i)) (if (jolt-n< i (jolt-count binds)) (if (jolt= nm (jolt-nth (jolt-nth binds i) 0)) #t (loop7083 (jolt-inc i))) #f))))))) any-binding-named?) (let* ((_o$7084 (keyword #f "private")) (_o$7085 #t)) (jolt-hash-map _o$7084 _o$7085))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "any-name?" (letrec ((any-name? (lambda (names nm) (let fnrec7086 ((names names) (nm nm)) (let* ((i 0)) (let loop7087 ((i i)) (if (jolt-n< i (jolt-count names)) (if (jolt= nm (jolt-nth names i)) #t (loop7087 (jolt-inc i))) #f))))))) any-name?) (let* ((_o$7088 (keyword #f "private")) (_o$7089 #t)) (jolt-hash-map _o$7088 _o$7089))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "local-escapes?" (letrec ((local-escapes? (lambda (node nm) (let fnrec7090 ((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-n> (jolt-count args) 1) (let* ((i 1)) (let loop7091 ((i i)) (if (jolt-n< i (jolt-count args)) (if (jolt-truthy? (local-escapes? (jolt-nth args i) nm)) #t (loop7091 (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__26__auto (local-escapes? (jolt-get node (keyword #f "test")) nm))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (local-escapes? (jolt-get node (keyword #f "then")) nm))) (if (jolt-truthy? or__26__auto) or__26__auto (local-escapes? (jolt-get node (keyword #f "else")) nm))))) (if (jolt= op (keyword #f "do")) (let* ((or__26__auto (let* ((i 0) (ss (jolt-get node (keyword #f "statements")))) (let loop7092 ((i i) (ss ss)) (if (jolt-n< i (jolt-count ss)) (if (jolt-truthy? (local-escapes? (jolt-nth ss i) nm)) #t (loop7092 (jolt-inc i) ss)) #f))))) (if (jolt-truthy? or__26__auto) or__26__auto (local-escapes? (jolt-get node (keyword #f "ret")) nm))) (if (jolt= op (keyword #f "throw")) (local-escapes? (jolt-get node (keyword #f "expr")) nm) (if (jolt= op (keyword #f "invoke")) (let* ((or__26__auto (local-escapes? (jolt-get node (keyword #f "fn")) nm))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop7093 ((i i) (as as)) (if (jolt-n< i (jolt-count as)) (if (jolt-truthy? (local-escapes? (jolt-nth as i) nm)) #t (loop7093 (jolt-inc i) as)) #f))))) (if (jolt= op (keyword #f "vector")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop7094 ((i i) (xs xs)) (if (jolt-n< i (jolt-count xs)) (if (jolt-truthy? (local-escapes? (jolt-nth xs i) nm)) #t (loop7094 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "set")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop7095 ((i i) (xs xs)) (if (jolt-n< i (jolt-count xs)) (if (jolt-truthy? (local-escapes? (jolt-nth xs i) nm)) #t (loop7095 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "map")) (let* ((i 0) (ps (jolt-get node (keyword #f "pairs")))) (let loop7096 ((i i) (ps ps)) (if (jolt-n< i (jolt-count ps)) (if (jolt-truthy? (let* ((or__26__auto (local-escapes? (jolt-nth (jolt-nth ps i) 0) nm))) (if (jolt-truthy? or__26__auto) or__26__auto (local-escapes? (jolt-nth (jolt-nth ps i) 1) nm)))) #t (loop7096 (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__26__auto (let* ((i 0)) (let loop7097 ((i i)) (if (jolt-n< i (jolt-count binds)) (if (jolt-truthy? (local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop7097 (jolt-inc i))) #f))))) (if (jolt-truthy? or__26__auto) or__26__auto (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 loop7098 ((i i) (as as)) (if (jolt-n< i (jolt-count as)) (if (jolt-truthy? (local-escapes? (jolt-nth as i) nm)) #t (loop7098 (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__26__auto (let* ((i 0)) (let loop7099 ((i i)) (if (jolt-n< i (jolt-count binds)) (if (jolt-truthy? (local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop7099 (jolt-inc i))) #f))))) (if (jolt-truthy? or__26__auto) or__26__auto (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 loop7100 ((i i) (ars ars)) (if (jolt-n< i (jolt-count ars)) (let* ((ar (jolt-nth ars i)) (ps (jolt-get ar (keyword #f "params")))) (if (jolt-truthy? (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.inline" "any-name?") ps nm))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= nm (jolt-get ar (keyword #f "rest")))))) #t (if (jolt-truthy? (local-escapes? (jolt-get ar (keyword #f "body")) nm)) #t (loop7100 (jolt-inc i) ars)))) #f))) (if (jolt= op (keyword #f "try")) (let* ((or__26__auto (local-escapes? (jolt-get node (keyword #f "body")) nm))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (let* ((cb (jolt-get node (keyword #f "catch-body")))) (let* ((and__25__auto cb)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt= nm (jolt-get node (keyword #f "catch-sym")))))) (if (jolt-truthy? and__25__auto) (local-escapes? cb nm) and__25__auto)) and__25__auto))))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((f (jolt-get node (keyword #f "finally")))) (let* ((and__25__auto f)) (if (jolt-truthy? and__25__auto) (local-escapes? f nm) and__25__auto))))))) (if (jolt= op (keyword #f "def")) (local-escapes? (jolt-get node (keyword #f "init")) nm) (if (jolt-truthy? (keyword #f "else")) #t jolt-nil)))))))))))))))))))))))))) local-escapes?) (let* ((_o$7101 (keyword #f "private")) (_o$7102 #t) (_o$7103 (keyword #f "doc")) (_o$7104 "Does local nm escape in node \x2014; i.e. is it used anywhere other than as the\n subject of a constant-keyword lookup? Precise over straight-line expression\n ops; conservatively true for loop/fn/try/recur/def (and any rebinding of nm),\n so scalar replacement only fires where the whole use region is simple.\n\n Stays an explicit per-op walk (not the shared reduce-ir-children fold): its\n default is conservatively TRUE, and the lookup-subject and rebinding cases\n inspect node shape beyond child purity \x2014; folding an unhandled op over its\n children would under-report escape and is unsound for scalar replacement.")) (jolt-hash-map _o$7101 _o$7102 _o$7103 _o$7104))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "ctor-shape" (letrec ((ctor-shape (lambda (node) (let fnrec7105 ((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$7110 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "rec-shapes"))) (_a$7111 (let* ((_a$7106 (var-deref "clojure.core" "str")) (_a$7107 (jolt-get f (keyword #f "ns"))) (_a$7108 "/") (_a$7109 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$7106 _a$7107 _a$7108 _a$7109)))) (jolt-get _a$7110 _a$7111)))) (if (jolt-truthy? (let* ((and__25__auto rs)) (if (jolt-truthy? and__25__auto) (let* ((_a$7112 (jolt-count (jolt-get rs (keyword #f "fields")))) (_a$7113 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt= _a$7112 _a$7113)) and__25__auto))) rs jolt-nil)) jolt-nil)) jolt-nil))))) ctor-shape) (let* ((_o$7114 (keyword #f "private")) (_o$7115 #t) (_o$7116 (keyword #f "doc")) (_o$7117 "If node is a record-constructor :invoke (its :fn a :var whose ns/name is a\n registered ctor key, with arg count matching the declared field count), return\n that record's shape entry; else nil.")) (jolt-hash-map _o$7114 _o$7115 _o$7116 _o$7117))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "ctor-all-args-pure?" (letrec ((ctor-all-args-pure? (lambda (node) (let fnrec7118 ((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?) (let* ((_o$7119 (keyword #f "private")) (_o$7120 #t)) (jolt-hash-map _o$7119 _o$7120))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "field-index" (letrec ((field-index (lambda (fields k) (let fnrec7121 ((fields fields) (k k)) (let* ((n (jolt-count fields))) (let* ((i 0)) (let loop7122 ((i i)) (if (jolt-n< i n) (if (jolt= (jolt-nth fields i) k) i (loop7122 (jolt-inc i))) jolt-nil)))))))) field-index) (let* ((_o$7123 (keyword #f "private")) (_o$7124 #t) (_o$7125 (keyword #f "doc")) (_o$7126 "Index of scalar key k in the declared field tuple fields, or nil.")) (jolt-hash-map _o$7123 _o$7124 _o$7125 _o$7126))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "ctor-val" (letrec ((ctor-val (lambda (ctor rs k) (let fnrec7127 ((ctor ctor) (rs rs) (k k)) (let* ((_a$7128 (jolt-get ctor (keyword #f "args"))) (_a$7129 (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k))) (jolt-nth _a$7128 _a$7129)))))) ctor-val) (let* ((_o$7130 (keyword #f "private")) (_o$7131 #t) (_o$7132 (keyword #f "doc")) (_o$7133 "The positional arg IR at declared field k of record ctor node (shape rs). Only\n called for a key known to be a field, so the index is always present.")) (jolt-hash-map _o$7130 _o$7131 _o$7132 _o$7133))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "collect-keys!" (letrec ((collect-keys! (lambda (node nm acc) (let fnrec7134 ((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 fnrec7135 ((c c)) (begin (collect-keys! c nm acc) c))) node))))))) collect-keys!) (let* ((_o$7136 (keyword #f "private")) (_o$7137 #t) (_o$7138 (keyword #f "doc")) (_o$7139 "Accumulate (into atom acc) every constant-keyword lookup key applied to local\n nm in node. The caller has proven (via local-escapes?) that nm appears only as\n a lookup subject and is never rebound, so a uniform recursion suffices: at a\n lookup of nm we record the key and stop (its subject is nm itself); elsewhere\n we recurse into children.")) (jolt-hash-map _o$7136 _o$7137 _o$7138 _o$7139))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "lookups-all-fields?" (letrec ((lookups-all-fields? (lambda (nodes nm fields) (let fnrec7140 ((nodes nodes) (nm nm) (fields fields)) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (node) (let fnrec7141 ((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$7143 (var-deref "clojure.core" "every?")) (_a$7144 (lambda (k) (let fnrec7142 ((k k)) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") fields k)))) (_a$7145 (jolt-invoke (var-deref "clojure.core" "deref") acc))) (jolt-invoke _a$7143 _a$7144 _a$7145)))))) nodes))))) lookups-all-fields?) (let* ((_o$7146 (keyword #f "private")) (_o$7147 #t) (_o$7148 (keyword #f "doc")) (_o$7149 "True if every lookup of nm across nodes uses a declared field in fields \x2014; the\n record-only guard that keeps a :jolt/deftype/unknown-key read (not a positional\n arg) from being folded to the wrong value.")) (jolt-hash-map _o$7146 _o$7147 _o$7148 _o$7149))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "src-val" (letrec ((src-val (lambda (src k) (let fnrec7150 ((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) (let* ((_o$7151 (keyword #f "private")) (_o$7152 #t) (_o$7153 (keyword #f "doc")) (_o$7154 "Field value at k from a foldable struct source \x2014; a const-key map (absent key\n -> nil, struct-map semantics) or a record ctor (k is always a declared field\n here, guaranteed by lookups-all-fields?).")) (jolt-hash-map _o$7151 _o$7152 _o$7153 _o$7154))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "subst-lookup" (letrec ((subst-lookup (lambda (node nm src) (let fnrec7155 ((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 fnrec7156 ((c c)) (subst-lookup c nm src))) node))))))) subst-lookup) (let* ((_o$7157 (keyword #f "private")) (_o$7158 #t) (_o$7159 (keyword #f "doc")) (_o$7160 "Replace every (:k nm)/(get nm :k) in node with the source value at k. The\n caller guarantees (via local-escapes?) that nm is never rebound here and\n appears only as a lookup subject, so no shadowing logic is needed.")) (jolt-hash-map _o$7157 _o$7158 _o$7159 _o$7160))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "fold-kw-literal" (letrec ((fold-kw-literal (lambda (node) (let fnrec7161 ((node node)) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "kw-callee?") f))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count args)) and__25__auto))) (let* ((m (jolt-nth args 0)) (k (jolt-get f (keyword #f "val")))) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "map") (jolt-get m (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") m))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") m) and__25__auto)) and__25__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__25__auto rs)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") m))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k) and__25__auto)) and__25__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) (let* ((_o$7162 (keyword #f "private")) (_o$7163 #t) (_o$7164 (keyword #f "doc")) (_o$7165 "(a) (:k <source>) -> the value at k. <source> is a const-key pure map\n ((:k {:k a ..}) -> a) or a pure record ctor ((:k (->Rec a ..)) -> the arg for\n field k). Siblings are duplicated/discarded, so all must be pure; a record\n lookup folds only for a declared field.")) (jolt-hash-map _o$7162 _o$7163 _o$7164 _o$7165))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "elim-let-structs" (letrec ((elim-let-structs (lambda (node) (let fnrec7166 ((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 loop7167 ((i i)) (if (jolt-n< i n) (let* ((b (jolt-nth binds i)) (nm (jolt-nth b 0)) (init (jolt-nth b 1)) (ismap (let* ((and__25__auto (jolt= (keyword #f "map") (jolt-get init (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") init))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") init) and__25__auto)) and__25__auto))) (rs (if (jolt-not ismap) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") init) jolt-nil)) (isrec (let* ((and__25__auto rs)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") init) and__25__auto)))) (if (jolt-truthy? (let* ((and__25__auto (let* ((or__26__auto ismap)) (if (jolt-truthy? or__26__auto) or__26__auto isrec)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__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__25__auto) (let* ((and__25__auto (jolt-not (let* ((j (jolt-inc i))) (let loop7168 ((j j)) (if (jolt-n< j n) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") (jolt-nth (jolt-nth binds j) 1) nm)) #t (loop7168 (jolt-inc j))) #f)))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") body nm)))) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto ismap)) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((_a$7173 (var-deref "jolt.passes.inline" "lookups-all-fields?")) (_a$7174 (jolt-conj (let* ((_a$7170 (var-deref "clojure.core" "mapv")) (_a$7171 (lambda (bb) (let fnrec7169 ((bb bb)) (jolt-nth bb 1)))) (_a$7172 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$7170 _a$7171 _a$7172)) body)) (_a$7175 nm) (_a$7176 (jolt-get rs (keyword #f "fields")))) (jolt-invoke _a$7173 _a$7174 _a$7175 _a$7176)))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((head (jolt-invoke (var-deref "clojure.core" "subvec") binds 0 i)) (tail (let* ((_a$7180 (var-deref "clojure.core" "mapv")) (_a$7181 (lambda (bb) (let fnrec7177 ((bb bb)) (let* ((_o$7178 (jolt-nth bb 0)) (_o$7179 (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") (jolt-nth bb 1) nm init))) (jolt-vector _o$7178 _o$7179))))) (_a$7182 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$7180 _a$7181 _a$7182))) (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)))) (loop7167 (jolt-inc i)))) node)))))))) elim-let-structs) (let* ((_o$7183 (keyword #f "private")) (_o$7184 #t) (_o$7185 (keyword #f "doc")) (_o$7186 "(b) Drop the first non-escaping let binding whose init is a foldable struct\n source \x2014; a pure const-key map literal or a pure record ctor \x2014; substituting its\n field reads into the remaining bindings and body. Fixpoint re-runs us for the\n rest, so one elimination per call keeps it simple. For a record every lookup\n of the binding must hit a declared field, else we keep the allocation.")) (jolt-hash-map _o$7183 _o$7184 _o$7185 _o$7186))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "scalar-replace" (letrec ((scalar-replace (lambda (node) (let fnrec7187 ((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) (let* ((_o$7188 (keyword #f "doc")) (_o$7189 "Bottom-up: scalar-replace children, then apply (a) at invokes / (b) at lets.")) (jolt-hash-map _o$7188 _o$7189))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "velem" (letrec ((velem (lambda (t) (let fnrec6415 ((t t)) (jolt-get t (keyword #f "vec")))))) velem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "selem" (letrec ((selem (lambda (t) (let fnrec6416 ((t t)) (jolt-get t (keyword #f "set")))))) selem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "sfields" (letrec ((sfields (lambda (t) (let fnrec6417 ((t t)) (jolt-get t (keyword #f "struct")))))) sfields)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "vec-type?" (letrec ((vec-type? (lambda (t) (let fnrec6418 ((t t)) (jolt-some? (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") t)))))) vec-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "set-type?" (letrec ((set-type? (lambda (t) (let fnrec6419 ((t t)) (jolt-some? (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") t)))))) set-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "struct-type?" (letrec ((struct-type? (lambda (t) (let fnrec6420 ((t t)) (jolt-some? (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t)))))) struct-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "mk-vec" (letrec ((mk-vec (lambda (t) (let fnrec6421 ((t t)) (let* ((_o$6422 (keyword #f "vec")) (_o$6423 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$6422 _o$6423)))))) mk-vec)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "mk-set" (letrec ((mk-set (lambda (t) (let fnrec6424 ((t t)) (let* ((_o$6425 (keyword #f "set")) (_o$6426 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$6425 _o$6426)))))) mk-set)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "mk-struct" (letrec ((mk-struct (lambda (fs) (let fnrec6427 ((fs fs)) (let* ((_o$6428 (keyword #f "struct")) (_o$6429 fs)) (jolt-hash-map _o$6428 _o$6429)))))) mk-struct)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "union-cap" 4))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "scalar-t?" (letrec ((scalar-t? (lambda (t) (let fnrec6430 ((t t)) (let* ((or__26__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= t (keyword #f "phm")))))))))))))) scalar-t?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "union-type?" (letrec ((union-type? (lambda (t) (let fnrec6431 ((t t)) (jolt-some? (jolt-get t (keyword #f "union"))))))) union-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "umembers" (letrec ((umembers (lambda (t) (let fnrec6432 ((t t)) (jolt-get t (keyword #f "union")))))) umembers)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.lattice" "union-of" (letrec ((union-of (lambda (ts) (let fnrec6433 ((ts ts)) (let* ((flat (let* ((_a$6435 (lambda (acc t) (let fnrec6434 ((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$6436 (jolt-hash-set)) (_a$6437 ts)) (jolt-reduce _a$6435 _a$6436 _a$6437)))) (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-n> (jolt-count flat) (var-deref "jolt.passes.types.lattice" "union-cap")) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (let* ((_o$6438 (keyword #f "union")) (_o$6439 flat)) (jolt-hash-map _o$6438 _o$6439)) jolt-nil)))))))))) union-of) (let* ((_o$6440 (keyword #f "doc")) (_o$6441 "Normalize a seq of member types into a lattice value: flatten nested unions,\n keep only scalars (any non-scalar member collapses the whole thing to :any,\n the conservative top), then return the lone member if one, {:union #{...}}\n for 2..cap distinct scalars, or :any past the cap.")) (jolt-hash-map _o$6440 _o$6441))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types.lattice" "join-t"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.lattice" "merge-fields" (letrec ((merge-fields (lambda (fa fb) (let fnrec6442 ((fa fa) (fb fb)) (let* ((m1 (let* ((_a$6447 (lambda (m k) (let fnrec6443 ((m m) (k k)) (jolt-assoc m k (let* ((_a$6444 (var-deref "jolt.passes.types.lattice" "join-t")) (_a$6445 (jolt-get fa k (keyword #f "any"))) (_a$6446 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$6444 _a$6445 _a$6446)))))) (_a$6448 (jolt-hash-map)) (_a$6449 (jolt-keys fa))) (jolt-reduce _a$6447 _a$6448 _a$6449)))) (let* ((_a$6454 (lambda (m k) (let fnrec6450 ((m m) (k k)) (if (jolt-truthy? (jolt-get m k)) m (jolt-assoc m k (let* ((_a$6451 (var-deref "jolt.passes.types.lattice" "join-t")) (_a$6452 (jolt-get fa k (keyword #f "any"))) (_a$6453 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$6451 _a$6452 _a$6453))))))) (_a$6455 m1) (_a$6456 (jolt-keys fb))) (jolt-reduce _a$6454 _a$6455 _a$6456))))))) merge-fields) (let* ((_o$6457 (keyword #f "doc")) (_o$6458 "Per-field join of two field maps (a key in only one side joins with :any).")) (jolt-hash-map _o$6457 _o$6458))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "join-t" (letrec ((join-t (lambda (a b) (let fnrec6459 ((a a) (b b)) (if (jolt= a b) a (if (jolt-nil? a) b (if (jolt-nil? b) a (if (let* ((or__26__auto (jolt= a (keyword #f "nil")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= b (keyword #f "nil")))) (let* ((o (if (jolt= a (keyword #f "nil")) b a))) (if (jolt= o (keyword #f "nil")) (keyword #f "nil") (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") o)) (jolt-assoc o (keyword #f "nilable") #t) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))) (if (let* ((or__26__auto (jolt= a (keyword #f "double")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= b (keyword #f "double")))) (let* ((_a$6460 (if (jolt= a (keyword #f "double")) (keyword #f "num") a)) (_a$6461 (if (jolt= b (keyword #f "double")) (keyword #f "num") b))) (join-t _a$6460 _a$6461)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") a))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") b) and__25__auto))) (let* ((merged (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") (let* ((_a$6462 (var-deref "jolt.passes.types.lattice" "merge-fields")) (_a$6463 (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") a)) (_a$6464 (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") b))) (jolt-invoke _a$6462 _a$6463 _a$6464)))) (merged (if (jolt-truthy? (let* ((and__25__auto (jolt-get a (keyword #f "shape")))) (if (jolt-truthy? and__25__auto) (let* ((_a$6465 (jolt-get a (keyword #f "shape"))) (_a$6466 (jolt-get b (keyword #f "shape")))) (jolt= _a$6465 _a$6466)) and__25__auto))) (jolt-assoc merged (keyword #f "shape") (jolt-get a (keyword #f "shape"))) merged)) (merged (if (jolt-truthy? (let* ((and__25__auto (jolt-get a (keyword #f "type")))) (if (jolt-truthy? and__25__auto) (let* ((_a$6467 (jolt-get a (keyword #f "type"))) (_a$6468 (jolt-get b (keyword #f "type")))) (jolt= _a$6467 _a$6468)) and__25__auto))) (jolt-assoc merged (keyword #f "type") (jolt-get a (keyword #f "type"))) merged)) (merged (if (jolt-truthy? (let* ((or__26__auto (jolt-get a (keyword #f "nilable")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-get b (keyword #f "nilable"))))) (jolt-assoc merged (keyword #f "nilable") #t) merged))) merged) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") a))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") b) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (let* ((_a$6469 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") a)) (_a$6470 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") b))) (join-t _a$6469 _a$6470))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") a))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") b) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-set") (let* ((_a$6471 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") a)) (_a$6472 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") b))) (join-t _a$6471 _a$6472))) (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__25__auto ma)) (if (jolt-truthy? and__25__auto) mb and__25__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.lattice" "join" (letrec ((join (lambda (a b) (let fnrec6473 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join-t") a b))))) join)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "type-depth" 4))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "cap" (letrec ((cap (lambda (t d) (let fnrec6474 ((t t) (d d)) (if (jolt-n<= d 0) (if (jolt-truthy? (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__26__auto) or__26__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$6478 (lambda (m k) (let fnrec6475 ((m m) (k k)) (jolt-assoc m k (let* ((_a$6476 (jolt-get (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t) k)) (_a$6477 (jolt-dec d))) (cap _a$6476 _a$6477)))))) (_a$6479 (jolt-hash-map)) (_a$6480 (jolt-keys (jolt-invoke (var-deref "jolt.passes.types.lattice" "sfields") t)))) (jolt-reduce _a$6478 _a$6479 _a$6480)))) (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$6481 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") t)) (_a$6482 (jolt-dec d))) (cap _a$6481 _a$6482))) (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$6483 (jolt-invoke (var-deref "jolt.passes.types.lattice" "selem") t)) (_a$6484 (jolt-dec d))) (cap _a$6483 _a$6484))) (if (jolt-truthy? (keyword #f "else")) t jolt-nil))))))))) cap)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "struct-safe?" (letrec ((struct-safe? (lambda (t) (let fnrec6485 ((t t)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))))) struct-safe?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "field-type" (letrec ((field-type (lambda (t k) (let fnrec6486 ((t t) (k k)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-get t (keyword #f "nilable"))) and__25__auto))) (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.lattice" "nilable?" (letrec ((nilable? (lambda (t) (let fnrec6487 ((t t)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") t))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-get t (keyword #f "nilable")))) (if (jolt-truthy? and__25__auto) #t and__25__auto)) and__25__auto)))))) nilable?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "strip-nilable" (letrec ((strip-nilable (lambda (t) (let fnrec6488 ((t t)) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "map?") t))) (if (jolt-truthy? and__25__auto) (jolt-get t (keyword #f "nilable")) and__25__auto))) (jolt-dissoc t (keyword #f "nilable")) t))))) strip-nilable)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.lattice" "shape-order" (letrec ((shape-order (lambda (ks) (let fnrec6489 ((ks ks)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "sort") (lambda (a b) (let fnrec6490 ((a a) (b b)) (let* ((_a$6491 (var-deref "clojure.core" "compare")) (_a$6492 (jolt-invoke (var-deref "clojure.core" "str") a)) (_a$6493 (jolt-invoke (var-deref "clojure.core" "str") b))) (jolt-invoke _a$6491 _a$6492 _a$6493)))) ks)))))) shape-order) (let* ((_o$6494 (keyword #f "doc")) (_o$6495 "Canonical key order for a shape: keys sorted by their string form, so two\n literals with the same keys in any order intern to the same shape.")) (jolt-hash-map _o$6494 _o$6495))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "type-shape" (letrec ((type-shape (lambda (t) (let fnrec6496 ((t t)) (jolt-get t (keyword #f "shape")))))) type-shape)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "mark-struct" (letrec ((mark-struct (lambda (node t) (let fnrec6497 ((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.lattice" "truthy-type?" (letrec ((truthy-type? (lambda (t) (let fnrec6498 ((t t)) (let* ((or__26__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "double")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-get t (keyword #f "nilable"))) and__25__auto)))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t))))))))))))))))))))) truthy-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "num-ret-fns" (let* ((_o$6499 "+") (_o$6500 "-") (_o$6501 "*") (_o$6502 "/") (_o$6503 "inc") (_o$6504 "dec") (_o$6505 "mod") (_o$6506 "rem") (_o$6507 "quot") (_o$6508 "min") (_o$6509 "max") (_o$6510 "abs") (_o$6511 "bit-and") (_o$6512 "bit-or") (_o$6513 "bit-xor") (_o$6514 "count")) (jolt-hash-set _o$6499 _o$6500 _o$6501 _o$6502 _o$6503 _o$6504 _o$6505 _o$6506 _o$6507 _o$6508 _o$6509 _o$6510 _o$6511 _o$6512 _o$6513 _o$6514))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.lattice" "vector-ret-fns" (let* ((_o$6515 "vec") (_o$6516 "vector") (_o$6517 "mapv") (_o$6518 "filterv") (_o$6519 "subvec")) (jolt-hash-set _o$6515 _o$6516 _o$6517 _o$6518 _o$6519))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "not-number?" (letrec ((not-number? (lambda (t) (let fnrec6520 ((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__26__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? or__26__auto) or__26__auto (let* ((or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") t))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "set-type?") t)))))))))))))))) not-number?) (let* ((_o$6521 (keyword #f "private")) (_o$6522 #t)) (jolt-hash-map _o$6521 _o$6522))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "not-seqable?" (letrec ((not-seqable? (lambda (t) (let fnrec6523 ((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__26__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= t (keyword #f "kw"))))))))) not-seqable?) (let* ((_o$6524 (keyword #f "private")) (_o$6525 #t)) (jolt-hash-map _o$6524 _o$6525))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types.check" "not-callable?" (letrec ((not-callable? (lambda (t) (let fnrec6526 ((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__26__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= t (keyword #f "str"))))))))) not-callable?)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "num-ops" (let* ((_o$6527 "+") (_o$6528 "-") (_o$6529 "*") (_o$6530 "/") (_o$6531 "inc") (_o$6532 "dec") (_o$6533 "mod") (_o$6534 "rem") (_o$6535 "quot") (_o$6536 "min") (_o$6537 "max") (_o$6538 "abs") (_o$6539 "bit-and") (_o$6540 "bit-or") (_o$6541 "bit-xor") (_o$6542 "bit-not") (_o$6543 "bit-shift-left") (_o$6544 "bit-shift-right")) (jolt-hash-set _o$6527 _o$6528 _o$6529 _o$6530 _o$6531 _o$6532 _o$6533 _o$6534 _o$6535 _o$6536 _o$6537 _o$6538 _o$6539 _o$6540 _o$6541 _o$6542 _o$6543 _o$6544)) (let* ((_o$6545 (keyword #f "private")) (_o$6546 #t)) (jolt-hash-map _o$6545 _o$6546))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "seq-ops" (let* ((_o$6547 "count") (_o$6548 "first") (_o$6549 "rest") (_o$6550 "next") (_o$6551 "seq") (_o$6552 "nth")) (jolt-hash-set _o$6547 _o$6548 _o$6549 _o$6550 _o$6551 _o$6552)) (let* ((_o$6553 (keyword #f "private")) (_o$6554 #t)) (jolt-hash-map _o$6553 _o$6554))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "type-name" (letrec ((type-name (lambda (t) (let fnrec6555 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (let* ((_a$6557 (lambda (s m) (let fnrec6556 ((s s) (m m)) (if (jolt= s "") (type-name m) (jolt-invoke (var-deref "clojure.core" "str") s " or " (type-name m)))))) (_a$6558 "") (_a$6559 (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t))) (jolt-reduce _a$6557 _a$6558 _a$6559)) (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) (let* ((_o$6560 (keyword #f "doc")) (_o$6561 "Render an inferred type for an error message.")) (jolt-hash-map _o$6560 _o$6561))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "check-invoke" (letrec ((check-invoke (lambda (cn args arg-types pos env) (let fnrec6562 ((cn cn) (args args) (arg-types arg-types) (pos pos) (env env)) (if (jolt-contains? (var-deref "jolt.passes.types.check" "num-ops") cn) (let* ((_a$6585 (lambda (_ i) (let fnrec6563 ((_ _) (i i)) (begin (let* ((t (jolt-nth arg-types i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.check" "not-number?") t)) (let* ((_a$6581 (var-deref "clojure.core" "swap!")) (_a$6582 (jolt-get env (keyword #f "diags"))) (_a$6583 jolt-conj) (_a$6584 (let* ((_o$6571 (keyword #f "op")) (_o$6572 cn) (_o$6573 (keyword #f "argpos")) (_o$6574 i) (_o$6575 (keyword #f "type")) (_o$6576 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") t)) (_o$6577 (keyword #f "pos")) (_o$6578 pos) (_o$6579 (keyword #f "msg")) (_o$6580 (let* ((_a$6564 (var-deref "clojure.core" "str")) (_a$6565 "`") (_a$6566 cn) (_a$6567 "` requires a number, but argument ") (_a$6568 (jolt-inc i)) (_a$6569 " is ") (_a$6570 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") t))) (jolt-invoke _a$6564 _a$6565 _a$6566 _a$6567 _a$6568 _a$6569 _a$6570)))) (jolt-hash-map _o$6571 _o$6572 _o$6573 _o$6574 _o$6575 _o$6576 _o$6577 _o$6578 _o$6579 _o$6580)))) (jolt-invoke _a$6581 _a$6582 _a$6583 _a$6584)) jolt-nil)) jolt-nil)))) (_a$6586 jolt-nil) (_a$6587 (jolt-range (jolt-count args)))) (jolt-reduce _a$6585 _a$6586 _a$6587)) (if (let* ((and__25__auto (jolt-contains? (var-deref "jolt.passes.types.check" "seq-ops") cn))) (if (jolt-truthy? and__25__auto) (jolt-n> (jolt-count args) 0) and__25__auto)) (let* ((t (jolt-nth arg-types 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.check" "not-seqable?") t)) (let* ((_a$6605 (var-deref "clojure.core" "swap!")) (_a$6606 (jolt-get env (keyword #f "diags"))) (_a$6607 jolt-conj) (_a$6608 (let* ((_o$6595 (keyword #f "op")) (_o$6596 cn) (_o$6597 (keyword #f "argpos")) (_o$6598 0) (_o$6599 (keyword #f "type")) (_o$6600 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") t)) (_o$6601 (keyword #f "pos")) (_o$6602 pos) (_o$6603 (keyword #f "msg")) (_o$6604 (let* ((_a$6588 (var-deref "clojure.core" "str")) (_a$6589 "`") (_a$6590 cn) (_a$6591 "` requires ") (_a$6592 (if (jolt= cn "count") "a countable collection" "a seqable")) (_a$6593 ", but argument 1 is ") (_a$6594 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") t))) (jolt-invoke _a$6588 _a$6589 _a$6590 _a$6591 _a$6592 _a$6593 _a$6594)))) (jolt-hash-map _o$6595 _o$6596 _o$6597 _o$6598 _o$6599 _o$6600 _o$6601 _o$6602 _o$6603 _o$6604)))) (jolt-invoke _a$6605 _a$6606 _a$6607 _a$6608)) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))) check-invoke) (let* ((_o$6609 (keyword #f "doc")) (_o$6610 "If node is a core-op call whose argument type is provably in the error domain,\n conj a diagnostic into env's diags cell. arg-types is the vector of inferred\n argument types; pos is the call form's source offset, carried into each\n diagnostic.")) (jolt-hash-map _o$6609 _o$6610))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types.check" "register-user-fn!" (letrec ((register-user-fn! (lambda (node env) (let fnrec6611 ((node node) (env env)) (let* ((init (jolt-get node (keyword #f "init"))) (m (jolt-get node (keyword #f "meta"))) (redefable (let* ((and__25__auto m)) (if (jolt-truthy? and__25__auto) (let* ((or__26__auto (jolt-get m (keyword #f "redef")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-get m (keyword #f "dynamic")))) and__25__auto)))) (if (let* ((and__25__auto (jolt-not redefable))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get init (keyword #f "op"))) and__25__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$6622 (var-deref "clojure.core" "swap!")) (_a$6623 (jolt-get env (keyword #f "user-sigs"))) (_a$6624 jolt-assoc) (_a$6625 (let* ((_a$6612 (var-deref "clojure.core" "str")) (_a$6613 (jolt-get node (keyword #f "ns"))) (_a$6614 "/") (_a$6615 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$6612 _a$6613 _a$6614 _a$6615))) (_a$6626 (let* ((_o$6616 (keyword #f "name")) (_o$6617 (jolt-get node (keyword #f "name"))) (_o$6618 (keyword #f "params")) (_o$6619 (jolt-get ar (keyword #f "params"))) (_o$6620 (keyword #f "body")) (_o$6621 (jolt-get ar (keyword #f "body")))) (jolt-hash-map _o$6616 _o$6617 _o$6618 _o$6619 _o$6620 _o$6621)))) (jolt-invoke _a$6622 _a$6623 _a$6624 _a$6625 _a$6626)) jolt-nil)) jolt-nil)) jolt-nil)))))) register-user-fn!) (let* ((_o$6627 (keyword #f "doc")) (_o$6628 "Record a (def name (fn [params] body)) \x2014; single fixed arity, not redefinable \x2014;\n for later user-fn call checking. Redefinable/dynamic and multi/variadic fns are\n skipped (their body is not a stable requirement).")) (jolt-hash-map _o$6627 _o$6628))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "config-box" (jolt-invoke (var-deref "clojure.core" "atom") (let* ((_o$5571 (keyword #f "rtenv")) (_o$5572 (jolt-hash-map)) (_o$5573 (keyword #f "vtypes")) (_o$5574 (jolt-hash-map)) (_o$5575 (keyword #f "record-shapes")) (_o$5576 (jolt-hash-map)) (_o$5577 (keyword #f "protocol-methods")) (_o$5578 (jolt-hash-map)) (_o$5579 (keyword #f "map-shapes?")) (_o$5580 #f)) (jolt-hash-map _o$5571 _o$5572 _o$5573 _o$5574 _o$5575 _o$5576 _o$5577 _o$5578 _o$5579 _o$5580))) (let* ((_o$5581 (keyword #f "private")) (_o$5582 #t)) (jolt-hash-map _o$5581 _o$5582))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "escapes-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set)) (let* ((_o$5583 (keyword #f "private")) (_o$5584 #t)) (jolt-hash-map _o$5583 _o$5584))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "user-sig-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (let* ((_o$5585 (keyword #f "private")) (_o$5586 #t)) (jolt-hash-map _o$5585 _o$5586))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "last-diags-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector)) (let* ((_o$5587 (keyword #f "private")) (_o$5588 #t)) (jolt-hash-map _o$5587 _o$5588))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "check-mode-box" (jolt-invoke (var-deref "clojure.core" "atom") (let* ((_o$5589 (keyword #f "on")) (_o$5590 #f) (_o$5591 (keyword #f "strict")) (_o$5592 #f)) (jolt-hash-map _o$5589 _o$5590 _o$5591 _o$5592))) (let* ((_o$5593 (keyword #f "private")) (_o$5594 #t)) (jolt-hash-map _o$5593 _o$5594))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "pm-rets-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (let* ((_o$5595 (keyword #f "private")) (_o$5596 #t)) (jolt-hash-map _o$5595 _o$5596))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "mk-env" (letrec ((mk-env (lambda (checking? strict?) (let fnrec5597 ((checking? checking?) (strict? strict?)) (let* ((c (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "config-box")))) (let* ((_o$5598 (keyword #f "rtenv")) (_o$5599 (jolt-get c (keyword #f "rtenv"))) (_o$5600 (keyword #f "vtypes")) (_o$5601 (jolt-get c (keyword #f "vtypes"))) (_o$5602 (keyword #f "record-shapes")) (_o$5603 (jolt-get c (keyword #f "record-shapes"))) (_o$5604 (keyword #f "protocol-methods")) (_o$5605 (jolt-get c (keyword #f "protocol-methods"))) (_o$5606 (keyword #f "map-shapes?")) (_o$5607 (jolt-get c (keyword #f "map-shapes?"))) (_o$5608 (keyword #f "checking?")) (_o$5609 checking?) (_o$5610 (keyword #f "strict?")) (_o$5611 strict?) (_o$5612 (keyword #f "diags")) (_o$5613 (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (_o$5614 (keyword #f "calls")) (_o$5615 (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (_o$5616 (keyword #f "checking-set")) (_o$5617 (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set))) (_o$5618 (keyword #f "diag-memo")) (_o$5619 (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map))) (_o$5620 (keyword #f "escapes")) (_o$5621 (var-deref "jolt.passes.types" "escapes-box")) (_o$5622 (keyword #f "user-sigs")) (_o$5623 (var-deref "jolt.passes.types" "user-sig-box"))) (jolt-hash-map _o$5598 _o$5599 _o$5600 _o$5601 _o$5602 _o$5603 _o$5604 _o$5605 _o$5606 _o$5607 _o$5608 _o$5609 _o$5610 _o$5611 _o$5612 _o$5613 _o$5614 _o$5615 _o$5616 _o$5617 _o$5618 _o$5619 _o$5620 _o$5621 _o$5622 _o$5623))))))) mk-env) (let* ((_o$5624 (keyword #f "private")) (_o$5625 #t)) (jolt-hash-map _o$5624 _o$5625))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "record-type-from-entry"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "field-type-from-tag" (letrec ((field-type-from-tag (lambda (tag depth shapes) (let fnrec5626 ((tag tag) (depth depth) (shapes shapes)) (if (let* ((or__26__auto (jolt-nil? tag))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-n<= depth 0))) (keyword #f "any") (if (jolt= tag "num") (keyword #f "num") (if (jolt= tag "double") (keyword #f "double") (if (jolt-truthy? (keyword #f "else")) (let* ((e (jolt-get shapes tag))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e depth shapes) (keyword #f "any"))) jolt-nil)))))))) field-type-from-tag) (let* ((_o$5627 (keyword #f "private")) (_o$5628 #t)) (jolt-hash-map _o$5627 _o$5628))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "record-type-from-entry" (letrec ((record-type-from-entry (lambda (rs depth shapes) (let fnrec5629 ((rs rs) (depth depth) (shapes shapes)) (let* ((fields (jolt-get rs (keyword #f "fields"))) (tags (jolt-get rs (keyword #f "tags"))) (fmap (let* ((_a$5638 (lambda (m i) (let fnrec5630 ((m m) (i i)) (let* ((_a$5635 m) (_a$5636 (jolt-nth fields i)) (_a$5637 (let* ((_a$5631 (var-deref "jolt.passes.types" "field-type-from-tag")) (_a$5632 (if (jolt-truthy? tags) (jolt-nth tags i) jolt-nil)) (_a$5633 (jolt-dec depth)) (_a$5634 shapes)) (jolt-invoke _a$5631 _a$5632 _a$5633 _a$5634)))) (jolt-assoc _a$5635 _a$5636 _a$5637))))) (_a$5639 (jolt-hash-map)) (_a$5640 (jolt-range (jolt-count fields)))) (jolt-reduce _a$5638 _a$5639 _a$5640)))) (let* ((_a$5641 (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-struct") fmap)) (_a$5642 (keyword #f "shape")) (_a$5643 (jolt-invoke (var-deref "clojure.core" "vec") fields)) (_a$5644 (keyword #f "type")) (_a$5645 (jolt-get rs (keyword #f "type")))) (jolt-assoc _a$5641 _a$5642 _a$5643 _a$5644 _a$5645))))))) record-type-from-entry) (let* ((_o$5646 (keyword #f "private")) (_o$5647 #t)) (jolt-hash-map _o$5646 _o$5647))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "elem-fns" (let* ((_o$5648 "rand-nth") (_o$5649 "first") (_o$5650 "peek") (_o$5651 "last") (_o$5652 "nth") (_o$5653 "fnext") (_o$5654 "second")) (jolt-hash-set _o$5648 _o$5649 _o$5650 _o$5651 _o$5652 _o$5653 _o$5654)) (let* ((_o$5655 (keyword #f "private")) (_o$5656 #t)) (jolt-hash-map _o$5655 _o$5656))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "check-user-call"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "var-key" (letrec ((var-key (lambda (fnode) (let fnrec5657 ((fnode fnode)) (let* ((_a$5658 (var-deref "clojure.core" "str")) (_a$5659 (jolt-get fnode (keyword #f "ns"))) (_a$5660 "/") (_a$5661 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$5658 _a$5659 _a$5660 _a$5661)))))) var-key) (let* ((_o$5662 (keyword #f "private")) (_o$5663 #t)) (jolt-hash-map _o$5662 _o$5663))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "call-ret-type" (letrec ((call-ret-type (lambda (fnode env) (let fnrec5664 ((fnode fnode) (env env)) (let* ((op (jolt-get fnode (keyword #f "op"))) (shapes (jolt-get env (keyword #f "record-shapes")))) (if (jolt= op (keyword #f "var")) (let* ((rs (jolt-get shapes (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)))) (if (jolt-truthy? rs) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") rs (var-deref "jolt.passes.types.lattice" "type-depth") shapes) (let* ((r (let* ((_a$5665 (jolt-get env (keyword #f "rtenv"))) (_a$5666 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$5665 _a$5666)))) (if (jolt-truthy? r) r (let* ((pm (let* ((_a$5667 (jolt-get env (keyword #f "protocol-methods"))) (_a$5668 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$5667 _a$5668))) (pmr (if (jolt-truthy? pm) (let* ((_a$5673 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "pm-rets-box"))) (_a$5674 (let* ((_a$5669 (var-deref "clojure.core" "str")) (_a$5670 (jolt-nth pm 0)) (_a$5671 "/") (_a$5672 (jolt-nth pm 1))) (jolt-invoke _a$5669 _a$5670 _a$5671 _a$5672)))) (jolt-get _a$5673 _a$5674)) jolt-nil))) (if (jolt-truthy? (let* ((and__25__auto pmr)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "not=") pmr (keyword #f "any")) and__25__auto))) pmr (let* ((nm (let* ((and__25__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (jolt-get fnode (keyword #f "name")) and__25__auto)))) (if (jolt-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) (let* ((_o$5675 (keyword #f "private")) (_o$5676 #t)) (jolt-hash-map _o$5675 _o$5676))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "fold-preds" (let* ((_o$5677 "number?") (_o$5678 "string?") (_o$5679 "keyword?") (_o$5680 "record?") (_o$5681 "nil?") (_o$5682 "some?")) (jolt-hash-set _o$5677 _o$5678 _o$5679 _o$5680 _o$5681 _o$5682)) (let* ((_o$5683 (keyword #f "private")) (_o$5684 #t)) (jolt-hash-map _o$5683 _o$5684))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "record-t?" (letrec ((record-t? (lambda (t) (let fnrec5685 ((t t)) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") t))) (if (jolt-truthy? and__25__auto) (jolt-some? (jolt-get t (keyword #f "type"))) and__25__auto)))))) record-t?) (let* ((_o$5686 (keyword #f "private")) (_o$5687 #t)) (jolt-hash-map _o$5686 _o$5687))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "pred-on" (letrec ((pred-on (lambda (pname t) (let fnrec5688 ((pname pname) (t t)) (if (let* ((or__26__auto (jolt= t (keyword #f "any")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= t (keyword #f "truthy")))) jolt-nil (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "nilable?") t)) jolt-nil (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "union-type?") t)) (let* ((vs (let* ((_a$5690 (lambda (m) (let fnrec5689 ((m m)) (pred-on pname m)))) (_a$5691 (jolt-invoke (var-deref "jolt.passes.types.lattice" "umembers") t))) (jolt-map _a$5690 _a$5691)))) (if (jolt-truthy? (let* ((and__25__auto (jolt-seq vs))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-not (jolt-nil? (jolt-first vs))))) (if (jolt-truthy? and__25__auto) (jolt-apply jolt= vs) and__25__auto)) and__25__auto))) (jolt-first vs) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) (let* ((G__136 pname)) (if (jolt= G__136 "number?") (let* ((or__26__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= t (keyword #f "double")))) (if (jolt= G__136 "string?") (jolt= t (keyword #f "str")) (if (jolt= G__136 "keyword?") (jolt= t (keyword #f "kw")) (if (jolt= G__136 "record?") (jolt-invoke (var-deref "jolt.passes.types" "record-t?") t) (if (jolt= G__136 "nil?") #f (if (jolt= G__136 "some?") #t jolt-nil))))))) jolt-nil)))))))) pred-on) (let* ((_o$5692 (keyword #f "private")) (_o$5693 #t)) (jolt-hash-map _o$5692 _o$5693))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "pure-node?" (letrec ((pure-node? (lambda (n) (let fnrec5694 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__26__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= op (keyword #f "local"))))))))) pure-node?) (let* ((_o$5695 (keyword #f "private")) (_o$5696 #t)) (jolt-hash-map _o$5695 _o$5696))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "test-local" (letrec ((test-local (lambda (test pred-name) (let fnrec5697 ((test test) (pred-name pred-name)) (if (jolt= (keyword #f "invoke") (jolt-get test (keyword #f "op"))) (let* ((f (jolt-get test (keyword #f "fn"))) (args (jolt-get test (keyword #f "args")))) (if (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= pred-name (jolt-get f (keyword #f "name"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto)) (jolt-get (jolt-nth args 0) (keyword #f "name")) jolt-nil)) jolt-nil))))) test-local) (let* ((_o$5698 (keyword #f "private")) (_o$5699 #t)) (jolt-hash-map _o$5698 _o$5699))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "narrow-nonnil" (letrec ((narrow-nonnil (lambda (tenv nm) (let fnrec5700 ((tenv tenv) (nm nm)) (let* ((t (jolt-get tenv nm))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.lattice" "nilable?") t)) (jolt-assoc tenv nm (jolt-invoke (var-deref "jolt.passes.types.lattice" "strip-nilable") t)) tenv)))))) narrow-nonnil) (let* ((_o$5701 (keyword #f "private")) (_o$5702 #t)) (jolt-hash-map _o$5701 _o$5702))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "if-narrow" (letrec ((if-narrow (lambda (test tenv) (let fnrec5703 ((test test) (tenv tenv)) (let* ((somev (jolt-invoke (var-deref "jolt.passes.types" "test-local") test "some?")) (nilv (jolt-invoke (var-deref "jolt.passes.types" "test-local") test "nil?"))) (if (jolt= (keyword #f "local") (jolt-get test (keyword #f "op"))) (let* ((_o$5704 (jolt-invoke (var-deref "jolt.passes.types" "narrow-nonnil") tenv (jolt-get test (keyword #f "name")))) (_o$5705 tenv)) (jolt-vector _o$5704 _o$5705)) (if (jolt-truthy? somev) (let* ((_o$5706 (jolt-invoke (var-deref "jolt.passes.types" "narrow-nonnil") tenv somev)) (_o$5707 tenv)) (jolt-vector _o$5706 _o$5707)) (if (jolt-truthy? nilv) (let* ((_o$5708 tenv) (_o$5709 (jolt-invoke (var-deref "jolt.passes.types" "narrow-nonnil") tenv nilv))) (jolt-vector _o$5708 _o$5709)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$5710 tenv) (_o$5711 tenv)) (jolt-vector _o$5710 _o$5711)) jolt-nil))))))))) if-narrow) (let* ((_o$5712 (keyword #f "private")) (_o$5713 #t)) (jolt-hash-map _o$5712 _o$5713))))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "infer"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "ty" (letrec ((ty (lambda (r) (let fnrec5714 ((r r)) (jolt-nth r 0))))) ty) (let* ((_o$5715 (keyword #f "private")) (_o$5716 #t)) (jolt-hash-map _o$5715 _o$5716))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "nd" (letrec ((nd (lambda (r) (let fnrec5717 ((r r)) (jolt-nth r 1))))) nd) (let* ((_o$5718 (keyword #f "private")) (_o$5719 #t)) (jolt-hash-map _o$5718 _o$5719))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "self-rec-argtys" (letrec ((self-rec-argtys (lambda (args ares self-params) (let fnrec5720 ((args args) (ares ares) (self-params self-params)) (let* ((_a$5724 (var-deref "clojure.core" "mapv")) (_a$5725 (lambda (i) (let fnrec5721 ((i i)) (let* ((a (jolt-nth args i))) (if (jolt-truthy? (let* ((and__25__auto self-params)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n< i (jolt-count self-params)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get a (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((_a$5722 (jolt-get a (keyword #f "name"))) (_a$5723 (jolt-nth self-params i))) (jolt= _a$5722 _a$5723)) and__25__auto)) and__25__auto)) and__25__auto))) jolt-nil (jolt-invoke (var-deref "jolt.passes.types" "ty") (jolt-nth ares i))))))) (_a$5726 (jolt-range (jolt-count ares)))) (jolt-invoke _a$5724 _a$5725 _a$5726)))))) self-rec-argtys) (let* ((_o$5727 (keyword #f "private")) (_o$5728 #t)) (jolt-hash-map _o$5727 _o$5728))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "dbl-arith-ops" (let* ((_o$5729 "+") (_o$5730 "-") (_o$5731 "*") (_o$5732 "/") (_o$5733 "min") (_o$5734 "max") (_o$5735 "inc") (_o$5736 "dec")) (jolt-hash-set _o$5729 _o$5730 _o$5731 _o$5732 _o$5733 _o$5734 _o$5735 _o$5736)) (let* ((_o$5737 (keyword #f "private")) (_o$5738 #t)) (jolt-hash-map _o$5737 _o$5738))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "int-lit-node?" (letrec ((int-lit-node? (lambda (n) (let fnrec5739 ((n n)) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "integer?") v) and__25__auto))) and__25__auto)))))) int-lit-node?) (let* ((_o$5740 (keyword #f "private")) (_o$5741 #t)) (jolt-hash-map _o$5740 _o$5741))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "dbl-arith?" (letrec ((dbl-arith? (lambda (ares argnodes) (let fnrec5742 ((ares ares) (argnodes argnodes)) (let* ((and__25__auto (jolt-pos? (jolt-count ares)))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (let* ((_a$5744 (var-deref "clojure.core" "every?")) (_a$5745 (lambda (i) (let fnrec5743 ((i i)) (let* ((or__26__auto (jolt= (keyword #f "double") (jolt-invoke (var-deref "jolt.passes.types" "ty") (jolt-nth ares i))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-invoke (var-deref "jolt.passes.types" "int-lit-node?") (jolt-nth argnodes i))))))) (_a$5746 (jolt-range (jolt-count ares)))) (jolt-invoke _a$5744 _a$5745 _a$5746)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "some") (lambda (r) (let fnrec5747 ((r r)) (jolt= (keyword #f "double") (jolt-invoke (var-deref "jolt.passes.types" "ty") r)))) ares) and__25__auto)) and__25__auto)))))) dbl-arith?) (let* ((_o$5748 (keyword #f "private")) (_o$5749 #t)) (jolt-hash-map _o$5748 _o$5749))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "hof-table" (let* ((_o$5766 "map") (_o$5767 (let* ((_o$5750 (keyword #f "epos")) (_o$5751 0)) (jolt-hash-map _o$5750 _o$5751))) (_o$5768 "mapv") (_o$5769 (let* ((_o$5752 (keyword #f "epos")) (_o$5753 0)) (jolt-hash-map _o$5752 _o$5753))) (_o$5770 "filter") (_o$5771 (let* ((_o$5754 (keyword #f "epos")) (_o$5755 0)) (jolt-hash-map _o$5754 _o$5755))) (_o$5772 "filterv") (_o$5773 (let* ((_o$5756 (keyword #f "epos")) (_o$5757 0)) (jolt-hash-map _o$5756 _o$5757))) (_o$5774 "keep") (_o$5775 (let* ((_o$5758 (keyword #f "epos")) (_o$5759 0)) (jolt-hash-map _o$5758 _o$5759))) (_o$5776 "remove") (_o$5777 (let* ((_o$5760 (keyword #f "epos")) (_o$5761 0)) (jolt-hash-map _o$5760 _o$5761))) (_o$5778 "run!") (_o$5779 (let* ((_o$5762 (keyword #f "epos")) (_o$5763 0)) (jolt-hash-map _o$5762 _o$5763))) (_o$5780 "mapcat") (_o$5781 (let* ((_o$5764 (keyword #f "epos")) (_o$5765 0)) (jolt-hash-map _o$5764 _o$5765)))) (jolt-hash-map _o$5766 _o$5767 _o$5768 _o$5769 _o$5770 _o$5771 _o$5772 _o$5773 _o$5774 _o$5775 _o$5776 _o$5777 _o$5778 _o$5779 _o$5780 _o$5781)) (let* ((_o$5782 (keyword #f "private")) (_o$5783 #t)) (jolt-hash-map _o$5782 _o$5783))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-fn-seeded" (letrec ((infer-fn-seeded (lambda (node seeds tenv env) (let fnrec5784 ((node node) (seeds seeds) (tenv tenv) (env env)) (let* ((res (let* ((_a$5795 (var-deref "clojure.core" "mapv")) (_a$5796 (lambda (a) (let fnrec5785 ((a a)) (let* ((params (jolt-get a (keyword #f "params"))) (pe (let* ((_a$5790 (lambda (e i) (let fnrec5786 ((e e) (i i)) (let* ((_a$5787 e) (_a$5788 (jolt-nth params i)) (_a$5789 (let* ((s (jolt-get seeds i))) (if (jolt-truthy? s) s (keyword #f "any"))))) (jolt-assoc _a$5787 _a$5788 _a$5789))))) (_a$5791 tenv) (_a$5792 (jolt-range (jolt-count params)))) (jolt-reduce _a$5790 _a$5791 _a$5792))) (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 env))) (let* ((_o$5793 (jolt-invoke (var-deref "jolt.passes.types" "ty") br)) (_o$5794 (jolt-assoc a (keyword #f "body") (jolt-invoke (var-deref "jolt.passes.types" "nd") br)))) (jolt-vector _o$5793 _o$5794)))))) (_a$5797 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$5795 _a$5796 _a$5797))) (rets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5798 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "ty") r))) res)) (ret (if (jolt-empty? rets) (keyword #f "any") (let* ((_a$5799 (var-deref "jolt.passes.types.lattice" "join")) (_a$5800 (jolt-first rets)) (_a$5801 (jolt-rest rets))) (jolt-reduce _a$5799 _a$5800 _a$5801))))) (let* ((_o$5803 ret) (_o$5804 (jolt-assoc node (keyword #f "arities") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5802 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "nd") r))) res)))) (jolt-vector _o$5803 _o$5804))))))) infer-fn-seeded) (let* ((_o$5805 (keyword #f "private")) (_o$5806 #t) (_o$5807 (keyword #f "doc")) (_o$5808 "Infer a fn-literal passed to a HOF, seeding the given params to element/accum\n types (seeds: param-index -> type), other params :any, captured locals from\n tenv. Returns [ret-type node'] \x2014; ret is the lub of arity tail types, used to\n type the HOF result (e.g. reduce's accumulator, mapv's element).")) (jolt-hash-map _o$5805 _o$5806 _o$5807 _o$5808))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-pred-fold" (letrec ((infer-pred-fold (lambda (node fnode cn args tenv env) (let fnrec5809 ((node node) (fnode fnode) (cn cn) (args args) (tenv tenv) (env env)) (let* ((ar (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 0) tenv env)) (v (jolt-invoke (var-deref "jolt.passes.types" "pred-on") cn (jolt-invoke (var-deref "jolt.passes.types" "ty") ar)))) (if (jolt-truthy? (let* ((and__25__auto (jolt-not (jolt-nil? v)))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types" "pure-node?") (jolt-invoke (var-deref "jolt.passes.types" "nd") ar)) and__25__auto))) (let* ((_o$5814 (keyword #f "any")) (_o$5815 (let* ((_o$5810 (keyword #f "op")) (_o$5811 (keyword #f "const")) (_o$5812 (keyword #f "val")) (_o$5813 v)) (jolt-hash-map _o$5810 _o$5811 _o$5812 _o$5813)))) (jolt-vector _o$5814 _o$5815)) (let* ((_o$5816 (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode env)) (_o$5817 (jolt-assoc node (keyword #f "args") (jolt-vector (jolt-invoke (var-deref "jolt.passes.types" "nd") ar))))) (jolt-vector _o$5816 _o$5817)))))))) infer-pred-fold) (let* ((_o$5818 (keyword #f "private")) (_o$5819 #t) (_o$5820 (keyword #f "doc")) (_o$5821 "A type predicate over a single side-effect-free arg whose type PROVES the answer\n folds to a boolean constant \x2014; eliminating the call, and (once const-fold runs\n after inference) collapsing any `if` it gates. Falls back to the normal call path\n when the answer isn't provable or the arg is impure.")) (jolt-hash-map _o$5818 _o$5819 _o$5820 _o$5821))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-kw-lookup" (letrec ((infer-kw-lookup (lambda (node fnode args n tenv env) (let fnrec5822 ((node node) (fnode fnode) (args args) (n n) (tenv tenv) (env env)) (let* ((mr (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 0) tenv env)) (mt (jolt-invoke (var-deref "jolt.passes.types" "ty") mr)) (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-invoke (var-deref "jolt.passes.types" "nd") mr) mt) (jolt-invoke (var-deref "jolt.passes.types" "nd") mr))) (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 (var-deref "jolt.passes.types" "infer") (jolt-nth args 1) tenv env) jolt-nil)) (rt (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") ft (jolt-invoke (var-deref "jolt.passes.types" "ty") dr)) ft)) (node_PRIME_ (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$5823 msub) (_o$5824 (jolt-invoke (var-deref "jolt.passes.types" "nd") dr))) (jolt-vector _o$5823 _o$5824)) (jolt-vector msub))))) (let* ((_o$5825 rt) (_o$5826 (if (jolt= rt (keyword #f "double")) (jolt-assoc node_PRIME_ (keyword #f "num-read") (keyword #f "double")) node_PRIME_))) (jolt-vector _o$5825 _o$5826))))))) infer-kw-lookup) (let* ((_o$5827 (keyword #f "private")) (_o$5828 #t) (_o$5829 (keyword #f "doc")) (_o$5830 "(:k m) / (:k m default): the result is m's field type, and if m is a struct the\n subject is tagged so the back end drops the guard \x2014; this types nested access end\n to end (RFC 0005).")) (jolt-hash-map _o$5827 _o$5828 _o$5829 _o$5830))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-get-lookup" (letrec ((infer-get-lookup (lambda (node args n tenv env) (let fnrec5831 ((node node) (args args) (n n) (tenv tenv) (env env)) (let* ((mr (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 0) tenv env)) (mt (jolt-invoke (var-deref "jolt.passes.types" "ty") mr)) (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-invoke (var-deref "jolt.passes.types" "nd") mr) mt) (jolt-invoke (var-deref "jolt.passes.types" "nd") mr))) (kr (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 1) tenv env)) (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 (var-deref "jolt.passes.types" "infer") (jolt-nth args 2) tenv env) jolt-nil)) (rt (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") ft (jolt-invoke (var-deref "jolt.passes.types" "ty") dr)) ft)) (node_PRIME_ (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$5832 msub) (_o$5833 (jolt-invoke (var-deref "jolt.passes.types" "nd") kr)) (_o$5834 (jolt-invoke (var-deref "jolt.passes.types" "nd") dr))) (jolt-vector _o$5832 _o$5833 _o$5834)) (let* ((_o$5835 msub) (_o$5836 (jolt-invoke (var-deref "jolt.passes.types" "nd") kr))) (jolt-vector _o$5835 _o$5836)))))) (let* ((_o$5837 rt) (_o$5838 (if (jolt= rt (keyword #f "double")) (jolt-assoc node_PRIME_ (keyword #f "num-read") (keyword #f "double")) node_PRIME_))) (jolt-vector _o$5837 _o$5838))))))) infer-get-lookup) (let* ((_o$5839 (keyword #f "private")) (_o$5840 #t) (_o$5841 (keyword #f "doc")) (_o$5842 "(get m :k [default]): the keyword-lookup result type, when the key is a constant\n keyword.")) (jolt-hash-map _o$5839 _o$5840 _o$5841 _o$5842))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-reduce-hof" (letrec ((infer-reduce-hof (lambda (node args n tenv env) (let fnrec5843 ((node node) (args args) (n n) (tenv tenv) (env env)) (let* ((three (jolt-n>= n 3)) (coll-r (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args (if (jolt-truthy? three) 2 1)) tenv env)) (init-r (if (jolt-truthy? three) (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 1) tenv env) jolt-nil)) (et (let* ((ct (jolt-invoke (var-deref "jolt.passes.types" "ty") coll-r))) (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-invoke (var-deref "jolt.passes.types" "ty") init-r) (keyword #f "any"))) (fn-r (let* ((_a$5848 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$5849 (jolt-nth args 0)) (_a$5850 (let* ((_o$5844 0) (_o$5845 init-t) (_o$5846 1) (_o$5847 et)) (jolt-hash-map _o$5844 _o$5845 _o$5846 _o$5847))) (_a$5851 tenv) (_a$5852 env)) (jolt-invoke _a$5848 _a$5849 _a$5850 _a$5851 _a$5852)))) (let* ((_o$5858 (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") init-t (jolt-invoke (var-deref "jolt.passes.types" "ty") fn-r))) (_o$5859 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? three) (let* ((_o$5853 (jolt-invoke (var-deref "jolt.passes.types" "nd") fn-r)) (_o$5854 (jolt-invoke (var-deref "jolt.passes.types" "nd") init-r)) (_o$5855 (jolt-invoke (var-deref "jolt.passes.types" "nd") coll-r))) (jolt-vector _o$5853 _o$5854 _o$5855)) (let* ((_o$5856 (jolt-invoke (var-deref "jolt.passes.types" "nd") fn-r)) (_o$5857 (jolt-invoke (var-deref "jolt.passes.types" "nd") coll-r))) (jolt-vector _o$5856 _o$5857)))))) (jolt-vector _o$5858 _o$5859))))))) infer-reduce-hof) (let* ((_o$5860 (keyword #f "private")) (_o$5861 #t) (_o$5862 (keyword #f "doc")) (_o$5863 "reduce over a typed vector with a fn-literal: seed the closure's accumulator\n (param 0) to the init type and its element (param 1) to the vector's element\n type, so its body \x2014; and any calls it makes \x2014; see those types.")) (jolt-hash-map _o$5860 _o$5861 _o$5862 _o$5863))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-seq-hof" (letrec ((infer-seq-hof (lambda (node cn args tenv env) (let fnrec5864 ((node node) (cn cn) (args args) (tenv tenv) (env env)) (let* ((coll-r (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-nth args 1) tenv env)) (et (let* ((ct (jolt-invoke (var-deref "jolt.passes.types" "ty") coll-r))) (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$5867 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$5868 (jolt-nth args 0)) (_a$5869 (let* ((_o$5865 (jolt-get (jolt-get (var-deref "jolt.passes.types" "hof-table") cn) (keyword #f "epos"))) (_o$5866 et)) (jolt-hash-map _o$5865 _o$5866))) (_a$5870 tenv) (_a$5871 env)) (jolt-invoke _a$5867 _a$5868 _a$5869 _a$5870 _a$5871))) (rt (if (jolt= cn "mapv") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (jolt-invoke (var-deref "jolt.passes.types" "ty") fn-r)) (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$5874 rt) (_o$5875 (jolt-assoc node (keyword #f "args") (let* ((_o$5872 (jolt-invoke (var-deref "jolt.passes.types" "nd") fn-r)) (_o$5873 (jolt-invoke (var-deref "jolt.passes.types" "nd") coll-r))) (jolt-vector _o$5872 _o$5873))))) (jolt-vector _o$5874 _o$5875))))))) infer-seq-hof) (let* ((_o$5876 (keyword #f "private")) (_o$5877 #t) (_o$5878 (keyword #f "doc")) (_o$5879 "map/mapv/filter/... over a typed vector with a fn-literal: seed the fn's element\n param; mapv/filterv produce a typed vector.")) (jolt-hash-map _o$5876 _o$5877 _o$5878 _o$5879))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-conj-into" (letrec ((infer-conj-into (lambda (node fnode cn args n tenv env) (let fnrec5880 ((node node) (fnode fnode) (cn cn) (args args) (n n) (tenv tenv) (env env)) (let* ((ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec5881 ((a a)) (jolt-invoke (var-deref "jolt.passes.types" "infer") a tenv env))) args)) (base (jolt-invoke (var-deref "jolt.passes.types" "ty") (jolt-nth ares 0))) (rest-ts (let* ((_a$5883 (var-deref "clojure.core" "mapv")) (_a$5884 (lambda (r) (let fnrec5882 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "ty") r)))) (_a$5885 (jolt-rest ares))) (jolt-invoke _a$5883 _a$5884 _a$5885))) (rt (if (jolt-truthy? (let* ((and__25__auto (jolt= cn "conj"))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") base) and__25__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__25__auto (jolt= cn "into"))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") base))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 2 n))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "vec-type?") (jolt-nth rest-ts 0)) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (let* ((_a$5886 (var-deref "jolt.passes.types.lattice" "join")) (_a$5887 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") base)) (_a$5888 (jolt-invoke (var-deref "jolt.passes.types.lattice" "velem") (jolt-nth rest-ts 0)))) (jolt-invoke _a$5886 _a$5887 _a$5888))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode env) jolt-nil))))) (let* ((_o$5890 rt) (_o$5891 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5889 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "nd") r))) ares)))) (jolt-vector _o$5890 _o$5891))))))) infer-conj-into) (let* ((_o$5892 (keyword #f "private")) (_o$5893 #t) (_o$5894 (keyword #f "doc")) (_o$5895 "conj/into: track the element type of a vector being grown.")) (jolt-hash-map _o$5892 _o$5893 _o$5894 _o$5895))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-call" (letrec ((infer-call (lambda (node fnode iscall-var cn args n tenv env) (let fnrec5896 ((node node) (fnode fnode) (iscall-var iscall-var) (cn cn) (args args) (n n) (tenv tenv) (env env)) (let* ((fr (if (jolt-not iscall-var) (jolt-invoke (var-deref "jolt.passes.types" "infer") fnode tenv env) jolt-nil)) (fnode_PRIME_ (if (jolt-truthy? iscall-var) fnode (jolt-invoke (var-deref "jolt.passes.types" "nd") fr))) (callee-t (if (jolt-truthy? iscall-var) (let* ((_a$5897 (jolt-get env (keyword #f "vtypes"))) (_a$5898 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$5897 _a$5898)) (jolt-invoke (var-deref "jolt.passes.types" "ty") fr))) (ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec5899 ((a a)) (jolt-invoke (var-deref "jolt.passes.types" "infer") a tenv env))) args))) (begin (if (jolt-truthy? iscall-var) (let* ((_a$5905 (var-deref "clojure.core" "swap!")) (_a$5906 (jolt-get env (keyword #f "calls"))) (_a$5907 jolt-conj) (_a$5908 (let* ((_o$5903 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_o$5904 (if (let* ((_a$5900 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_a$5901 (jolt-get env (keyword #f "self-key")))) (jolt= _a$5900 _a$5901)) (jolt-invoke (var-deref "jolt.passes.types" "self-rec-argtys") args ares (jolt-get env (keyword #f "self-params"))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5902 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "ty") r))) ares)))) (jolt-vector _o$5903 _o$5904)))) (jolt-invoke _a$5905 _a$5906 _a$5907 _a$5908)) jolt-nil) (if (jolt-truthy? (let* ((and__25__auto (jolt= (keyword #f "local") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-get env (keyword #f "self-key")))) (if (jolt-truthy? and__25__auto) (let* ((_a$5909 (jolt-get fnode (keyword #f "name"))) (_a$5910 (jolt-get env (keyword #f "self-name")))) (jolt= _a$5909 _a$5910)) and__25__auto)) and__25__auto))) (let* ((_a$5913 (var-deref "clojure.core" "swap!")) (_a$5914 (jolt-get env (keyword #f "calls"))) (_a$5915 jolt-conj) (_a$5916 (let* ((_o$5911 (jolt-get env (keyword #f "self-key"))) (_o$5912 (jolt-invoke (var-deref "jolt.passes.types" "self-rec-argtys") args ares (jolt-get env (keyword #f "self-params"))))) (jolt-vector _o$5911 _o$5912)))) (jolt-invoke _a$5913 _a$5914 _a$5915 _a$5916)) jolt-nil) (if (jolt-truthy? (jolt-get env (keyword #f "checking?"))) (let* ((ats (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5917 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "ty") r))) ares)) (pos (jolt-get node (keyword #f "pos")))) (begin (if (jolt-truthy? cn) (jolt-invoke (var-deref "jolt.passes.types.check" "check-invoke") cn args ats pos env) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types.check" "not-callable?") callee-t)) (let* ((_a$5926 (var-deref "clojure.core" "swap!")) (_a$5927 (jolt-get env (keyword #f "diags"))) (_a$5928 jolt-conj) (_a$5929 (let* ((_o$5918 (keyword #f "op")) (_o$5919 (keyword #f "call")) (_o$5920 (keyword #f "type")) (_o$5921 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") callee-t)) (_o$5922 (keyword #f "pos")) (_o$5923 pos) (_o$5924 (keyword #f "msg")) (_o$5925 (jolt-invoke (var-deref "clojure.core" "str") "cannot call " (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") callee-t) " as a function"))) (jolt-hash-map _o$5918 _o$5919 _o$5920 _o$5921 _o$5922 _o$5923 _o$5924 _o$5925)))) (jolt-invoke _a$5926 _a$5927 _a$5928 _a$5929)) jolt-nil) (if (jolt-truthy? (let* ((and__25__auto (jolt-get env (keyword #f "strict?")))) (if (jolt-truthy? and__25__auto) iscall-var and__25__auto))) (let* ((k (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (usig (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (jolt-get env (keyword #f "user-sigs"))) k))) (if (jolt-truthy? usig) (jolt-invoke (var-deref "jolt.passes.types" "check-user-call") k usig ats pos env) jolt-nil)) jolt-nil))) jolt-nil) (let* ((pm (let* ((and__25__auto iscall-var)) (if (jolt-truthy? and__25__auto) (let* ((_a$5930 (jolt-get env (keyword #f "protocol-methods"))) (_a$5931 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$5930 _a$5931)) and__25__auto))) (rtype (if (jolt-truthy? (let* ((and__25__auto pm)) (if (jolt-truthy? and__25__auto) (jolt-pos? n) and__25__auto))) (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "ty") (jolt-nth ares 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 fnrec5932 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "nd") r))) ares)))) (let* ((_o$5940 (if (jolt= cn "range") (jolt-invoke (var-deref "jolt.passes.types.lattice" "mk-vec") (keyword #f "num")) (if (jolt-truthy? (let* ((and__25__auto cn)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-contains? (var-deref "jolt.passes.types" "elem-fns") cn))) (if (jolt-truthy? and__25__auto) (jolt-n> n 0) and__25__auto)) and__25__auto))) (let* ((a0 (jolt-invoke (var-deref "jolt.passes.types" "ty") (jolt-nth ares 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? (let* ((and__25__auto cn)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-contains? (var-deref "jolt.passes.types" "dbl-arith-ops") cn))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types" "dbl-arith?") ares args) and__25__auto)) and__25__auto))) (keyword #f "double") (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode env) jolt-nil))))) (_o$5941 (if (jolt-truthy? rtype) (let* ((_a$5933 base) (_a$5934 (keyword #f "devirt-type")) (_a$5935 rtype) (_a$5936 (keyword #f "devirt-proto")) (_a$5937 (jolt-nth pm 0)) (_a$5938 (keyword #f "devirt-method")) (_a$5939 (jolt-nth pm 1))) (jolt-assoc _a$5933 _a$5934 _a$5935 _a$5936 _a$5937 _a$5938 _a$5939)) base))) (jolt-vector _o$5940 _o$5941))))))))) infer-call) (let* ((_o$5942 (keyword #f "private")) (_o$5943 #t) (_o$5944 (keyword #f "doc")) (_o$5945 "Everything else: type the args, collect the call (var callee) for whole-program\n inference, run the success-type check, and use the declared/estimated return type.\n range produces a numeric vector; an element-returning fn over a typed vector\n yields the element type. A protocol-method call whose receiver (arg 0) is a known\n record type is annotated [type-tag proto method] for devirtualization \x2014; the back\n end looks up the impl at emit time and calls it directly, skipping the registry\n dispatch (~19x cheaper).")) (jolt-hash-map _o$5942 _o$5943 _o$5944 _o$5945))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-invoke" (letrec ((infer-invoke (lambda (node tenv env) (let fnrec5946 ((node node) (tenv tenv) (env env)) (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__25__auto iscall-var)) (if (jolt-truthy? and__25__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__25__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__25__auto iscall-var)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-contains? (var-deref "jolt.passes.types" "fold-preds") cn))) (if (jolt-truthy? and__25__auto) (jolt= n 1) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types" "infer-pred-fold") node fnode cn args tenv env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "kw-callee?") fnode))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= n 1))) (if (jolt-truthy? and__25__auto) (jolt-n<= n 2) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types" "infer-kw-lookup") node fnode args n tenv env) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.passes.fold" "get-callee?") fnode))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "const") (jolt-get (jolt-nth args 1) (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get (jolt-nth args 1) (keyword #f "val"))) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types" "infer-get-lookup") node args n tenv env) (if (let* ((and__25__auto (jolt= cn "reduce"))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__25__auto)) and__25__auto)) (jolt-invoke (var-deref "jolt.passes.types" "infer-reduce-hof") node args n tenv env) (if (jolt-truthy? (let* ((and__25__auto cn)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-get (var-deref "jolt.passes.types" "hof-table") cn))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-n>= n 2))) (if (jolt-truthy? and__25__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__25__auto)) and__25__auto)) and__25__auto))) (jolt-invoke (var-deref "jolt.passes.types" "infer-seq-hof") node cn args tenv env) (if (let* ((and__25__auto (let* ((or__26__auto (jolt= cn "conj"))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= cn "into"))))) (if (jolt-truthy? and__25__auto) (jolt-n>= n 1) and__25__auto)) (jolt-invoke (var-deref "jolt.passes.types" "infer-conj-into") node fnode cn args n tenv env) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "infer-call") node fnode iscall-var cn args n tenv env) jolt-nil)))))))))))) infer-invoke) (let* ((_o$5947 (keyword #f "private")) (_o$5948 #t) (_o$5949 (keyword #f "doc")) (_o$5950 "Split the callee/args once and dispatch by callee shape to a pattern helper.")) (jolt-hash-map _o$5947 _o$5948 _o$5949 _o$5950))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer" (letrec ((infer (lambda (node tenv env) (let fnrec5951 ((node node) (tenv tenv) (env env)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$5952 (let* ((v (jolt-get node (keyword #f "val")))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "float?") v) and__25__auto))) (keyword #f "double") (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-nil? v) (keyword #f "nil") (if (jolt= #f v) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (keyword #f "truthy") jolt-nil))))))))) (_o$5953 node)) (jolt-vector _o$5952 _o$5953)) (if (jolt= op (keyword #f "local")) (let* ((t (jolt-get tenv (jolt-get node (keyword #f "name"))))) (let* ((_o$5954 (if (jolt-truthy? t) t (keyword #f "any"))) (_o$5955 (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$5954 _o$5955))) (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 fnrec5956 ((pr pr)) (let* ((kr (infer (jolt-nth pr 0) tenv env)) (vr (infer (jolt-nth pr 1) tenv env))) (let* ((_o$5957 (jolt-nth kr 1)) (_o$5958 (jolt-nth vr 1)) (_o$5959 (jolt-nth vr 0)) (_o$5960 (jolt-get (jolt-nth pr 0) (keyword #f "val")))) (jolt-vector _o$5957 _o$5958 _o$5959 _o$5960))))) pairs)) (struct? (let* ((and__25__auto (jolt-n> (jolt-count res) 0))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec5961 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) pairs))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (r) (let fnrec5962 ((r r)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "truthy-type?") (jolt-nth r 2)))) res) and__25__auto)) and__25__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$5967 (lambda (m r) (let fnrec5963 ((m m) (r r)) (let* ((_a$5964 m) (_a$5965 (jolt-nth r 3)) (_a$5966 (jolt-nth r 2))) (jolt-assoc _a$5964 _a$5965 _a$5966))))) (_a$5968 (jolt-hash-map)) (_a$5969 res)) (jolt-reduce _a$5967 _a$5968 _a$5969))) (var-deref "jolt.passes.types.lattice" "type-depth")) jolt-nil)) (shp (if (jolt-truthy? (let* ((and__25__auto (jolt-get env (keyword #f "map-shapes?")))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto base)) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes.types.lattice" "struct-type?") base) and__25__auto)) and__25__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 fnrec5970 ((r r)) (let* ((_o$5971 (jolt-nth r 0)) (_o$5972 (jolt-nth r 1))) (jolt-vector _o$5971 _o$5972)))) res)))) (let* ((_o$5973 t) (_o$5974 (if (jolt-truthy? shp) (jolt-assoc node_PRIME_ (keyword #f "shape") shp) node_PRIME_))) (jolt-vector _o$5973 _o$5974))) (if (jolt= op (keyword #f "vector")) (let* ((irs (let* ((_a$5976 (var-deref "clojure.core" "mapv")) (_a$5977 (lambda (x) (let fnrec5975 ((x x)) (infer x tenv env)))) (_a$5978 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$5976 _a$5977 _a$5978))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5979 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$5980 (var-deref "jolt.passes.types.lattice" "join")) (_a$5981 (jolt-first ets)) (_a$5982 (jolt-rest ets))) (jolt-reduce _a$5980 _a$5981 _a$5982))))) (let* ((_o$5984 (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$5985 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5983 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$5984 _o$5985))) (if (jolt= op (keyword #f "set")) (let* ((irs (let* ((_a$5987 (var-deref "clojure.core" "mapv")) (_a$5988 (lambda (x) (let fnrec5986 ((x x)) (infer x tenv env)))) (_a$5989 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$5987 _a$5988 _a$5989))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5990 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$5991 (var-deref "jolt.passes.types.lattice" "join")) (_a$5992 (jolt-first ets)) (_a$5993 (jolt-rest ets))) (jolt-reduce _a$5991 _a$5992 _a$5993))))) (let* ((_o$5995 (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$5996 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec5994 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$5995 _o$5996))) (if (jolt= op (keyword #f "if")) (let* ((test (jolt-get node (keyword #f "test"))) (tr (infer test tenv env)) (nr (jolt-invoke (var-deref "jolt.passes.types" "if-narrow") test tenv)) (thn (let* ((_a$5997 (jolt-get node (keyword #f "then"))) (_a$5998 (jolt-nth nr 0)) (_a$5999 env)) (infer _a$5997 _a$5998 _a$5999))) (els (let* ((_a$6000 (jolt-get node (keyword #f "else"))) (_a$6001 (jolt-nth nr 1)) (_a$6002 env)) (infer _a$6000 _a$6001 _a$6002)))) (let* ((_o$6013 (let* ((_a$6003 (var-deref "jolt.passes.types.lattice" "join")) (_a$6004 (jolt-nth thn 0)) (_a$6005 (jolt-nth els 0))) (jolt-invoke _a$6003 _a$6004 _a$6005))) (_o$6014 (let* ((_a$6006 node) (_a$6007 (keyword #f "test")) (_a$6008 (jolt-nth tr 1)) (_a$6009 (keyword #f "then")) (_a$6010 (jolt-nth thn 1)) (_a$6011 (keyword #f "else")) (_a$6012 (jolt-nth els 1))) (jolt-assoc _a$6006 _a$6007 _a$6008 _a$6009 _a$6010 _a$6011 _a$6012)))) (jolt-vector _o$6013 _o$6014))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$6016 (var-deref "clojure.core" "mapv")) (_a$6017 (lambda (s) (let fnrec6015 ((s s)) (jolt-nth (infer s tenv env) 1)))) (_a$6018 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$6016 _a$6017 _a$6018))) (r (infer (jolt-get node (keyword #f "ret")) tenv env))) (let* ((_o$6019 (jolt-nth r 0)) (_o$6020 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$6019 _o$6020))) (if (jolt= op (keyword #f "throw")) (let* ((_o$6021 (keyword #f "any")) (_o$6022 (jolt-assoc node (keyword #f "expr") (jolt-nth (infer (jolt-get node (keyword #f "expr")) tenv env) 1)))) (jolt-vector _o$6021 _o$6022)) (if (jolt= op (keyword #f "var")) (begin (let* ((_a$6023 (var-deref "clojure.core" "swap!")) (_a$6024 (jolt-get env (keyword #f "escapes"))) (_a$6025 jolt-conj) (_a$6026 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-invoke _a$6023 _a$6024 _a$6025 _a$6026)) (let* ((_o$6029 (let* ((vt (let* ((_a$6027 (jolt-get env (keyword #f "vtypes"))) (_a$6028 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-get _a$6027 _a$6028)))) (if (jolt-truthy? vt) vt (keyword #f "any")))) (_o$6030 node)) (jolt-vector _o$6029 _o$6030))) (if (jolt= op (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.passes.types" "infer-invoke") node tenv env) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$6041 (lambda (acc b) (let fnrec6031 ((acc acc) (b b)) (let* ((te (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (ir (infer (jolt-nth b 1) te env))) (let* ((_o$6037 (let* ((_a$6032 te) (_a$6033 (jolt-nth b 0)) (_a$6034 (jolt-nth ir 0))) (jolt-assoc _a$6032 _a$6033 _a$6034))) (_o$6038 (jolt-conj binds (let* ((_o$6035 (jolt-nth b 0)) (_o$6036 (jolt-nth ir 1))) (jolt-vector _o$6035 _o$6036))))) (jolt-vector _o$6037 _o$6038)))))) (_a$6042 (let* ((_o$6039 tenv) (_o$6040 (jolt-vector))) (jolt-vector _o$6039 _o$6040))) (_a$6043 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$6041 _a$6042 _a$6043))) (br (let* ((_a$6044 (jolt-get node (keyword #f "body"))) (_a$6045 (jolt-nth res 0)) (_a$6046 env)) (infer _a$6044 _a$6045 _a$6046)))) (let* ((_o$6052 (jolt-nth br 0)) (_o$6053 (let* ((_a$6047 node) (_a$6048 (keyword #f "bindings")) (_a$6049 (jolt-nth res 1)) (_a$6050 (keyword #f "body")) (_a$6051 (jolt-nth br 1))) (jolt-assoc _a$6047 _a$6048 _a$6049 _a$6050 _a$6051)))) (jolt-vector _o$6052 _o$6053))) (if (jolt= op (keyword #f "loop")) (let* ((lenv (jolt-assoc env (keyword #f "in-loop?") #t))) (let* ((_o$6065 (keyword #f "any")) (_o$6066 (let* ((_a$6060 node) (_a$6061 (keyword #f "bindings")) (_a$6062 (let* ((_a$6057 (var-deref "clojure.core" "mapv")) (_a$6058 (lambda (b) (let fnrec6054 ((b b)) (let* ((_o$6055 (jolt-nth b 0)) (_o$6056 (jolt-nth (infer (jolt-nth b 1) tenv env) 1))) (jolt-vector _o$6055 _o$6056))))) (_a$6059 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$6057 _a$6058 _a$6059))) (_a$6063 (keyword #f "body")) (_a$6064 (jolt-nth (infer (jolt-get node (keyword #f "body")) tenv lenv) 1))) (jolt-assoc _a$6060 _a$6061 _a$6062 _a$6063 _a$6064)))) (jolt-vector _o$6065 _o$6066))) (if (jolt= op (keyword #f "recur")) (let* ((ares (let* ((_a$6068 (var-deref "clojure.core" "mapv")) (_a$6069 (lambda (a) (let fnrec6067 ((a a)) (infer a tenv env)))) (_a$6070 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$6068 _a$6069 _a$6070)))) (begin (if (jolt-truthy? (let* ((and__25__auto (jolt-not (jolt-get env (keyword #f "in-loop?"))))) (if (jolt-truthy? and__25__auto) (jolt-get env (keyword #f "self-key")) and__25__auto))) (let* ((_a$6077 (var-deref "clojure.core" "swap!")) (_a$6078 (jolt-get env (keyword #f "calls"))) (_a$6079 jolt-conj) (_a$6080 (let* ((_o$6075 (jolt-get env (keyword #f "self-key"))) (_o$6076 (let* ((_a$6071 (var-deref "jolt.passes.types" "self-rec-argtys")) (_a$6072 (jolt-get node (keyword #f "args"))) (_a$6073 ares) (_a$6074 (jolt-get env (keyword #f "self-params")))) (jolt-invoke _a$6071 _a$6072 _a$6073 _a$6074)))) (jolt-vector _o$6075 _o$6076)))) (jolt-invoke _a$6077 _a$6078 _a$6079 _a$6080)) jolt-nil) (let* ((_o$6082 (keyword #f "any")) (_o$6083 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec6081 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "nd") r))) ares)))) (jolt-vector _o$6082 _o$6083)))) (if (jolt= op (keyword #f "fn")) (let* ((fenv (jolt-assoc env (keyword #f "self-name") jolt-nil (keyword #f "self-key") jolt-nil (keyword #f "self-params") jolt-nil (keyword #f "in-loop?") #f))) (let* ((_o$6099 (keyword #f "any")) (_o$6100 (jolt-assoc node (keyword #f "arities") (let* ((_a$6096 (var-deref "clojure.core" "mapv")) (_a$6097 (lambda (a) (let fnrec6084 ((a a)) (let* ((shapes (jolt-get env (keyword #f "record-shapes"))) (phm (let* ((_a$6089 (lambda (m pr) (let fnrec6085 ((m m) (pr pr)) (let* ((_a$6086 m) (_a$6087 (jolt-nth pr 0)) (_a$6088 (jolt-nth pr 1))) (jolt-assoc _a$6086 _a$6087 _a$6088))))) (_a$6090 (jolt-hash-map)) (_a$6091 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$6089 _a$6090 _a$6091))) (pe (let* ((_a$6093 (lambda (e p) (let fnrec6092 ((e e) (p p)) (jolt-assoc e p (let* ((ent (jolt-get shapes (jolt-get phm p)))) (if (jolt-truthy? ent) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") ent (var-deref "jolt.passes.types.lattice" "type-depth") shapes) (keyword #f "any"))))))) (_a$6094 tenv) (_a$6095 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$6093 _a$6094 _a$6095))) (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 (infer (jolt-get a (keyword #f "body")) pe fenv) 1)))))) (_a$6098 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$6096 _a$6097 _a$6098))))) (jolt-vector _o$6099 _o$6100))) (if (jolt= op (keyword #f "def")) (begin (if (jolt-truthy? (jolt-get env (keyword #f "checking?"))) (jolt-invoke (var-deref "jolt.passes.types.check" "register-user-fn!") node env) jolt-nil) (let* ((_o$6101 (keyword #f "any")) (_o$6102 (jolt-assoc node (keyword #f "init") (jolt-nth (infer (jolt-get node (keyword #f "init")) tenv env) 1)))) (jolt-vector _o$6101 _o$6102))) (if (jolt= op (keyword #f "try")) (let* ((_o$6110 (keyword #f "any")) (_o$6111 (let* ((_a$6103 node) (_a$6104 (keyword #f "body")) (_a$6105 (jolt-nth (infer (jolt-get node (keyword #f "body")) tenv env) 1)) (_a$6106 (keyword #f "catch-body")) (_a$6107 (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-nth (infer (jolt-get node (keyword #f "catch-body")) tenv env) 1) jolt-nil)) (_a$6108 (keyword #f "finally")) (_a$6109 (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-nth (infer (jolt-get node (keyword #f "finally")) tenv env) 1) jolt-nil))) (jolt-assoc _a$6103 _a$6104 _a$6105 _a$6106 _a$6107 _a$6108 _a$6109)))) (jolt-vector _o$6110 _o$6111)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$6112 (keyword #f "any")) (_o$6113 node)) (jolt-vector _o$6112 _o$6113)) jolt-nil)))))))))))))))))))))) infer) (let* ((_o$6114 (keyword #f "private")) (_o$6115 #t) (_o$6116 (keyword #f "doc")) (_o$6117 "Returns [type node'] \x2014; the inferred type of node and node with struct-safe\n :local references annotated :hint :struct. tenv maps in-scope local names to\n inferred types; env carries the inference config and this run's accumulators.")) (jolt-hash-map _o$6114 _o$6115 _o$6116 _o$6117))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-top" (letrec ((infer-top (lambda (node env) (let fnrec6118 ((node node) (env env)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map) env) 1))))) infer-top) (let* ((_o$6119 (keyword #f "private")) (_o$6120 #t)) (jolt-hash-map _o$6119 _o$6120))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "all-any-env" (letrec ((all-any-env (lambda (params) (let fnrec6121 ((params params)) (let* ((_a$6123 (lambda (e p) (let fnrec6122 ((e e) (p p)) (jolt-assoc e p (keyword #f "any"))))) (_a$6124 (jolt-hash-map)) (_a$6125 params)) (jolt-reduce _a$6123 _a$6124 _a$6125)))))) all-any-env) (let* ((_o$6126 (keyword #f "private")) (_o$6127 #t) (_o$6128 (keyword #f "doc")) (_o$6129 "tenv binding every param name to :any (the all-ambiguous baseline).")) (jolt-hash-map _o$6126 _o$6127 _o$6128 _o$6129))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "isolated-diag-count" (letrec ((isolated-diag-count (lambda (body tenv env) (let fnrec6130 ((body body) (tenv tenv) (env env)) (let* ((sub (jolt-assoc env (keyword #f "diags") (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))))) (begin (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv sub) (jolt-count (jolt-invoke (var-deref "clojure.core" "deref") (jolt-get sub (keyword #f "diags")))))))))) isolated-diag-count) (let* ((_o$6131 (keyword #f "private")) (_o$6132 #t) (_o$6133 (keyword #f "doc")) (_o$6134 "Count of diagnostics typing body under tenv produces. Runs under a SUB-ENV\n with its own diags cell, so this probe never leaks into the real report (the\n shared calls/escapes/guard cells are intentionally still threaded \x2014; they are\n not read here). Runs the same checking inference as check-form.")) (jolt-hash-map _o$6131 _o$6132 _o$6133 _o$6134))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "check-user-call" (letrec ((check-user-call (lambda (key sig arg-types pos env) (let fnrec6135 ((key key) (sig sig) (arg-types arg-types) (pos pos) (env env)) (let* ((cset (jolt-get env (keyword #f "checking-set")))) (if (jolt-not (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") cset) key)) (let* ((prev (jolt-invoke (var-deref "clojure.core" "deref") cset))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") cset (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)) (memo (jolt-get env (keyword #f "diag-memo")))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") npar nargs)) (let* ((_a$6144 (var-deref "clojure.core" "swap!")) (_a$6145 (jolt-get env (keyword #f "diags"))) (_a$6146 jolt-conj) (_a$6147 (let* ((_o$6136 (keyword #f "op")) (_o$6137 (keyword #f "user-call")) (_o$6138 (keyword #f "type")) (_o$6139 (keyword #f "arity")) (_o$6140 (keyword #f "pos")) (_o$6141 pos) (_o$6142 (keyword #f "msg")) (_o$6143 (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$6136 _o$6137 _o$6138 _o$6139 _o$6140 _o$6141 _o$6142 _o$6143)))) (jolt-invoke _a$6144 _a$6145 _a$6146 _a$6147)) (let* ((base-env (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)) (base (let* ((bk (let* ((_o$6148 (keyword #f "base")) (_o$6149 key)) (jolt-vector _o$6148 _o$6149)))) (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") memo) bk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") memo) bk) (let* ((b (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body base-env env))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") memo jolt-assoc bk b) b)))))) (let* ((_a$6177 (lambda (_ i) (let fnrec6150 ((_ _) (i i)) (begin (let* ((at (jolt-nth arg-types i))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "any")))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "truthy")) and__25__auto))) (let* ((mk (let* ((_o$6151 (keyword #f "arg")) (_o$6152 key) (_o$6153 i) (_o$6154 at)) (jolt-vector _o$6151 _o$6152 _o$6153 _o$6154))) (rejects (if (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") memo) mk) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") memo) mk) (let* ((r (jolt-n> (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body (jolt-assoc base-env (jolt-nth params i) at) env) base))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") memo jolt-assoc mk r) r))))) (if (jolt-truthy? rejects) (let* ((_a$6173 (var-deref "clojure.core" "swap!")) (_a$6174 (jolt-get env (keyword #f "diags"))) (_a$6175 jolt-conj) (_a$6176 (let* ((_o$6163 (keyword #f "op")) (_o$6164 (keyword #f "user-call")) (_o$6165 (keyword #f "argpos")) (_o$6166 i) (_o$6167 (keyword #f "type")) (_o$6168 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") at)) (_o$6169 (keyword #f "pos")) (_o$6170 pos) (_o$6171 (keyword #f "msg")) (_o$6172 (let* ((_a$6155 (var-deref "clojure.core" "str")) (_a$6156 "argument ") (_a$6157 (jolt-inc i)) (_a$6158 " to `") (_a$6159 (jolt-get sig (keyword #f "name"))) (_a$6160 "` is ") (_a$6161 (jolt-invoke (var-deref "jolt.passes.types.check" "type-name") at)) (_a$6162 ", which its body provably rejects")) (jolt-invoke _a$6155 _a$6156 _a$6157 _a$6158 _a$6159 _a$6160 _a$6161 _a$6162)))) (jolt-hash-map _o$6163 _o$6164 _o$6165 _o$6166 _o$6167 _o$6168 _o$6169 _o$6170 _o$6171 _o$6172)))) (jolt-invoke _a$6173 _a$6174 _a$6175 _a$6176)) jolt-nil)) jolt-nil)) jolt-nil)))) (_a$6178 jolt-nil) (_a$6179 (jolt-range npar))) (jolt-reduce _a$6177 _a$6178 _a$6179))))) (jolt-invoke (var-deref "clojure.core" "reset!") cset prev))) jolt-nil)))))) check-user-call) (let* ((_o$6180 (keyword #f "private")) (_o$6181 #t) (_o$6182 (keyword #f "doc")) (_o$6183 "Strict mode: report a call to a registered user fn that provably throws \x2014;\n either a WRONG ARITY (the registered fn has one fixed arity, so a different\n arg count always throws) or an argument whose concrete type the body\n rejects. For the latter, re-check the body with ONLY that parameter bound to\n its arg type (others :any); a diagnostic the all-:any body did not already\n have means the argument alone is provably wrong. Monotonic \x2014; binding a\n concrete type can only ADD error-domain hits \x2014; so no false positive.\n Cycle-guarded (env's checking-set) so mutually recursive fns terminate.")) (jolt-hash-map _o$6180 _o$6181 _o$6182 _o$6183))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "set-rtenv!" (letrec ((set-rtenv! (lambda (m) (let fnrec6184 ((m m)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "config-box") jolt-assoc (keyword #f "rtenv") (let* ((or__26__auto m)) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))))))) set-rtenv!) (let* ((_o$6185 (keyword #f "doc")) (_o$6186 "Install the current return-type estimates (a map \"ns/name\" -> type) used to\n type call results during the fixpoint.")) (jolt-hash-map _o$6185 _o$6186))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-record-shapes!" (letrec ((set-record-shapes! (lambda (m) (let fnrec6187 ((m m)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "config-box") jolt-assoc (keyword #f "record-shapes") (let* ((or__26__auto m)) (if (jolt-truthy? or__26__auto) or__26__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 fnrec6188 ((m m)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "config-box") jolt-assoc (keyword #f "protocol-methods") (let* ((or__26__auto m)) (if (jolt-truthy? or__26__auto) or__26__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 fnrec6189 ((b b)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "config-box") jolt-assoc (keyword #f "map-shapes?") (jolt-invoke (var-deref "clojure.core" "boolean") b)))))) set-map-shapes!)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "set-vtypes!" (letrec ((set-vtypes! (lambda (m) (let fnrec6190 ((m m)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "config-box") jolt-assoc (keyword #f "vtypes") (let* ((or__26__auto m)) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-hash-map)))))))) set-vtypes!) (let* ((_o$6191 (keyword #f "doc")) (_o$6192 "Install var VALUE types (a map \"ns/name\" -> type): fn vars are :truthy\n (non-nil), def vars carry their inferred init type.")) (jolt-hash-map _o$6191 _o$6192))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "join-types" (letrec ((join-types (lambda (a b) (let fnrec6193 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join-t") a b))))) join-types) (let* ((_o$6194 (keyword #f "doc")) (_o$6195 "Public structural join (lub), used by the orchestrator's fixpoint so param/\n return types join field-wise/element-wise instead of collapsing to :any.")) (jolt-hash-map _o$6194 _o$6195))))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "reset-escapes!" (letrec ((reset-escapes! (lambda () (let fnrec6196 () (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 fnrec6197 () (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-with-meta! "jolt.passes.types" "check-form" (letrec ((check-form (case-lambda ((node) (let fnrec6198 ((node node)) (check-form node #f))) ((node strict?) (let fnrec6199 ((node node) (strict? strict?)) (let* ((env (jolt-invoke (var-deref "jolt.passes.types" "mk-env") #t strict?))) (begin (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map) env) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (jolt-get env (keyword #f "diags"))))))))))) check-form) (let* ((_o$6200 (keyword #f "doc")) (_o$6201 "Success-type check a single analyzed form (RFC 0006). Returns a vector of\n diagnostics [{:op :argpos :type :msg} ...] for provably-wrong calls; empty\n when nothing is provably wrong. Runs independently of specialization so it is\n usable in normal builds (the decoupled checking path).\n\n With strict? true, also reports calls to registered user functions whose\n concrete argument types provably make the body throw (opt-in,\n closed-world). user-sig-box accumulates registered defs across forms, so a\n def must precede its call \x2014; the same ordering RFC 0005 already assumes.")) (jolt-hash-map _o$6200 _o$6201))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "infer-body" (letrec ((infer-body (case-lambda ((body tenv) (let fnrec6202 ((body body) (tenv tenv)) (infer-body body tenv jolt-nil jolt-nil jolt-nil))) ((body tenv self-name self-key) (let fnrec6203 ((body body) (tenv tenv) (self-name self-name) (self-key self-key)) (infer-body body tenv self-name self-key jolt-nil))) ((body tenv self-name self-key self-params) (let fnrec6204 ((body body) (tenv tenv) (self-name self-name) (self-key self-key) (self-params self-params)) (let* ((env (jolt-assoc (jolt-invoke (var-deref "jolt.passes.types" "mk-env") #f #f) (keyword #f "self-name") self-name (keyword #f "self-key") self-key (keyword #f "self-params") self-params)) (r (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv env))) (let* ((_o$6205 (jolt-nth r 0)) (_o$6206 (jolt-nth r 1)) (_o$6207 (jolt-invoke (var-deref "clojure.core" "deref") (jolt-get env (keyword #f "calls"))))) (jolt-vector _o$6205 _o$6206 _o$6207)))))))) infer-body) (let* ((_o$6208 (keyword #f "doc")) (_o$6209 "Type `body` under tenv (local-name -> type). Returns [ret-type node' calls],\n where calls is the [[\"ns/name\" [arg-types...]] ...] this body invokes (for\n propagating into callee param types). Also accumulates escapes (read with\n collected-escapes after a full sweep). With self-name/self-key, a recursive\n self-call or fn-level recur in `body` is collected under self-key too, so a\n self-recursive fn's params are constrained by its recursion, not just callers.")) (jolt-hash-map _o$6208 _o$6209))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "impl-reg-ret" (letrec ((impl-reg-ret (lambda (node) (let fnrec6210 ((node node)) (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 (let* ((and__25__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (let* ((or__26__auto (jolt= "register-inline-method" (jolt-get f (keyword #f "name"))))) (if (jolt-truthy? or__26__auto) or__26__auto (jolt= "register-method" (jolt-get f (keyword #f "name"))))))) (if (jolt-truthy? and__25__auto) (jolt= 4 (jolt-count args)) and__25__auto)) and__25__auto)) (let* ((proto (jolt-get (jolt-nth args 1) (keyword #f "val"))) (method (jolt-get (jolt-nth args 2) (keyword #f "val"))) (fnn (jolt-nth args 3))) (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "string?") proto))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "string?") method))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "fn") (jolt-get fnn (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt-seq (jolt-get fnn (keyword #f "arities"))) and__25__auto)) and__25__auto)) and__25__auto))) (let* ((_o$6214 (jolt-invoke (var-deref "clojure.core" "str") proto "/" method)) (_o$6215 (jolt-nth (let* ((_a$6211 (var-deref "jolt.passes.types" "infer-body")) (_a$6212 (jolt-get (jolt-first (jolt-get fnn (keyword #f "arities"))) (keyword #f "body"))) (_a$6213 (jolt-hash-map))) (jolt-invoke _a$6211 _a$6212 _a$6213)) 0))) (jolt-vector _o$6214 _o$6215)) jolt-nil)) jolt-nil)) jolt-nil))))) impl-reg-ret) (let* ((_o$6216 (keyword #f "private")) (_o$6217 #t)) (jolt-hash-map _o$6216 _o$6217))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "walk-pm-rets" (letrec ((walk-pm-rets (lambda (node acc) (let fnrec6218 ((node node) (acc acc)) (let* ((kr (jolt-invoke (var-deref "jolt.passes.types" "impl-reg-ret") node)) (acc (if (jolt-truthy? kr) (let* ((_a$6220 (var-deref "clojure.core" "update")) (_a$6221 acc) (_a$6222 (jolt-nth kr 0)) (_a$6223 (lambda (t) (let fnrec6219 ((t t)) (if (jolt-truthy? t) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") t (jolt-nth kr 1)) (jolt-nth kr 1)))))) (jolt-invoke _a$6220 _a$6221 _a$6222 _a$6223)) acc))) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (a c) (let fnrec6224 ((a a) (c c)) (walk-pm-rets c a))) acc node)))))) walk-pm-rets) (let* ((_o$6225 (keyword #f "private")) (_o$6226 #t)) (jolt-hash-map _o$6225 _o$6226))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "collect-pm-rets!" (letrec ((collect-pm-rets! (lambda (nodes) (let fnrec6227 ((nodes nodes)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "pm-rets-box") (let* ((_a$6229 (lambda (acc n) (let fnrec6228 ((acc acc) (n n)) (jolt-invoke (var-deref "jolt.passes.types" "walk-pm-rets") n acc)))) (_a$6230 (jolt-hash-map)) (_a$6231 nodes)) (jolt-reduce _a$6229 _a$6230 _a$6231))))))) collect-pm-rets!) (let* ((_o$6232 (keyword #f "doc")) (_o$6233 "Scan the unit's nodes for protocol-method impl registrations and stash each\n method's joined impl-return type (record-shapes must already be installed).")) (jolt-hash-map _o$6232 _o$6233))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "reinfer-def" (letrec ((reinfer-def (lambda (def-node ptmap) (let fnrec6234 ((def-node def-node) (ptmap ptmap)) (let* ((fnode (jolt-get def-node (keyword #f "init"))) (env (jolt-invoke (var-deref "jolt.passes.types" "mk-env") #f #f)) (shapes (jolt-get env (keyword #f "record-shapes")))) (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$6240 (var-deref "clojure.core" "mapv")) (_a$6241 (lambda (a) (let fnrec6235 ((a a)) (let* ((pt (let* ((_a$6237 (lambda (m pr) (let fnrec6236 ((m m) (pr pr)) (let* ((nm (jolt-nth pr 0)) (e (jolt-get shapes (jolt-nth pr 1)))) (if (jolt-truthy? (let* ((and__25__auto e)) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-contains? m nm)) and__25__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") shapes)) m))))) (_a$6238 ptmap) (_a$6239 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$6237 _a$6238 _a$6239)))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pt env) 1)))))) (_a$6242 (jolt-get fnode (keyword #f "arities")))) (jolt-invoke _a$6240 _a$6241 _a$6242)))) def-node)))))) reinfer-def) (let* ((_o$6243 (keyword #f "doc")) (_o$6244 "Re-run inference on a stashed :def's fn arity bodies with param types seeded\n (ptmap: param-name -> type), returning the def with annotated bodies. The back\n end emits the result directly (no further passes), so the param-typed lookups\n keep their specialization. Used by the inter-procedural recompile.")) (jolt-hash-map _o$6243 _o$6244))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "phint-seed" (letrec ((phint-seed (lambda (params phints) (let fnrec6245 ((params params) (phints phints)) (let* ((shapes (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "config-box")) (keyword #f "record-shapes"))) (m (let* ((_a$6250 (lambda (acc pr) (let fnrec6246 ((acc acc) (pr pr)) (let* ((_a$6247 acc) (_a$6248 (jolt-nth pr 0)) (_a$6249 (jolt-nth pr 1))) (jolt-assoc _a$6247 _a$6248 _a$6249))))) (_a$6251 (jolt-hash-map)) (_a$6252 phints)) (jolt-reduce _a$6250 _a$6251 _a$6252)))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nm) (let fnrec6253 ((nm nm)) (let* ((ck (jolt-get m nm)) (e (let* ((and__25__auto ck)) (if (jolt-truthy? and__25__auto) (jolt-get shapes ck) and__25__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") shapes) jolt-nil)))) params)))))) phint-seed) (let* ((_o$6254 (keyword #f "doc")) (_o$6255 "Positional declared-hint type seeds for a fn arity. Given the param-name\n vector and the arity's :phints (a seq of [name ctor-key] pairs), return a\n vector parallel to params whose slot i is the resolved record TYPE of that\n param's ^Record hint (via the record-shapes registry), or nil. The\n whole-program fixpoint seeds these as a param-type FLOOR so a declared hint\n propagates to a fn's callees DURING inference \x2014; not only at the final re-emit\n (reinfer-def). Without it a hinted param with no callers stays :any through the\n fixpoint, so a field read off it (e.g. (:origin ^Ray r)) never tells a shared\n callee its arg is a Vec3.")) (jolt-hash-map _o$6254 _o$6255))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-seeds-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (let* ((_o$6256 (keyword #f "private")) (_o$6257 #t)) (jolt-hash-map _o$6256 _o$6257))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "param-seeds-for" (letrec ((param-seeds-for (lambda (k) (let fnrec6258 ((k k)) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "wp-seeds-box")) k))))) param-seeds-for) (let* ((_o$6259 (keyword #f "doc")) (_o$6260 "The param-name -> type seed map a top-level def should be reinferred with, or\n nil. Set by wp-infer!, read by run-passes during the final per-def emit.")) (jolt-hash-map _o$6259 _o$6260))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-num-seeds-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (let* ((_o$6261 (keyword #f "private")) (_o$6262 #t)) (jolt-hash-map _o$6261 _o$6262))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "param-num-seeds-for" (letrec ((param-num-seeds-for (lambda (k) (let fnrec6263 ((k k)) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "wp-num-seeds-box")) k))))) param-num-seeds-for) (let* ((_o$6264 (keyword #f "doc")) (_o$6265 "The param-name -> :double seed map for a def's hintless flonum params, or nil.")) (jolt-hash-map _o$6264 _o$6265))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-specializable" (letrec ((wp-specializable (lambda (nodes) (let fnrec6266 ((nodes nodes)) (let* ((_a$6281 (lambda (m d) (let fnrec6267 ((m m) (d d)) (let* ((f (jolt-get d (keyword #f "init")))) (if (let* ((and__25__auto (jolt= (keyword #f "def") (jolt-get d (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "fn") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count (jolt-get f (keyword #f "arities")))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-get (jolt-first (jolt-get f (keyword #f "arities"))) (keyword #f "rest"))) and__25__auto)) and__25__auto)) and__25__auto)) (let* ((a (jolt-first (jolt-get f (keyword #f "arities"))))) (let* ((_a$6278 m) (_a$6279 (let* ((_a$6268 (var-deref "clojure.core" "str")) (_a$6269 (jolt-get d (keyword #f "ns"))) (_a$6270 "/") (_a$6271 (jolt-get d (keyword #f "name")))) (jolt-invoke _a$6268 _a$6269 _a$6270 _a$6271))) (_a$6280 (let* ((_o$6272 (keyword #f "name")) (_o$6273 (jolt-get d (keyword #f "name"))) (_o$6274 (keyword #f "params")) (_o$6275 (jolt-get a (keyword #f "params"))) (_o$6276 (keyword #f "body")) (_o$6277 (jolt-get a (keyword #f "body")))) (jolt-hash-map _o$6272 _o$6273 _o$6274 _o$6275 _o$6276 _o$6277)))) (jolt-assoc _a$6278 _a$6279 _a$6280))) m))))) (_a$6282 (jolt-hash-map)) (_a$6283 nodes)) (jolt-reduce _a$6281 _a$6282 _a$6283)))))) wp-specializable) (let* ((_o$6284 (keyword #f "private")) (_o$6285 #t)) (jolt-hash-map _o$6284 _o$6285))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-empty-ptypes" (letrec ((wp-empty-ptypes (lambda (spec ks) (let fnrec6286 ((spec spec) (ks ks)) (let* ((_a$6288 (lambda (m k) (let fnrec6287 ((m m) (k k)) (jolt-assoc m k (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "repeat") (jolt-count (jolt-get (jolt-get spec k) (keyword #f "params"))) jolt-nil)))))) (_a$6289 (jolt-hash-map)) (_a$6290 ks)) (jolt-reduce _a$6288 _a$6289 _a$6290)))))) wp-empty-ptypes) (let* ((_o$6291 (keyword #f "private")) (_o$6292 #t)) (jolt-hash-map _o$6291 _o$6292))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-accum" (letrec ((wp-accum (lambda (pt spec calls) (let fnrec6293 ((pt pt) (spec spec) (calls calls)) (jolt-reduce (lambda (pt2 c) (let fnrec6294 ((pt2 pt2) (c c)) (let* ((callee (jolt-nth c 0)) (args (jolt-nth c 1))) (if (jolt-contains? spec callee) (let* ((cur (jolt-get pt2 callee))) (jolt-assoc pt2 callee (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "map-indexed") (lambda (i t) (let fnrec6295 ((i i) (t t)) (if (jolt-n< i (jolt-count args)) (jolt-invoke (var-deref "jolt.passes.types.lattice" "join") t (jolt-nth args i)) t))) cur)))) pt2)))) pt calls))))) wp-accum) (let* ((_o$6296 (keyword #f "private")) (_o$6297 #t)) (jolt-hash-map _o$6296 _o$6297))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-pass" (letrec ((wp-pass (lambda (nodes spec ks ptypes) (let fnrec6298 ((nodes nodes) (spec spec) (ks ks) (ptypes ptypes)) (let* ((_a$6329 (lambda (acc node) (let fnrec6299 ((acc acc) (node node)) (let* ((k (if (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) (let* ((_a$6300 (var-deref "clojure.core" "str")) (_a$6301 (jolt-get node (keyword #f "ns"))) (_a$6302 "/") (_a$6303 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$6300 _a$6301 _a$6302 _a$6303)) jolt-nil)) (s (let* ((and__25__auto k)) (if (jolt-truthy? and__25__auto) (jolt-get spec k) and__25__auto)))) (if (jolt-truthy? s) (let* ((r (let* ((_a$6307 (var-deref "jolt.passes.types" "infer-body")) (_a$6308 (jolt-get s (keyword #f "body"))) (_a$6309 (let* ((_a$6304 (var-deref "clojure.core" "zipmap")) (_a$6305 (jolt-get s (keyword #f "params"))) (_a$6306 (jolt-get ptypes k))) (jolt-invoke _a$6304 _a$6305 _a$6306))) (_a$6310 (jolt-get s (keyword #f "name"))) (_a$6311 k) (_a$6312 (jolt-get s (keyword #f "params")))) (jolt-invoke _a$6307 _a$6308 _a$6309 _a$6310 _a$6311 _a$6312)))) (let* ((_a$6319 (var-deref "clojure.core" "update")) (_a$6320 (let* ((_a$6315 (var-deref "clojure.core" "assoc-in")) (_a$6316 acc) (_a$6317 (let* ((_o$6313 (keyword #f "rets")) (_o$6314 k)) (jolt-vector _o$6313 _o$6314))) (_a$6318 (jolt-nth r 0))) (jolt-invoke _a$6315 _a$6316 _a$6317 _a$6318))) (_a$6321 (keyword #f "ptypes")) (_a$6322 (var-deref "jolt.passes.types" "wp-accum")) (_a$6323 spec) (_a$6324 (jolt-nth r 2))) (jolt-invoke _a$6319 _a$6320 _a$6321 _a$6322 _a$6323 _a$6324))) (jolt-invoke (var-deref "clojure.core" "update") acc (keyword #f "ptypes") (var-deref "jolt.passes.types" "wp-accum") spec (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer-body") node (jolt-hash-map)) 2))))))) (_a$6330 (let* ((_o$6325 (keyword #f "rets")) (_o$6326 (jolt-hash-map)) (_o$6327 (keyword #f "ptypes")) (_o$6328 (jolt-invoke (var-deref "jolt.passes.types" "wp-empty-ptypes") spec ks))) (jolt-hash-map _o$6325 _o$6326 _o$6327 _o$6328))) (_a$6331 nodes)) (jolt-reduce _a$6329 _a$6330 _a$6331)))))) wp-pass) (let* ((_o$6332 (keyword #f "private")) (_o$6333 #t)) (jolt-hash-map _o$6332 _o$6333))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "wp-infer!" (letrec ((wp-infer! (lambda (nodes) (let fnrec6334 ((nodes nodes)) (begin (jolt-invoke (var-deref "jolt.passes.types" "collect-pm-rets!") nodes) (let* ((spec (jolt-invoke (var-deref "jolt.passes.types" "wp-specializable") nodes)) (ks (jolt-keys spec))) (let* ((iter 0) (ptypes (jolt-invoke (var-deref "jolt.passes.types" "wp-empty-ptypes") spec ks)) (rets (jolt-hash-map))) (let loop6335 ((iter iter) (ptypes ptypes) (rets rets)) (begin (jolt-invoke (var-deref "jolt.passes.types" "set-rtenv!") (let* ((_a$6337 (lambda (m k) (let fnrec6336 ((m m) (k k)) (let* ((v (jolt-get rets k))) (if (jolt-some? v) (jolt-assoc m k v) m))))) (_a$6338 (jolt-hash-map)) (_a$6339 ks)) (jolt-reduce _a$6337 _a$6338 _a$6339))) (jolt-invoke (var-deref "jolt.passes.types" "reset-escapes!")) (let* ((pass (jolt-invoke (var-deref "jolt.passes.types" "wp-pass") nodes spec ks ptypes)) (escaped (jolt-invoke (var-deref "clojure.core" "set") (jolt-invoke (var-deref "jolt.passes.types" "collected-escapes")))) (new-ptypes (let* ((_a$6341 (lambda (m k) (let fnrec6340 ((m m) (k k)) (if (jolt-contains? escaped k) (jolt-assoc m k (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "repeat") (jolt-count (jolt-get m k)) (keyword #f "any")))) m)))) (_a$6342 (jolt-get pass (keyword #f "ptypes"))) (_a$6343 ks)) (jolt-reduce _a$6341 _a$6342 _a$6343))) (new-rets (jolt-get pass (keyword #f "rets"))) (converged? (let* ((and__25__auto (jolt= new-ptypes ptypes))) (if (jolt-truthy? and__25__auto) (jolt= new-rets rets) and__25__auto)))) (if (jolt-truthy? (let* ((or__26__auto converged?)) (if (jolt-truthy? or__26__auto) or__26__auto (jolt-n>= iter 16)))) (let* ((seed-ptypes (if (jolt-truthy? converged?) new-ptypes (jolt-reduce (lambda (m k) (let fnrec6344 ((m m) (k k)) (jolt-assoc m k (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "repeat") (jolt-count (jolt-get m k)) (keyword #f "any")))))) new-ptypes ks))) (pick (lambda (keep?) (let fnrec6345 ((keep? keep?)) (let* ((_a$6354 (lambda (m k) (let fnrec6346 ((m m) (k k)) (let* ((s (jolt-get spec k)) (pm (let* ((_a$6351 (lambda (pm pr) (let fnrec6347 ((pm pm) (pr pr)) (let* ((nm (jolt-nth pr 0)) (t (jolt-nth pr 1))) (if (jolt-truthy? (let* ((and__25__auto t)) (if (jolt-truthy? and__25__auto) (jolt-invoke keep? t) and__25__auto))) (jolt-assoc pm nm t) pm))))) (_a$6352 (jolt-hash-map)) (_a$6353 (let* ((_a$6348 jolt-vector) (_a$6349 (jolt-get s (keyword #f "params"))) (_a$6350 (jolt-get seed-ptypes k))) (jolt-map _a$6348 _a$6349 _a$6350)))) (jolt-reduce _a$6351 _a$6352 _a$6353)))) (if (jolt-truthy? (jolt-seq pm)) (jolt-assoc m k pm) m))))) (_a$6355 (jolt-hash-map)) (_a$6356 ks)) (jolt-reduce _a$6354 _a$6355 _a$6356)))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "wp-seeds-box") (jolt-invoke pick (lambda (t) (let fnrec6357 ((t t)) (let* ((and__25__auto (jolt-invoke (var-deref "clojure.core" "not=") t (keyword #f "any")))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "clojure.core" "not=") t (keyword #f "double")) and__25__auto)))))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "wp-num-seeds-box") (jolt-invoke pick (lambda (t) (let fnrec6358 ((t t)) (jolt= t (keyword #f "double")))))))) (loop6335 (jolt-inc iter) new-ptypes new-rets)))))))))))) wp-infer!) (let* ((_o$6359 (keyword #f "doc")) (_o$6360 "Run the closed-world param-type fixpoint over the unit's analyzed top-level\n nodes and stash the resulting per-def seed maps (read via param-seeds-for).\n record-shapes / protocol-methods must already be installed. Idempotent \x2014; resets\n the seed box; called once per build before per-form emit.")) (jolt-hash-map _o$6359 _o$6360))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "set-check-mode!" (letrec ((set-check-mode! (lambda (on strict?) (let fnrec6361 ((on on) (strict? strict?)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "check-mode-box") (let* ((_o$6362 (keyword #f "on")) (_o$6363 (if (jolt-truthy? on) #t #f)) (_o$6364 (keyword #f "strict")) (_o$6365 (if (jolt-truthy? strict?) #t #f))) (jolt-hash-map _o$6362 _o$6363 _o$6364 _o$6365))))))) set-check-mode!) (let* ((_o$6366 (keyword #f "doc")) (_o$6367 "Enable/disable checking during the next run-passes inference (direct-link).")) (jolt-hash-map _o$6366 _o$6367))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "take-diags!" (letrec ((take-diags! (lambda () (let fnrec6368 () (let* ((d (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "last-diags-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "last-diags-box") (jolt-vector)) d)))))) take-diags!) (let* ((_o$6369 (keyword #f "doc")) (_o$6370 "Diagnostics accumulated by the last checking run-passes; clears the buffer.")) (jolt-hash-map _o$6369 _o$6370))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "run-inference" (letrec ((run-inference (lambda (opt) (let fnrec6371 ((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"))) (let* ((env (jolt-invoke (var-deref "jolt.passes.types" "mk-env") #t (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "strict")))) (r (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt env))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "last-diags-box") (jolt-invoke (var-deref "clojure.core" "deref") (jolt-get env (keyword #f "diags")))) r)) (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt (jolt-invoke (var-deref "jolt.passes.types" "mk-env") #f #f))))))) run-inference) (let* ((_o$6372 (keyword #f "doc")) (_o$6373 "Type-infer the optimized node (the inference walk specializes struct-safe\n lookups). When check mode is on (set-check-mode!), the same walk also emits\n success-type diagnostics, stashed for take-diags! to drain afterward. Pulled\n out of run-passes so the checking state stays private to this namespace.")) (jolt-hash-map _o$6372 _o$6373))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes" "inline-fixpoint-cap" 8 (let* ((_o$6374 (keyword #f "private")) (_o$6375 #t)) (jolt-hash-map _o$6374 _o$6375))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes" "inline-eligible?" (letrec ((inline-eligible? (lambda (node) (let fnrec6376 ((node node)) (let* ((and__25__auto (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt-get node (keyword #f "init")))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "fn") (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= 1 (jolt-count (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "arities")))))) (if (jolt-truthy? and__25__auto) (jolt-not (jolt-get (jolt-first (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "arities"))) (keyword #f "rest"))) and__25__auto)) and__25__auto)) and__25__auto)) and__25__auto)))))) inline-eligible?) (let* ((_o$6377 (keyword #f "private")) (_o$6378 #t)) (jolt-hash-map _o$6377 _o$6378))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes" "stash-of" (letrec ((stash-of (lambda (node) (let fnrec6379 ((node node)) (let* ((a (jolt-first (jolt-get (jolt-get node (keyword #f "init")) (keyword #f "arities"))))) (let* ((_o$6380 (keyword #f "params")) (_o$6381 (jolt-get a (keyword #f "params"))) (_o$6382 (keyword #f "body")) (_o$6383 (jolt-get a (keyword #f "body"))) (_o$6384 (keyword #f "nhints")) (_o$6385 (jolt-get a (keyword #f "nhints"))) (_o$6386 (keyword #f "ret")) (_o$6387 (jolt-get a (keyword #f "ret-nhint")))) (jolt-hash-map _o$6380 _o$6381 _o$6382 _o$6383 _o$6384 _o$6385 _o$6386 _o$6387))))))) stash-of) (let* ((_o$6388 (keyword #f "private")) (_o$6389 #t)) (jolt-hash-map _o$6388 _o$6389))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes" "inject-wp-nhints" (letrec ((inject-wp-nhints (lambda (node) (let fnrec6390 ((node node)) (let* ((seeds (if (jolt= (keyword #f "def") (jolt-get node (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.types" "param-num-seeds-for") (let* ((_a$6391 (var-deref "clojure.core" "str")) (_a$6392 (jolt-get node (keyword #f "ns"))) (_a$6393 "/") (_a$6394 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$6391 _a$6392 _a$6393 _a$6394))) jolt-nil)) (f (jolt-get node (keyword #f "init")))) (if (jolt-truthy? (let* ((and__25__auto seeds)) (if (jolt-truthy? and__25__auto) (let* ((and__25__auto (jolt= (keyword #f "fn") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__25__auto) (jolt= 1 (jolt-count (jolt-get f (keyword #f "arities")))) and__25__auto)) and__25__auto))) (let* ((a (jolt-first (jolt-get f (keyword #f "arities")))) (have (let* ((_a$6395 (jolt-hash-set)) (_a$6396 (jolt-map jolt-first (jolt-get a (keyword #f "nhints"))))) (jolt-into _a$6395 _a$6396))) (add (jolt-invoke (var-deref "clojure.core" "mapcat") (lambda (G__137) (let fnrec6397 ((G__137 G__137)) (let* ((G__138 G__137) (p (jolt-nth G__138 0 jolt-nil)) (k (jolt-nth G__138 1 jolt-nil))) (if (jolt-not (jolt-invoke have p)) (jolt-list (let* ((_o$6398 p) (_o$6399 k)) (jolt-vector _o$6398 _o$6399))) (jolt-vector))))) seeds))) (jolt-assoc node (keyword #f "init") (jolt-assoc f (keyword #f "arities") (jolt-vector (jolt-assoc a (keyword #f "nhints") (jolt-invoke (var-deref "clojure.core" "vec") (jolt-concat (jolt-get a (keyword #f "nhints")) add))))))) node)))))) inject-wp-nhints) (let* ((_o$6400 (keyword #f "doc")) (_o$6401 "Merge the whole-program :double param seeds into a def's arity :nhints as\n synthetic ^double hints, so the numeric pass unboxes a hintless fn whose callers\n all pass flonums (the entry coercion exact->inexact is a no-op on a proven\n flonum). Only un-hinted params are added \x2014; an explicit hint wins. A no-op unless\n the closed-world fixpoint typed a param :double (param-num-seeds-for).")) (jolt-hash-map _o$6400 _o$6401))))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes" "run-passes" (letrec ((run-passes (lambda (node ctx) (let fnrec6402 ((node node) (ctx ctx)) (begin (if (jolt-truthy? (let* ((and__25__auto (jolt-invoke (var-deref "jolt.host" "inline-enabled?") ctx))) (if (jolt-truthy? and__25__auto) (jolt-invoke (var-deref "jolt.passes" "inline-eligible?") node) and__25__auto))) (let* ((_a$6403 (var-deref "jolt.host" "stash-inline!")) (_a$6404 ctx) (_a$6405 (jolt-get node (keyword #f "ns"))) (_a$6406 (jolt-get node (keyword #f "name"))) (_a$6407 (jolt-invoke (var-deref "jolt.passes" "stash-of") node))) (jolt-invoke _a$6403 _a$6404 _a$6405 _a$6406 _a$6407)) jolt-nil) (jolt-invoke (var-deref "jolt.passes.numeric" "annotate") (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))) (_ (jolt-invoke (var-deref "jolt.passes.types" "set-protocol-methods!") (jolt-invoke (var-deref "jolt.host" "protocol-methods") ctx))) (opt (let* ((i 0) (n (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node))) (let loop6408 ((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__25__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "dirty")))) (if (jolt-truthy? and__25__auto) (jolt-n< i (var-deref "jolt.passes" "inline-fixpoint-cap")) and__25__auto))) (loop6408 (jolt-inc i) n2) n2)))))) (seeds (if (jolt= (keyword #f "def") (jolt-get opt (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.types" "param-seeds-for") (let* ((_a$6409 (var-deref "clojure.core" "str")) (_a$6410 (jolt-get opt (keyword #f "ns"))) (_a$6411 "/") (_a$6412 (jolt-get opt (keyword #f "name")))) (jolt-invoke _a$6409 _a$6410 _a$6411 _a$6412))) jolt-nil))) (jolt-invoke (var-deref "jolt.passes" "inject-wp-nhints") (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (if (jolt-truthy? seeds) (jolt-invoke (var-deref "jolt.passes.types" "reinfer-def") opt seeds) (jolt-invoke (var-deref "jolt.passes.types" "run-inference") opt))))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node)))))))) run-passes) (let* ((_o$6413 (keyword #f "doc")) (_o$6414 "All passes, in order. The back end applies this to every analyzed form. When\n inlining is enabled for the unit (user code under direct-linking),\n run inline + flatten + scalar-replace + const-fold to a capped fixpoint \x2014;\n inlining exposes map literals to lookups, scalar-replace collapses them, which\n may expose more \x2014; then a collection-type inference pass (optionally\n also emitting success diagnostics) that auto-drops the lookup guard where the\n type is proven. Otherwise (core + bootstrap) just const-fold, as before.\n\n numeric/annotate runs last in both branches (hint-directed fl*/fx* arithmetic);\n it benefits open builds too, so it is not gated on inlining.")) (jolt-hash-map _o$6413 _o$6414)))) |