The fold/inline/types passes and the jolt.passes façade were baked into neither seed half and never invoked: compile-eval and build went analyze -> emit directly, and `jolt build --opt` flipped an optimize flag that nothing consumed. - Compile the passes into the image (emit-image manifest): fold, inline, types, then the jolt.passes façade, after jolt.ir. - compile-eval and build.ss now run jolt.passes/run-passes between analyze and emit. Off the direct-link path it is a pure const-fold; `jolt build --opt` turns on inline + flatten + scalar-replace + type inference (it sets hc-optimize?, which inline-enabled? reads). - The seed minter (emit-image) stays analyze -> emit, so the seed is built un-optimized and the self-host fixpoint is unaffected. build-smoke already exercised --opt; it now actually optimizes and still matches the release binary's output. Corpus floor and the fixpoint are green.
446 lines
No EOL
227 KiB
Scheme
446 lines
No EOL
227 KiB
Scheme
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "const" (letrec ((const (lambda (v) (let fnrec4393 ((v v)) (let* ((_o$4394 (keyword #f "op")) (_o$4395 (keyword #f "const")) (_o$4396 (keyword #f "val")) (_o$4397 v)) (jolt-hash-map _o$4394 _o$4395 _o$4396 _o$4397)))))) const)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "local" (letrec ((local (lambda (name) (let fnrec4398 ((name name)) (let* ((_o$4399 (keyword #f "op")) (_o$4400 (keyword #f "local")) (_o$4401 (keyword #f "name")) (_o$4402 name)) (jolt-hash-map _o$4399 _o$4400 _o$4401 _o$4402)))))) local)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "var-ref" (letrec ((var-ref (lambda (ns name) (let fnrec4403 ((ns ns) (name name)) (let* ((_o$4404 (keyword #f "op")) (_o$4405 (keyword #f "var")) (_o$4406 (keyword #f "ns")) (_o$4407 ns) (_o$4408 (keyword #f "name")) (_o$4409 name)) (jolt-hash-map _o$4404 _o$4405 _o$4406 _o$4407 _o$4408 _o$4409)))))) var-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "the-var" (letrec ((the-var (lambda (ns name) (let fnrec4410 ((ns ns) (name name)) (let* ((_o$4411 (keyword #f "op")) (_o$4412 (keyword #f "the-var")) (_o$4413 (keyword #f "ns")) (_o$4414 ns) (_o$4415 (keyword #f "name")) (_o$4416 name)) (jolt-hash-map _o$4411 _o$4412 _o$4413 _o$4414 _o$4415 _o$4416)))))) the-var)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-ref" (letrec ((host-ref (lambda (name) (let fnrec4417 ((name name)) (let* ((_o$4418 (keyword #f "op")) (_o$4419 (keyword #f "host")) (_o$4420 (keyword #f "name")) (_o$4421 name)) (jolt-hash-map _o$4418 _o$4419 _o$4420 _o$4421)))))) host-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-static" (letrec ((host-static (lambda (class member) (let fnrec4422 ((class class) (member member)) (let* ((_o$4423 (keyword #f "op")) (_o$4424 (keyword #f "host-static")) (_o$4425 (keyword #f "class")) (_o$4426 class) (_o$4427 (keyword #f "member")) (_o$4428 member)) (jolt-hash-map _o$4423 _o$4424 _o$4425 _o$4426 _o$4427 _o$4428)))))) host-static)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-new" (letrec ((host-new (lambda (class args) (let fnrec4429 ((class class) (args args)) (let* ((_o$4430 (keyword #f "op")) (_o$4431 (keyword #f "host-new")) (_o$4432 (keyword #f "class")) (_o$4433 class) (_o$4434 (keyword #f "args")) (_o$4435 args)) (jolt-hash-map _o$4430 _o$4431 _o$4432 _o$4433 _o$4434 _o$4435)))))) host-new)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "if-node" (letrec ((if-node (lambda (test then _else) (let fnrec4436 ((test test) (then then) (_else _else)) (let* ((_o$4437 (keyword #f "op")) (_o$4438 (keyword #f "if")) (_o$4439 (keyword #f "test")) (_o$4440 test) (_o$4441 (keyword #f "then")) (_o$4442 then) (_o$4443 (keyword #f "else")) (_o$4444 _else)) (jolt-hash-map _o$4437 _o$4438 _o$4439 _o$4440 _o$4441 _o$4442 _o$4443 _o$4444)))))) if-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "do-node" (letrec ((do-node (lambda (statements ret) (let fnrec4445 ((statements statements) (ret ret)) (let* ((_o$4446 (keyword #f "op")) (_o$4447 (keyword #f "do")) (_o$4448 (keyword #f "statements")) (_o$4449 statements) (_o$4450 (keyword #f "ret")) (_o$4451 ret)) (jolt-hash-map _o$4446 _o$4447 _o$4448 _o$4449 _o$4450 _o$4451)))))) do-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "invoke" (letrec ((invoke (lambda (f args) (let fnrec4452 ((f f) (args args)) (let* ((_o$4453 (keyword #f "op")) (_o$4454 (keyword #f "invoke")) (_o$4455 (keyword #f "fn")) (_o$4456 f) (_o$4457 (keyword #f "args")) (_o$4458 args)) (jolt-hash-map _o$4453 _o$4454 _o$4455 _o$4456 _o$4457 _o$4458)))))) invoke)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "def-node" (letrec ((def-node (case-lambda ((ns name init) (let fnrec4459 ((ns ns) (name name) (init init)) (let* ((_o$4460 (keyword #f "op")) (_o$4461 (keyword #f "def")) (_o$4462 (keyword #f "ns")) (_o$4463 ns) (_o$4464 (keyword #f "name")) (_o$4465 name) (_o$4466 (keyword #f "init")) (_o$4467 init)) (jolt-hash-map _o$4460 _o$4461 _o$4462 _o$4463 _o$4464 _o$4465 _o$4466 _o$4467)))) ((ns name init meta) (let fnrec4468 ((ns ns) (name name) (init init) (meta meta)) (if (jolt-truthy? meta) (let* ((_o$4469 (keyword #f "op")) (_o$4470 (keyword #f "def")) (_o$4471 (keyword #f "ns")) (_o$4472 ns) (_o$4473 (keyword #f "name")) (_o$4474 name) (_o$4475 (keyword #f "init")) (_o$4476 init) (_o$4477 (keyword #f "meta")) (_o$4478 meta)) (jolt-hash-map _o$4469 _o$4470 _o$4471 _o$4472 _o$4473 _o$4474 _o$4475 _o$4476 _o$4477 _o$4478)) (let* ((_o$4479 (keyword #f "op")) (_o$4480 (keyword #f "def")) (_o$4481 (keyword #f "ns")) (_o$4482 ns) (_o$4483 (keyword #f "name")) (_o$4484 name) (_o$4485 (keyword #f "init")) (_o$4486 init)) (jolt-hash-map _o$4479 _o$4480 _o$4481 _o$4482 _o$4483 _o$4484 _o$4485 _o$4486)))))))) def-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "let-node" (letrec ((let-node (lambda (bindings body) (let fnrec4487 ((bindings bindings) (body body)) (let* ((_o$4488 (keyword #f "op")) (_o$4489 (keyword #f "let")) (_o$4490 (keyword #f "bindings")) (_o$4491 bindings) (_o$4492 (keyword #f "body")) (_o$4493 body)) (jolt-hash-map _o$4488 _o$4489 _o$4490 _o$4491 _o$4492 _o$4493)))))) let-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "fn-node" (letrec ((fn-node (lambda (name arities) (let fnrec4494 ((name name) (arities arities)) (if (jolt-truthy? name) (let* ((_o$4495 (keyword #f "op")) (_o$4496 (keyword #f "fn")) (_o$4497 (keyword #f "name")) (_o$4498 name) (_o$4499 (keyword #f "arities")) (_o$4500 arities)) (jolt-hash-map _o$4495 _o$4496 _o$4497 _o$4498 _o$4499 _o$4500)) (let* ((_o$4501 (keyword #f "op")) (_o$4502 (keyword #f "fn")) (_o$4503 (keyword #f "arities")) (_o$4504 arities)) (jolt-hash-map _o$4501 _o$4502 _o$4503 _o$4504))))))) fn-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "vector-node" (letrec ((vector-node (lambda (items) (let fnrec4505 ((items items)) (let* ((_o$4506 (keyword #f "op")) (_o$4507 (keyword #f "vector")) (_o$4508 (keyword #f "items")) (_o$4509 items)) (jolt-hash-map _o$4506 _o$4507 _o$4508 _o$4509)))))) vector-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-node" (letrec ((map-node (lambda (pairs) (let fnrec4510 ((pairs pairs)) (let* ((_o$4511 (keyword #f "op")) (_o$4512 (keyword #f "map")) (_o$4513 (keyword #f "pairs")) (_o$4514 pairs)) (jolt-hash-map _o$4511 _o$4512 _o$4513 _o$4514)))))) map-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "set-node" (letrec ((set-node (lambda (items) (let fnrec4515 ((items items)) (let* ((_o$4516 (keyword #f "op")) (_o$4517 (keyword #f "set")) (_o$4518 (keyword #f "items")) (_o$4519 items)) (jolt-hash-map _o$4516 _o$4517 _o$4518 _o$4519)))))) set-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "quote-node" (letrec ((quote-node (lambda (form) (let fnrec4520 ((form form)) (let* ((_o$4521 (keyword #f "op")) (_o$4522 (keyword #f "quote")) (_o$4523 (keyword #f "form")) (_o$4524 form)) (jolt-hash-map _o$4521 _o$4522 _o$4523 _o$4524)))))) quote-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "throw-node" (letrec ((throw-node (lambda (expr) (let fnrec4525 ((expr expr)) (let* ((_o$4526 (keyword #f "op")) (_o$4527 (keyword #f "throw")) (_o$4528 (keyword #f "expr")) (_o$4529 expr)) (jolt-hash-map _o$4526 _o$4527 _o$4528 _o$4529)))))) throw-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-ir-children" (letrec ((map-ir-children (lambda (f node) (let fnrec4530 ((f f) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$4531 node) (_a$4532 (keyword #f "test")) (_a$4533 (jolt-invoke f (jolt-get node (keyword #f "test")))) (_a$4534 (keyword #f "then")) (_a$4535 (jolt-invoke f (jolt-get node (keyword #f "then")))) (_a$4536 (keyword #f "else")) (_a$4537 (jolt-invoke f (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$4531 _a$4532 _a$4533 _a$4534 _a$4535 _a$4536 _a$4537)) (if (jolt= op (keyword #f "do")) (let* ((_a$4538 node) (_a$4539 (keyword #f "statements")) (_a$4540 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "statements")))) (_a$4541 (keyword #f "ret")) (_a$4542 (jolt-invoke f (jolt-get node (keyword #f "ret"))))) (jolt-assoc _a$4538 _a$4539 _a$4540 _a$4541 _a$4542)) (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 "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$4543 node) (_a$4544 (keyword #f "obj")) (_a$4545 (jolt-invoke f (jolt-get node (keyword #f "obj")))) (_a$4546 (keyword #f "val")) (_a$4547 (jolt-invoke f (jolt-get node (keyword #f "val"))))) (jolt-assoc _a$4543 _a$4544 _a$4545 _a$4546 _a$4547)) (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 "invoke")) (let* ((_a$4548 node) (_a$4549 (keyword #f "fn")) (_a$4550 (jolt-invoke f (jolt-get node (keyword #f "fn")))) (_a$4551 (keyword #f "args")) (_a$4552 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$4548 _a$4549 _a$4550 _a$4551 _a$4552)) (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$4556 (var-deref "clojure.core" "mapv")) (_a$4557 (lambda (pr) (let fnrec4553 ((pr pr)) (let* ((_o$4554 (jolt-invoke f (jolt-nth pr 0))) (_o$4555 (jolt-invoke f (jolt-nth pr 1)))) (jolt-vector _o$4554 _o$4555))))) (_a$4558 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$4556 _a$4557 _a$4558))) (if (jolt= op (keyword #f "let")) (let* ((_a$4565 node) (_a$4566 (keyword #f "bindings")) (_a$4567 (let* ((_a$4562 (var-deref "clojure.core" "mapv")) (_a$4563 (lambda (b) (let fnrec4559 ((b b)) (let* ((_o$4560 (jolt-nth b 0)) (_o$4561 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$4560 _o$4561))))) (_a$4564 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$4562 _a$4563 _a$4564))) (_a$4568 (keyword #f "body")) (_a$4569 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$4565 _a$4566 _a$4567 _a$4568 _a$4569)) (if (jolt= op (keyword #f "loop")) (let* ((_a$4576 node) (_a$4577 (keyword #f "bindings")) (_a$4578 (let* ((_a$4573 (var-deref "clojure.core" "mapv")) (_a$4574 (lambda (b) (let fnrec4570 ((b b)) (let* ((_o$4571 (jolt-nth b 0)) (_o$4572 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$4571 _o$4572))))) (_a$4575 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$4573 _a$4574 _a$4575))) (_a$4579 (keyword #f "body")) (_a$4580 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$4576 _a$4577 _a$4578 _a$4579 _a$4580)) (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$4582 (var-deref "clojure.core" "mapv")) (_a$4583 (lambda (a) (let fnrec4581 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-invoke f (jolt-get a (keyword #f "body"))))))) (_a$4584 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$4582 _a$4583 _a$4584))) (if (jolt= op (keyword #f "def")) (jolt-assoc node (keyword #f "init") (jolt-invoke f (jolt-get node (keyword #f "init")))) (if (jolt= op (keyword #f "host-call")) (let* ((_a$4585 node) (_a$4586 (keyword #f "target")) (_a$4587 (jolt-invoke f (jolt-get node (keyword #f "target")))) (_a$4588 (keyword #f "args")) (_a$4589 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$4585 _a$4586 _a$4587 _a$4588 _a$4589)) (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))
|
|
(declare-var! "jolt.analyzer" "analyze"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "handled" (let* ((_o$4590 "quote") (_o$4591 "if") (_o$4592 "do") (_o$4593 "def") (_o$4594 "fn*") (_o$4595 "let*") (_o$4596 "loop*") (_o$4597 "recur") (_o$4598 "throw") (_o$4599 "try") (_o$4600 "syntax-quote") (_o$4601 "var") (_o$4602 "letfn") (_o$4603 "set!") (_o$4604 "defmacro")) (jolt-hash-set _o$4590 _o$4591 _o$4592 _o$4593 _o$4594 _o$4595 _o$4596 _o$4597 _o$4598 _o$4599 _o$4600 _o$4601 _o$4602 _o$4603 _o$4604)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "uncompilable" (letrec ((uncompilable (lambda (why) (let fnrec4605 ((why why)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt/uncompilable: " why)))))) uncompilable)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "gen-name" (letrec ((gen-name (lambda (prefix) (let fnrec4606 ((prefix prefix)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.analyzer" "gensym-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.analyzer" "gensym-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") "_r$" prefix n))))))) gen-name)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "empty-env" (letrec ((empty-env (lambda () (let fnrec4607 () (let* ((_o$4608 (keyword #f "locals")) (_o$4609 (jolt-hash-set)) (_o$4610 (keyword #f "hints")) (_o$4611 (jolt-hash-map))) (jolt-hash-map _o$4608 _o$4609 _o$4610 _o$4611)))))) empty-env)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "local?" (letrec ((local? (lambda (env nm) (let fnrec4612 ((env env) (nm nm)) (jolt-contains? (jolt-get env (keyword #f "locals")) nm))))) local?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "add-locals" (letrec ((add-locals (lambda (env names) (let fnrec4613 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__47_) (let fnrec4614 ((p__47_ p__47_)) (jolt-reduce jolt-conj p__47_ names)))))))) add-locals)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "with-recur" (letrec ((with-recur (lambda (env name) (let fnrec4615 ((env env) (name name)) (jolt-assoc env (keyword #f "recur") name))))) with-recur)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "hint-of" (letrec ((hint-of (lambda (ctx sym) (let fnrec4616 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "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__13__auto t)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "record-type?") ctx t) and__13__auto))) (keyword #f "struct") jolt-nil)) jolt-nil)))))))) hint-of)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "add-hint" (letrec ((add-hint (lambda (env nm h) (let fnrec4617 ((env env) (nm nm) (h h)) (if (jolt-truthy? h) (jolt-assoc env (keyword #f "hints") (jolt-assoc (jolt-get env (keyword #f "hints")) nm h)) env))))) add-hint)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "phint-of" (letrec ((phint-of (lambda (ctx sym) (let fnrec4618 ((ctx ctx) (sym sym)) (let* ((m (jolt-invoke (var-deref "jolt.host" "form-sym-meta") sym))) (if (jolt-truthy? m) (let* ((t (jolt-get m (keyword #f "tag")))) (if (jolt-truthy? t) (jolt-invoke (var-deref "jolt.host" "record-ctor-key") ctx t) jolt-nil)) jolt-nil)))))) phint-of)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-seq" (letrec ((analyze-seq (lambda (ctx forms env) (let fnrec4619 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__48_) (let fnrec4620 ((p__48_ p__48_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__48_ 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$4621 (var-deref "jolt.ir" "do-node")) (_a$4622 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$4623 (jolt-peek v))) (jolt-invoke _a$4621 _a$4622 _a$4623)) jolt-nil)))))))) analyze-seq)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec4624 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop4625 ((i i) (env env) (pairs pairs)) (if (< i (jolt-count bvec)) (let* ((bsym (jolt-nth bvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") bsym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring binding") jolt-nil) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") bsym)) (init (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth bvec (jolt-inc i)) env))) (let* ((_a$4632 (+ i 2)) (_a$4633 (let* ((_a$4626 (var-deref "jolt.analyzer" "add-hint")) (_a$4627 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$4628 nm) (_a$4629 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$4626 _a$4627 _a$4628 _a$4629))) (_a$4634 (jolt-conj pairs (let* ((_o$4630 nm) (_o$4631 init)) (jolt-vector _o$4630 _o$4631))))) (loop4625 _a$4632 _a$4633 _a$4634))))) (let* ((_o$4635 pairs) (_o$4636 env)) (jolt-vector _o$4635 _o$4636))))))))) analyze-bindings)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec4637 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector))) (let loop4638 ((i i) (fixed fixed) (rest-name rest-name) (hints hints) (phints phints)) (if (< i (jolt-count pvec)) (let* ((p (jolt-nth pvec i))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") p)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn param") jolt-nil) (if (jolt= "&" (jolt-invoke (var-deref "jolt.host" "form-sym-name") p)) (let* ((r (jolt-nth pvec (jolt-inc i)))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") r)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "destructuring fn rest") jolt-nil) (let* ((_a$4639 (+ i 2)) (_a$4640 fixed) (_a$4641 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$4642 hints) (_a$4643 phints)) (loop4638 _a$4639 _a$4640 _a$4641 _a$4642 _a$4643)))) (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))) (let* ((_a$4648 (jolt-inc i)) (_a$4649 (jolt-conj fixed nm)) (_a$4650 rest-name) (_a$4651 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$4644 nm) (_o$4645 h)) (jolt-vector _o$4644 _o$4645))) hints)) (_a$4652 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$4646 nm) (_o$4647 ph)) (jolt-vector _o$4646 _o$4647))) phints))) (loop4638 _a$4648 _a$4649 _a$4650 _a$4651 _a$4652)))))) (let* ((_o$4653 (keyword #f "fixed")) (_o$4654 fixed) (_o$4655 (keyword #f "rest")) (_o$4656 rest-name) (_o$4657 (keyword #f "hints")) (_o$4658 hints) (_o$4659 (keyword #f "phints")) (_o$4660 phints)) (jolt-hash-map _o$4653 _o$4654 _o$4655 _o$4656 _o$4657 _o$4658 _o$4659 _o$4660))))))))) parse-params)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec4661 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop4662 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop4663 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop4663 (jolt-inc j)) jolt-nil))))))) (let* ((_a$4664 (jolt-inc i)) (_a$4665 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop4662 _a$4664 _a$4665))) out)))))))) uniquify-params)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec4666 ((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$4667 (var-deref "clojure.core" "str")) (_a$4668 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$4669 "/") (_a$4670 (let* ((or__14__auto fn-name)) (if (jolt-truthy? or__14__auto) or__14__auto "fn"))) (_a$4671 "--")) (jolt-invoke _a$4667 _a$4668 _a$4669 _a$4670 _a$4671)))) (names (let* ((G__41 (jolt-invoke (var-deref "clojure.core" "vec") fixed))) (let* ((G__42 (if (jolt-truthy? rst) (jolt-conj G__41 rst) G__41))) (let* ((G__43 (if (jolt-truthy? fn-name) (jolt-conj G__42 fn-name) G__42))) G__43)))) (env0 (jolt-invoke (var-deref "jolt.analyzer" "with-recur") (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names) rname)) (env* (let* ((_a$4677 (lambda (e pr) (let fnrec4672 ((e e) (pr pr)) (let* ((_a$4673 (var-deref "jolt.analyzer" "add-hint")) (_a$4674 e) (_a$4675 (jolt-nth pr 0)) (_a$4676 (jolt-nth pr 1))) (jolt-invoke _a$4673 _a$4674 _a$4675 _a$4676))))) (_a$4678 env0) (_a$4679 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$4677 _a$4678 _a$4679))) (arity (let* ((_o$4680 (keyword #f "params")) (_o$4681 fixed) (_o$4682 (keyword #f "recur-name")) (_o$4683 rname) (_o$4684 (keyword #f "body")) (_o$4685 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$4680 _o$4681 _o$4682 _o$4683 _o$4684 _o$4685))) (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))) (if (jolt-truthy? rst) (jolt-assoc arity (keyword #f "rest") rst) arity)))))) analyze-arity)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "strip-arglist-meta" (letrec ((strip-arglist-meta (lambda (form) (let fnrec4686 ((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__13__auto (jolt= 3 (jolt-count es)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first es)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "with-meta" (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first es))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-vec?") (jolt-nth es 1)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-nth es 1) form)) form))))) strip-arglist-meta)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-fn" (letrec ((analyze-fn (lambda (ctx items env) (let fnrec4687 ((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 fnrec4688 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$4689 (var-deref "jolt.analyzer" "analyze-arity")) (_a$4690 ctx) (_a$4691 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$4692 (jolt-rest cl)) (_a$4693 env) (_a$4694 fn-name)) (jolt-invoke _a$4689 _a$4690 _a$4691 _a$4692 _a$4693 _a$4694))))) rest-items)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "fn: bad params") jolt-nil)))))))) analyze-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-try" (letrec ((analyze-try (lambda (ctx items env) (let fnrec4695 ((ctx ctx) (items items) (env env)) (let* ((clauses (jolt-rest items)) (body (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector))) (catch-sym (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil)) (catch-body (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil)) (finally-body (jolt-invoke (var-deref "clojure.core" "atom") jolt-nil))) (begin (begin (jolt-count (jolt-map (lambda (c) (let fnrec4696 ((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__13__auto head)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") head) and__13__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 (jolt-truthy? (let* ((or__14__auto (< (jolt-count cl) 3))) (if (jolt-truthy? or__14__auto) or__14__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" "reset!") catch-sym (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth cl 2))) (jolt-invoke (var-deref "clojure.core" "reset!") catch-body (jolt-drop 3 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$4697 (keyword #f "op")) (_o$4698 (keyword #f "try")) (_o$4699 (keyword #f "body")) (_o$4700 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$4697 _o$4698 _o$4699 _o$4700))) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") catch-body)) (let* ((_a$4705 n) (_a$4706 (keyword #f "catch-sym")) (_a$4707 (jolt-invoke (var-deref "clojure.core" "deref") catch-sym)) (_a$4708 (keyword #f "catch-body")) (_a$4709 (let* ((_a$4701 (var-deref "jolt.analyzer" "analyze-seq")) (_a$4702 ctx) (_a$4703 (jolt-invoke (var-deref "clojure.core" "deref") catch-body)) (_a$4704 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector (jolt-invoke (var-deref "clojure.core" "deref") catch-sym))))) (jolt-invoke _a$4701 _a$4702 _a$4703 _a$4704)))) (jolt-assoc _a$4705 _a$4706 _a$4707 _a$4708 _a$4709)) n)) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") finally-body)) (jolt-assoc n (keyword #f "finally") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") finally-body) env)) n))) n))))))) analyze-try)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-letfn" (letrec ((analyze-letfn (lambda (ctx items env) (let fnrec4710 ((ctx ctx) (items items) (env env)) (let* ((specs (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-vec-items") (jolt-nth items 1)))) (names (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__49_) (let fnrec4711 ((p__49_ p__49_)) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") p__49_)))))) specs)) (env* (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env names)) (binds (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (spec) (let fnrec4712 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$4713 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$4714 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$4713 _o$4714))))) specs))) (let* ((_o$4715 (keyword #f "op")) (_o$4716 (keyword #f "let")) (_o$4717 (keyword #f "letrec")) (_o$4718 #t) (_o$4719 (keyword #f "bindings")) (_o$4720 binds) (_o$4721 (keyword #f "body")) (_o$4722 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$4715 _o$4716 _o$4717 _o$4718 _o$4719 _o$4720 _o$4721 _o$4722))))))) analyze-letfn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec4723 ((ctx ctx) (op op) (items items) (env env)) (let* ((G__44 op)) (if (jolt= G__44 "quote") (jolt-invoke (var-deref "jolt.ir" "quote-node") (jolt-invoke (var-deref "clojure.core" "second") items)) (if (jolt= G__44 "if") (begin (if (jolt-truthy? (let* ((or__14__auto (< (jolt-count items) 3))) (if (jolt-truthy? or__14__auto) or__14__auto (> (jolt-count items) 4)))) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Wrong number of args (" (jolt-dec (jolt-count items)) ") passed to: if")) jolt-nil) (let* ((_a$4724 (var-deref "jolt.ir" "if-node")) (_a$4725 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$4726 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$4727 (if (> (jolt-count items) 3) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 3) env) (jolt-invoke (var-deref "jolt.ir" "const") jolt-nil)))) (jolt-invoke _a$4724 _a$4725 _a$4726 _a$4727))) (if (jolt= G__44 "do") (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-rest items) env) (if (jolt= G__44 "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__44 "def") (let* ((name-sym (jolt-nth items 1))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") name-sym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "def name with map metadata") jolt-nil) (if (< (jolt-count items) 3) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$4728 (keyword #f "op")) (_o$4729 (keyword #f "def")) (_o$4730 (keyword #f "ns")) (_o$4731 cur) (_o$4732 (keyword #f "name")) (_o$4733 nm) (_o$4734 (keyword #f "no-init")) (_o$4735 #t)) (jolt-hash-map _o$4728 _o$4729 _o$4730 _o$4731 _o$4732 _o$4733 _o$4734 _o$4735)))) (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__13__auto (> (jolt-count items) 3))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "string?") (jolt-nth items 2)) and__13__auto))) (val-form (jolt-nth items (if (jolt-truthy? has-doc) 3 2))) (base0 (let* ((or__14__auto (jolt-invoke (var-deref "jolt.host" "form-sym-meta") name-sym))) (if (jolt-truthy? or__14__auto) or__14__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) (jolt-invoke (var-deref "jolt.ir" "def-node") cur nm (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx val-form env) node-meta)))))) (if (jolt= G__44 "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$4740 (var-deref "jolt.ir" "let-node")) (_a$4741 (jolt-first r)) (_a$4742 (let* ((_a$4736 (var-deref "jolt.analyzer" "analyze-seq")) (_a$4737 ctx) (_a$4738 (jolt-drop 2 items)) (_a$4739 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$4736 _a$4737 _a$4738 _a$4739)))) (jolt-invoke _a$4740 _a$4741 _a$4742))) (if (jolt= G__44 "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$4743 (keyword #f "op")) (_o$4744 (keyword #f "loop")) (_o$4745 (keyword #f "recur-name")) (_o$4746 rname) (_o$4747 (keyword #f "bindings")) (_o$4748 (jolt-first r)) (_o$4749 (keyword #f "body")) (_o$4750 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$4743 _o$4744 _o$4745 _o$4746 _o$4747 _o$4748 _o$4749 _o$4750))) (if (jolt= G__44 "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$4755 (keyword #f "op")) (_o$4756 (keyword #f "recur")) (_o$4757 (keyword #f "recur-name")) (_o$4758 rt) (_o$4759 (keyword #f "args")) (_o$4760 (let* ((_a$4752 (var-deref "clojure.core" "mapv")) (_a$4753 (lambda (p__50_) (let fnrec4751 ((p__50_ p__50_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__50_ env)))) (_a$4754 (jolt-rest items))) (jolt-invoke _a$4752 _a$4753 _a$4754)))) (jolt-hash-map _o$4755 _o$4756 _o$4757 _o$4758 _o$4759 _o$4760)))) (if (jolt= G__44 "try") (jolt-invoke (var-deref "jolt.analyzer" "analyze-try") ctx items env) (if (jolt= G__44 "letfn") (jolt-invoke (var-deref "jolt.analyzer" "analyze-letfn") ctx items env) (if (jolt= G__44 "fn*") (jolt-invoke (var-deref "jolt.analyzer" "analyze-fn") ctx items env) (if (jolt= G__44 "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__44 "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$4761 (var-deref "jolt.ir" "the-var")) (_a$4762 (jolt-get r (keyword #f "ns"))) (_a$4763 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4761 _a$4762 _a$4763)) (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__44 "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$4764 (keyword #f "op")) (_o$4765 (keyword #f "defmacro")) (_o$4766 (keyword #f "ns")) (_o$4767 cur) (_o$4768 (keyword #f "name")) (_o$4769 nm) (_o$4770 (keyword #f "fn")) (_o$4771 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$4764 _o$4765 _o$4766 _o$4767 _o$4768 _o$4769 _o$4770 _o$4771)))) (if (jolt= G__44 "set!") (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__13__auto ti)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-pos? (jolt-count ti)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-first ti)) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first ti)) jolt-nil))) (if (jolt-truthy? (let* ((and__13__auto thead)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") thead) and__13__auto))) (let* ((_o$4772 (keyword #f "op")) (_o$4773 (keyword #f "set-field")) (_o$4774 (keyword #f "obj")) (_o$4775 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$4776 (keyword #f "field")) (_o$4777 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$4778 (keyword #f "val")) (_o$4779 val-node)) (jolt-hash-map _o$4772 _o$4773 _o$4774 _o$4775 _o$4776 _o$4777 _o$4778 _o$4779)) (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$4783 (keyword #f "op")) (_o$4784 (keyword #f "set-var")) (_o$4785 (keyword #f "the-var")) (_o$4786 (let* ((_a$4780 (var-deref "jolt.ir" "the-var")) (_a$4781 (jolt-get r (keyword #f "ns"))) (_a$4782 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4780 _a$4781 _a$4782))) (_o$4787 (keyword #f "val")) (_o$4788 val-node)) (jolt-hash-map _o$4783 _o$4784 _o$4785 _o$4786 _o$4787 _o$4788))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil)))) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " op)))))))))))))))))))))) analyze-special)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec4789 ((nm nm)) (let* ((and__13__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt= "-" (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 1 2))) and__13__auto)) and__13__auto)) and__13__auto)))))) method-head?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-host-call" (letrec ((analyze-host-call (lambda (ctx hname items env) (let fnrec4790 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed member expression, expecting (.method target ...): " hname)) jolt-nil) (let* ((_o$4795 (keyword #f "op")) (_o$4796 (keyword #f "host-call")) (_o$4797 (keyword #f "method")) (_o$4798 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$4799 (keyword #f "target")) (_o$4800 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4801 (keyword #f "args")) (_o$4802 (let* ((_a$4792 (var-deref "clojure.core" "mapv")) (_a$4793 (lambda (p__51_) (let fnrec4791 ((p__51_ p__51_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__51_ env)))) (_a$4794 (jolt-drop 2 items))) (jolt-invoke _a$4792 _a$4793 _a$4794)))) (jolt-hash-map _o$4795 _o$4796 _o$4797 _o$4798 _o$4799 _o$4800 _o$4801 _o$4802))))))) analyze-host-call)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec4803 ((nm nm)) (let* ((and__13__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "." (let* ((_a$4804 (var-deref "clojure.core" "subs")) (_a$4805 nm) (_a$4806 (jolt-dec (jolt-count nm))) (_a$4807 (jolt-count nm))) (jolt-invoke _a$4804 _a$4805 _a$4806 _a$4807))))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt= "." (jolt-invoke (var-deref "clojure.core" "subs") nm 0 1))) and__13__auto)) and__13__auto)))))) ctor-head?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-ctor" (letrec ((analyze-ctor (lambda (ctx class args env) (let fnrec4808 ((ctx ctx) (class class) (args args) (env env)) (jolt-invoke (var-deref "jolt.ir" "host-new") class (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__52_) (let fnrec4809 ((p__52_ p__52_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__52_ env))) args)))))) analyze-ctor)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-ffi-fn" (letrec ((analyze-ffi-fn (lambda (ctx items env) (let fnrec4810 ((ctx ctx) (items items) (env env)) (begin (if (jolt-not (<= 4 (jolt-count items) 5)) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi/foreign-fn expects (foreign-fn \"sym\" [argtypes] rettype [:blocking])")) jolt-nil) (let* ((_o$4811 (keyword #f "op")) (_o$4812 (keyword #f "ffi-fn")) (_o$4813 (keyword #f "csym")) (_o$4814 (jolt-nth items 1)) (_o$4815 (keyword #f "argtypes")) (_o$4816 (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$4817 (keyword #f "rettype")) (_o$4818 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$4819 (keyword #f "blocking")) (_o$4820 (let* ((and__13__auto (jolt= 5 (jolt-count items)))) (if (jolt-truthy? and__13__auto) (jolt= "blocking" (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 4))) and__13__auto)))) (jolt-hash-map _o$4811 _o$4812 _o$4813 _o$4814 _o$4815 _o$4816 _o$4817 _o$4818 _o$4819 _o$4820))))))) analyze-ffi-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec4821 ((ctx ctx) (items items) (env env)) (begin (if (< (jolt-count items) 3) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (. target member ...) form")) jolt-nil) (let* ((member (jolt-nth items 2))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-sym?") member)) (let* ((_o$4826 (keyword #f "op")) (_o$4827 (keyword #f "host-call")) (_o$4828 (keyword #f "method")) (_o$4829 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$4830 (keyword #f "target")) (_o$4831 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4832 (keyword #f "args")) (_o$4833 (let* ((_a$4823 (var-deref "clojure.core" "mapv")) (_a$4824 (lambda (p__53_) (let fnrec4822 ((p__53_ p__53_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__53_ env)))) (_a$4825 (jolt-drop 3 items))) (jolt-invoke _a$4823 _a$4824 _a$4825)))) (jolt-hash-map _o$4826 _o$4827 _o$4828 _o$4829 _o$4830 _o$4831 _o$4832 _o$4833)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$4834 (var-deref "jolt.ir" "invoke")) (_a$4835 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$4836 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$4834 _a$4835 _a$4836)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil))))))))) analyze-dot)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec4837 ((nm nm)) (let* ((and__13__auto (> (jolt-count nm) 2))) (if (jolt-truthy? and__13__auto) (jolt= ".-" (jolt-invoke (var-deref "clojure.core" "subs") nm 0 2)) and__13__auto)))))) field-head?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec4838 ((ctx ctx) (hname hname) (items items) (env env)) (begin (if (< (jolt-count items) 2) (jolt-throw (jolt-invoke (var-deref "clojure.core" "str") "Malformed (.-field target) form")) jolt-nil) (let* ((_o$4839 (keyword #f "op")) (_o$4840 (keyword #f "host-call")) (_o$4841 (keyword #f "method")) (_o$4842 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$4843 (keyword #f "target")) (_o$4844 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4845 (keyword #f "args")) (_o$4846 (jolt-vector))) (jolt-hash-map _o$4839 _o$4840 _o$4841 _o$4842 _o$4843 _o$4844 _o$4845 _o$4846))))))) analyze-field)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec4847 ((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__13__auto (jolt-invoke (var-deref "clojure.core" "nil?") ns))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env nm) and__13__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* ((_a$4848 (var-deref "jolt.ir" "var-ref")) (_a$4849 (jolt-get r (keyword #f "ns"))) (_a$4850 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4848 _a$4849 _a$4850)) (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__45 (jolt-get r (keyword #f "kind")))) (if (jolt= G__45 (keyword #f "var")) (let* ((_a$4851 (var-deref "jolt.ir" "var-ref")) (_a$4852 (jolt-get r (keyword #f "ns"))) (_a$4853 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4851 _a$4852 _a$4853)) (if (jolt= G__45 (keyword #f "host")) (jolt-invoke (var-deref "jolt.ir" "host-ref") (jolt-get r (keyword #f "name"))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "late-bind?") ctx)) (jolt-invoke (var-deref "jolt.ir" "var-ref") (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx) nm) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "Unable to resolve symbol: " nm " in this context"))))))) jolt-nil)))))))) analyze-symbol)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-list" (letrec ((analyze-list (lambda (ctx form env) (let fnrec4854 ((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__13__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "nil?") (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)) and__13__auto))) (jolt-invoke (var-deref "jolt.host" "form-sym-name") head) jolt-nil)) (shadowed (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "local?") env hname) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-macro?") ctx head) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-invoke (var-deref "jolt.host" "form-expand-1") ctx form) env) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.host" "form-sym?") head))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "jolt.ffi" (jolt-invoke (var-deref "jolt.host" "form-sym-ns") head)))) (if (jolt-truthy? and__13__auto) (jolt= "__cfn" (jolt-invoke (var-deref "jolt.host" "form-sym-name") head)) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-ffi-fn") ctx items env) (if (jolt-truthy? (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (jolt-contains? (var-deref "jolt.analyzer" "handled") hname) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-special") ctx hname items env) (if (jolt-truthy? (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "method-head?") hname) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-host-call") ctx hname items env) (if (jolt-truthy? (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "ctor-head?") hname) and__13__auto)) and__13__auto))) (let* ((_a$4855 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$4856 ctx) (_a$4857 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$4858 (jolt-rest items)) (_a$4859 env)) (jolt-invoke _a$4855 _a$4856 _a$4857 _a$4858 _a$4859)) (if (jolt-truthy? (let* ((and__13__auto (jolt= hname "new"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= (jolt-count items) 2))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-sym?") (jolt-nth items 1)) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((_a$4860 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$4861 ctx) (_a$4862 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$4863 (jolt-drop 2 items)) (_a$4864 env)) (jolt-invoke _a$4860 _a$4861 _a$4862 _a$4863 _a$4864)) (if (jolt-truthy? (let* ((and__13__auto (jolt= hname "."))) (if (jolt-truthy? and__13__auto) (jolt-not shadowed) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-dot") ctx items env) (if (jolt-truthy? (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.analyzer" "field-head?") hname) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.analyzer" "analyze-field") ctx hname items env) (if (jolt-truthy? (let* ((and__13__auto hname)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not shadowed))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.host" "form-special?") hname) and__13__auto)) and__13__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$4869 (var-deref "jolt.ir" "invoke")) (_a$4870 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$4871 (let* ((_a$4866 (var-deref "clojure.core" "mapv")) (_a$4867 (lambda (p__54_) (let fnrec4865 ((p__54_ p__54_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__54_ env)))) (_a$4868 (jolt-rest items))) (jolt-invoke _a$4866 _a$4867 _a$4868)))) (jolt-invoke _a$4869 _a$4870 _a$4871))) (p (jolt-invoke (var-deref "jolt.host" "form-position") form))) (if (jolt-truthy? p) (jolt-assoc n (keyword #f "pos") p) n)) jolt-nil))))))))))))))))) analyze-list)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze" (letrec ((analyze (case-lambda ((ctx form) (let fnrec4872 ((ctx ctx) (form form)) (jolt-invoke analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec4873 ((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.ir" "vector-node") (let* ((_a$4875 (var-deref "clojure.core" "mapv")) (_a$4876 (lambda (p__55_) (let fnrec4874 ((p__55_ p__55_)) (jolt-invoke analyze ctx p__55_ env)))) (_a$4877 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$4875 _a$4876 _a$4877))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$4881 (var-deref "clojure.core" "mapv")) (_a$4882 (lambda (p) (let fnrec4878 ((p p)) (let* ((_o$4879 (jolt-invoke analyze ctx (jolt-first p) env)) (_o$4880 (jolt-invoke analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$4879 _o$4880))))) (_a$4883 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$4881 _a$4882 _a$4883))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "jolt.ir" "set-node") (let* ((_a$4885 (var-deref "clojure.core" "mapv")) (_a$4886 (lambda (p__56_) (let fnrec4884 ((p__56_ p__56_)) (jolt-invoke analyze ctx p__56_ env)))) (_a$4887 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$4885 _a$4886 _a$4887))) (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$4888 (keyword #f "op")) (_o$4889 (keyword #f "regex")) (_o$4890 (keyword #f "source")) (_o$4891 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$4888 _o$4889 _o$4890 _o$4891)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$4892 (keyword #f "op")) (_o$4893 (keyword #f "inst")) (_o$4894 (keyword #f "source")) (_o$4895 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$4892 _o$4893 _o$4894 _o$4895)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$4896 (keyword #f "op")) (_o$4897 (keyword #f "uuid")) (_o$4898 (keyword #f "source")) (_o$4899 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$4896 _o$4897 _o$4898 _o$4899)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$4900 (keyword #f "op")) (_o$4901 (keyword #f "bigdec")) (_o$4902 (keyword #f "source")) (_o$4903 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$4900 _o$4901 _o$4902 _o$4903)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$4904 (keyword #f "op")) (_o$4905 (keyword #f "the-ns")) (_o$4906 (keyword #f "name")) (_o$4907 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$4904 _o$4905 _o$4906 _o$4907)) (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$3714 "+") (_o$3715 "+") (_o$3716 "-") (_o$3717 "-") (_o$3718 "*") (_o$3719 "*") (_o$3720 "/") (_o$3721 "/") (_o$3722 "<") (_o$3723 "<") (_o$3724 ">") (_o$3725 ">") (_o$3726 "<=") (_o$3727 "<=") (_o$3728 ">=") (_o$3729 ">=") (_o$3730 "=") (_o$3731 "jolt=") (_o$3732 "inc") (_o$3733 "jolt-inc") (_o$3734 "dec") (_o$3735 "jolt-dec") (_o$3736 "not") (_o$3737 "jolt-not") (_o$3738 "min") (_o$3739 "min") (_o$3740 "max") (_o$3741 "max") (_o$3742 "mod") (_o$3743 "modulo") (_o$3744 "rem") (_o$3745 "remainder") (_o$3746 "quot") (_o$3747 "quotient") (_o$3748 "vector") (_o$3749 "jolt-vector") (_o$3750 "hash-map") (_o$3751 "jolt-hash-map") (_o$3752 "hash-set") (_o$3753 "jolt-hash-set") (_o$3754 "conj") (_o$3755 "jolt-conj") (_o$3756 "get") (_o$3757 "jolt-get") (_o$3758 "nth") (_o$3759 "jolt-nth") (_o$3760 "count") (_o$3761 "jolt-count") (_o$3762 "assoc") (_o$3763 "jolt-assoc") (_o$3764 "dissoc") (_o$3765 "jolt-dissoc") (_o$3766 "contains?") (_o$3767 "jolt-contains?") (_o$3768 "empty?") (_o$3769 "jolt-empty?") (_o$3770 "peek") (_o$3771 "jolt-peek") (_o$3772 "pop") (_o$3773 "jolt-pop") (_o$3774 "first") (_o$3775 "jolt-first") (_o$3776 "rest") (_o$3777 "jolt-rest") (_o$3778 "next") (_o$3779 "jolt-next") (_o$3780 "seq") (_o$3781 "jolt-seq") (_o$3782 "cons") (_o$3783 "jolt-cons") (_o$3784 "list") (_o$3785 "jolt-list") (_o$3786 "reverse") (_o$3787 "jolt-reverse") (_o$3788 "last") (_o$3789 "jolt-last") (_o$3790 "map") (_o$3791 "jolt-map") (_o$3792 "filter") (_o$3793 "jolt-filter") (_o$3794 "remove") (_o$3795 "jolt-remove") (_o$3796 "reduce") (_o$3797 "jolt-reduce") (_o$3798 "into") (_o$3799 "jolt-into") (_o$3800 "concat") (_o$3801 "jolt-concat") (_o$3802 "apply") (_o$3803 "jolt-apply") (_o$3804 "range") (_o$3805 "jolt-range") (_o$3806 "take") (_o$3807 "jolt-take") (_o$3808 "drop") (_o$3809 "jolt-drop") (_o$3810 "keys") (_o$3811 "jolt-keys") (_o$3812 "vals") (_o$3813 "jolt-vals") (_o$3814 "even?") (_o$3815 "jolt-even?") (_o$3816 "odd?") (_o$3817 "jolt-odd?") (_o$3818 "pos?") (_o$3819 "jolt-pos?") (_o$3820 "neg?") (_o$3821 "jolt-neg?") (_o$3822 "zero?") (_o$3823 "jolt-zero?") (_o$3824 "identity") (_o$3825 "jolt-identity") (_o$3826 "ex-info") (_o$3827 "jolt-ex-info")) (jolt-hash-map _o$3714 _o$3715 _o$3716 _o$3717 _o$3718 _o$3719 _o$3720 _o$3721 _o$3722 _o$3723 _o$3724 _o$3725 _o$3726 _o$3727 _o$3728 _o$3729 _o$3730 _o$3731 _o$3732 _o$3733 _o$3734 _o$3735 _o$3736 _o$3737 _o$3738 _o$3739 _o$3740 _o$3741 _o$3742 _o$3743 _o$3744 _o$3745 _o$3746 _o$3747 _o$3748 _o$3749 _o$3750 _o$3751 _o$3752 _o$3753 _o$3754 _o$3755 _o$3756 _o$3757 _o$3758 _o$3759 _o$3760 _o$3761 _o$3762 _o$3763 _o$3764 _o$3765 _o$3766 _o$3767 _o$3768 _o$3769 _o$3770 _o$3771 _o$3772 _o$3773 _o$3774 _o$3775 _o$3776 _o$3777 _o$3778 _o$3779 _o$3780 _o$3781 _o$3782 _o$3783 _o$3784 _o$3785 _o$3786 _o$3787 _o$3788 _o$3789 _o$3790 _o$3791 _o$3792 _o$3793 _o$3794 _o$3795 _o$3796 _o$3797 _o$3798 _o$3799 _o$3800 _o$3801 _o$3802 _o$3803 _o$3804 _o$3805 _o$3806 _o$3807 _o$3808 _o$3809 _o$3810 _o$3811 _o$3812 _o$3813 _o$3814 _o$3815 _o$3816 _o$3817 _o$3818 _o$3819 _o$3820 _o$3821 _o$3822 _o$3823 _o$3824 _o$3825 _o$3826 _o$3827)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(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$3828 "+") (_o$3829 "jolt-add") (_o$3830 "-") (_o$3831 "jolt-sub") (_o$3832 "*") (_o$3833 "jolt-mul") (_o$3834 "/") (_o$3835 "jolt-div")) (jolt-hash-map _o$3828 _o$3829 _o$3830 _o$3831 _o$3832 _o$3833 _o$3834 _o$3835))) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "op-arity" (let* ((_o$3877 "inc") (_o$3878 (lambda (p__4_) (let fnrec3836 ((p__4_ p__4_)) (jolt= p__4_ 1)))) (_o$3879 "dec") (_o$3880 (lambda (p__5_) (let fnrec3837 ((p__5_ p__5_)) (jolt= p__5_ 1)))) (_o$3881 "not") (_o$3882 (lambda (p__6_) (let fnrec3838 ((p__6_ p__6_)) (jolt= p__6_ 1)))) (_o$3883 "count") (_o$3884 (lambda (p__7_) (let fnrec3839 ((p__7_ p__7_)) (jolt= p__7_ 1)))) (_o$3885 "empty?") (_o$3886 (lambda (p__8_) (let fnrec3840 ((p__8_ p__8_)) (jolt= p__8_ 1)))) (_o$3887 "peek") (_o$3888 (lambda (p__9_) (let fnrec3841 ((p__9_ p__9_)) (jolt= p__9_ 1)))) (_o$3889 "pop") (_o$3890 (lambda (p__10_) (let fnrec3842 ((p__10_ p__10_)) (jolt= p__10_ 1)))) (_o$3891 "mod") (_o$3892 (lambda (p__11_) (let fnrec3843 ((p__11_ p__11_)) (jolt= p__11_ 2)))) (_o$3893 "rem") (_o$3894 (lambda (p__12_) (let fnrec3844 ((p__12_ p__12_)) (jolt= p__12_ 2)))) (_o$3895 "quot") (_o$3896 (lambda (p__13_) (let fnrec3845 ((p__13_ p__13_)) (jolt= p__13_ 2)))) (_o$3897 "contains?") (_o$3898 (lambda (p__14_) (let fnrec3846 ((p__14_ p__14_)) (jolt= p__14_ 2)))) (_o$3899 "get") (_o$3900 (lambda (p__15_) (let fnrec3847 ((p__15_ p__15_)) (let* ((or__14__auto (jolt= p__15_ 2))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= p__15_ 3)))))) (_o$3901 "nth") (_o$3902 (lambda (p__16_) (let fnrec3848 ((p__16_ p__16_)) (let* ((or__14__auto (jolt= p__16_ 2))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= p__16_ 3)))))) (_o$3903 "assoc") (_o$3904 (lambda (p__17_) (let fnrec3849 ((p__17_ p__17_)) (let* ((and__13__auto (>= p__17_ 3))) (if (jolt-truthy? and__13__auto) (jolt-odd? p__17_) and__13__auto))))) (_o$3905 "dissoc") (_o$3906 (lambda (p__18_) (let fnrec3850 ((p__18_ p__18_)) (>= p__18_ 1)))) (_o$3907 "conj") (_o$3908 (lambda (p__19_) (let fnrec3851 ((p__19_ p__19_)) (>= p__19_ 1)))) (_o$3909 "first") (_o$3910 (lambda (p__20_) (let fnrec3852 ((p__20_ p__20_)) (jolt= p__20_ 1)))) (_o$3911 "rest") (_o$3912 (lambda (p__21_) (let fnrec3853 ((p__21_ p__21_)) (jolt= p__21_ 1)))) (_o$3913 "next") (_o$3914 (lambda (p__22_) (let fnrec3854 ((p__22_ p__22_)) (jolt= p__22_ 1)))) (_o$3915 "seq") (_o$3916 (lambda (p__23_) (let fnrec3855 ((p__23_ p__23_)) (jolt= p__23_ 1)))) (_o$3917 "reverse") (_o$3918 (lambda (p__24_) (let fnrec3856 ((p__24_ p__24_)) (jolt= p__24_ 1)))) (_o$3919 "last") (_o$3920 (lambda (p__25_) (let fnrec3857 ((p__25_ p__25_)) (jolt= p__25_ 1)))) (_o$3921 "keys") (_o$3922 (lambda (p__26_) (let fnrec3858 ((p__26_ p__26_)) (jolt= p__26_ 1)))) (_o$3923 "vals") (_o$3924 (lambda (p__27_) (let fnrec3859 ((p__27_ p__27_)) (jolt= p__27_ 1)))) (_o$3925 "even?") (_o$3926 (lambda (p__28_) (let fnrec3860 ((p__28_ p__28_)) (jolt= p__28_ 1)))) (_o$3927 "odd?") (_o$3928 (lambda (p__29_) (let fnrec3861 ((p__29_ p__29_)) (jolt= p__29_ 1)))) (_o$3929 "pos?") (_o$3930 (lambda (p__30_) (let fnrec3862 ((p__30_ p__30_)) (jolt= p__30_ 1)))) (_o$3931 "neg?") (_o$3932 (lambda (p__31_) (let fnrec3863 ((p__31_ p__31_)) (jolt= p__31_ 1)))) (_o$3933 "zero?") (_o$3934 (lambda (p__32_) (let fnrec3864 ((p__32_ p__32_)) (jolt= p__32_ 1)))) (_o$3935 "identity") (_o$3936 (lambda (p__33_) (let fnrec3865 ((p__33_ p__33_)) (jolt= p__33_ 1)))) (_o$3937 "cons") (_o$3938 (lambda (p__34_) (let fnrec3866 ((p__34_ p__34_)) (jolt= p__34_ 2)))) (_o$3939 "filter") (_o$3940 (lambda (p__35_) (let fnrec3867 ((p__35_ p__35_)) (jolt= p__35_ 2)))) (_o$3941 "remove") (_o$3942 (lambda (p__36_) (let fnrec3868 ((p__36_ p__36_)) (jolt= p__36_ 2)))) (_o$3943 "into") (_o$3944 (lambda (p__37_) (let fnrec3869 ((p__37_ p__37_)) (jolt= p__37_ 2)))) (_o$3945 "take") (_o$3946 (lambda (p__38_) (let fnrec3870 ((p__38_ p__38_)) (jolt= p__38_ 2)))) (_o$3947 "drop") (_o$3948 (lambda (p__39_) (let fnrec3871 ((p__39_ p__39_)) (jolt= p__39_ 2)))) (_o$3949 "map") (_o$3950 (lambda (p__40_) (let fnrec3872 ((p__40_ p__40_)) (>= p__40_ 2)))) (_o$3951 "apply") (_o$3952 (lambda (p__41_) (let fnrec3873 ((p__41_ p__41_)) (>= p__41_ 2)))) (_o$3953 "reduce") (_o$3954 (lambda (p__42_) (let fnrec3874 ((p__42_ p__42_)) (let* ((or__14__auto (jolt= p__42_ 2))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= p__42_ 3)))))) (_o$3955 "range") (_o$3956 (lambda (p__43_) (let fnrec3875 ((p__43_ p__43_)) (let* ((and__13__auto (>= p__43_ 0))) (if (jolt-truthy? and__13__auto) (<= p__43_ 3) and__13__auto))))) (_o$3957 "ex-info") (_o$3958 (lambda (p__44_) (let fnrec3876 ((p__44_ p__44_)) (let* ((or__14__auto (jolt= p__44_ 2))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= p__44_ 3))))))) (jolt-hash-map _o$3877 _o$3878 _o$3879 _o$3880 _o$3881 _o$3882 _o$3883 _o$3884 _o$3885 _o$3886 _o$3887 _o$3888 _o$3889 _o$3890 _o$3891 _o$3892 _o$3893 _o$3894 _o$3895 _o$3896 _o$3897 _o$3898 _o$3899 _o$3900 _o$3901 _o$3902 _o$3903 _o$3904 _o$3905 _o$3906 _o$3907 _o$3908 _o$3909 _o$3910 _o$3911 _o$3912 _o$3913 _o$3914 _o$3915 _o$3916 _o$3917 _o$3918 _o$3919 _o$3920 _o$3921 _o$3922 _o$3923 _o$3924 _o$3925 _o$3926 _o$3927 _o$3928 _o$3929 _o$3930 _o$3931 _o$3932 _o$3933 _o$3934 _o$3935 _o$3936 _o$3937 _o$3938 _o$3939 _o$3940 _o$3941 _o$3942 _o$3943 _o$3944 _o$3945 _o$3946 _o$3947 _o$3948 _o$3949 _o$3950 _o$3951 _o$3952 _o$3953 _o$3954 _o$3955 _o$3956 _o$3957 _o$3958)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "cmp1-ops" (let* ((_o$3959 "<") (_o$3960 ">") (_o$3961 "<=") (_o$3962 ">=")) (jolt-hash-set _o$3959 _o$3960 _o$3961 _o$3962)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "supported-host-methods" (let* ((_o$3963 "isDirectory") (_o$3964 "listFiles")) (jolt-hash-set _o$3963 _o$3964)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "bool-returning-ops" (let* ((_o$3965 "<") (_o$3966 "<=") (_o$3967 ">") (_o$3968 ">=") (_o$3969 "jolt=") (_o$3970 "jolt-not") (_o$3971 "jolt-even?") (_o$3972 "jolt-odd?") (_o$3973 "jolt-pos?") (_o$3974 "jolt-neg?") (_o$3975 "jolt-zero?") (_o$3976 "jolt-empty?") (_o$3977 "jolt-contains?")) (jolt-hash-set _o$3965 _o$3966 _o$3967 _o$3968 _o$3969 _o$3970 _o$3971 _o$3972 _o$3973 _o$3974 _o$3975 _o$3976 _o$3977)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(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 fnrec3978 ((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-with-meta! "jolt.backend-scheme" "*recur-target*" jolt-nil (jolt-hash-map (keyword #f "dynamic") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "*known-procs*" (jolt-hash-set) (jolt-hash-map (keyword #f "dynamic") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "gensym-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "fresh-label" (letrec ((fresh-label (lambda (prefix) (let fnrec3979 ((prefix prefix)) (jolt-invoke (var-deref "clojure.core" "str") prefix (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.backend-scheme" "gensym-counter") jolt-inc)))))) fresh-label)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "scheme-reserved" (let* ((_o$3980 "if") (_o$3981 "begin") (_o$3982 "lambda") (_o$3983 "let") (_o$3984 "let*") (_o$3985 "letrec") (_o$3986 "letrec*") (_o$3987 "quote") (_o$3988 "quasiquote") (_o$3989 "unquote") (_o$3990 "set!") (_o$3991 "define") (_o$3992 "define-syntax") (_o$3993 "cond") (_o$3994 "case") (_o$3995 "when") (_o$3996 "unless") (_o$3997 "and") (_o$3998 "or") (_o$3999 "do") (_o$4000 "else") (_o$4001 "guard") (_o$4002 "parameterize") (_o$4003 "delay") (_o$4004 "values")) (jolt-hash-set _o$3980 _o$3981 _o$3982 _o$3983 _o$3984 _o$3985 _o$3986 _o$3987 _o$3988 _o$3989 _o$3990 _o$3991 _o$3992 _o$3993 _o$3994 _o$3995 _o$3996 _o$3997 _o$3998 _o$3999 _o$4000 _o$4001 _o$4002 _o$4003 _o$4004)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "munge-name" (letrec ((munge-name (lambda (s) (let fnrec4005 ((s s)) (let* ((s (jolt-invoke (var-deref "clojure.string" "replace") (jolt-invoke (var-deref "clojure.string" "replace") s "#" "_") "'" "_PRIME_"))) (if (jolt-contains? (var-deref "jolt.backend-scheme" "scheme-reserved") s) (jolt-invoke (var-deref "clojure.core" "str") "_" s) s)))))) munge-name)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.backend-scheme" "emit"))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "char-escape" (letrec ((char-escape (lambda (cp) (let fnrec4006 ((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 (jolt-truthy? (let* ((and__13__auto (>= cp 32))) (if (jolt-truthy? and__13__auto) (< cp 127) and__13__auto))) (jolt-invoke (var-deref "clojure.core" "str") (jolt-invoke (var-deref "clojure.core" "char") cp)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") "\\x" (jolt-invoke (var-deref "clojure.core" "format") "%x" cp) ";") jolt-nil))))))))))) char-escape)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "chez-str-lit" (letrec ((chez-str-lit (lambda (s) (let fnrec4007 ((s s)) (jolt-invoke (var-deref "clojure.core" "str") "\"" (jolt-apply (var-deref "clojure.core" "str") (jolt-map (lambda (c) (let fnrec4008 ((c c)) (jolt-invoke (var-deref "jolt.backend-scheme" "char-escape") (jolt-invoke (var-deref "clojure.core" "int") c)))) s)) "\""))))) chez-str-lit)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-const" (letrec ((emit-const (lambda (v) (let fnrec4009 ((v v)) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "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__14__auto (jolt-invoke (var-deref "clojure.string" "includes?") s "."))) (if (jolt-truthy? or__14__auto) or__14__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__4__auto (jolt-invoke (var-deref "clojure.core" "namespace") v))) (if (jolt-truthy? temp__4__auto) (let* ((kns temp__4__auto)) (let* ((_a$4010 (var-deref "clojure.core" "str")) (_a$4011 "(keyword ") (_a$4012 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") kns)) (_a$4013 " ") (_a$4014 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v))) (_a$4015 ")")) (jolt-invoke _a$4010 _a$4011 _a$4012 _a$4013 _a$4014 _a$4015))) (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$4016 (jolt-invoke (var-deref "clojure.core" "str") "emit-const: unsupported literal " (jolt-invoke (var-deref "clojure.core" "pr-str") v))) (_a$4017 (jolt-hash-map))) (jolt-ex-info _a$4016 _a$4017))) jolt-nil))))))))))) emit-const)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-ordered" (letrec ((emit-ordered (lambda (ctor arg-strs) (let fnrec4018 ((ctor ctor) (arg-strs arg-strs)) (if (< (jolt-count arg-strs) 2) (jolt-invoke (var-deref "clojure.core" "str") "(" ctor (if (jolt-empty? arg-strs) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " arg-strs))) ")") (let* ((tmps (jolt-map (lambda (_) (let fnrec4019 ((_ _)) (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 fnrec4020 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps arg-strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") (" ctor " " (jolt-invoke (var-deref "clojure.string" "join") " " tmps) "))"))))))) emit-ordered)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "side-effect-free?" (letrec ((side-effect-free? (lambda (n) (let fnrec4021 ((n n)) (let* ((_a$4027 (let* ((_o$4022 (keyword #f "const")) (_o$4023 (keyword #f "local")) (_o$4024 (keyword #f "var")) (_o$4025 (keyword #f "the-var")) (_o$4026 (keyword #f "quote"))) (jolt-hash-set _o$4022 _o$4023 _o$4024 _o$4025 _o$4026))) (_a$4028 (jolt-get n (keyword #f "op")))) (jolt-contains? _a$4027 _a$4028)))))) side-effect-free?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "needs-order?" (letrec ((needs-order? (lambda (nodes) (let fnrec4029 ((nodes nodes)) (> (jolt-count (jolt-remove (var-deref "jolt.backend-scheme" "side-effect-free?") nodes)) 1))))) needs-order?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "ordered-call" (letrec ((ordered-call (lambda (nodes strs build) (let fnrec4030 ((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 fnrec4031 ((_ _)) (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 fnrec4032 ((t t) (a a)) (jolt-invoke (var-deref "clojure.core" "str") "(" t " " a ")"))) tmps strs)))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" binds ") " (jolt-invoke build tmps) ")")) (jolt-invoke build strs)))))) ordered-call)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.backend-scheme" "emit-quoted"))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-quoted-map" (letrec ((emit-quoted-map (lambda (pairs) (let fnrec4033 ((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 fnrec4034 ((p p)) (let* ((_o$4035 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 0))) (_o$4036 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 1)))) (jolt-vector _o$4035 _o$4036)))) pairs)) ")"))))) emit-quoted-map)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-quoted-map-value" (letrec ((emit-quoted-map-value (lambda (m) (let fnrec4037 ((m m)) (let* ((pairs (jolt-invoke (var-deref "clojure.core" "sort") (let* ((_a$4043 (lambda (k) (let fnrec4038 ((k k)) (let* ((_a$4039 (var-deref "clojure.core" "str")) (_a$4040 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") k)) (_a$4041 " ") (_a$4042 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get m k)))) (jolt-invoke _a$4039 _a$4040 _a$4041 _a$4042))))) (_a$4044 (jolt-keys m))) (jolt-map _a$4043 _a$4044))))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-hash-map " (jolt-invoke (var-deref "clojure.string" "join") " " pairs) ")")))))) emit-quoted-map-value)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-quoted" (letrec ((emit-quoted (lambda (form) (let fnrec4045 ((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__13__auto m)) (if (jolt-truthy? and__13__auto) (jolt-pos? (jolt-count m)) and__13__auto))) (let* ((_a$4046 (var-deref "clojure.core" "str")) (_a$4047 "(jolt-symbol/meta ") (_a$4048 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$4049 " ") (_a$4050 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$4051 " ") (_a$4052 (jolt-invoke emit-quoted m)) (_a$4053 ")")) (jolt-invoke _a$4046 _a$4047 _a$4048 _a$4049 _a$4050 _a$4051 _a$4052 _a$4053)) (let* ((_a$4054 (var-deref "clojure.core" "str")) (_a$4055 "(jolt-symbol ") (_a$4056 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$4057 " ") (_a$4058 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$4059 ")")) (jolt-invoke _a$4054 _a$4055 _a$4056 _a$4057 _a$4058 _a$4059)))) (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 "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$4060 (jolt-invoke (var-deref "clojure.core" "str") "emit-quoted: unsupported quoted form " (jolt-invoke (var-deref "clojure.core" "pr-str") form))) (_a$4061 (jolt-hash-map))) (jolt-ex-info _a$4060 _a$4061))) jolt-nil)))))))))))))))) emit-quoted)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "jmeta-nonempty?" (letrec ((jmeta-nonempty? (lambda (m) (let fnrec4062 ((m m)) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "map?") m))) (if (jolt-truthy? and__13__auto) (jolt-pos? (jolt-count m)) and__13__auto)))))) jmeta-nonempty?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-binding" (letrec ((emit-binding (lambda (b) (let fnrec4063 ((b b)) (let* ((_a$4064 (var-deref "clojure.core" "str")) (_a$4065 "(") (_a$4066 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth b 0))) (_a$4067 " ") (_a$4068 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth b 1))) (_a$4069 ")")) (jolt-invoke _a$4064 _a$4065 _a$4066 _a$4067 _a$4068 _a$4069)))))) emit-binding)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-let" (letrec ((emit-let (lambda (node) (let fnrec4070 ((node node)) (let* ((kw (if (jolt-truthy? (jolt-get node (keyword #f "letrec"))) "letrec*" "let*"))) (let* ((_a$4071 (var-deref "clojure.core" "str")) (_a$4072 "(") (_a$4073 kw) (_a$4074 " (") (_a$4075 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "emit-binding") (jolt-get node (keyword #f "bindings"))))) (_a$4076 ") ") (_a$4077 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$4078 ")")) (jolt-invoke _a$4071 _a$4072 _a$4073 _a$4074 _a$4075 _a$4076 _a$4077 _a$4078))))))) emit-let)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-loop" (letrec ((emit-loop (lambda (node) (let fnrec4079 ((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__45_) (let fnrec4080 ((p__45_ p__45_)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth p__45_ 0)))) pairs)) (inits (jolt-map (lambda (p__46_) (let fnrec4081 ((p__46_ p__46_)) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth p__46_ 1)))) pairs)) (seq-bs (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (n i) (let fnrec4082 ((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 fnrec4083 ((n n)) (jolt-invoke (var-deref "clojure.core" "str") "(" n " " n ")"))) names))) (body (let* ((frame__8__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__8__auto) (dynamic-wind (lambda () #f) (lambda () (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (lambda () (jolt-invoke (var-deref "clojure.core" "pop-thread-bindings")))))))) (jolt-invoke (var-deref "clojure.core" "str") "(let* (" seq-bs ") (let " label " (" rebinds ") " body "))")))))) emit-loop)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "ffi-types" (let* ((_o$4084 "int") (_o$4085 "int") (_o$4086 "uint") (_o$4087 "unsigned-int") (_o$4088 "long") (_o$4089 "long") (_o$4090 "ulong") (_o$4091 "unsigned-long") (_o$4092 "int64") (_o$4093 "integer-64") (_o$4094 "uint64") (_o$4095 "unsigned-64") (_o$4096 "size_t") (_o$4097 "size_t") (_o$4098 "ssize_t") (_o$4099 "ssize_t") (_o$4100 "iptr") (_o$4101 "iptr") (_o$4102 "uptr") (_o$4103 "uptr") (_o$4104 "double") (_o$4105 "double") (_o$4106 "float") (_o$4107 "float") (_o$4108 "pointer") (_o$4109 "void*") (_o$4110 "void*") (_o$4111 "void*") (_o$4112 "string") (_o$4113 "string") (_o$4114 "void") (_o$4115 "void") (_o$4116 "uint8") (_o$4117 "unsigned-8") (_o$4118 "u8") (_o$4119 "unsigned-8") (_o$4120 "byte") (_o$4121 "unsigned-8") (_o$4122 "char") (_o$4123 "char")) (jolt-hash-map _o$4084 _o$4085 _o$4086 _o$4087 _o$4088 _o$4089 _o$4090 _o$4091 _o$4092 _o$4093 _o$4094 _o$4095 _o$4096 _o$4097 _o$4098 _o$4099 _o$4100 _o$4101 _o$4102 _o$4103 _o$4104 _o$4105 _o$4106 _o$4107 _o$4108 _o$4109 _o$4110 _o$4111 _o$4112 _o$4113 _o$4114 _o$4115 _o$4116 _o$4117 _o$4118 _o$4119 _o$4120 _o$4121 _o$4122 _o$4123)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "ffi-type->chez" (letrec ((ffi-type->chez (lambda (t) (let fnrec4124 ((t t)) (let* ((or__14__auto (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-types") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-throw (let* ((_a$4125 (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi: unknown foreign type :" t)) (_a$4126 (jolt-hash-map))) (jolt-ex-info _a$4125 _a$4126))))))))) ffi-type->chez)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-ffi-fn" (letrec ((emit-ffi-fn (lambda (node) (let fnrec4127 ((node node)) (let* ((_a$4128 (var-deref "clojure.core" "str")) (_a$4129 "(foreign-procedure ") (_a$4130 (if (jolt-truthy? (jolt-get node (keyword #f "blocking"))) "__collect_safe " jolt-nil)) (_a$4131 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "csym")))) (_a$4132 " (") (_a$4133 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$4134 ") ") (_a$4135 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$4136 ")")) (jolt-invoke _a$4128 _a$4129 _a$4130 _a$4131 _a$4132 _a$4133 _a$4134 _a$4135 _a$4136)))))) emit-ffi-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-recur" (letrec ((emit-recur (lambda (node) (let fnrec4137 ((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$4139 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4140 arg-nodes) (_a$4141 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (_a$4142 (lambda (as) (let fnrec4138 ((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$4139 _a$4140 _a$4141 _a$4142)))))))) emit-recur)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-arity-clause" (letrec ((emit-arity-clause (lambda (a) (let fnrec4143 ((a a)) (let* ((params (jolt-map (var-deref "jolt.backend-scheme" "munge-name") (jolt-get a (keyword #f "params")))) (restp (let* ((temp__15__auto (jolt-get a (keyword #f "rest")))) (if (jolt-truthy? temp__15__auto) (let* ((r temp__15__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__8__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__8__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__13__auto restp)) (if (jolt-truthy? and__13__auto) (jolt-empty? params) and__13__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)))) (binds (if (jolt-truthy? restp) (let* ((_a$4145 (jolt-map (lambda (p) (let fnrec4144 ((p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " p ")"))) params)) (_a$4146 (jolt-vector (jolt-invoke (var-deref "clojure.core" "str") "(" restp " (list->cseq " restp "))")))) (jolt-concat _a$4145 _a$4146)) (jolt-map (lambda (p) (let fnrec4147 ((p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " p ")"))) params)))) (let* ((_o$4148 paramlist) (_o$4149 (jolt-invoke (var-deref "clojure.core" "str") "(let " label " (" (jolt-invoke (var-deref "clojure.string" "join") " " binds) ") " body ")"))) (jolt-vector _o$4148 _o$4149))))))) emit-arity-clause)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-fn" (letrec ((emit-fn (lambda (node) (let fnrec4150 ((node node)) (let* ((arities (jolt-get node (keyword #f "arities"))) (self (let* ((temp__15__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__15__auto) (let* ((nm temp__15__auto)) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm)) jolt-nil))) (clauses (let* ((frame__8__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__8__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$4151 (var-deref "clojure.core" "str")) (_a$4152 "(lambda ") (_a$4153 (jolt-nth c 0)) (_a$4154 " ") (_a$4155 (jolt-nth c 1)) (_a$4156 ")")) (jolt-invoke _a$4151 _a$4152 _a$4153 _a$4154 _a$4155 _a$4156))) (jolt-invoke (var-deref "clojure.core" "str") "(case-lambda " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (c) (let fnrec4157 ((c c)) (let* ((_a$4158 (var-deref "clojure.core" "str")) (_a$4159 "(") (_a$4160 (jolt-nth c 0)) (_a$4161 " ") (_a$4162 (jolt-nth c 1)) (_a$4163 ")")) (jolt-invoke _a$4158 _a$4159 _a$4160 _a$4161 _a$4162 _a$4163)))) clauses)) ")")))) (let* ((temp__4__auto (jolt-get node (keyword #f "name")))) (if (jolt-truthy? temp__4__auto) (let* ((nm temp__4__auto)) (let* ((m (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") nm))) (jolt-invoke (var-deref "clojure.core" "str") "(letrec ((" m " " _lambda ")) " m ")"))) _lambda))))))) emit-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "native-op" (letrec ((native-op (lambda (fnode nargs) (let fnrec4164 ((fnode fnode) (nargs nargs)) (let* ((nm (let* ((G__34 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__34 (keyword #f "var")) (if (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) (jolt-get fnode (keyword #f "name")) jolt-nil) (if (jolt= G__34 (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-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") op)) jolt-nil (if (jolt-truthy? (let* ((and__13__auto arity-ok)) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-invoke arity-ok nargs)) and__13__auto))) jolt-nil (if (jolt-truthy? (keyword #f "else")) op jolt-nil)))))))) native-op)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "ifn-kind" (letrec ((ifn-kind (lambda (fnode) (let fnrec4165 ((fnode fnode)) (let* ((G__35 (jolt-get fnode (keyword #f "op")))) (if (jolt= G__35 (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 (jolt-truthy? (let* ((or__14__auto (jolt= G__35 (keyword #f "map")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= G__35 (keyword #f "set")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= G__35 (keyword #f "vector"))))))) (keyword #f "coll") jolt-nil))))))) ifn-kind)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "stdlib-var?" (letrec ((stdlib-var? (lambda (n) (let fnrec4166 ((n n)) (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.string" "starts-with?") (let* ((or__14__auto (jolt-get n (keyword #f "ns")))) (if (jolt-truthy? or__14__auto) or__14__auto "")) "clojure.") and__13__auto)))))) stdlib-var?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-invoke" (letrec ((emit-invoke (lambda (node) (let fnrec4167 ((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 fnrec4168 ((build build)) (jolt-invoke (var-deref "jolt.backend-scheme" "ordered-call") arg-nodes args build)))) (defstr (lambda (as) (let fnrec4169 ((as as)) (if (> (jolt-count as) 1) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-nth as 1)) "")))) (invoke (lambda () (let fnrec4170 () (let* ((_a$4172 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4173 (jolt-cons fnode arg-nodes)) (_a$4174 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$4175 (lambda (G__36) (let fnrec4171 ((G__36 G__36)) (let* ((G__37 G__36) (f (jolt-nth G__37 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__37 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$4172 _a$4173 _a$4174 _a$4175)))))) (if (jolt-truthy? (let* ((and__13__auto nop)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-empty? args))) (if (jolt-truthy? and__13__auto) (jolt= nop "+") and__13__auto)) and__13__auto))) "0" (if (jolt-truthy? (let* ((and__13__auto nop)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-empty? args))) (if (jolt-truthy? and__13__auto) (jolt= nop "*") and__13__auto)) and__13__auto))) "1" (if (jolt-truthy? (let* ((and__13__auto nop)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "cmp1-ops") nop) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "clojure.core" "str") "(begin " (jolt-first args) " #t)") (if (jolt-truthy? nop) (jolt-invoke order-args (lambda (as) (let fnrec4176 ((as as)) (jolt-invoke (var-deref "clojure.core" "str") "(" nop " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))) (if (jolt= kind (keyword #f "keyword")) (jolt-invoke order-args (lambda (as) (let fnrec4177 ((as as)) (let* ((_a$4178 (var-deref "clojure.core" "str")) (_a$4179 "(jolt-get ") (_a$4180 (jolt-first as)) (_a$4181 " ") (_a$4182 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$4183 (jolt-invoke defstr as)) (_a$4184 ")")) (jolt-invoke _a$4178 _a$4179 _a$4180 _a$4181 _a$4182 _a$4183 _a$4184))))) (if (jolt= kind (keyword #f "coll")) (let* ((_a$4186 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4187 (jolt-cons fnode arg-nodes)) (_a$4188 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$4189 (lambda (G__38) (let fnrec4185 ((G__38 G__38)) (let* ((G__39 G__38) (c (jolt-nth G__39 0 jolt-nil)) (as (jolt-invoke (var-deref "clojure.core" "nthnext") G__39 1))) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-get " c " " (jolt-invoke (var-deref "clojure.string" "join") " " as) ")")))))) (jolt-invoke _a$4186 _a$4187 _a$4188 _a$4189)) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") fnode))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__13__auto))) (jolt-throw (let* ((_a$4196 (let* ((_a$4190 (var-deref "clojure.core" "str")) (_a$4191 "emit: unsupported stdlib fn `") (_a$4192 (jolt-get fnode (keyword #f "ns"))) (_a$4193 "/") (_a$4194 (jolt-get fnode (keyword #f "name"))) (_a$4195 "` (no core on Chez yet)")) (jolt-invoke _a$4190 _a$4191 _a$4192 _a$4193 _a$4194 _a$4195))) (_a$4197 (jolt-hash-map))) (jolt-ex-info _a$4196 _a$4197))) (if (jolt= (keyword #f "host-static") (jolt-get fnode (keyword #f "op"))) (jolt-invoke order-args (lambda (as) (let fnrec4198 ((as as)) (let* ((_a$4199 (var-deref "clojure.core" "str")) (_a$4200 "(host-static-call ") (_a$4201 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "class")))) (_a$4202 " ") (_a$4203 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "member")))) (_a$4204 (if (jolt-empty? as) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)))) (_a$4205 ")")) (jolt-invoke _a$4199 _a$4200 _a$4201 _a$4202 _a$4203 _a$4204 _a$4205))))) (if (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))) (jolt-throw (let* ((_a$4206 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host call `" (jolt-get fnode (keyword #f "name")) "`")) (_a$4207 (jolt-hash-map))) (jolt-ex-info _a$4206 _a$4207))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-invoke (var-deref "jolt.backend-scheme" "*known-procs*") (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get fnode (keyword #f "name"))))) and__13__auto))) (jolt-invoke invoke) (if (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))) (jolt-invoke invoke) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke invoke) jolt-nil))))))))))))))))) emit-invoke)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-try" (letrec ((emit-try (lambda (node) (let fnrec4208 ((node node)) (let* ((core (let* ((temp__4__auto (jolt-get node (keyword #f "catch-sym")))) (if (jolt-truthy? temp__4__auto) (let* ((cs temp__4__auto)) (let* ((_a$4209 (var-deref "clojure.core" "str")) (_a$4210 "(guard (") (_a$4211 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") cs)) (_a$4212 " (else ") (_a$4213 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "catch-body")))) (_a$4214 ")) ") (_a$4215 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$4216 ")")) (jolt-invoke _a$4209 _a$4210 _a$4211 _a$4212 _a$4213 _a$4214 _a$4215 _a$4216))) (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body"))))))) (let* ((temp__4__auto (jolt-get node (keyword #f "finally")))) (if (jolt-truthy? temp__4__auto) (let* ((fin temp__4__auto)) (jolt-invoke (var-deref "clojure.core" "str") "(dynamic-wind (lambda () #f) (lambda () " core ") (lambda () " (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fin) "))")) core))))))) emit-try)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "returns-scheme-bool?" (letrec ((returns-scheme-bool? (lambda (node) (let fnrec4217 ((node node)) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get node (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "boolean?") (jolt-get node (keyword #f "val"))) and__13__auto))) #t (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((nop (let* ((_a$4218 (var-deref "jolt.backend-scheme" "native-op")) (_a$4219 (jolt-get node (keyword #f "fn"))) (_a$4220 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt-invoke _a$4218 _a$4219 _a$4220)))) (if (jolt-truthy? (let* ((and__13__auto nop)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "bool-returning-ops") nop) and__13__auto))) #t #f)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))) returns-scheme-bool?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit" (letrec ((emit (lambda (node) (let fnrec4221 ((node node)) (let* ((G__40 (jolt-get node (keyword #f "op")))) (if (jolt= G__40 (keyword #f "const")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-const") (jolt-get node (keyword #f "val"))) (if (jolt= G__40 (keyword #f "local")) (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-get node (keyword #f "name"))) (if (jolt= G__40 (keyword #f "var")) (let* ((core-proc (let* ((and__13__auto (jolt= "clojure.core" (jolt-get node (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.backend-scheme" "core-value-procs") (jolt-get node (keyword #f "name"))) and__13__auto)))) (if (jolt-truthy? core-proc) core-proc (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.backend-scheme" "stdlib-var?") node))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.backend-scheme" "prelude-mode?"))) and__13__auto))) (jolt-throw (let* ((_a$4228 (let* ((_a$4222 (var-deref "clojure.core" "str")) (_a$4223 "emit: unsupported stdlib ref `") (_a$4224 (jolt-get node (keyword #f "ns"))) (_a$4225 "/") (_a$4226 (jolt-get node (keyword #f "name"))) (_a$4227 "` (no core on Chez yet)")) (jolt-invoke _a$4222 _a$4223 _a$4224 _a$4225 _a$4226 _a$4227))) (_a$4229 (jolt-hash-map))) (jolt-ex-info _a$4228 _a$4229))) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$4230 (var-deref "clojure.core" "str")) (_a$4231 "(var-deref ") (_a$4232 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4233 " ") (_a$4234 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4235 ")")) (jolt-invoke _a$4230 _a$4231 _a$4232 _a$4233 _a$4234 _a$4235)) jolt-nil)))) (if (jolt= G__40 (keyword #f "the-var")) (let* ((_a$4236 (var-deref "clojure.core" "str")) (_a$4237 "(jolt-var ") (_a$4238 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4239 " ") (_a$4240 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4241 ")")) (jolt-invoke _a$4236 _a$4237 _a$4238 _a$4239 _a$4240 _a$4241)) (if (jolt= G__40 (keyword #f "set-var")) (let* ((_a$4242 (var-deref "clojure.core" "str")) (_a$4243 "(jolt-var-set ") (_a$4244 (jolt-invoke emit (jolt-get node (keyword #f "the-var")))) (_a$4245 " ") (_a$4246 (jolt-invoke emit (jolt-get node (keyword #f "val")))) (_a$4247 ")")) (jolt-invoke _a$4242 _a$4243 _a$4244 _a$4245 _a$4246 _a$4247)) (if (jolt= G__40 (keyword #f "set-field")) (let* ((_a$4248 (var-deref "clojure.core" "str")) (_a$4249 "(jolt-set-field! ") (_a$4250 (jolt-invoke emit (jolt-get node (keyword #f "obj")))) (_a$4251 " (keyword #f ") (_a$4252 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "field")))) (_a$4253 ") ") (_a$4254 (jolt-invoke emit (jolt-get node (keyword #f "val")))) (_a$4255 ")")) (jolt-invoke _a$4248 _a$4249 _a$4250 _a$4251 _a$4252 _a$4253 _a$4254 _a$4255)) (if (jolt= G__40 (keyword #f "defmacro")) (let* ((_a$4256 (var-deref "clojure.core" "str")) (_a$4257 "(begin (def-var! ") (_a$4258 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4259 " ") (_a$4260 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4261 " ") (_a$4262 (jolt-invoke emit (jolt-get node (keyword #f "fn")))) (_a$4263 ") (mark-macro! ") (_a$4264 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4265 " ") (_a$4266 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4267 ") jolt-nil)")) (jolt-invoke _a$4256 _a$4257 _a$4258 _a$4259 _a$4260 _a$4261 _a$4262 _a$4263 _a$4264 _a$4265 _a$4266 _a$4267)) (if (jolt= G__40 (keyword #f "host")) (jolt-throw (let* ((_a$4268 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host ref `" (jolt-get node (keyword #f "name")) "`")) (_a$4269 (jolt-hash-map))) (jolt-ex-info _a$4268 _a$4269))) (if (jolt= G__40 (keyword #f "host-static")) (let* ((_a$4270 (var-deref "clojure.core" "str")) (_a$4271 "(host-static-ref ") (_a$4272 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$4273 " ") (_a$4274 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "member")))) (_a$4275 ")")) (jolt-invoke _a$4270 _a$4271 _a$4272 _a$4273 _a$4274 _a$4275)) (if (jolt= G__40 (keyword #f "host-new")) (let* ((_a$4276 (var-deref "clojure.core" "str")) (_a$4277 "(host-new ") (_a$4278 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$4279 (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$4280 ")")) (jolt-invoke _a$4276 _a$4277 _a$4278 _a$4279 _a$4280)) (if (jolt= G__40 (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)) (jolt-invoke emit test) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-truthy? " (jolt-invoke emit test) ")")))) (let* ((_a$4281 (var-deref "clojure.core" "str")) (_a$4282 "(if ") (_a$4283 t) (_a$4284 " ") (_a$4285 (jolt-invoke emit (jolt-get node (keyword #f "then")))) (_a$4286 " ") (_a$4287 (jolt-invoke emit (jolt-get node (keyword #f "else")))) (_a$4288 ")")) (jolt-invoke _a$4281 _a$4282 _a$4283 _a$4284 _a$4285 _a$4286 _a$4287 _a$4288))) (if (jolt= G__40 (keyword #f "do")) (let* ((_a$4289 (var-deref "clojure.core" "str")) (_a$4290 "(begin ") (_a$4291 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit (jolt-get node (keyword #f "statements"))))) (_a$4292 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$4293 (jolt-invoke emit (jolt-get node (keyword #f "ret")))) (_a$4294 ")")) (jolt-invoke _a$4289 _a$4290 _a$4291 _a$4292 _a$4293 _a$4294)) (if (jolt= G__40 (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-invoke") node) (if (jolt= G__40 (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__40 (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__40 (keyword #f "map")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ordered") "jolt-hash-map" (let* ((_a$4298 (var-deref "clojure.core" "mapcat")) (_a$4299 (lambda (p) (let fnrec4295 ((p p)) (let* ((_o$4296 (jolt-invoke emit (jolt-nth p 0))) (_o$4297 (jolt-invoke emit (jolt-nth p 1)))) (jolt-vector _o$4296 _o$4297))))) (_a$4300 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$4298 _a$4299 _a$4300))) (if (jolt= G__40 (keyword #f "quote")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "form"))) (if (jolt= G__40 (keyword #f "throw")) (jolt-invoke (var-deref "clojure.core" "str") "(jolt-throw " (jolt-invoke emit (jolt-get node (keyword #f "expr"))) ")") (if (jolt= G__40 (keyword #f "try")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-try") node) (if (jolt= G__40 (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__40 (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__40 (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__40 (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__40 (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__40 (keyword #f "host-call")) (let* ((m (jolt-get node (keyword #f "method"))) (target (jolt-invoke 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$4301 (var-deref "clojure.core" "str")) (_a$4302 "(jolt-host-call ") (_a$4303 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$4304 " ") (_a$4305 target) (_a$4306 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$4307 ")")) (jolt-invoke _a$4301 _a$4302 _a$4303 _a$4304 _a$4305 _a$4306 _a$4307)) (let* ((_a$4308 (var-deref "clojure.core" "str")) (_a$4309 "(record-method-dispatch ") (_a$4310 target) (_a$4311 " ") (_a$4312 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$4313 " (jolt-vector") (_a$4314 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$4315 "))")) (jolt-invoke _a$4308 _a$4309 _a$4310 _a$4311 _a$4312 _a$4313 _a$4314 _a$4315)))) (if (jolt= G__40 (keyword #f "let")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-let") node) (if (jolt= G__40 (keyword #f "loop")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-loop") node) (if (jolt= G__40 (keyword #f "recur")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-recur") node) (if (jolt= G__40 (keyword #f "ffi-fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-ffi-fn") node) (if (jolt= G__40 (keyword #f "fn")) (jolt-invoke (var-deref "jolt.backend-scheme" "emit-fn") node) (if (jolt= G__40 (keyword #f "def")) (if (jolt-truthy? (jolt-get node (keyword #f "no-init"))) (let* ((_a$4316 (var-deref "clojure.core" "str")) (_a$4317 "(declare-var! ") (_a$4318 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4319 " ") (_a$4320 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4321 ")")) (jolt-invoke _a$4316 _a$4317 _a$4318 _a$4319 _a$4320 _a$4321)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$4322 (var-deref "clojure.core" "str")) (_a$4323 "(def-var-with-meta! ") (_a$4324 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4325 " ") (_a$4326 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4327 " ") (_a$4328 (jolt-invoke emit (jolt-get node (keyword #f "init")))) (_a$4329 " ") (_a$4330 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "meta")))) (_a$4331 ")")) (jolt-invoke _a$4322 _a$4323 _a$4324 _a$4325 _a$4326 _a$4327 _a$4328 _a$4329 _a$4330 _a$4331)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$4332 (var-deref "clojure.core" "str")) (_a$4333 "(def-var! ") (_a$4334 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4335 " ") (_a$4336 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4337 " ") (_a$4338 (jolt-invoke emit (jolt-get node (keyword #f "init")))) (_a$4339 ")")) (jolt-invoke _a$4332 _a$4333 _a$4334 _a$4335 _a$4336 _a$4337 _a$4338 _a$4339)) jolt-nil))) (jolt-throw (let* ((_a$4340 (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$4341 (jolt-hash-map))) (jolt-ex-info _a$4340 _a$4341))))))))))))))))))))))))))))))))))))))) emit)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "foldable" (let* ((_o$4342 "+") (_o$4343 jolt-add) (_o$4344 "-") (_o$4345 jolt-sub) (_o$4346 "*") (_o$4347 jolt-mul) (_o$4348 "/") (_o$4349 jolt-div) (_o$4350 "<") (_o$4351 <) (_o$4352 ">") (_o$4353 >) (_o$4354 "<=") (_o$4355 <=) (_o$4356 ">=") (_o$4357 >=) (_o$4358 "=") (_o$4359 jolt=) (_o$4360 "inc") (_o$4361 jolt-inc) (_o$4362 "dec") (_o$4363 jolt-dec) (_o$4364 "mod") (_o$4365 modulo) (_o$4366 "rem") (_o$4367 remainder) (_o$4368 "quot") (_o$4369 quotient) (_o$4370 "bit-and") (_o$4371 (var-deref "clojure.core" "__bit-and")) (_o$4372 "bit-or") (_o$4373 (var-deref "clojure.core" "__bit-or")) (_o$4374 "bit-xor") (_o$4375 (var-deref "clojure.core" "__bit-xor"))) (jolt-hash-map _o$4342 _o$4343 _o$4344 _o$4345 _o$4346 _o$4347 _o$4348 _o$4349 _o$4350 _o$4351 _o$4352 _o$4353 _o$4354 _o$4355 _o$4356 _o$4357 _o$4358 _o$4359 _o$4360 _o$4361 _o$4362 _o$4363 _o$4364 _o$4365 _o$4366 _o$4367 _o$4368 _o$4369 _o$4370 _o$4371 _o$4372 _o$4373 _o$4374 _o$4375)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "const?" (letrec ((const? (lambda (n) (let fnrec4376 ((n n)) (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))))) const?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "const-num?" (letrec ((const-num? (lambda (n) (let fnrec4377 ((n n)) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.fold" "const?") n))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "number?") (jolt-get n (keyword #f "val"))) and__13__auto)))))) const-num?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "fold-fn" (letrec ((fold-fn (lambda (fnode) (let fnrec4378 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (jolt-truthy? (let* ((or__14__auto (let* ((and__13__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? and__13__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "host"))))) (jolt-get (var-deref "jolt.passes.fold" "foldable") (jolt-get fnode (keyword #f "name"))) jolt-nil)))))) fold-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "const-fold" (letrec ((const-fold (lambda (node) (let fnrec4379 ((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__13__auto ff)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-pos? (jolt-count args)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.fold" "const-num?") args) and__13__auto)) and__13__auto))) (guard (e (else jolt-nil)) (let* ((_o$4381 (keyword #f "op")) (_o$4382 (keyword #f "const")) (_o$4383 (keyword #f "val")) (_o$4384 (jolt-apply ff (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec4380 ((a a)) (jolt-get a (keyword #f "val")))) args)))) (jolt-hash-map _o$4381 _o$4382 _o$4383 _o$4384))) jolt-nil))) (let* ((or__14__auto folded)) (if (jolt-truthy? or__14__auto) or__14__auto n))) (if (jolt= op (keyword #f "if")) (let* ((t (jolt-invoke const-fold (jolt-get node (keyword #f "test"))))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.fold" "const?") t)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") (jolt-get t (keyword #f "val"))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= #f (jolt-get t (keyword #f "val")))))) (jolt-invoke const-fold (jolt-get node (keyword #f "else"))) (jolt-invoke const-fold (jolt-get node (keyword #f "then")))) (let* ((_a$4385 node) (_a$4386 (keyword #f "test")) (_a$4387 t) (_a$4388 (keyword #f "then")) (_a$4389 (jolt-invoke const-fold (jolt-get node (keyword #f "then")))) (_a$4390 (keyword #f "else")) (_a$4391 (jolt-invoke const-fold (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$4385 _a$4386 _a$4387 _a$4388 _a$4389 _a$4390 _a$4391)))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") const-fold node) jolt-nil)))))))) const-fold)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "scalar-const?" (letrec ((scalar-const? (lambda (n) (let fnrec4392 ((n n)) (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get n (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((v (jolt-get n (keyword #f "val")))) (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "keyword?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "string?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "number?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "clojure.core" "boolean?") v)))))))) and__13__auto)))))) scalar-const?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "dirty" (jolt-invoke (var-deref "clojure.core" "atom") #f)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "mark!" (letrec ((mark! (lambda () (let fnrec2878 () (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #t))))) mark!)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "rec-shapes" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "set-rec-shapes!" (letrec ((set-rec-shapes! (lambda (m) (let fnrec2879 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "rec-shapes") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-rec-shapes!)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "fresh-counter" (jolt-invoke (var-deref "clojure.core" "atom") 0) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "fresh" (letrec ((fresh (lambda (base) (let fnrec2880 ((base base)) (let* ((n (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "fresh-counter")))) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.inline" "fresh-counter") jolt-inc) (jolt-invoke (var-deref "clojure.core" "str") base "__il" n))))))) fresh)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "safe-op?" (letrec ((safe-op? (lambda (op) (let fnrec2881 ((op op)) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "host")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "the-var")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "quote")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "if")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "do")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "let")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "invoke")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "map")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "vector")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= op (keyword #f "set")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "throw")))))))))))))))))))))))))))))))) safe-op?)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.inline" "inline-budget" 120 (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "body-size" (letrec ((body-size (lambda (node) (let fnrec2882 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) 100000 (if (jolt= op (keyword #f "if")) (let* ((_a$2883 1) (_a$2884 (jolt-invoke body-size (jolt-get node (keyword #f "test")))) (_a$2885 (jolt-invoke body-size (jolt-get node (keyword #f "then")))) (_a$2886 (jolt-invoke body-size (jolt-get node (keyword #f "else"))))) (+ _a$2883 _a$2884 _a$2885 _a$2886)) (if (jolt= op (keyword #f "do")) (let* ((_a$2887 1) (_a$2888 (jolt-reduce jolt-add 0 (jolt-invoke (var-deref "clojure.core" "mapv") body-size (jolt-get node (keyword #f "statements"))))) (_a$2889 (jolt-invoke body-size (jolt-get node (keyword #f "ret"))))) (+ _a$2887 _a$2888 _a$2889)) (if (jolt= op (keyword #f "throw")) (+ 1 (jolt-invoke body-size (jolt-get node (keyword #f "expr")))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$2890 1) (_a$2891 (jolt-invoke body-size (jolt-get node (keyword #f "fn")))) (_a$2892 (jolt-reduce jolt-add 0 (jolt-invoke (var-deref "clojure.core" "mapv") body-size (jolt-get node (keyword #f "args")))))) (+ _a$2890 _a$2891 _a$2892)) (if (jolt= op (keyword #f "let")) (let* ((_a$2897 1) (_a$2898 (jolt-reduce jolt-add 0 (let* ((_a$2894 (var-deref "clojure.core" "mapv")) (_a$2895 (lambda (b) (let fnrec2893 ((b b)) (jolt-invoke body-size (jolt-nth b 1))))) (_a$2896 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$2894 _a$2895 _a$2896)))) (_a$2899 (jolt-invoke body-size (jolt-get node (keyword #f "body"))))) (+ _a$2897 _a$2898 _a$2899)) (if (jolt= op (keyword #f "vector")) (+ 1 (jolt-reduce jolt-add 0 (jolt-invoke (var-deref "clojure.core" "mapv") body-size (jolt-get node (keyword #f "items"))))) (if (jolt= op (keyword #f "set")) (+ 1 (jolt-reduce jolt-add 0 (jolt-invoke (var-deref "clojure.core" "mapv") body-size (jolt-get node (keyword #f "items"))))) (if (jolt= op (keyword #f "map")) (+ 1 (jolt-reduce jolt-add 0 (let* ((_a$2903 (var-deref "clojure.core" "mapv")) (_a$2904 (lambda (pr) (let fnrec2900 ((pr pr)) (let* ((_a$2901 (jolt-invoke body-size (jolt-nth pr 0))) (_a$2902 (jolt-invoke body-size (jolt-nth pr 1)))) (+ _a$2901 _a$2902))))) (_a$2905 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$2903 _a$2904 _a$2905)))) (if (jolt-truthy? (keyword #f "else")) 1 jolt-nil))))))))))))))) body-size)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "subst" (letrec ((subst (lambda (node env) (let fnrec2906 ((node node) (env env)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (let* ((r (jolt-get env (jolt-get node (keyword #f "name"))))) (if (jolt-truthy? r) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get r (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get node (keyword #f "hint")))) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-get r (keyword #f "hint"))) and__13__auto)) and__13__auto))) (jolt-assoc r (keyword #f "hint") (jolt-get node (keyword #f "hint"))) r) node)) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$2918 (lambda (acc b) (let fnrec2907 ((acc acc) (b b)) (let* ((e (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (nm (jolt-nth b 0)) (init (jolt-invoke subst (jolt-nth b 1) e)) (f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") nm))) (let* ((_o$2914 (jolt-assoc e nm (let* ((_o$2908 (keyword #f "op")) (_o$2909 (keyword #f "local")) (_o$2910 (keyword #f "name")) (_o$2911 f)) (jolt-hash-map _o$2908 _o$2909 _o$2910 _o$2911)))) (_o$2915 (jolt-conj binds (let* ((_o$2912 f) (_o$2913 init)) (jolt-vector _o$2912 _o$2913))))) (jolt-vector _o$2914 _o$2915)))))) (_a$2919 (let* ((_o$2916 env) (_o$2917 (jolt-vector))) (jolt-vector _o$2916 _o$2917))) (_a$2920 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2918 _a$2919 _a$2920)))) (let* ((_a$2924 node) (_a$2925 (keyword #f "bindings")) (_a$2926 (jolt-nth res 1)) (_a$2927 (keyword #f "body")) (_a$2928 (let* ((_a$2921 subst) (_a$2922 (jolt-get node (keyword #f "body"))) (_a$2923 (jolt-nth res 0))) (jolt-invoke _a$2921 _a$2922 _a$2923)))) (jolt-assoc _a$2924 _a$2925 _a$2926 _a$2927 _a$2928))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2929 ((c c)) (jolt-invoke subst c env))) node) jolt-nil)))))))) subst)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "trivial-arg?" (letrec ((trivial-arg? (lambda (n) (let fnrec2930 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "local")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "const"))))))))) trivial-arg?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "body-closed?" (letrec ((body-closed? (lambda (node scope) (let fnrec2931 ((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 "const")) #t (if (jolt= op (keyword #f "var")) #t (if (jolt= op (keyword #f "host")) #t (if (jolt= op (keyword #f "the-var")) #t (if (jolt= op (keyword #f "quote")) #t (if (jolt= op (keyword #f "if")) (let* ((and__13__auto (jolt-invoke body-closed? (jolt-get node (keyword #f "test")) scope))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke body-closed? (jolt-get node (keyword #f "then")) scope))) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? (jolt-get node (keyword #f "else")) scope) and__13__auto)) and__13__auto)) (if (jolt= op (keyword #f "do")) (let* ((and__13__auto (let* ((_a$2933 (var-deref "clojure.core" "every?")) (_a$2934 (lambda (s) (let fnrec2932 ((s s)) (jolt-invoke body-closed? s scope)))) (_a$2935 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$2933 _a$2934 _a$2935)))) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? (jolt-get node (keyword #f "ret")) scope) and__13__auto)) (if (jolt= op (keyword #f "throw")) (jolt-invoke body-closed? (jolt-get node (keyword #f "expr")) scope) (if (jolt= op (keyword #f "invoke")) (let* ((and__13__auto (jolt-invoke body-closed? (jolt-get node (keyword #f "fn")) scope))) (if (jolt-truthy? and__13__auto) (let* ((_a$2937 (var-deref "clojure.core" "every?")) (_a$2938 (lambda (a) (let fnrec2936 ((a a)) (jolt-invoke body-closed? a scope)))) (_a$2939 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$2937 _a$2938 _a$2939)) and__13__auto)) (if (jolt= op (keyword #f "vector")) (let* ((_a$2941 (var-deref "clojure.core" "every?")) (_a$2942 (lambda (x) (let fnrec2940 ((x x)) (jolt-invoke body-closed? x scope)))) (_a$2943 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$2941 _a$2942 _a$2943)) (if (jolt= op (keyword #f "set")) (let* ((_a$2945 (var-deref "clojure.core" "every?")) (_a$2946 (lambda (x) (let fnrec2944 ((x x)) (jolt-invoke body-closed? x scope)))) (_a$2947 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$2945 _a$2946 _a$2947)) (if (jolt= op (keyword #f "map")) (let* ((_a$2949 (var-deref "clojure.core" "every?")) (_a$2950 (lambda (pr) (let fnrec2948 ((pr pr)) (let* ((and__13__auto (jolt-invoke body-closed? (jolt-nth pr 0) scope))) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? (jolt-nth pr 1) scope) and__13__auto))))) (_a$2951 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$2949 _a$2950 _a$2951)) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$2957 (lambda (acc b) (let fnrec2952 ((acc acc) (b b)) (let* ((sc (jolt-nth acc 0)) (ok (jolt-nth acc 1))) (if (jolt-not ok) acc (let* ((_o$2953 (jolt-conj sc (jolt-nth b 0))) (_o$2954 (jolt-invoke body-closed? (jolt-nth b 1) sc))) (jolt-vector _o$2953 _o$2954))))))) (_a$2958 (let* ((_o$2955 scope) (_o$2956 #t)) (jolt-vector _o$2955 _o$2956))) (_a$2959 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2957 _a$2958 _a$2959)))) (let* ((and__13__auto (jolt-nth res 1))) (if (jolt-truthy? and__13__auto) (let* ((_a$2960 body-closed?) (_a$2961 (jolt-get node (keyword #f "body"))) (_a$2962 (jolt-nth res 0))) (jolt-invoke _a$2960 _a$2961 _a$2962)) and__13__auto))) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil)))))))))))))))))))) body-closed?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "try-inline" (letrec ((try-inline (lambda (node ctx) (let fnrec2963 ((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$2964 (var-deref "jolt.host" "inline-ir")) (_a$2965 ctx) (_a$2966 (jolt-get f (keyword #f "ns"))) (_a$2967 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$2964 _a$2965 _a$2966 _a$2967)))) (if (jolt-truthy? stash) (let* ((params (jolt-get stash (keyword #f "params"))) (body (jolt-get stash (keyword #f "body"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (let* ((_a$2968 (jolt-count params)) (_a$2969 (jolt-count args))) (jolt= _a$2968 _a$2969)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (<= (jolt-invoke (var-deref "jolt.passes.inline" "body-size") body) (var-deref "jolt.passes.inline" "inline-budget")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "body-closed?") body (jolt-reduce jolt-conj (jolt-hash-set) params)) and__13__auto)) and__13__auto))) (let* ((n (jolt-count params)) (res (let* ((i 0) (env (jolt-hash-map)) (binds (jolt-vector))) (let loop2970 ((i i) (env env) (binds binds)) (if (< i n) (let* ((p (jolt-nth params i)) (a (jolt-nth args i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "trivial-arg?") a)) (let* ((_a$2971 (jolt-inc i)) (_a$2972 (jolt-assoc env p a)) (_a$2973 binds)) (loop2970 _a$2971 _a$2972 _a$2973)) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$2980 (jolt-inc i)) (_a$2981 (jolt-assoc env p (let* ((_o$2974 (keyword #f "op")) (_o$2975 (keyword #f "local")) (_o$2976 (keyword #f "name")) (_o$2977 f)) (jolt-hash-map _o$2974 _o$2975 _o$2976 _o$2977)))) (_a$2982 (jolt-conj binds (let* ((_o$2978 f) (_o$2979 a)) (jolt-vector _o$2978 _o$2979))))) (loop2970 _a$2980 _a$2981 _a$2982))))) (let* ((_o$2983 env) (_o$2984 binds)) (jolt-vector _o$2983 _o$2984)))))) (env (jolt-nth res 0)) (binds (jolt-nth res 1)) (rbody (jolt-invoke (var-deref "jolt.passes.inline" "subst") body env))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (if (jolt= 0 (jolt-count binds)) rbody (let* ((_o$2985 (keyword #f "op")) (_o$2986 (keyword #f "let")) (_o$2987 (keyword #f "bindings")) (_o$2988 binds) (_o$2989 (keyword #f "body")) (_o$2990 rbody)) (jolt-hash-map _o$2985 _o$2986 _o$2987 _o$2988 _o$2989 _o$2990))))) node)) node)) node)))))) try-inline)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "inline-node" (letrec ((inline-node (lambda (node ctx) (let fnrec2991 ((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 fnrec2992 ((c c)) (jolt-invoke inline-node c ctx))) node) ctx) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2993 ((c c)) (jolt-invoke inline-node c ctx))) node)))))) inline-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "flatten-let-bindings" (letrec ((flatten-let-bindings (lambda (binds) (let fnrec2994 ((binds binds)) (let* ((_a$3000 (lambda (out b) (let fnrec2995 ((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$2998 (jolt-reduce jolt-conj out (jolt-get init (keyword #f "bindings")))) (_a$2999 (let* ((_o$2996 nm) (_o$2997 (jolt-get init (keyword #f "body")))) (jolt-vector _o$2996 _o$2997)))) (jolt-conj _a$2998 _a$2999))) (jolt-conj out b)))))) (_a$3001 (jolt-vector)) (_a$3002 binds)) (jolt-reduce _a$3000 _a$3001 _a$3002)))))) flatten-let-bindings)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "flatten-lets" (letrec ((flatten-lets (lambda (node) (let fnrec3003 ((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$3004 "+") (_o$3005 "-") (_o$3006 "*") (_o$3007 "/") (_o$3008 "<") (_o$3009 ">") (_o$3010 "<=") (_o$3011 ">=") (_o$3012 "=") (_o$3013 "not=") (_o$3014 "inc") (_o$3015 "dec") (_o$3016 "mod") (_o$3017 "rem") (_o$3018 "quot") (_o$3019 "min") (_o$3020 "max") (_o$3021 "abs") (_o$3022 "nil?") (_o$3023 "some?") (_o$3024 "not") (_o$3025 "get") (_o$3026 "zero?") (_o$3027 "pos?") (_o$3028 "neg?") (_o$3029 "even?") (_o$3030 "odd?") (_o$3031 "bit-and") (_o$3032 "bit-or") (_o$3033 "bit-xor")) (jolt-hash-set _o$3004 _o$3005 _o$3006 _o$3007 _o$3008 _o$3009 _o$3010 _o$3011 _o$3012 _o$3013 _o$3014 _o$3015 _o$3016 _o$3017 _o$3018 _o$3019 _o$3020 _o$3021 _o$3022 _o$3023 _o$3024 _o$3025 _o$3026 _o$3027 _o$3028 _o$3029 _o$3030 _o$3031 _o$3032 _o$3033)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "pure-fn?" (letrec ((pure-fn? (lambda (f) (let fnrec3034 ((f f)) (let* ((op (jolt-get f (keyword #f "op")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))) and__13__auto))) #t (if (jolt= op (keyword #f "var")) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) and__13__auto)) (if (jolt= op (keyword #f "host")) (jolt-contains? (var-deref "jolt.passes.inline" "pure-fns") (jolt-get f (keyword #f "name"))) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) pure-fn?)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.inline" "ctor-shape"))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "pure?" (letrec ((pure? (lambda (node) (let fnrec3035 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) #t (if (jolt= op (keyword #f "local")) #t (if (jolt= op (keyword #f "var")) #t (if (jolt= op (keyword #f "host")) #t (if (jolt= op (keyword #f "the-var")) #t (if (jolt= op (keyword #f "quote")) #t (if (jolt= op (keyword #f "if")) (let* ((and__13__auto (jolt-invoke pure? (jolt-get node (keyword #f "test"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke pure? (jolt-get node (keyword #f "then"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? (jolt-get node (keyword #f "else"))) and__13__auto)) and__13__auto)) (if (jolt= op (keyword #f "do")) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "statements"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? (jolt-get node (keyword #f "ret"))) and__13__auto)) (if (jolt= op (keyword #f "let")) (let* ((and__13__auto (let* ((_a$3037 (var-deref "clojure.core" "every?")) (_a$3038 (lambda (b) (let fnrec3036 ((b b)) (jolt-invoke pure? (jolt-nth b 1))))) (_a$3039 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$3037 _a$3038 _a$3039)))) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? (jolt-get node (keyword #f "body"))) and__13__auto)) (if (jolt= op (keyword #f "vector")) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "set")) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "map")) (let* ((_a$3041 (var-deref "clojure.core" "every?")) (_a$3042 (lambda (pr) (let fnrec3040 ((pr pr)) (let* ((and__13__auto (jolt-invoke pure? (jolt-nth pr 0)))) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? (jolt-nth pr 1)) and__13__auto))))) (_a$3043 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$3041 _a$3042 _a$3043)) (if (jolt= op (keyword #f "invoke")) (let* ((and__13__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "pure-fn?") (jolt-get node (keyword #f "fn"))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") node))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "args"))) and__13__auto)) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))))))))))))) pure?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "const-key-map?" (letrec ((const-key-map? (lambda (node) (let fnrec3044 ((node node)) (let* ((prs (jolt-get node (keyword #f "pairs")))) (let* ((and__13__auto (> (jolt-count prs) 0))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec3045 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) prs) and__13__auto))))))) const-key-map?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "all-vals-pure?" (letrec ((all-vals-pure? (lambda (node) (let fnrec3046 ((node node)) (let* ((_a$3048 (var-deref "clojure.core" "every?")) (_a$3049 (lambda (pr) (let fnrec3047 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.inline" "pure?") (jolt-nth pr 1))))) (_a$3050 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$3048 _a$3049 _a$3050)))))) all-vals-pure?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "map-val" (letrec ((map-val (lambda (mapnode k) (let fnrec3051 ((mapnode mapnode) (k k)) (let* ((prs (jolt-get mapnode (keyword #f "pairs"))) (n (jolt-count prs))) (let* ((i 0)) (let loop3052 ((i i)) (if (< i n) (let* ((pr (jolt-nth prs i))) (if (jolt= (jolt-get (jolt-nth pr 0) (keyword #f "val")) k) (jolt-nth pr 1) (loop3052 (jolt-inc i)))) (let* ((_o$3053 (keyword #f "op")) (_o$3054 (keyword #f "const")) (_o$3055 (keyword #f "val")) (_o$3056 jolt-nil)) (jolt-hash-map _o$3053 _o$3054 _o$3055 _o$3056)))))))))) map-val)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "lookup-key" (letrec ((lookup-key (lambda (node nm) (let fnrec3057 ((node node) (nm nm)) (if (jolt= (keyword #f "invoke") (jolt-get node (keyword #f "op"))) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 1 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get f (keyword #f "val")) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get f (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get f (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 (jolt-count args)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "local") (jolt-get (jolt-nth args 0) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= nm (jolt-get (jolt-nth args 0) (keyword #f "name"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth args 1)) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-get (jolt-nth args 1) (keyword #f "val")) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) jolt-nil))))) lookup-key)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "any-binding-named?" (letrec ((any-binding-named? (lambda (binds nm) (let fnrec3058 ((binds binds) (nm nm)) (let* ((i 0)) (let loop3059 ((i i)) (if (< i (jolt-count binds)) (if (jolt= nm (jolt-nth (jolt-nth binds i) 0)) #t (loop3059 (jolt-inc i))) #f))))))) any-binding-named?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "any-name?" (letrec ((any-name? (lambda (names nm) (let fnrec3060 ((names names) (nm nm)) (let* ((i 0)) (let loop3061 ((i i)) (if (< i (jolt-count names)) (if (jolt= nm (jolt-nth names i)) #t (loop3061 (jolt-inc i))) #f))))))) any-name?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "local-escapes?" (letrec ((local-escapes? (lambda (node nm) (let fnrec3062 ((node node) (nm nm)) (let* ((op (jolt-get node (keyword #f "op"))) (k (jolt-invoke (var-deref "jolt.passes.inline" "lookup-key") node nm))) (if (jolt-truthy? k) (let* ((args (jolt-get node (keyword #f "args")))) (if (> (jolt-count args) 1) (let* ((i 1)) (let loop3063 ((i i)) (if (< i (jolt-count args)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth args i) nm)) #t (loop3063 (jolt-inc i))) #f))) #f)) (if (jolt= op (keyword #f "local")) (jolt= nm (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "const")) #f (if (jolt= op (keyword #f "var")) #f (if (jolt= op (keyword #f "host")) #f (if (jolt= op (keyword #f "the-var")) #f (if (jolt= op (keyword #f "quote")) #f (if (jolt= op (keyword #f "if")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "test")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "then")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "else")) nm))))) (if (jolt= op (keyword #f "do")) (let* ((or__14__auto (let* ((i 0) (ss (jolt-get node (keyword #f "statements")))) (let loop3064 ((i i) (ss ss)) (if (< i (jolt-count ss)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth ss i) nm)) #t (loop3064 (jolt-inc i) ss)) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "ret")) nm))) (if (jolt= op (keyword #f "throw")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "expr")) nm) (if (jolt= op (keyword #f "invoke")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "fn")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3065 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3065 (jolt-inc i) as)) #f))))) (if (jolt= op (keyword #f "vector")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3066 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3066 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "set")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3067 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3067 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "map")) (let* ((i 0) (ps (jolt-get node (keyword #f "pairs")))) (let loop3068 ((i i) (ps ps)) (if (< i (jolt-count ps)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 0) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-nth (jolt-nth ps i) 1) nm)))) #t (loop3068 (jolt-inc i) ps)) #f))) (if (jolt= op (keyword #f "let")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3069 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3069 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "recur")) (let* ((i 0) (as (jolt-get node (keyword #f "args")))) (let loop3070 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3070 (jolt-inc i) as)) #f))) (if (jolt= op (keyword #f "loop")) (let* ((binds (jolt-get node (keyword #f "bindings")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") binds nm)) #t (let* ((or__14__auto (let* ((i 0)) (let loop3071 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3071 (jolt-inc i))) #f))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))))) (if (jolt= op (keyword #f "fn")) (let* ((i 0) (ars (jolt-get node (keyword #f "arities")))) (let loop3072 ((i i) (ars ars)) (if (< i (jolt-count ars)) (let* ((ar (jolt-nth ars i)) (ps (jolt-get ar (keyword #f "params")))) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "any-name?") ps nm))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= nm (jolt-get ar (keyword #f "rest")))))) #t (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-get ar (keyword #f "body")) nm)) #t (loop3072 (jolt-inc i) ars)))) #f))) (if (jolt= op (keyword #f "try")) (let* ((or__14__auto (jolt-invoke local-escapes? (jolt-get node (keyword #f "body")) nm))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (let* ((cb (jolt-get node (keyword #f "catch-body")))) (let* ((and__13__auto cb)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt= nm (jolt-get node (keyword #f "catch-sym")))))) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? cb nm) and__13__auto)) and__13__auto))))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((f (jolt-get node (keyword #f "finally")))) (let* ((and__13__auto f)) (if (jolt-truthy? and__13__auto) (jolt-invoke local-escapes? f nm) and__13__auto))))))) (if (jolt= op (keyword #f "def")) (jolt-invoke local-escapes? (jolt-get node (keyword #f "init")) nm) (if (jolt-truthy? (keyword #f "else")) #t jolt-nil)))))))))))))))))))))))))) local-escapes?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "ctor-shape" (letrec ((ctor-shape (lambda (node) (let fnrec3073 ((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$3078 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "rec-shapes"))) (_a$3079 (let* ((_a$3074 (var-deref "clojure.core" "str")) (_a$3075 (jolt-get f (keyword #f "ns"))) (_a$3076 "/") (_a$3077 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$3074 _a$3075 _a$3076 _a$3077)))) (jolt-get _a$3078 _a$3079)))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((_a$3080 (jolt-count (jolt-get rs (keyword #f "fields")))) (_a$3081 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt= _a$3080 _a$3081)) and__13__auto))) rs jolt-nil)) jolt-nil)) jolt-nil))))) ctor-shape)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "ctor-all-args-pure?" (letrec ((ctor-all-args-pure? (lambda (node) (let fnrec3082 ((node node)) (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.inline" "pure?") (jolt-get node (keyword #f "args"))))))) ctor-all-args-pure?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "field-index" (letrec ((field-index (lambda (fields k) (let fnrec3083 ((fields fields) (k k)) (let* ((n (jolt-count fields))) (let* ((i 0)) (let loop3084 ((i i)) (if (< i n) (if (jolt= (jolt-nth fields i) k) i (loop3084 (jolt-inc i))) jolt-nil)))))))) field-index)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "ctor-val" (letrec ((ctor-val (lambda (ctor rs k) (let fnrec3085 ((ctor ctor) (rs rs) (k k)) (let* ((_a$3086 (jolt-get ctor (keyword #f "args"))) (_a$3087 (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k))) (jolt-nth _a$3086 _a$3087)))))) ctor-val)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "collect-keys!" (letrec ((collect-keys! (lambda (node nm acc) (let fnrec3088 ((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 fnrec3089 ((c c)) (begin (jolt-invoke collect-keys! c nm acc) c))) node))))))) collect-keys!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "lookups-all-fields?" (letrec ((lookups-all-fields? (lambda (nodes nm fields) (let fnrec3090 ((nodes nodes) (nm nm) (fields fields)) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (node) (let fnrec3091 ((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$3093 (var-deref "clojure.core" "every?")) (_a$3094 (lambda (k) (let fnrec3092 ((k k)) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") fields k)))) (_a$3095 (jolt-invoke (var-deref "clojure.core" "deref") acc))) (jolt-invoke _a$3093 _a$3094 _a$3095)))))) nodes))))) lookups-all-fields?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "src-val" (letrec ((src-val (lambda (src k) (let fnrec3096 ((src src) (k k)) (if (jolt= (keyword #f "map") (jolt-get src (keyword #f "op"))) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") src k) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") src (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") src) k)))))) src-val)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "subst-lookup" (letrec ((subst-lookup (lambda (node nm src) (let fnrec3097 ((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 fnrec3098 ((c c)) (jolt-invoke subst-lookup c nm src))) node))))))) subst-lookup)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "fold-kw-literal" (letrec ((fold-kw-literal (lambda (node) (let fnrec3099 ((node node)) (let* ((f (jolt-get node (keyword #f "fn"))) (args (jolt-get node (keyword #f "args")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get f (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get f (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (jolt= 1 (jolt-count args)) and__13__auto)) and__13__auto))) (let* ((m (jolt-nth args 0)) (k (jolt-get f (keyword #f "val")))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get m (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") m) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "map-val") m k)) (let* ((rs (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") m))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") m))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k) and__13__auto)) and__13__auto))) (begin (jolt-invoke (var-deref "jolt.passes.inline" "mark!")) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-val") m rs k)) node)))) node)))))) fold-kw-literal)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "elim-let-structs" (letrec ((elim-let-structs (lambda (node) (let fnrec3100 ((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 loop3101 ((i i)) (if (< i n) (let* ((b (jolt-nth binds i)) (nm (jolt-nth b 0)) (init (jolt-nth b 1)) (ismap (let* ((and__13__auto (jolt= (keyword #f "map") (jolt-get init (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.inline" "const-key-map?") init))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "all-vals-pure?") init) and__13__auto)) and__13__auto))) (rs (if (jolt-not ismap) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") init) jolt-nil)) (isrec (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.inline" "ctor-all-args-pure?") init) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto isrec)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "any-binding-named?") (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n) nm)))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (let* ((j (jolt-inc i))) (let loop3102 ((j j)) (if (< j n) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") (jolt-nth (jolt-nth binds j) 1) nm)) #t (loop3102 (jolt-inc j))) #f)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "local-escapes?") body nm)))) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto ismap)) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((_a$3107 (var-deref "jolt.passes.inline" "lookups-all-fields?")) (_a$3108 (jolt-conj (let* ((_a$3104 (var-deref "clojure.core" "mapv")) (_a$3105 (lambda (bb) (let fnrec3103 ((bb bb)) (jolt-nth bb 1)))) (_a$3106 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3104 _a$3105 _a$3106)) body)) (_a$3109 nm) (_a$3110 (jolt-get rs (keyword #f "fields")))) (jolt-invoke _a$3107 _a$3108 _a$3109 _a$3110)))) and__13__auto)) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((head (jolt-invoke (var-deref "clojure.core" "subvec") binds 0 i)) (tail (let* ((_a$3114 (var-deref "clojure.core" "mapv")) (_a$3115 (lambda (bb) (let fnrec3111 ((bb bb)) (let* ((_o$3112 (jolt-nth bb 0)) (_o$3113 (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") (jolt-nth bb 1) nm init))) (jolt-vector _o$3112 _o$3113))))) (_a$3116 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3114 _a$3115 _a$3116))) (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)))) (loop3101 (jolt-inc i)))) node)))))))) elim-let-structs)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "scalar-replace" (letrec ((scalar-replace (lambda (node) (let fnrec3117 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (jolt-invoke (var-deref "jolt.passes.inline" "fold-kw-literal") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt= op (keyword #f "let")) (jolt-invoke (var-deref "jolt.passes.inline" "elim-let-structs") (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") scalar-replace node) jolt-nil)))))))) scalar-replace)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "velem" (letrec ((velem (lambda (t) (let fnrec3118 ((t t)) (jolt-get t (keyword #f "vec")))))) velem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "selem" (letrec ((selem (lambda (t) (let fnrec3119 ((t t)) (jolt-get t (keyword #f "set")))))) selem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "sfields" (letrec ((sfields (lambda (t) (let fnrec3120 ((t t)) (jolt-get t (keyword #f "struct")))))) sfields)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "vec-type?" (letrec ((vec-type? (lambda (t) (let fnrec3121 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "velem") t)))))) vec-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-type?" (letrec ((set-type? (lambda (t) (let fnrec3122 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "selem") t)))))) set-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "struct-type?" (letrec ((struct-type? (lambda (t) (let fnrec3123 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-invoke (var-deref "jolt.passes.types" "sfields") t)))))) struct-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mk-vec" (letrec ((mk-vec (lambda (t) (let fnrec3124 ((t t)) (let* ((_o$3125 (keyword #f "vec")) (_o$3126 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3125 _o$3126)))))) mk-vec)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mk-set" (letrec ((mk-set (lambda (t) (let fnrec3127 ((t t)) (let* ((_o$3128 (keyword #f "set")) (_o$3129 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3128 _o$3129)))))) mk-set)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mk-struct" (letrec ((mk-struct (lambda (fs) (let fnrec3130 ((fs fs)) (let* ((_o$3131 (keyword #f "struct")) (_o$3132 fs)) (jolt-hash-map _o$3131 _o$3132)))))) mk-struct)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "union-cap" 4 (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "scalar-t?" (letrec ((scalar-t? (lambda (t) (let fnrec3133 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "phm")))))))))))))) scalar-t?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "union-type?" (letrec ((union-type? (lambda (t) (let fnrec3134 ((t t)) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "union"))))))) union-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "umembers" (letrec ((umembers (lambda (t) (let fnrec3135 ((t t)) (jolt-get t (keyword #f "union")))))) umembers)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "union-of" (letrec ((union-of (lambda (ts) (let fnrec3136 ((ts ts)) (let* ((flat (let* ((_a$3138 (lambda (acc t) (let fnrec3137 ((acc acc) (t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-reduce jolt-conj acc (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (jolt-conj acc t))))) (_a$3139 (jolt-hash-set)) (_a$3140 ts)) (jolt-reduce _a$3138 _a$3139 _a$3140)))) (if (jolt-not (jolt-invoke (var-deref "clojure.core" "every?") (var-deref "jolt.passes.types" "scalar-t?") flat)) (keyword #f "any") (if (jolt= 0 (jolt-count flat)) (keyword #f "any") (if (jolt= 1 (jolt-count flat)) (jolt-first flat) (if (> (jolt-count flat) (var-deref "jolt.passes.types" "union-cap")) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3141 (keyword #f "union")) (_o$3142 flat)) (jolt-hash-map _o$3141 _o$3142)) jolt-nil)))))))))) union-of)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "join-t"))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "merge-fields" (letrec ((merge-fields (lambda (fa fb) (let fnrec3143 ((fa fa) (fb fb)) (let* ((m1 (let* ((_a$3148 (lambda (m k) (let fnrec3144 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3145 (var-deref "jolt.passes.types" "join-t")) (_a$3146 (jolt-get fa k (keyword #f "any"))) (_a$3147 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3145 _a$3146 _a$3147)))))) (_a$3149 (jolt-hash-map)) (_a$3150 (jolt-keys fa))) (jolt-reduce _a$3148 _a$3149 _a$3150)))) (let* ((_a$3155 (lambda (m k) (let fnrec3151 ((m m) (k k)) (if (jolt-truthy? (jolt-get m k)) m (jolt-assoc m k (let* ((_a$3152 (var-deref "jolt.passes.types" "join-t")) (_a$3153 (jolt-get fa k (keyword #f "any"))) (_a$3154 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3152 _a$3153 _a$3154))))))) (_a$3156 m1) (_a$3157 (jolt-keys fb))) (jolt-reduce _a$3155 _a$3156 _a$3157))))))) merge-fields)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "join-t" (letrec ((join-t (lambda (a b) (let fnrec3158 ((a a) (b b)) (if (jolt= a b) a (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") a)) b (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") b)) a (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") b) and__13__auto))) (let* ((merged (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3159 (var-deref "jolt.passes.types" "merge-fields")) (_a$3160 (jolt-invoke (var-deref "jolt.passes.types" "sfields") a)) (_a$3161 (jolt-invoke (var-deref "jolt.passes.types" "sfields") b))) (jolt-invoke _a$3159 _a$3160 _a$3161))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-get a (keyword #f "shape")))) (if (jolt-truthy? and__13__auto) (let* ((_a$3162 (jolt-get a (keyword #f "shape"))) (_a$3163 (jolt-get b (keyword #f "shape")))) (jolt= _a$3162 _a$3163)) and__13__auto))) (jolt-assoc merged (keyword #f "shape") (jolt-get a (keyword #f "shape"))) merged)) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3164 join-t) (_a$3165 (jolt-invoke (var-deref "jolt.passes.types" "velem") a)) (_a$3166 (jolt-invoke (var-deref "jolt.passes.types" "velem") b))) (jolt-invoke _a$3164 _a$3165 _a$3166))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") a))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "set-type?") b) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-set") (let* ((_a$3167 join-t) (_a$3168 (jolt-invoke (var-deref "jolt.passes.types" "selem") a)) (_a$3169 (jolt-invoke (var-deref "jolt.passes.types" "selem") b))) (jolt-invoke _a$3167 _a$3168 _a$3169))) (if (jolt-truthy? (keyword #f "else")) (let* ((ma (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") a)) (jolt-invoke (var-deref "jolt.passes.types" "umembers") a) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "scalar-t?") a)) (jolt-hash-set a) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil)))) (mb (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") b)) (jolt-invoke (var-deref "jolt.passes.types" "umembers") b) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "scalar-t?") b)) (jolt-hash-set b) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))) (if (jolt-truthy? (let* ((and__13__auto ma)) (if (jolt-truthy? and__13__auto) mb and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "union-of") (jolt-reduce jolt-conj ma mb)) (keyword #f "any"))) jolt-nil))))))))))) join-t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "join" (letrec ((join (lambda (a b) (let fnrec3170 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types" "join-t") a b))))) join)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "type-depth" 4 (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "cap" (letrec ((cap (lambda (t d) (let fnrec3171 ((t t) (d d)) (if (<= d 0) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)))))) (keyword #f "any") t) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) (let* ((capped (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3176 (lambda (m k) (let fnrec3172 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3173 cap) (_a$3174 (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "sfields") t) k)) (_a$3175 (jolt-dec d))) (jolt-invoke _a$3173 _a$3174 _a$3175)))))) (_a$3177 (jolt-hash-map)) (_a$3178 (jolt-keys (jolt-invoke (var-deref "jolt.passes.types" "sfields") t)))) (jolt-reduce _a$3176 _a$3177 _a$3178)))) (capped (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc capped (keyword #f "shape") (jolt-get t (keyword #f "shape"))) capped)) (capped (if (jolt-truthy? (jolt-get t (keyword #f "type"))) (jolt-assoc capped (keyword #f "type") (jolt-get t (keyword #f "type"))) capped))) capped) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3179 cap) (_a$3180 (jolt-invoke (var-deref "jolt.passes.types" "velem") t)) (_a$3181 (jolt-dec d))) (jolt-invoke _a$3179 _a$3180 _a$3181))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)) (jolt-invoke (var-deref "jolt.passes.types" "mk-set") (let* ((_a$3182 cap) (_a$3183 (jolt-invoke (var-deref "jolt.passes.types" "selem") t)) (_a$3184 (jolt-dec d))) (jolt-invoke _a$3182 _a$3183 _a$3184))) (if (jolt-truthy? (keyword #f "else")) t jolt-nil))))))))) cap)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "struct-safe?" (letrec ((struct-safe? (lambda (t) (let fnrec3185 ((t t)) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))))) struct-safe?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "field-type" (letrec ((field-type (lambda (t k) (let fnrec3186 ((t t) (k k)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "sfields") t) k (keyword #f "any")) (keyword #f "any")))))) field-type)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "shape-order" (letrec ((shape-order (lambda (ks) (let fnrec3187 ((ks ks)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "sort") (lambda (a b) (let fnrec3188 ((a a) (b b)) (let* ((_a$3189 (var-deref "clojure.core" "compare")) (_a$3190 (jolt-invoke (var-deref "clojure.core" "str") a)) (_a$3191 (jolt-invoke (var-deref "clojure.core" "str") b))) (jolt-invoke _a$3189 _a$3190 _a$3191)))) ks)))))) shape-order)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "type-shape" (letrec ((type-shape (lambda (t) (let fnrec3192 ((t t)) (jolt-get t (keyword #f "shape")))))) type-shape)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mark-struct" (letrec ((mark-struct (lambda (node t) (let fnrec3193 ((node node) (t t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-get t (keyword #f "shape"))) (jolt-assoc n (keyword #f "shape") (jolt-get t (keyword #f "shape"))) n)))))) mark-struct)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "truthy-type?" (letrec ((truthy-type? (lambda (t) (let fnrec3194 ((t t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "truthy")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t))))))))))))))))))) truthy-type?)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "num-ret-fns" (let* ((_o$3195 "+") (_o$3196 "-") (_o$3197 "*") (_o$3198 "/") (_o$3199 "inc") (_o$3200 "dec") (_o$3201 "mod") (_o$3202 "rem") (_o$3203 "quot") (_o$3204 "min") (_o$3205 "max") (_o$3206 "abs") (_o$3207 "bit-and") (_o$3208 "bit-or") (_o$3209 "bit-xor") (_o$3210 "count")) (jolt-hash-set _o$3195 _o$3196 _o$3197 _o$3198 _o$3199 _o$3200 _o$3201 _o$3202 _o$3203 _o$3204 _o$3205 _o$3206 _o$3207 _o$3208 _o$3209 _o$3210)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "vector-ret-fns" (let* ((_o$3211 "vec") (_o$3212 "vector") (_o$3213 "mapv") (_o$3214 "filterv") (_o$3215 "subvec")) (jolt-hash-set _o$3211 _o$3212 _o$3213 _o$3214 _o$3215)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "rtenv-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "calls-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "escapes-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "diag-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-vector)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "vtype-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "user-sig-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "record-shapes-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "protocol-methods-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-map)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "record-type-from-entry"))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "field-type-from-tag" (letrec ((field-type-from-tag (lambda (tag depth) (let fnrec3216 ((tag tag) (depth depth)) (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") tag))) (if (jolt-truthy? or__14__auto) or__14__auto (<= depth 0)))) (keyword #f "any") (if (jolt= tag "num") (keyword #f "num") (if (jolt-truthy? (keyword #f "else")) (let* ((e (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) tag))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e depth) (keyword #f "any"))) jolt-nil))))))) field-type-from-tag)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "record-type-from-entry" (letrec ((record-type-from-entry (lambda (rs depth) (let fnrec3217 ((rs rs) (depth depth)) (let* ((fields (jolt-get rs (keyword #f "fields"))) (tags (jolt-get rs (keyword #f "tags"))) (fmap (let* ((_a$3225 (lambda (m i) (let fnrec3218 ((m m) (i i)) (let* ((_a$3222 m) (_a$3223 (jolt-nth fields i)) (_a$3224 (let* ((_a$3219 (var-deref "jolt.passes.types" "field-type-from-tag")) (_a$3220 (if (jolt-truthy? tags) (jolt-nth tags i) jolt-nil)) (_a$3221 (jolt-dec depth))) (jolt-invoke _a$3219 _a$3220 _a$3221)))) (jolt-assoc _a$3222 _a$3223 _a$3224))))) (_a$3226 (jolt-hash-map)) (_a$3227 (jolt-range (jolt-count fields)))) (jolt-reduce _a$3225 _a$3226 _a$3227)))) (let* ((_a$3228 (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") fmap)) (_a$3229 (keyword #f "shape")) (_a$3230 (jolt-invoke (var-deref "clojure.core" "vec") fields)) (_a$3231 (keyword #f "type")) (_a$3232 (jolt-get rs (keyword #f "type")))) (jolt-assoc _a$3228 _a$3229 _a$3230 _a$3231 _a$3232))))))) record-type-from-entry)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "map-shapes-box" (jolt-invoke (var-deref "clojure.core" "atom") #f) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "checking-box" (jolt-invoke (var-deref "clojure.core" "atom") (jolt-hash-set)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "strict-box" (jolt-invoke (var-deref "clojure.core" "atom") #f) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "checking?" (jolt-invoke (var-deref "clojure.core" "atom") #f) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "elem-fns" (let* ((_o$3233 "rand-nth") (_o$3234 "first") (_o$3235 "peek") (_o$3236 "last") (_o$3237 "nth") (_o$3238 "fnext") (_o$3239 "second")) (jolt-hash-set _o$3233 _o$3234 _o$3235 _o$3236 _o$3237 _o$3238 _o$3239)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(begin (declare-var! "jolt.passes.types" "check-invoke") (declare-var! "jolt.passes.types" "check-user-call") (declare-var! "jolt.passes.types" "register-user-fn!") (declare-var! "jolt.passes.types" "not-callable?") (declare-var! "jolt.passes.types" "type-name")))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "var-key" (letrec ((var-key (lambda (fnode) (let fnrec3240 ((fnode fnode)) (let* ((_a$3241 (var-deref "clojure.core" "str")) (_a$3242 (jolt-get fnode (keyword #f "ns"))) (_a$3243 "/") (_a$3244 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$3241 _a$3242 _a$3243 _a$3244)))))) var-key)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "call-ret-type" (letrec ((call-ret-type (lambda (fnode) (let fnrec3245 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (jolt= op (keyword #f "var")) (let* ((rs (let* ((_a$3246 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3247 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3246 _a$3247)))) (if (jolt-truthy? rs) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") rs (var-deref "jolt.passes.types" "type-depth")) (let* ((r (let* ((_a$3248 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "rtenv-box"))) (_a$3249 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3248 _a$3249)))) (if (jolt-truthy? r) r (let* ((nm (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt-get fnode (keyword #f "name")) and__13__auto)))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "nil?") nm)) (keyword #f "any") (if (jolt-contains? (var-deref "jolt.passes.types" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))))))) (if (jolt= op (keyword #f "host")) (let* ((nm (jolt-get fnode (keyword #f "name")))) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ret-fns") nm) (keyword #f "num") (if (jolt-contains? (var-deref "jolt.passes.types" "vector-ret-fns") nm) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "any")) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil)))))))) call-ret-type)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "fold-preds" (let* ((_o$3250 "number?") (_o$3251 "string?") (_o$3252 "keyword?") (_o$3253 "record?") (_o$3254 "nil?") (_o$3255 "some?")) (jolt-hash-set _o$3250 _o$3251 _o$3252 _o$3253 _o$3254 _o$3255)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "record-t?" (letrec ((record-t? (lambda (t) (let fnrec3256 ((t t)) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "some?") (jolt-get t (keyword #f "type"))) and__13__auto)))))) record-t?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "pred-on" (letrec ((pred-on (lambda (pname t) (let fnrec3257 ((pname pname) (t t)) (if (jolt-truthy? (let* ((or__14__auto (jolt= t (keyword #f "any")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "truthy"))))) jolt-nil (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (let* ((vs (let* ((_a$3259 (lambda (m) (let fnrec3258 ((m m)) (jolt-invoke pred-on pname m)))) (_a$3260 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-map _a$3259 _a$3260)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-seq vs))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") (jolt-first vs))))) (if (jolt-truthy? and__13__auto) (jolt-apply jolt= vs) and__13__auto)) and__13__auto))) (jolt-first vs) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) (let* ((G__33 pname)) (if (jolt= G__33 "number?") (jolt= t (keyword #f "num")) (if (jolt= G__33 "string?") (jolt= t (keyword #f "str")) (if (jolt= G__33 "keyword?") (jolt= t (keyword #f "kw")) (if (jolt= G__33 "record?") (jolt-invoke (var-deref "jolt.passes.types" "record-t?") t) (if (jolt= G__33 "nil?") #f (if (jolt= G__33 "some?") #t jolt-nil))))))) jolt-nil))))))) pred-on)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "pure-node?" (letrec ((pure-node? (lambda (n) (let fnrec3261 ((n n)) (let* ((op (jolt-get n (keyword #f "op")))) (let* ((or__14__auto (jolt= op (keyword #f "const")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= op (keyword #f "local"))))))))) pure-node?)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.passes.types" "infer"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "hof-table" (let* ((_o$3278 "map") (_o$3279 (let* ((_o$3262 (keyword #f "epos")) (_o$3263 0)) (jolt-hash-map _o$3262 _o$3263))) (_o$3280 "mapv") (_o$3281 (let* ((_o$3264 (keyword #f "epos")) (_o$3265 0)) (jolt-hash-map _o$3264 _o$3265))) (_o$3282 "filter") (_o$3283 (let* ((_o$3266 (keyword #f "epos")) (_o$3267 0)) (jolt-hash-map _o$3266 _o$3267))) (_o$3284 "filterv") (_o$3285 (let* ((_o$3268 (keyword #f "epos")) (_o$3269 0)) (jolt-hash-map _o$3268 _o$3269))) (_o$3286 "keep") (_o$3287 (let* ((_o$3270 (keyword #f "epos")) (_o$3271 0)) (jolt-hash-map _o$3270 _o$3271))) (_o$3288 "remove") (_o$3289 (let* ((_o$3272 (keyword #f "epos")) (_o$3273 0)) (jolt-hash-map _o$3272 _o$3273))) (_o$3290 "run!") (_o$3291 (let* ((_o$3274 (keyword #f "epos")) (_o$3275 0)) (jolt-hash-map _o$3274 _o$3275))) (_o$3292 "mapcat") (_o$3293 (let* ((_o$3276 (keyword #f "epos")) (_o$3277 0)) (jolt-hash-map _o$3276 _o$3277)))) (jolt-hash-map _o$3278 _o$3279 _o$3280 _o$3281 _o$3282 _o$3283 _o$3284 _o$3285 _o$3286 _o$3287 _o$3288 _o$3289 _o$3290 _o$3291 _o$3292 _o$3293)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer-fn-seeded" (letrec ((infer-fn-seeded (lambda (node seeds tenv) (let fnrec3294 ((node node) (seeds seeds) (tenv tenv)) (let* ((res (let* ((_a$3305 (var-deref "clojure.core" "mapv")) (_a$3306 (lambda (a) (let fnrec3295 ((a a)) (let* ((params (jolt-get a (keyword #f "params"))) (pe (let* ((_a$3300 (lambda (e i) (let fnrec3296 ((e e) (i i)) (let* ((_a$3297 e) (_a$3298 (jolt-nth params i)) (_a$3299 (let* ((s (jolt-get seeds i))) (if (jolt-truthy? s) s (keyword #f "any"))))) (jolt-assoc _a$3297 _a$3298 _a$3299))))) (_a$3301 tenv) (_a$3302 (jolt-range (jolt-count params)))) (jolt-reduce _a$3300 _a$3301 _a$3302))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe)) (br (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pe))) (let* ((_o$3303 (jolt-nth br 0)) (_o$3304 (jolt-assoc a (keyword #f "body") (jolt-nth br 1)))) (jolt-vector _o$3303 _o$3304)))))) (_a$3307 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3305 _a$3306 _a$3307))) (rets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3308 ((r r)) (jolt-nth r 0))) res)) (ret (if (jolt-empty? rets) (keyword #f "any") (let* ((_a$3309 (var-deref "jolt.passes.types" "join")) (_a$3310 (jolt-first rets)) (_a$3311 (jolt-rest rets))) (jolt-reduce _a$3309 _a$3310 _a$3311))))) (let* ((_o$3313 ret) (_o$3314 (jolt-assoc node (keyword #f "arities") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3312 ((r r)) (jolt-nth r 1))) res)))) (jolt-vector _o$3313 _o$3314))))))) infer-fn-seeded)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer" (letrec ((infer (lambda (node tenv) (let fnrec3315 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$3316 (let* ((v (jolt-get node (keyword #f "val")))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "number?") v)) (keyword #f "num") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "string?") v)) (keyword #f "str") (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "keyword?") v)) (keyword #f "kw") (if (jolt-truthy? (let* ((or__14__auto (jolt-invoke (var-deref "clojure.core" "nil?") v))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= #f v)))) (keyword #f "any") (if (jolt-truthy? (keyword #f "else")) (keyword #f "truthy") jolt-nil))))))) (_o$3317 node)) (jolt-vector _o$3316 _o$3317)) (if (jolt= op (keyword #f "local")) (let* ((t (jolt-get tenv (jolt-get node (keyword #f "name"))))) (let* ((_o$3318 (if (jolt-truthy? t) t (keyword #f "any"))) (_o$3319 (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") t)) (let* ((n (jolt-assoc node (keyword #f "hint") (keyword #f "struct")))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "type-shape") t)) (jolt-assoc n (keyword #f "shape") (jolt-invoke (var-deref "jolt.passes.types" "type-shape") t)) n)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) (jolt-assoc node (keyword #f "hint") (keyword #f "vector")) (if (jolt-truthy? (keyword #f "else")) node jolt-nil))))) (jolt-vector _o$3318 _o$3319))) (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 fnrec3320 ((pr pr)) (let* ((kr (jolt-invoke infer (jolt-nth pr 0) tenv)) (vr (jolt-invoke infer (jolt-nth pr 1) tenv))) (let* ((_o$3321 (jolt-nth kr 1)) (_o$3322 (jolt-nth vr 1)) (_o$3323 (jolt-nth vr 0)) (_o$3324 (jolt-get (jolt-nth pr 0) (keyword #f "val")))) (jolt-vector _o$3321 _o$3322 _o$3323 _o$3324))))) pairs)) (struct? (let* ((and__13__auto (> (jolt-count res) 0))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "every?") (lambda (pr) (let fnrec3325 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.fold" "scalar-const?") (jolt-nth pr 0)))) pairs))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (r) (let fnrec3326 ((r r)) (jolt-invoke (var-deref "jolt.passes.types" "truthy-type?") (jolt-nth r 2)))) res) and__13__auto)) and__13__auto))) (base (if (jolt-truthy? struct?) (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") (let* ((_a$3331 (lambda (m r) (let fnrec3327 ((m m) (r r)) (let* ((_a$3328 m) (_a$3329 (jolt-nth r 3)) (_a$3330 (jolt-nth r 2))) (jolt-assoc _a$3328 _a$3329 _a$3330))))) (_a$3332 (jolt-hash-map)) (_a$3333 res)) (jolt-reduce _a$3331 _a$3332 _a$3333))) (var-deref "jolt.passes.types" "type-depth")) jolt-nil)) (shp (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "map-shapes-box")))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto base)) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") base) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "shape-order") (jolt-keys (jolt-invoke (var-deref "jolt.passes.types" "sfields") base))) jolt-nil)) (t (if (jolt-truthy? base) (if (jolt-truthy? shp) (jolt-assoc base (keyword #f "shape") shp) base) (keyword #f "any"))) (node_PRIME_ (jolt-assoc node (keyword #f "pairs") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3334 ((r r)) (let* ((_o$3335 (jolt-nth r 0)) (_o$3336 (jolt-nth r 1))) (jolt-vector _o$3335 _o$3336)))) res)))) (let* ((_o$3337 t) (_o$3338 (if (jolt-truthy? shp) (jolt-assoc node_PRIME_ (keyword #f "shape") shp) node_PRIME_))) (jolt-vector _o$3337 _o$3338))) (if (jolt= op (keyword #f "vector")) (let* ((irs (let* ((_a$3340 (var-deref "clojure.core" "mapv")) (_a$3341 (lambda (x) (let fnrec3339 ((x x)) (jolt-invoke infer x tenv)))) (_a$3342 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3340 _a$3341 _a$3342))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3343 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3344 (var-deref "jolt.passes.types" "join")) (_a$3345 (jolt-first ets)) (_a$3346 (jolt-rest ets))) (jolt-reduce _a$3344 _a$3345 _a$3346))))) (let* ((_o$3348 (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") el) (var-deref "jolt.passes.types" "type-depth"))) (_o$3349 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3347 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3348 _o$3349))) (if (jolt= op (keyword #f "set")) (let* ((irs (let* ((_a$3351 (var-deref "clojure.core" "mapv")) (_a$3352 (lambda (x) (let fnrec3350 ((x x)) (jolt-invoke infer x tenv)))) (_a$3353 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3351 _a$3352 _a$3353))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3354 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3355 (var-deref "jolt.passes.types" "join")) (_a$3356 (jolt-first ets)) (_a$3357 (jolt-rest ets))) (jolt-reduce _a$3355 _a$3356 _a$3357))))) (let* ((_o$3359 (jolt-invoke (var-deref "jolt.passes.types" "cap") (jolt-invoke (var-deref "jolt.passes.types" "mk-set") el) (var-deref "jolt.passes.types" "type-depth"))) (_o$3360 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3358 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3359 _o$3360))) (if (jolt= op (keyword #f "if")) (let* ((tr (jolt-invoke infer (jolt-get node (keyword #f "test")) tenv)) (thn (jolt-invoke infer (jolt-get node (keyword #f "then")) tenv)) (els (jolt-invoke infer (jolt-get node (keyword #f "else")) tenv))) (let* ((_o$3371 (let* ((_a$3361 (var-deref "jolt.passes.types" "join")) (_a$3362 (jolt-nth thn 0)) (_a$3363 (jolt-nth els 0))) (jolt-invoke _a$3361 _a$3362 _a$3363))) (_o$3372 (let* ((_a$3364 node) (_a$3365 (keyword #f "test")) (_a$3366 (jolt-nth tr 1)) (_a$3367 (keyword #f "then")) (_a$3368 (jolt-nth thn 1)) (_a$3369 (keyword #f "else")) (_a$3370 (jolt-nth els 1))) (jolt-assoc _a$3364 _a$3365 _a$3366 _a$3367 _a$3368 _a$3369 _a$3370)))) (jolt-vector _o$3371 _o$3372))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$3374 (var-deref "clojure.core" "mapv")) (_a$3375 (lambda (s) (let fnrec3373 ((s s)) (jolt-nth (jolt-invoke infer s tenv) 1)))) (_a$3376 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$3374 _a$3375 _a$3376))) (r (jolt-invoke infer (jolt-get node (keyword #f "ret")) tenv))) (let* ((_o$3377 (jolt-nth r 0)) (_o$3378 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$3377 _o$3378))) (if (jolt= op (keyword #f "throw")) (let* ((_o$3379 (keyword #f "any")) (_o$3380 (jolt-assoc node (keyword #f "expr") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "expr")) tenv) 1)))) (jolt-vector _o$3379 _o$3380)) (if (jolt= op (keyword #f "var")) (begin (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "escapes-box") jolt-conj (jolt-invoke (var-deref "jolt.passes.types" "var-key") node)) (let* ((_o$3383 (let* ((vt (let* ((_a$3381 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3382 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-get _a$3381 _a$3382)))) (if (jolt-truthy? vt) vt (keyword #f "any")))) (_o$3384 node)) (jolt-vector _o$3383 _o$3384))) (if (jolt= op (keyword #f "invoke")) (let* ((fnode (jolt-get node (keyword #f "fn"))) (iscall-var (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op")))) (cn (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))) and__13__auto))) (jolt-get fnode (keyword #f "name")) jolt-nil)) (args (jolt-get node (keyword #f "args"))) (n (jolt-count args))) (if (jolt-truthy? (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "fold-preds") cn))) (if (jolt-truthy? and__13__auto) (jolt= n 1) and__13__auto)) and__13__auto))) (let* ((ar (jolt-invoke infer (jolt-nth args 0) tenv)) (v (jolt-invoke (var-deref "jolt.passes.types" "pred-on") cn (jolt-nth ar 0)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not (jolt-invoke (var-deref "clojure.core" "nil?") v)))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "pure-node?") (jolt-nth ar 1)) and__13__auto))) (let* ((_o$3389 (keyword #f "any")) (_o$3390 (let* ((_o$3385 (keyword #f "op")) (_o$3386 (keyword #f "const")) (_o$3387 (keyword #f "val")) (_o$3388 v)) (jolt-hash-map _o$3385 _o$3386 _o$3387 _o$3388)))) (jolt-vector _o$3389 _o$3390)) (let* ((_o$3391 (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode)) (_o$3392 (jolt-assoc node (keyword #f "args") (jolt-vector (jolt-nth ar 1))))) (jolt-vector _o$3391 _o$3392)))) (if (jolt-truthy? (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get fnode (keyword #f "val"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 1))) (if (jolt-truthy? and__13__auto) (<= n 2) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (ft (jolt-invoke (var-deref "jolt.passes.types" "field-type") mt (jolt-get fnode (keyword #f "val")))) (dr (if (jolt= n 2) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil))) (let* ((_o$3395 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3396 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3393 msub) (_o$3394 (jolt-nth dr 1))) (jolt-vector _o$3393 _o$3394)) (jolt-vector msub))))) (jolt-vector _o$3395 _o$3396))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (let* ((and__13__auto (jolt= (keyword #f "var") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "clojure.core" (jolt-get fnode (keyword #f "ns"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)) and__13__auto)))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((and__13__auto (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt= "get" (jolt-get fnode (keyword #f "name"))) and__13__auto)))))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= (keyword #f "const") (jolt-get (jolt-nth args 1) (keyword #f "op"))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "keyword?") (jolt-get (jolt-nth args 1) (keyword #f "val"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((mr (jolt-invoke infer (jolt-nth args 0) tenv)) (mt (jolt-nth mr 0)) (msub (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-safe?") mt)) (jolt-invoke (var-deref "jolt.passes.types" "mark-struct") (jolt-nth mr 1) mt) (jolt-nth mr 1))) (kr (jolt-invoke infer (jolt-nth args 1) tenv)) (ft (jolt-invoke (var-deref "jolt.passes.types" "field-type") mt (jolt-get (jolt-nth args 1) (keyword #f "val")))) (dr (if (jolt= n 3) (jolt-invoke infer (jolt-nth args 2) tenv) jolt-nil))) (let* ((_o$3402 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3403 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3397 msub) (_o$3398 (jolt-nth kr 1)) (_o$3399 (jolt-nth dr 1))) (jolt-vector _o$3397 _o$3398 _o$3399)) (let* ((_o$3400 msub) (_o$3401 (jolt-nth kr 1))) (jolt-vector _o$3400 _o$3401)))))) (jolt-vector _o$3402 _o$3403))) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "reduce"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto))) (let* ((three (>= n 3)) (coll-r (jolt-invoke infer (jolt-nth args (if (jolt-truthy? three) 2 1)) tenv)) (init-r (if (jolt-truthy? three) (jolt-invoke infer (jolt-nth args 1) tenv) jolt-nil)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types" "velem") ct) (keyword #f "any")))) (init-t (if (jolt-truthy? init-r) (jolt-nth init-r 0) (keyword #f "any"))) (fn-r (let* ((_a$3408 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3409 (jolt-nth args 0)) (_a$3410 (let* ((_o$3404 0) (_o$3405 init-t) (_o$3406 1) (_o$3407 et)) (jolt-hash-map _o$3404 _o$3405 _o$3406 _o$3407))) (_a$3411 tenv)) (jolt-invoke _a$3408 _a$3409 _a$3410 _a$3411)))) (let* ((_o$3417 (jolt-invoke (var-deref "jolt.passes.types" "join") init-t (jolt-nth fn-r 0))) (_o$3418 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? three) (let* ((_o$3412 (jolt-nth fn-r 1)) (_o$3413 (jolt-nth init-r 1)) (_o$3414 (jolt-nth coll-r 1))) (jolt-vector _o$3412 _o$3413 _o$3414)) (let* ((_o$3415 (jolt-nth fn-r 1)) (_o$3416 (jolt-nth coll-r 1))) (jolt-vector _o$3415 _o$3416)))))) (jolt-vector _o$3417 _o$3418))) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-get (var-deref "jolt.passes.types" "hof-table") cn))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (>= n 2))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get (jolt-nth args 0) (keyword #f "op"))) and__13__auto)) and__13__auto)) and__13__auto))) (let* ((coll-r (jolt-invoke infer (jolt-nth args 1) tenv)) (et (let* ((ct (jolt-nth coll-r 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") ct)) (jolt-invoke (var-deref "jolt.passes.types" "velem") ct) (keyword #f "any")))) (fn-r (let* ((_a$3421 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3422 (jolt-nth args 0)) (_a$3423 (let* ((_o$3419 (jolt-get (jolt-get (var-deref "jolt.passes.types" "hof-table") cn) (keyword #f "epos"))) (_o$3420 et)) (jolt-hash-map _o$3419 _o$3420))) (_a$3424 tenv)) (jolt-invoke _a$3421 _a$3422 _a$3423 _a$3424))) (rt (if (jolt= cn "mapv") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (jolt-nth fn-r 0)) (if (jolt= cn "filterv") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") et) (if (jolt-truthy? (keyword #f "else")) (keyword #f "any") jolt-nil))))) (let* ((_o$3427 rt) (_o$3428 (jolt-assoc node (keyword #f "args") (let* ((_o$3425 (jolt-nth fn-r 1)) (_o$3426 (jolt-nth coll-r 1))) (jolt-vector _o$3425 _o$3426))))) (jolt-vector _o$3427 _o$3428))) (if (jolt-truthy? (let* ((and__13__auto (let* ((or__14__auto (jolt= cn "conj"))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= cn "into"))))) (if (jolt-truthy? and__13__auto) (>= n 1) and__13__auto))) (let* ((ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3429 ((a a)) (jolt-invoke infer a tenv))) args)) (base (jolt-nth (jolt-nth ares 0) 0)) (rest-ts (let* ((_a$3431 (var-deref "clojure.core" "mapv")) (_a$3432 (lambda (r) (let fnrec3430 ((r r)) (jolt-nth r 0)))) (_a$3433 (jolt-rest ares))) (jolt-invoke _a$3431 _a$3432 _a$3433))) (rt (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "conj"))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") base) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (jolt-reduce (var-deref "jolt.passes.types" "join") (jolt-invoke (var-deref "jolt.passes.types" "velem") base) rest-ts)) (if (jolt-truthy? (let* ((and__13__auto (jolt= cn "into"))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") base))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= 2 n))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") (jolt-nth rest-ts 0)) and__13__auto)) and__13__auto)) and__13__auto))) (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (let* ((_a$3434 (var-deref "jolt.passes.types" "join")) (_a$3435 (jolt-invoke (var-deref "jolt.passes.types" "velem") base)) (_a$3436 (jolt-invoke (var-deref "jolt.passes.types" "velem") (jolt-nth rest-ts 0)))) (jolt-invoke _a$3434 _a$3435 _a$3436))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil))))) (let* ((_o$3438 rt) (_o$3439 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3437 ((r r)) (jolt-nth r 1))) ares)))) (jolt-vector _o$3438 _o$3439))) (if (jolt-truthy? (keyword #f "else")) (let* ((fr (if (jolt-not iscall-var) (jolt-invoke infer fnode tenv) jolt-nil)) (fnode_PRIME_ (if (jolt-truthy? iscall-var) fnode (jolt-nth fr 1))) (callee-t (if (jolt-truthy? iscall-var) (let* ((_a$3440 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3441 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3440 _a$3441)) (jolt-nth fr 0))) (ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3442 ((a a)) (jolt-invoke infer a tenv))) args))) (begin (if (jolt-truthy? iscall-var) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "calls-box") jolt-conj (let* ((_o$3444 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_o$3445 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3443 ((r r)) (jolt-nth r 0))) ares))) (jolt-vector _o$3444 _o$3445))) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (let* ((ats (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3446 ((r r)) (jolt-nth r 0))) ares)) (pos (jolt-get node (keyword #f "pos")))) (begin (if (jolt-truthy? cn) (jolt-invoke (var-deref "jolt.passes.types" "check-invoke") cn args ats pos) jolt-nil) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-callable?") callee-t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3447 (keyword #f "op")) (_o$3448 (keyword #f "call")) (_o$3449 (keyword #f "type")) (_o$3450 (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t)) (_o$3451 (keyword #f "pos")) (_o$3452 pos) (_o$3453 (keyword #f "msg")) (_o$3454 (jolt-invoke (var-deref "clojure.core" "str") "cannot call " (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t) " as a function"))) (jolt-hash-map _o$3447 _o$3448 _o$3449 _o$3450 _o$3451 _o$3452 _o$3453 _o$3454))) jolt-nil) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "strict-box")))) (if (jolt-truthy? and__13__auto) iscall-var and__13__auto))) (let* ((k (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (usig (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "user-sig-box")) k))) (if (jolt-truthy? usig) (jolt-invoke (var-deref "jolt.passes.types" "check-user-call") k usig ats pos) jolt-nil)) jolt-nil))) jolt-nil) (let* ((pm (let* ((and__13__auto iscall-var)) (if (jolt-truthy? and__13__auto) (let* ((_a$3455 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "protocol-methods-box"))) (_a$3456 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3455 _a$3456)) and__13__auto))) (rtype (if (jolt-truthy? (let* ((and__13__auto pm)) (if (jolt-truthy? and__13__auto) (jolt-pos? n) and__13__auto))) (jolt-get (jolt-nth (jolt-nth ares 0) 0) (keyword #f "type")) jolt-nil)) (base (jolt-assoc node (keyword #f "fn") fnode_PRIME_ (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3457 ((r r)) (jolt-nth r 1))) ares)))) (let* ((_o$3465 (if (jolt= cn "range") (jolt-invoke (var-deref "jolt.passes.types" "mk-vec") (keyword #f "num")) (if (jolt-truthy? (let* ((and__13__auto cn)) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "elem-fns") cn))) (if (jolt-truthy? and__13__auto) (> n 0) and__13__auto)) and__13__auto))) (let* ((a0 (jolt-nth (jolt-nth ares 0) 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") a0)) (jolt-invoke (var-deref "jolt.passes.types" "velem") a0) (keyword #f "any"))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil)))) (_o$3466 (if (jolt-truthy? rtype) (let* ((_a$3458 base) (_a$3459 (keyword #f "devirt-type")) (_a$3460 rtype) (_a$3461 (keyword #f "devirt-proto")) (_a$3462 (jolt-nth pm 0)) (_a$3463 (keyword #f "devirt-method")) (_a$3464 (jolt-nth pm 1))) (jolt-assoc _a$3458 _a$3459 _a$3460 _a$3461 _a$3462 _a$3463 _a$3464)) base))) (jolt-vector _o$3465 _o$3466))))) jolt-nil)))))))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3477 (lambda (acc b) (let fnrec3467 ((acc acc) (b b)) (let* ((te (jolt-nth acc 0)) (binds (jolt-nth acc 1)) (ir (jolt-invoke infer (jolt-nth b 1) te))) (let* ((_o$3473 (let* ((_a$3468 te) (_a$3469 (jolt-nth b 0)) (_a$3470 (jolt-nth ir 0))) (jolt-assoc _a$3468 _a$3469 _a$3470))) (_o$3474 (jolt-conj binds (let* ((_o$3471 (jolt-nth b 0)) (_o$3472 (jolt-nth ir 1))) (jolt-vector _o$3471 _o$3472))))) (jolt-vector _o$3473 _o$3474)))))) (_a$3478 (let* ((_o$3475 tenv) (_o$3476 (jolt-vector))) (jolt-vector _o$3475 _o$3476))) (_a$3479 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3477 _a$3478 _a$3479))) (br (let* ((_a$3480 infer) (_a$3481 (jolt-get node (keyword #f "body"))) (_a$3482 (jolt-nth res 0))) (jolt-invoke _a$3480 _a$3481 _a$3482)))) (let* ((_o$3488 (jolt-nth br 0)) (_o$3489 (let* ((_a$3483 node) (_a$3484 (keyword #f "bindings")) (_a$3485 (jolt-nth res 1)) (_a$3486 (keyword #f "body")) (_a$3487 (jolt-nth br 1))) (jolt-assoc _a$3483 _a$3484 _a$3485 _a$3486 _a$3487)))) (jolt-vector _o$3488 _o$3489))) (if (jolt= op (keyword #f "loop")) (let* ((_o$3501 (keyword #f "any")) (_o$3502 (let* ((_a$3496 node) (_a$3497 (keyword #f "bindings")) (_a$3498 (let* ((_a$3493 (var-deref "clojure.core" "mapv")) (_a$3494 (lambda (b) (let fnrec3490 ((b b)) (let* ((_o$3491 (jolt-nth b 0)) (_o$3492 (jolt-nth (jolt-invoke infer (jolt-nth b 1) tenv) 1))) (jolt-vector _o$3491 _o$3492))))) (_a$3495 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$3493 _a$3494 _a$3495))) (_a$3499 (keyword #f "body")) (_a$3500 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1))) (jolt-assoc _a$3496 _a$3497 _a$3498 _a$3499 _a$3500)))) (jolt-vector _o$3501 _o$3502)) (if (jolt= op (keyword #f "recur")) (let* ((_o$3507 (keyword #f "any")) (_o$3508 (jolt-assoc node (keyword #f "args") (let* ((_a$3504 (var-deref "clojure.core" "mapv")) (_a$3505 (lambda (a) (let fnrec3503 ((a a)) (jolt-nth (jolt-invoke infer a tenv) 1)))) (_a$3506 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$3504 _a$3505 _a$3506))))) (jolt-vector _o$3507 _o$3508)) (if (jolt= op (keyword #f "fn")) (let* ((_o$3526 (keyword #f "any")) (_o$3527 (jolt-assoc node (keyword #f "arities") (let* ((_a$3523 (var-deref "clojure.core" "mapv")) (_a$3524 (lambda (a) (let fnrec3509 ((a a)) (let* ((phm (let* ((_a$3514 (lambda (m pr) (let fnrec3510 ((m m) (pr pr)) (let* ((_a$3511 m) (_a$3512 (jolt-nth pr 0)) (_a$3513 (jolt-nth pr 1))) (jolt-assoc _a$3511 _a$3512 _a$3513))))) (_a$3515 (jolt-hash-map)) (_a$3516 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3514 _a$3515 _a$3516))) (pe (let* ((_a$3520 (lambda (e p) (let fnrec3517 ((e e) (p p)) (jolt-assoc e p (let* ((ent (let* ((_a$3518 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3519 (jolt-get phm p))) (jolt-get _a$3518 _a$3519)))) (if (jolt-truthy? ent) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") ent (var-deref "jolt.passes.types" "type-depth")) (keyword #f "any"))))))) (_a$3521 tenv) (_a$3522 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$3520 _a$3521 _a$3522))) (pe (if (jolt-truthy? (jolt-get a (keyword #f "rest"))) (jolt-assoc pe (jolt-get a (keyword #f "rest")) (keyword #f "any")) pe))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke infer (jolt-get a (keyword #f "body")) pe) 1)))))) (_a$3525 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3523 _a$3524 _a$3525))))) (jolt-vector _o$3526 _o$3527)) (if (jolt= op (keyword #f "def")) (begin (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking?"))) (jolt-invoke (var-deref "jolt.passes.types" "register-user-fn!") node) jolt-nil) (let* ((_o$3528 (keyword #f "any")) (_o$3529 (jolt-assoc node (keyword #f "init") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "init")) tenv) 1)))) (jolt-vector _o$3528 _o$3529))) (if (jolt= op (keyword #f "try")) (let* ((_o$3537 (keyword #f "any")) (_o$3538 (let* ((_a$3530 node) (_a$3531 (keyword #f "body")) (_a$3532 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1)) (_a$3533 (keyword #f "catch-body")) (_a$3534 (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "catch-body")) tenv) 1) jolt-nil)) (_a$3535 (keyword #f "finally")) (_a$3536 (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "finally")) tenv) 1) jolt-nil))) (jolt-assoc _a$3530 _a$3531 _a$3532 _a$3533 _a$3534 _a$3535 _a$3536)))) (jolt-vector _o$3537 _o$3538)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3539 (keyword #f "any")) (_o$3540 node)) (jolt-vector _o$3539 _o$3540)) jolt-nil)))))))))))))))))))))) infer)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer-top" (letrec ((infer-top (lambda (node) (let fnrec3541 ((node node)) (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) 1))))) infer-top)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "not-number?" (letrec ((not-number? (lambda (t) (let fnrec3542 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-number? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "str")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "kw")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt= t (keyword #f "phm")))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)))))))))))))))) not-number?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "not-seqable?" (letrec ((not-seqable? (lambda (t) (let fnrec3543 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-seqable? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "kw"))))))))) not-seqable?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "not-callable?" (letrec ((not-callable? (lambda (t) (let fnrec3544 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (jolt-invoke (var-deref "clojure.core" "every?") not-callable? (jolt-invoke (var-deref "jolt.passes.types" "umembers") t)) (let* ((or__14__auto (jolt= t (keyword #f "num")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt= t (keyword #f "str"))))))))) not-callable?)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "num-ops" (let* ((_o$3545 "+") (_o$3546 "-") (_o$3547 "*") (_o$3548 "/") (_o$3549 "inc") (_o$3550 "dec") (_o$3551 "mod") (_o$3552 "rem") (_o$3553 "quot") (_o$3554 "min") (_o$3555 "max") (_o$3556 "abs") (_o$3557 "bit-and") (_o$3558 "bit-or") (_o$3559 "bit-xor") (_o$3560 "bit-not") (_o$3561 "bit-shift-left") (_o$3562 "bit-shift-right")) (jolt-hash-set _o$3545 _o$3546 _o$3547 _o$3548 _o$3549 _o$3550 _o$3551 _o$3552 _o$3553 _o$3554 _o$3555 _o$3556 _o$3557 _o$3558 _o$3559 _o$3560 _o$3561 _o$3562)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "seq-ops" (let* ((_o$3563 "count") (_o$3564 "first") (_o$3565 "rest") (_o$3566 "next") (_o$3567 "seq") (_o$3568 "nth")) (jolt-hash-set _o$3563 _o$3564 _o$3565 _o$3566 _o$3567 _o$3568)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "type-name" (letrec ((type-name (lambda (t) (let fnrec3569 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (let* ((_a$3571 (lambda (s m) (let fnrec3570 ((s s) (m m)) (if (jolt= s "") (jolt-invoke type-name m) (jolt-invoke (var-deref "clojure.core" "str") s " or " (jolt-invoke type-name m)))))) (_a$3572 "") (_a$3573 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-reduce _a$3571 _a$3572 _a$3573)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "struct-type?") t)) "a map" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "vec-type?") t)) "a vector" (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)) "a set" (if (jolt= t (keyword #f "str")) "a string" (if (jolt= t (keyword #f "kw")) "a keyword" (if (jolt= t (keyword #f "num")) "a number" (if (jolt= t (keyword #f "phm")) "a map" (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "clojure.core" "str") t) jolt-nil))))))))))))) type-name)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "check-invoke" (letrec ((check-invoke (lambda (cn args arg-types pos) (let fnrec3574 ((cn cn) (args args) (arg-types arg-types) (pos pos)) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ops") cn) (let* ((_a$3593 (lambda (_ i) (let fnrec3575 ((_ _) (i i)) (begin (let* ((t (jolt-nth arg-types i))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-number?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3583 (keyword #f "op")) (_o$3584 cn) (_o$3585 (keyword #f "argpos")) (_o$3586 i) (_o$3587 (keyword #f "type")) (_o$3588 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3589 (keyword #f "pos")) (_o$3590 pos) (_o$3591 (keyword #f "msg")) (_o$3592 (let* ((_a$3576 (var-deref "clojure.core" "str")) (_a$3577 "`") (_a$3578 cn) (_a$3579 "` requires a number, but argument ") (_a$3580 (jolt-inc i)) (_a$3581 " is ") (_a$3582 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3576 _a$3577 _a$3578 _a$3579 _a$3580 _a$3581 _a$3582)))) (jolt-hash-map _o$3583 _o$3584 _o$3585 _o$3586 _o$3587 _o$3588 _o$3589 _o$3590 _o$3591 _o$3592))) jolt-nil)) jolt-nil)))) (_a$3594 jolt-nil) (_a$3595 (jolt-range (jolt-count args)))) (jolt-reduce _a$3593 _a$3594 _a$3595)) (if (jolt-truthy? (let* ((and__13__auto (jolt-contains? (var-deref "jolt.passes.types" "seq-ops") cn))) (if (jolt-truthy? and__13__auto) (> (jolt-count args) 0) and__13__auto))) (let* ((t (jolt-nth arg-types 0))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "not-seqable?") t)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3603 (keyword #f "op")) (_o$3604 cn) (_o$3605 (keyword #f "argpos")) (_o$3606 0) (_o$3607 (keyword #f "type")) (_o$3608 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3609 (keyword #f "pos")) (_o$3610 pos) (_o$3611 (keyword #f "msg")) (_o$3612 (let* ((_a$3596 (var-deref "clojure.core" "str")) (_a$3597 "`") (_a$3598 cn) (_a$3599 "` requires ") (_a$3600 (if (jolt= cn "count") "a countable collection" "a seqable")) (_a$3601 ", but argument 1 is ") (_a$3602 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3596 _a$3597 _a$3598 _a$3599 _a$3600 _a$3601 _a$3602)))) (jolt-hash-map _o$3603 _o$3604 _o$3605 _o$3606 _o$3607 _o$3608 _o$3609 _o$3610 _o$3611 _o$3612))) jolt-nil)) (if (jolt-truthy? (keyword #f "else")) jolt-nil jolt-nil))))))) check-invoke)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "all-any-env" (letrec ((all-any-env (lambda (params) (let fnrec3613 ((params params)) (let* ((_a$3615 (lambda (e p) (let fnrec3614 ((e e) (p p)) (jolt-assoc e p (keyword #f "any"))))) (_a$3616 (jolt-hash-map)) (_a$3617 params)) (jolt-reduce _a$3615 _a$3616 _a$3617)))))) all-any-env)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "isolated-diag-count" (letrec ((isolated-diag-count (lambda (body tenv) (let fnrec3618 ((body body) (tenv tenv)) (let* ((saved (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv) (let* ((n (jolt-count (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") saved) n)))))))) isolated-diag-count)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "register-user-fn!" (letrec ((register-user-fn! (lambda (node) (let fnrec3619 ((node node)) (let* ((init (jolt-get node (keyword #f "init"))) (m (jolt-get node (keyword #f "meta"))) (redefable (let* ((and__13__auto m)) (if (jolt-truthy? and__13__auto) (let* ((or__14__auto (jolt-get m (keyword #f "redef")))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-get m (keyword #f "dynamic")))) and__13__auto)))) (if (jolt-truthy? (let* ((and__13__auto (jolt-not redefable))) (if (jolt-truthy? and__13__auto) (jolt= (keyword #f "fn") (jolt-get init (keyword #f "op"))) and__13__auto))) (let* ((arities (jolt-get init (keyword #f "arities")))) (if (jolt= 1 (jolt-count arities)) (let* ((ar (jolt-first arities))) (if (jolt-not (jolt-get ar (keyword #f "rest"))) (let* ((_a$3630 (var-deref "clojure.core" "swap!")) (_a$3631 (var-deref "jolt.passes.types" "user-sig-box")) (_a$3632 jolt-assoc) (_a$3633 (let* ((_a$3620 (var-deref "clojure.core" "str")) (_a$3621 (jolt-get node (keyword #f "ns"))) (_a$3622 "/") (_a$3623 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$3620 _a$3621 _a$3622 _a$3623))) (_a$3634 (let* ((_o$3624 (keyword #f "name")) (_o$3625 (jolt-get node (keyword #f "name"))) (_o$3626 (keyword #f "params")) (_o$3627 (jolt-get ar (keyword #f "params"))) (_o$3628 (keyword #f "body")) (_o$3629 (jolt-get ar (keyword #f "body")))) (jolt-hash-map _o$3624 _o$3625 _o$3626 _o$3627 _o$3628 _o$3629)))) (jolt-invoke _a$3630 _a$3631 _a$3632 _a$3633 _a$3634)) jolt-nil)) jolt-nil)) jolt-nil)))))) register-user-fn!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "check-user-call" (letrec ((check-user-call (lambda (key sig arg-types pos) (let fnrec3635 ((key key) (sig sig) (arg-types arg-types) (pos pos)) (if (jolt-not (jolt-contains? (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")) key)) (let* ((prev (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "checking-box")))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-conj prev key)) (let* ((params (jolt-get sig (keyword #f "params"))) (body (jolt-get sig (keyword #f "body"))) (npar (jolt-count params)) (nargs (jolt-count arg-types))) (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "not=") npar nargs)) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3636 (keyword #f "op")) (_o$3637 (keyword #f "user-call")) (_o$3638 (keyword #f "type")) (_o$3639 (keyword #f "arity")) (_o$3640 (keyword #f "pos")) (_o$3641 pos) (_o$3642 (keyword #f "msg")) (_o$3643 (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$3636 _o$3637 _o$3638 _o$3639 _o$3640 _o$3641 _o$3642 _o$3643))) (let* ((base (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)))) (let* ((_a$3666 (lambda (_ i) (let fnrec3644 ((_ _) (i i)) (begin (let* ((at (jolt-nth arg-types i))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "any")))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "not=") at (keyword #f "truthy")) and__13__auto))) (let* ((pe (let* ((_a$3645 (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)) (_a$3646 (jolt-nth params i)) (_a$3647 at)) (jolt-assoc _a$3645 _a$3646 _a$3647)))) (if (> (jolt-invoke (var-deref "jolt.passes.types" "isolated-diag-count") body pe) base) (jolt-invoke (var-deref "clojure.core" "swap!") (var-deref "jolt.passes.types" "diag-box") jolt-conj (let* ((_o$3656 (keyword #f "op")) (_o$3657 (keyword #f "user-call")) (_o$3658 (keyword #f "argpos")) (_o$3659 i) (_o$3660 (keyword #f "type")) (_o$3661 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_o$3662 (keyword #f "pos")) (_o$3663 pos) (_o$3664 (keyword #f "msg")) (_o$3665 (let* ((_a$3648 (var-deref "clojure.core" "str")) (_a$3649 "argument ") (_a$3650 (jolt-inc i)) (_a$3651 " to `") (_a$3652 (jolt-get sig (keyword #f "name"))) (_a$3653 "` is ") (_a$3654 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_a$3655 ", which its body provably rejects")) (jolt-invoke _a$3648 _a$3649 _a$3650 _a$3651 _a$3652 _a$3653 _a$3654 _a$3655)))) (jolt-hash-map _o$3656 _o$3657 _o$3658 _o$3659 _o$3660 _o$3661 _o$3662 _o$3663 _o$3664 _o$3665))) jolt-nil)) jolt-nil)) jolt-nil)))) (_a$3667 jolt-nil) (_a$3668 (jolt-range npar))) (jolt-reduce _a$3666 _a$3667 _a$3668))))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") prev))) jolt-nil))))) check-user-call)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-rtenv!" (letrec ((set-rtenv! (lambda (m) (let fnrec3669 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "rtenv-box") m))))) set-rtenv!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-record-shapes!" (letrec ((set-record-shapes! (lambda (m) (let fnrec3670 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "record-shapes-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-record-shapes!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-protocol-methods!" (letrec ((set-protocol-methods! (lambda (m) (let fnrec3671 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "protocol-methods-box") (let* ((or__14__auto m)) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-hash-map)))))))) set-protocol-methods!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-map-shapes!" (letrec ((set-map-shapes! (lambda (b) (let fnrec3672 ((b b)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "map-shapes-box") (jolt-invoke (var-deref "clojure.core" "boolean") b)))))) set-map-shapes!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-vtypes!" (letrec ((set-vtypes! (lambda (m) (let fnrec3673 ((m m)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "vtype-box") m))))) set-vtypes!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "join-types" (letrec ((join-types (lambda (a b) (let fnrec3674 ((a a) (b b)) (jolt-invoke (var-deref "jolt.passes.types" "join-t") a b))))) join-types)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "reset-escapes!" (letrec ((reset-escapes! (lambda () (let fnrec3675 () (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 fnrec3676 () (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "escapes-box"))))))) collected-escapes)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "check-form" (letrec ((check-form (case-lambda ((node) (let fnrec3677 ((node node)) (jolt-invoke check-form node #f))) ((node strict?) (let fnrec3678 ((node node) (strict? strict?)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (if (jolt-truthy? strict?) #t #f)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (jolt-invoke (var-deref "jolt.passes.types" "infer") node (jolt-hash-map)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))))))) check-form)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer-body" (letrec ((infer-body (lambda (body tenv) (let fnrec3679 ((body body) (tenv tenv)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "calls-box") (jolt-vector)) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer") body tenv))) (let* ((_o$3680 (jolt-nth r 0)) (_o$3681 (jolt-nth r 1)) (_o$3682 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "calls-box")))) (jolt-vector _o$3680 _o$3681 _o$3682)))))))) infer-body)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "reinfer-def" (letrec ((reinfer-def (lambda (def-node ptmap) (let fnrec3683 ((def-node def-node) (ptmap ptmap)) (let* ((fnode (jolt-get def-node (keyword #f "init")))) (if (jolt= (keyword #f "fn") (jolt-get fnode (keyword #f "op"))) (jolt-assoc def-node (keyword #f "init") (jolt-assoc fnode (keyword #f "arities") (let* ((_a$3691 (var-deref "clojure.core" "mapv")) (_a$3692 (lambda (a) (let fnrec3684 ((a a)) (let* ((pt (let* ((_a$3688 (lambda (m pr) (let fnrec3685 ((m m) (pr pr)) (let* ((nm (jolt-nth pr 0)) (e (let* ((_a$3686 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3687 (jolt-nth pr 1))) (jolt-get _a$3686 _a$3687)))) (if (jolt-truthy? (let* ((and__13__auto e)) (if (jolt-truthy? and__13__auto) (jolt-not (jolt-contains? m nm)) and__13__auto))) (jolt-assoc m nm (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types" "type-depth"))) m))))) (_a$3689 ptmap) (_a$3690 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3688 _a$3689 _a$3690)))) (jolt-assoc a (keyword #f "body") (jolt-nth (jolt-invoke (var-deref "jolt.passes.types" "infer") (jolt-get a (keyword #f "body")) pt) 1)))))) (_a$3693 (jolt-get fnode (keyword #f "arities")))) (jolt-invoke _a$3691 _a$3692 _a$3693)))) def-node)))))) reinfer-def)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "phint-seed" (letrec ((phint-seed (lambda (params phints) (let fnrec3694 ((params params) (phints phints)) (let* ((m (let* ((_a$3699 (lambda (acc pr) (let fnrec3695 ((acc acc) (pr pr)) (let* ((_a$3696 acc) (_a$3697 (jolt-nth pr 0)) (_a$3698 (jolt-nth pr 1))) (jolt-assoc _a$3696 _a$3697 _a$3698))))) (_a$3700 (jolt-hash-map)) (_a$3701 phints)) (jolt-reduce _a$3699 _a$3700 _a$3701)))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nm) (let fnrec3702 ((nm nm)) (let* ((ck (jolt-get m nm)) (e (let* ((and__13__auto ck)) (if (jolt-truthy? and__13__auto) (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box")) ck) and__13__auto)))) (if (jolt-truthy? e) (jolt-invoke (var-deref "jolt.passes.types" "record-type-from-entry") e (var-deref "jolt.passes.types" "type-depth")) jolt-nil)))) params)))))) phint-seed)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "check-mode-box" (jolt-invoke (var-deref "clojure.core" "atom") (let* ((_o$3703 (keyword #f "on")) (_o$3704 #f) (_o$3705 (keyword #f "strict")) (_o$3706 #f)) (jolt-hash-map _o$3703 _o$3704 _o$3705 _o$3706))) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "set-check-mode!" (letrec ((set-check-mode! (lambda (on strict?) (let fnrec3707 ((on on) (strict? strict?)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "check-mode-box") (let* ((_o$3708 (keyword #f "on")) (_o$3709 (if (jolt-truthy? on) #t #f)) (_o$3710 (keyword #f "strict")) (_o$3711 (if (jolt-truthy? strict?) #t #f))) (jolt-hash-map _o$3708 _o$3709 _o$3710 _o$3711))))))) set-check-mode!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "take-diags!" (letrec ((take-diags! (lambda () (let fnrec3712 () (let* ((d (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "diag-box"))))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) d)))))) take-diags!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "run-inference" (letrec ((run-inference (lambda (opt) (let fnrec3713 ((opt opt)) (if (jolt-truthy? (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "on"))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "diag-box") (jolt-vector)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking-box") (jolt-hash-set)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") (jolt-get (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "check-mode-box")) (keyword #f "strict"))) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #t) (let* ((r (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt))) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "checking?") #f) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "strict-box") #f) r))) (jolt-invoke (var-deref "jolt.passes.types" "infer-top") opt)))))) run-inference)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes" "run-passes" (letrec ((run-passes (lambda (node ctx) (let fnrec2876 ((node node) (ctx ctx)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "inline-enabled?") ctx)) (let* ((_ (jolt-invoke (var-deref "jolt.passes.inline" "set-rec-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (_ (jolt-invoke (var-deref "jolt.passes.types" "set-record-shapes!") (jolt-invoke (var-deref "jolt.host" "record-shapes") ctx))) (opt (let* ((i 0) (n (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node))) (let loop2877 ((i i) (n n)) (begin (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.inline" "dirty") #f) (let* ((n2 (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.inline" "scalar-replace") (jolt-invoke (var-deref "jolt.passes.inline" "flatten-lets") (jolt-invoke (var-deref "jolt.passes.inline" "inline-node") n ctx)))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "dirty")))) (if (jolt-truthy? and__13__auto) (< i 8) and__13__auto))) (loop2877 (jolt-inc i) n2) n2))))))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") (jolt-invoke (var-deref "jolt.passes.types" "run-inference") opt))) (jolt-invoke (var-deref "jolt.passes.fold" "const-fold") node)))))) run-passes))) |