map-ir-children single-sourced the child layout for rewrite passes; the read-only analyses each re-enumerated ops by hand. Add a fold companion, reduce-ir-children, and rebuild body-size, pure?, and body-closed? on it (each reduces to a leaf value + the special ops it actually needs). local-escapes? stays an explicit walk — its default is conservatively true and it inspects node shape beyond child purity, so folding an unhandled op over its children would be unsound for scalar replacement.
452 lines
No EOL
226 KiB
Scheme
452 lines
No EOL
226 KiB
Scheme
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "const" (letrec ((const (lambda (v) (let fnrec4345 ((v v)) (let* ((_o$4346 (keyword #f "op")) (_o$4347 (keyword #f "const")) (_o$4348 (keyword #f "val")) (_o$4349 v)) (jolt-hash-map _o$4346 _o$4347 _o$4348 _o$4349)))))) const)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "local" (letrec ((local (lambda (name) (let fnrec4350 ((name name)) (let* ((_o$4351 (keyword #f "op")) (_o$4352 (keyword #f "local")) (_o$4353 (keyword #f "name")) (_o$4354 name)) (jolt-hash-map _o$4351 _o$4352 _o$4353 _o$4354)))))) local)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "var-ref" (letrec ((var-ref (lambda (ns name) (let fnrec4355 ((ns ns) (name name)) (let* ((_o$4356 (keyword #f "op")) (_o$4357 (keyword #f "var")) (_o$4358 (keyword #f "ns")) (_o$4359 ns) (_o$4360 (keyword #f "name")) (_o$4361 name)) (jolt-hash-map _o$4356 _o$4357 _o$4358 _o$4359 _o$4360 _o$4361)))))) var-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "the-var" (letrec ((the-var (lambda (ns name) (let fnrec4362 ((ns ns) (name name)) (let* ((_o$4363 (keyword #f "op")) (_o$4364 (keyword #f "the-var")) (_o$4365 (keyword #f "ns")) (_o$4366 ns) (_o$4367 (keyword #f "name")) (_o$4368 name)) (jolt-hash-map _o$4363 _o$4364 _o$4365 _o$4366 _o$4367 _o$4368)))))) the-var)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-ref" (letrec ((host-ref (lambda (name) (let fnrec4369 ((name name)) (let* ((_o$4370 (keyword #f "op")) (_o$4371 (keyword #f "host")) (_o$4372 (keyword #f "name")) (_o$4373 name)) (jolt-hash-map _o$4370 _o$4371 _o$4372 _o$4373)))))) host-ref)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-static" (letrec ((host-static (lambda (class member) (let fnrec4374 ((class class) (member member)) (let* ((_o$4375 (keyword #f "op")) (_o$4376 (keyword #f "host-static")) (_o$4377 (keyword #f "class")) (_o$4378 class) (_o$4379 (keyword #f "member")) (_o$4380 member)) (jolt-hash-map _o$4375 _o$4376 _o$4377 _o$4378 _o$4379 _o$4380)))))) host-static)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "host-new" (letrec ((host-new (lambda (class args) (let fnrec4381 ((class class) (args args)) (let* ((_o$4382 (keyword #f "op")) (_o$4383 (keyword #f "host-new")) (_o$4384 (keyword #f "class")) (_o$4385 class) (_o$4386 (keyword #f "args")) (_o$4387 args)) (jolt-hash-map _o$4382 _o$4383 _o$4384 _o$4385 _o$4386 _o$4387)))))) host-new)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "if-node" (letrec ((if-node (lambda (test then _else) (let fnrec4388 ((test test) (then then) (_else _else)) (let* ((_o$4389 (keyword #f "op")) (_o$4390 (keyword #f "if")) (_o$4391 (keyword #f "test")) (_o$4392 test) (_o$4393 (keyword #f "then")) (_o$4394 then) (_o$4395 (keyword #f "else")) (_o$4396 _else)) (jolt-hash-map _o$4389 _o$4390 _o$4391 _o$4392 _o$4393 _o$4394 _o$4395 _o$4396)))))) if-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "do-node" (letrec ((do-node (lambda (statements ret) (let fnrec4397 ((statements statements) (ret ret)) (let* ((_o$4398 (keyword #f "op")) (_o$4399 (keyword #f "do")) (_o$4400 (keyword #f "statements")) (_o$4401 statements) (_o$4402 (keyword #f "ret")) (_o$4403 ret)) (jolt-hash-map _o$4398 _o$4399 _o$4400 _o$4401 _o$4402 _o$4403)))))) do-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "invoke" (letrec ((invoke (lambda (f args) (let fnrec4404 ((f f) (args args)) (let* ((_o$4405 (keyword #f "op")) (_o$4406 (keyword #f "invoke")) (_o$4407 (keyword #f "fn")) (_o$4408 f) (_o$4409 (keyword #f "args")) (_o$4410 args)) (jolt-hash-map _o$4405 _o$4406 _o$4407 _o$4408 _o$4409 _o$4410)))))) invoke)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "def-node" (letrec ((def-node (case-lambda ((ns name init) (let fnrec4411 ((ns ns) (name name) (init init)) (let* ((_o$4412 (keyword #f "op")) (_o$4413 (keyword #f "def")) (_o$4414 (keyword #f "ns")) (_o$4415 ns) (_o$4416 (keyword #f "name")) (_o$4417 name) (_o$4418 (keyword #f "init")) (_o$4419 init)) (jolt-hash-map _o$4412 _o$4413 _o$4414 _o$4415 _o$4416 _o$4417 _o$4418 _o$4419)))) ((ns name init meta) (let fnrec4420 ((ns ns) (name name) (init init) (meta meta)) (if (jolt-truthy? meta) (let* ((_o$4421 (keyword #f "op")) (_o$4422 (keyword #f "def")) (_o$4423 (keyword #f "ns")) (_o$4424 ns) (_o$4425 (keyword #f "name")) (_o$4426 name) (_o$4427 (keyword #f "init")) (_o$4428 init) (_o$4429 (keyword #f "meta")) (_o$4430 meta)) (jolt-hash-map _o$4421 _o$4422 _o$4423 _o$4424 _o$4425 _o$4426 _o$4427 _o$4428 _o$4429 _o$4430)) (let* ((_o$4431 (keyword #f "op")) (_o$4432 (keyword #f "def")) (_o$4433 (keyword #f "ns")) (_o$4434 ns) (_o$4435 (keyword #f "name")) (_o$4436 name) (_o$4437 (keyword #f "init")) (_o$4438 init)) (jolt-hash-map _o$4431 _o$4432 _o$4433 _o$4434 _o$4435 _o$4436 _o$4437 _o$4438)))))))) def-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "let-node" (letrec ((let-node (lambda (bindings body) (let fnrec4439 ((bindings bindings) (body body)) (let* ((_o$4440 (keyword #f "op")) (_o$4441 (keyword #f "let")) (_o$4442 (keyword #f "bindings")) (_o$4443 bindings) (_o$4444 (keyword #f "body")) (_o$4445 body)) (jolt-hash-map _o$4440 _o$4441 _o$4442 _o$4443 _o$4444 _o$4445)))))) let-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "fn-node" (letrec ((fn-node (lambda (name arities) (let fnrec4446 ((name name) (arities arities)) (if (jolt-truthy? name) (let* ((_o$4447 (keyword #f "op")) (_o$4448 (keyword #f "fn")) (_o$4449 (keyword #f "name")) (_o$4450 name) (_o$4451 (keyword #f "arities")) (_o$4452 arities)) (jolt-hash-map _o$4447 _o$4448 _o$4449 _o$4450 _o$4451 _o$4452)) (let* ((_o$4453 (keyword #f "op")) (_o$4454 (keyword #f "fn")) (_o$4455 (keyword #f "arities")) (_o$4456 arities)) (jolt-hash-map _o$4453 _o$4454 _o$4455 _o$4456))))))) fn-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "vector-node" (letrec ((vector-node (lambda (items) (let fnrec4457 ((items items)) (let* ((_o$4458 (keyword #f "op")) (_o$4459 (keyword #f "vector")) (_o$4460 (keyword #f "items")) (_o$4461 items)) (jolt-hash-map _o$4458 _o$4459 _o$4460 _o$4461)))))) vector-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-node" (letrec ((map-node (lambda (pairs) (let fnrec4462 ((pairs pairs)) (let* ((_o$4463 (keyword #f "op")) (_o$4464 (keyword #f "map")) (_o$4465 (keyword #f "pairs")) (_o$4466 pairs)) (jolt-hash-map _o$4463 _o$4464 _o$4465 _o$4466)))))) map-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "set-node" (letrec ((set-node (lambda (items) (let fnrec4467 ((items items)) (let* ((_o$4468 (keyword #f "op")) (_o$4469 (keyword #f "set")) (_o$4470 (keyword #f "items")) (_o$4471 items)) (jolt-hash-map _o$4468 _o$4469 _o$4470 _o$4471)))))) set-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "quote-node" (letrec ((quote-node (lambda (form) (let fnrec4472 ((form form)) (let* ((_o$4473 (keyword #f "op")) (_o$4474 (keyword #f "quote")) (_o$4475 (keyword #f "form")) (_o$4476 form)) (jolt-hash-map _o$4473 _o$4474 _o$4475 _o$4476)))))) quote-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "throw-node" (letrec ((throw-node (lambda (expr) (let fnrec4477 ((expr expr)) (let* ((_o$4478 (keyword #f "op")) (_o$4479 (keyword #f "throw")) (_o$4480 (keyword #f "expr")) (_o$4481 expr)) (jolt-hash-map _o$4478 _o$4479 _o$4480 _o$4481)))))) throw-node)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "map-ir-children" (letrec ((map-ir-children (lambda (f node) (let fnrec4482 ((f f) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$4483 node) (_a$4484 (keyword #f "test")) (_a$4485 (jolt-invoke f (jolt-get node (keyword #f "test")))) (_a$4486 (keyword #f "then")) (_a$4487 (jolt-invoke f (jolt-get node (keyword #f "then")))) (_a$4488 (keyword #f "else")) (_a$4489 (jolt-invoke f (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$4483 _a$4484 _a$4485 _a$4486 _a$4487 _a$4488 _a$4489)) (if (jolt= op (keyword #f "do")) (let* ((_a$4490 node) (_a$4491 (keyword #f "statements")) (_a$4492 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "statements")))) (_a$4493 (keyword #f "ret")) (_a$4494 (jolt-invoke f (jolt-get node (keyword #f "ret"))))) (jolt-assoc _a$4490 _a$4491 _a$4492 _a$4493 _a$4494)) (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$4495 node) (_a$4496 (keyword #f "obj")) (_a$4497 (jolt-invoke f (jolt-get node (keyword #f "obj")))) (_a$4498 (keyword #f "val")) (_a$4499 (jolt-invoke f (jolt-get node (keyword #f "val"))))) (jolt-assoc _a$4495 _a$4496 _a$4497 _a$4498 _a$4499)) (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$4500 node) (_a$4501 (keyword #f "fn")) (_a$4502 (jolt-invoke f (jolt-get node (keyword #f "fn")))) (_a$4503 (keyword #f "args")) (_a$4504 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$4500 _a$4501 _a$4502 _a$4503 _a$4504)) (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$4508 (var-deref "clojure.core" "mapv")) (_a$4509 (lambda (pr) (let fnrec4505 ((pr pr)) (let* ((_o$4506 (jolt-invoke f (jolt-nth pr 0))) (_o$4507 (jolt-invoke f (jolt-nth pr 1)))) (jolt-vector _o$4506 _o$4507))))) (_a$4510 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$4508 _a$4509 _a$4510))) (if (jolt= op (keyword #f "let")) (let* ((_a$4517 node) (_a$4518 (keyword #f "bindings")) (_a$4519 (let* ((_a$4514 (var-deref "clojure.core" "mapv")) (_a$4515 (lambda (b) (let fnrec4511 ((b b)) (let* ((_o$4512 (jolt-nth b 0)) (_o$4513 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$4512 _o$4513))))) (_a$4516 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$4514 _a$4515 _a$4516))) (_a$4520 (keyword #f "body")) (_a$4521 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$4517 _a$4518 _a$4519 _a$4520 _a$4521)) (if (jolt= op (keyword #f "loop")) (let* ((_a$4528 node) (_a$4529 (keyword #f "bindings")) (_a$4530 (let* ((_a$4525 (var-deref "clojure.core" "mapv")) (_a$4526 (lambda (b) (let fnrec4522 ((b b)) (let* ((_o$4523 (jolt-nth b 0)) (_o$4524 (jolt-invoke f (jolt-nth b 1)))) (jolt-vector _o$4523 _o$4524))))) (_a$4527 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$4525 _a$4526 _a$4527))) (_a$4531 (keyword #f "body")) (_a$4532 (jolt-invoke f (jolt-get node (keyword #f "body"))))) (jolt-assoc _a$4528 _a$4529 _a$4530 _a$4531 _a$4532)) (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$4534 (var-deref "clojure.core" "mapv")) (_a$4535 (lambda (a) (let fnrec4533 ((a a)) (jolt-assoc a (keyword #f "body") (jolt-invoke f (jolt-get a (keyword #f "body"))))))) (_a$4536 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$4534 _a$4535 _a$4536))) (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$4537 node) (_a$4538 (keyword #f "target")) (_a$4539 (jolt-invoke f (jolt-get node (keyword #f "target")))) (_a$4540 (keyword #f "args")) (_a$4541 (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args"))))) (jolt-assoc _a$4537 _a$4538 _a$4539 _a$4540 _a$4541)) (if (jolt= op (keyword #f "host-new")) (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") f (jolt-get node (keyword #f "args")))) (if (jolt= op (keyword #f "try")) (let* ((n (jolt-assoc node (keyword #f "body") (jolt-invoke f (jolt-get node (keyword #f "body"))))) (n (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-assoc n (keyword #f "catch-body") (jolt-invoke f (jolt-get node (keyword #f "catch-body")))) n)) (n (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-assoc n (keyword #f "finally") (jolt-invoke f (jolt-get node (keyword #f "finally")))) n))) n) (if (jolt-truthy? (keyword #f "else")) node jolt-nil)))))))))))))))))))))))) map-ir-children)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.ir" "reduce-ir-children" (letrec ((reduce-ir-children (lambda (f acc node) (let fnrec4542 ((f f) (acc acc) (node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "if")) (let* ((_a$4546 f) (_a$4547 (let* ((_a$4543 f) (_a$4544 (jolt-invoke f acc (jolt-get node (keyword #f "test")))) (_a$4545 (jolt-get node (keyword #f "then")))) (jolt-invoke _a$4543 _a$4544 _a$4545))) (_a$4548 (jolt-get node (keyword #f "else")))) (jolt-invoke _a$4546 _a$4547 _a$4548)) (if (jolt= op (keyword #f "do")) (let* ((_a$4549 f) (_a$4550 (jolt-reduce f acc (jolt-get node (keyword #f "statements")))) (_a$4551 (jolt-get node (keyword #f "ret")))) (jolt-invoke _a$4549 _a$4550 _a$4551)) (if (jolt= op (keyword #f "throw")) (jolt-invoke f acc (jolt-get node (keyword #f "expr"))) (if (jolt= op (keyword #f "set-var")) (jolt-invoke f acc (jolt-get node (keyword #f "val"))) (if (jolt= op (keyword #f "set-field")) (let* ((_a$4552 f) (_a$4553 (jolt-invoke f acc (jolt-get node (keyword #f "obj")))) (_a$4554 (jolt-get node (keyword #f "val")))) (jolt-invoke _a$4552 _a$4553 _a$4554)) (if (jolt= op (keyword #f "defmacro")) (jolt-invoke f acc (jolt-get node (keyword #f "fn"))) (if (jolt= op (keyword #f "invoke")) (let* ((_a$4555 f) (_a$4556 (jolt-invoke f acc (jolt-get node (keyword #f "fn")))) (_a$4557 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$4555 _a$4556 _a$4557)) (if (jolt= op (keyword #f "vector")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "set")) (jolt-reduce f acc (jolt-get node (keyword #f "items"))) (if (jolt= op (keyword #f "map")) (let* ((_a$4562 (lambda (a pr) (let fnrec4558 ((a a) (pr pr)) (let* ((_a$4559 f) (_a$4560 (jolt-invoke f a (jolt-nth pr 0))) (_a$4561 (jolt-nth pr 1))) (jolt-invoke _a$4559 _a$4560 _a$4561))))) (_a$4563 acc) (_a$4564 (jolt-get node (keyword #f "pairs")))) (jolt-reduce _a$4562 _a$4563 _a$4564)) (if (jolt= op (keyword #f "let")) (let* ((_a$4569 f) (_a$4570 (let* ((_a$4566 (lambda (a b) (let fnrec4565 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$4567 acc) (_a$4568 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$4566 _a$4567 _a$4568))) (_a$4571 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$4569 _a$4570 _a$4571)) (if (jolt= op (keyword #f "loop")) (let* ((_a$4576 f) (_a$4577 (let* ((_a$4573 (lambda (a b) (let fnrec4572 ((a a) (b b)) (jolt-invoke f a (jolt-nth b 1))))) (_a$4574 acc) (_a$4575 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$4573 _a$4574 _a$4575))) (_a$4578 (jolt-get node (keyword #f "body")))) (jolt-invoke _a$4576 _a$4577 _a$4578)) (if (jolt= op (keyword #f "recur")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "fn")) (let* ((_a$4580 (lambda (a ar) (let fnrec4579 ((a a) (ar ar)) (jolt-invoke f a (jolt-get ar (keyword #f "body")))))) (_a$4581 acc) (_a$4582 (jolt-get node (keyword #f "arities")))) (jolt-reduce _a$4580 _a$4581 _a$4582)) (if (jolt= op (keyword #f "def")) (if (jolt-truthy? (jolt-get node (keyword #f "init"))) (jolt-invoke f acc (jolt-get node (keyword #f "init"))) acc) (if (jolt= op (keyword #f "host-call")) (let* ((_a$4583 f) (_a$4584 (jolt-invoke f acc (jolt-get node (keyword #f "target")))) (_a$4585 (jolt-get node (keyword #f "args")))) (jolt-reduce _a$4583 _a$4584 _a$4585)) (if (jolt= op (keyword #f "host-new")) (jolt-reduce f acc (jolt-get node (keyword #f "args"))) (if (jolt= op (keyword #f "try")) (let* ((a (jolt-invoke f acc (jolt-get node (keyword #f "body")))) (a (if (jolt-truthy? (jolt-get node (keyword #f "catch-body"))) (jolt-invoke f a (jolt-get node (keyword #f "catch-body"))) a)) (a (if (jolt-truthy? (jolt-get node (keyword #f "finally"))) (jolt-invoke f a (jolt-get node (keyword #f "finally"))) a))) a) (if (jolt-truthy? (keyword #f "else")) acc jolt-nil)))))))))))))))))))))))) reduce-ir-children)))
|
|
(guard (e (#t #f))
|
|
(declare-var! "jolt.analyzer" "analyze"))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.analyzer" "handled" (let* ((_o$4586 "quote") (_o$4587 "if") (_o$4588 "do") (_o$4589 "def") (_o$4590 "fn*") (_o$4591 "let*") (_o$4592 "loop*") (_o$4593 "recur") (_o$4594 "throw") (_o$4595 "try") (_o$4596 "syntax-quote") (_o$4597 "var") (_o$4598 "letfn") (_o$4599 "set!") (_o$4600 "defmacro")) (jolt-hash-set _o$4586 _o$4587 _o$4588 _o$4589 _o$4590 _o$4591 _o$4592 _o$4593 _o$4594 _o$4595 _o$4596 _o$4597 _o$4598 _o$4599 _o$4600)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "uncompilable" (letrec ((uncompilable (lambda (why) (let fnrec4601 ((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 fnrec4602 ((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 fnrec4603 () (let* ((_o$4604 (keyword #f "locals")) (_o$4605 (jolt-hash-set)) (_o$4606 (keyword #f "hints")) (_o$4607 (jolt-hash-map))) (jolt-hash-map _o$4604 _o$4605 _o$4606 _o$4607)))))) empty-env)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "local?" (letrec ((local? (lambda (env nm) (let fnrec4608 ((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 fnrec4609 ((env env) (names names)) (jolt-invoke (var-deref "clojure.core" "update") env (keyword #f "locals") (lambda (p__47_) (let fnrec4610 ((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 fnrec4611 ((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 fnrec4612 ((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 fnrec4613 ((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 fnrec4614 ((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 fnrec4615 ((ctx ctx) (forms forms) (env env)) (let* ((v (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (p__48_) (let fnrec4616 ((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$4617 (var-deref "jolt.ir" "do-node")) (_a$4618 (jolt-invoke (var-deref "clojure.core" "subvec") v 0 (jolt-dec n))) (_a$4619 (jolt-peek v))) (jolt-invoke _a$4617 _a$4618 _a$4619)) jolt-nil)))))))) analyze-seq)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-bindings" (letrec ((analyze-bindings (lambda (ctx bvec env) (let fnrec4620 ((ctx ctx) (bvec bvec) (env env)) (let* ((i 0) (env env) (pairs (jolt-vector))) (let loop4621 ((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$4628 (+ i 2)) (_a$4629 (let* ((_a$4622 (var-deref "jolt.analyzer" "add-hint")) (_a$4623 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector nm))) (_a$4624 nm) (_a$4625 (jolt-invoke (var-deref "jolt.analyzer" "hint-of") ctx bsym))) (jolt-invoke _a$4622 _a$4623 _a$4624 _a$4625))) (_a$4630 (jolt-conj pairs (let* ((_o$4626 nm) (_o$4627 init)) (jolt-vector _o$4626 _o$4627))))) (loop4621 _a$4628 _a$4629 _a$4630))))) (let* ((_o$4631 pairs) (_o$4632 env)) (jolt-vector _o$4631 _o$4632))))))))) analyze-bindings)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "parse-params" (letrec ((parse-params (lambda (ctx pvec) (let fnrec4633 ((ctx ctx) (pvec pvec)) (let* ((i 0) (fixed (jolt-vector)) (rest-name jolt-nil) (hints (jolt-vector)) (phints (jolt-vector))) (let loop4634 ((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$4635 (+ i 2)) (_a$4636 fixed) (_a$4637 (jolt-invoke (var-deref "jolt.host" "form-sym-name") r)) (_a$4638 hints) (_a$4639 phints)) (loop4634 _a$4635 _a$4636 _a$4637 _a$4638 _a$4639)))) (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$4644 (jolt-inc i)) (_a$4645 (jolt-conj fixed nm)) (_a$4646 rest-name) (_a$4647 (if (jolt-truthy? h) (jolt-conj hints (let* ((_o$4640 nm) (_o$4641 h)) (jolt-vector _o$4640 _o$4641))) hints)) (_a$4648 (if (jolt-truthy? ph) (jolt-conj phints (let* ((_o$4642 nm) (_o$4643 ph)) (jolt-vector _o$4642 _o$4643))) phints))) (loop4634 _a$4644 _a$4645 _a$4646 _a$4647 _a$4648)))))) (let* ((_o$4649 (keyword #f "fixed")) (_o$4650 fixed) (_o$4651 (keyword #f "rest")) (_o$4652 rest-name) (_o$4653 (keyword #f "hints")) (_o$4654 hints) (_o$4655 (keyword #f "phints")) (_o$4656 phints)) (jolt-hash-map _o$4649 _o$4650 _o$4651 _o$4652 _o$4653 _o$4654 _o$4655 _o$4656))))))))) parse-params)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "uniquify-params" (letrec ((uniquify-params (lambda (names) (let fnrec4657 ((names names)) (let* ((n (jolt-count names))) (let* ((i 0) (out (jolt-vector))) (let loop4658 ((i i) (out out)) (if (< i n) (let* ((nm (jolt-nth names i)) (dup? (let* ((j (jolt-inc i))) (let loop4659 ((j j)) (if (>= j n) #f (if (jolt= nm (jolt-nth names j)) #t (if (jolt-truthy? (keyword #f "else")) (loop4659 (jolt-inc j)) jolt-nil))))))) (let* ((_a$4660 (jolt-inc i)) (_a$4661 (jolt-conj out (if (jolt-truthy? dup?) (jolt-invoke (var-deref "jolt.analyzer" "gen-name") (jolt-invoke (var-deref "clojure.core" "str") nm "_")) nm)))) (loop4658 _a$4660 _a$4661))) out)))))))) uniquify-params)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-arity" (letrec ((analyze-arity (lambda (ctx pvec body env fn-name) (let fnrec4662 ((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$4663 (var-deref "clojure.core" "str")) (_a$4664 (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx)) (_a$4665 "/") (_a$4666 (let* ((or__14__auto fn-name)) (if (jolt-truthy? or__14__auto) or__14__auto "fn"))) (_a$4667 "--")) (jolt-invoke _a$4663 _a$4664 _a$4665 _a$4666 _a$4667)))) (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$4673 (lambda (e pr) (let fnrec4668 ((e e) (pr pr)) (let* ((_a$4669 (var-deref "jolt.analyzer" "add-hint")) (_a$4670 e) (_a$4671 (jolt-nth pr 0)) (_a$4672 (jolt-nth pr 1))) (jolt-invoke _a$4669 _a$4670 _a$4671 _a$4672))))) (_a$4674 env0) (_a$4675 (jolt-get pp (keyword #f "hints")))) (jolt-reduce _a$4673 _a$4674 _a$4675))) (arity (let* ((_o$4676 (keyword #f "params")) (_o$4677 fixed) (_o$4678 (keyword #f "recur-name")) (_o$4679 rname) (_o$4680 (keyword #f "body")) (_o$4681 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx body env*))) (jolt-hash-map _o$4676 _o$4677 _o$4678 _o$4679 _o$4680 _o$4681))) (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 fnrec4682 ((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 fnrec4683 ((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 fnrec4684 ((clause clause)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") clause)))) (let* ((_a$4685 (var-deref "jolt.analyzer" "analyze-arity")) (_a$4686 ctx) (_a$4687 (jolt-invoke (var-deref "jolt.analyzer" "strip-arglist-meta") (jolt-first cl))) (_a$4688 (jolt-rest cl)) (_a$4689 env) (_a$4690 fn-name)) (jolt-invoke _a$4685 _a$4686 _a$4687 _a$4688 _a$4689 _a$4690))))) 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 fnrec4691 ((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 fnrec4692 ((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$4693 (keyword #f "op")) (_o$4694 (keyword #f "try")) (_o$4695 (keyword #f "body")) (_o$4696 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-invoke (var-deref "clojure.core" "deref") body) env))) (jolt-hash-map _o$4693 _o$4694 _o$4695 _o$4696))) (n (if (jolt-truthy? (jolt-invoke (var-deref "clojure.core" "deref") catch-body)) (let* ((_a$4701 n) (_a$4702 (keyword #f "catch-sym")) (_a$4703 (jolt-invoke (var-deref "clojure.core" "deref") catch-sym)) (_a$4704 (keyword #f "catch-body")) (_a$4705 (let* ((_a$4697 (var-deref "jolt.analyzer" "analyze-seq")) (_a$4698 ctx) (_a$4699 (jolt-invoke (var-deref "clojure.core" "deref") catch-body)) (_a$4700 (jolt-invoke (var-deref "jolt.analyzer" "add-locals") env (jolt-vector (jolt-invoke (var-deref "clojure.core" "deref") catch-sym))))) (jolt-invoke _a$4697 _a$4698 _a$4699 _a$4700)))) (jolt-assoc _a$4701 _a$4702 _a$4703 _a$4704 _a$4705)) 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 fnrec4706 ((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 fnrec4707 ((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 fnrec4708 ((spec spec)) (let* ((cl (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") spec)))) (let* ((_o$4709 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-first cl))) (_o$4710 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-cons (jolt-invoke (var-deref "clojure.core" "symbol") "fn") cl) env*))) (jolt-vector _o$4709 _o$4710))))) specs))) (let* ((_o$4711 (keyword #f "op")) (_o$4712 (keyword #f "let")) (_o$4713 (keyword #f "letrec")) (_o$4714 #t) (_o$4715 (keyword #f "bindings")) (_o$4716 binds) (_o$4717 (keyword #f "body")) (_o$4718 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env*))) (jolt-hash-map _o$4711 _o$4712 _o$4713 _o$4714 _o$4715 _o$4716 _o$4717 _o$4718))))))) analyze-letfn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "field-head?" (letrec ((field-head? (lambda (nm) (let fnrec4719 ((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-def" (letrec ((analyze-def (lambda (ctx items env) (let fnrec4720 ((ctx ctx) (items items) (env env)) (let* ((name-sym (jolt-nth items 1))) (begin (if (jolt-not (jolt-invoke (var-deref "jolt.host" "form-sym?") name-sym)) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "def name with map metadata") jolt-nil) (if (< (jolt-count items) 3) (let* ((nm (jolt-invoke (var-deref "jolt.host" "form-sym-name") name-sym)) (cur (jolt-invoke (var-deref "jolt.host" "compile-ns") ctx))) (begin (jolt-invoke (var-deref "jolt.host" "host-intern!") ctx cur nm) (let* ((_o$4721 (keyword #f "op")) (_o$4722 (keyword #f "def")) (_o$4723 (keyword #f "ns")) (_o$4724 cur) (_o$4725 (keyword #f "name")) (_o$4726 nm) (_o$4727 (keyword #f "no-init")) (_o$4728 #t)) (jolt-hash-map _o$4721 _o$4722 _o$4723 _o$4724 _o$4725 _o$4726 _o$4727 _o$4728)))) (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)))))))))) analyze-def)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-set!" (letrec ((analyze-set! (lambda (ctx items env) (let fnrec4729 ((ctx ctx) (items items) (env env)) (let* ((target (jolt-nth items 1)) (val-node (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (ti (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-list?") target)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "jolt.host" "form-elements") target)) jolt-nil)) (thead (if (jolt-truthy? (let* ((and__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$4730 (keyword #f "op")) (_o$4731 (keyword #f "set-field")) (_o$4732 (keyword #f "obj")) (_o$4733 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth ti 1) env)) (_o$4734 (keyword #f "field")) (_o$4735 (jolt-invoke (var-deref "clojure.core" "subs") thead 2)) (_o$4736 (keyword #f "val")) (_o$4737 val-node)) (jolt-hash-map _o$4730 _o$4731 _o$4732 _o$4733 _o$4734 _o$4735 _o$4736 _o$4737)) (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$4741 (keyword #f "op")) (_o$4742 (keyword #f "set-var")) (_o$4743 (keyword #f "the-var")) (_o$4744 (let* ((_a$4738 (var-deref "jolt.ir" "the-var")) (_a$4739 (jolt-get r (keyword #f "ns"))) (_a$4740 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4738 _a$4739 _a$4740))) (_o$4745 (keyword #f "val")) (_o$4746 val-node)) (jolt-hash-map _o$4741 _o$4742 _o$4743 _o$4744 _o$4745 _o$4746))))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "set! of an unsupported target") jolt-nil)))))))) analyze-set!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-special" (letrec ((analyze-special (lambda (ctx op items env) (let fnrec4747 ((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$4748 (var-deref "jolt.ir" "if-node")) (_a$4749 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_a$4750 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 2) env)) (_a$4751 (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$4748 _a$4749 _a$4750 _a$4751))) (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") (jolt-invoke (var-deref "jolt.analyzer" "analyze-def") ctx items env) (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$4756 (var-deref "jolt.ir" "let-node")) (_a$4757 (jolt-first r)) (_a$4758 (let* ((_a$4752 (var-deref "jolt.analyzer" "analyze-seq")) (_a$4753 ctx) (_a$4754 (jolt-drop 2 items)) (_a$4755 (jolt-invoke (var-deref "clojure.core" "second") r))) (jolt-invoke _a$4752 _a$4753 _a$4754 _a$4755)))) (jolt-invoke _a$4756 _a$4757 _a$4758))) (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$4759 (keyword #f "op")) (_o$4760 (keyword #f "loop")) (_o$4761 (keyword #f "recur-name")) (_o$4762 rname) (_o$4763 (keyword #f "bindings")) (_o$4764 (jolt-first r)) (_o$4765 (keyword #f "body")) (_o$4766 (jolt-invoke (var-deref "jolt.analyzer" "analyze-seq") ctx (jolt-drop 2 items) env**))) (jolt-hash-map _o$4759 _o$4760 _o$4761 _o$4762 _o$4763 _o$4764 _o$4765 _o$4766))) (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$4771 (keyword #f "op")) (_o$4772 (keyword #f "recur")) (_o$4773 (keyword #f "recur-name")) (_o$4774 rt) (_o$4775 (keyword #f "args")) (_o$4776 (let* ((_a$4768 (var-deref "clojure.core" "mapv")) (_a$4769 (lambda (p__50_) (let fnrec4767 ((p__50_ p__50_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__50_ env)))) (_a$4770 (jolt-rest items))) (jolt-invoke _a$4768 _a$4769 _a$4770)))) (jolt-hash-map _o$4771 _o$4772 _o$4773 _o$4774 _o$4775 _o$4776)))) (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$4777 (var-deref "jolt.ir" "the-var")) (_a$4778 (jolt-get r (keyword #f "ns"))) (_a$4779 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4777 _a$4778 _a$4779)) (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$4780 (keyword #f "op")) (_o$4781 (keyword #f "defmacro")) (_o$4782 (keyword #f "ns")) (_o$4783 cur) (_o$4784 (keyword #f "name")) (_o$4785 nm) (_o$4786 (keyword #f "fn")) (_o$4787 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx fn-form env))) (jolt-hash-map _o$4780 _o$4781 _o$4782 _o$4783 _o$4784 _o$4785 _o$4786 _o$4787)))) (if (jolt= G__44 "set!") (jolt-invoke (var-deref "jolt.analyzer" "analyze-set!") ctx items env) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") (jolt-invoke (var-deref "clojure.core" "str") "special form " op)))))))))))))))))))))) analyze-special)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "method-head?" (letrec ((method-head? (lambda (nm) (let fnrec4788 ((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 fnrec4789 ((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$4794 (keyword #f "op")) (_o$4795 (keyword #f "host-call")) (_o$4796 (keyword #f "method")) (_o$4797 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$4798 (keyword #f "target")) (_o$4799 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4800 (keyword #f "args")) (_o$4801 (let* ((_a$4791 (var-deref "clojure.core" "mapv")) (_a$4792 (lambda (p__51_) (let fnrec4790 ((p__51_ p__51_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__51_ env)))) (_a$4793 (jolt-drop 2 items))) (jolt-invoke _a$4791 _a$4792 _a$4793)))) (jolt-hash-map _o$4794 _o$4795 _o$4796 _o$4797 _o$4798 _o$4799 _o$4800 _o$4801))))))) analyze-host-call)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "ctor-head?" (letrec ((ctor-head? (lambda (nm) (let fnrec4802 ((nm nm)) (let* ((and__13__auto (> (jolt-count nm) 1))) (if (jolt-truthy? and__13__auto) (let* ((and__13__auto (jolt= "." (let* ((_a$4803 (var-deref "clojure.core" "subs")) (_a$4804 nm) (_a$4805 (jolt-dec (jolt-count nm))) (_a$4806 (jolt-count nm))) (jolt-invoke _a$4803 _a$4804 _a$4805 _a$4806))))) (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 fnrec4807 ((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 fnrec4808 ((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 fnrec4809 ((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$4810 (keyword #f "op")) (_o$4811 (keyword #f "ffi-fn")) (_o$4812 (keyword #f "csym")) (_o$4813 (jolt-nth items 1)) (_o$4814 (keyword #f "argtypes")) (_o$4815 (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$4816 (keyword #f "rettype")) (_o$4817 (jolt-invoke (var-deref "clojure.core" "name") (jolt-nth items 3))) (_o$4818 (keyword #f "blocking")) (_o$4819 (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$4810 _o$4811 _o$4812 _o$4813 _o$4814 _o$4815 _o$4816 _o$4817 _o$4818 _o$4819))))))) analyze-ffi-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-dot" (letrec ((analyze-dot (lambda (ctx items env) (let fnrec4820 ((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$4825 (keyword #f "op")) (_o$4826 (keyword #f "host-call")) (_o$4827 (keyword #f "method")) (_o$4828 (jolt-invoke (var-deref "jolt.host" "form-sym-name") member)) (_o$4829 (keyword #f "target")) (_o$4830 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4831 (keyword #f "args")) (_o$4832 (let* ((_a$4822 (var-deref "clojure.core" "mapv")) (_a$4823 (lambda (p__53_) (let fnrec4821 ((p__53_ p__53_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__53_ env)))) (_a$4824 (jolt-drop 3 items))) (jolt-invoke _a$4822 _a$4823 _a$4824)))) (jolt-hash-map _o$4825 _o$4826 _o$4827 _o$4828 _o$4829 _o$4830 _o$4831 _o$4832)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-keyword?") member)) (let* ((_a$4833 (var-deref "jolt.ir" "invoke")) (_a$4834 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx member env)) (_a$4835 (jolt-vector (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)))) (jolt-invoke _a$4833 _a$4834 _a$4835)) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.analyzer" "uncompilable") "special form . (non-symbol member)") jolt-nil))))))))) analyze-dot)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-field" (letrec ((analyze-field (lambda (ctx hname items env) (let fnrec4836 ((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$4837 (keyword #f "op")) (_o$4838 (keyword #f "host-call")) (_o$4839 (keyword #f "method")) (_o$4840 (jolt-invoke (var-deref "clojure.core" "subs") hname 1)) (_o$4841 (keyword #f "target")) (_o$4842 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx (jolt-nth items 1) env)) (_o$4843 (keyword #f "args")) (_o$4844 (jolt-vector))) (jolt-hash-map _o$4837 _o$4838 _o$4839 _o$4840 _o$4841 _o$4842 _o$4843 _o$4844))))))) analyze-field)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.analyzer" "analyze-symbol" (letrec ((analyze-symbol (lambda (ctx form env) (let fnrec4845 ((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$4846 (var-deref "jolt.ir" "var-ref")) (_a$4847 (jolt-get r (keyword #f "ns"))) (_a$4848 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4846 _a$4847 _a$4848)) (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$4849 (var-deref "jolt.ir" "var-ref")) (_a$4850 (jolt-get r (keyword #f "ns"))) (_a$4851 (jolt-get r (keyword #f "name")))) (jolt-invoke _a$4849 _a$4850 _a$4851)) (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 fnrec4852 ((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$4853 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$4854 ctx) (_a$4855 (jolt-invoke (var-deref "clojure.core" "subs") hname 0 (jolt-dec (jolt-count hname)))) (_a$4856 (jolt-rest items)) (_a$4857 env)) (jolt-invoke _a$4853 _a$4854 _a$4855 _a$4856 _a$4857)) (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$4858 (var-deref "jolt.analyzer" "analyze-ctor")) (_a$4859 ctx) (_a$4860 (jolt-invoke (var-deref "jolt.host" "form-sym-name") (jolt-nth items 1))) (_a$4861 (jolt-drop 2 items)) (_a$4862 env)) (jolt-invoke _a$4858 _a$4859 _a$4860 _a$4861 _a$4862)) (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$4867 (var-deref "jolt.ir" "invoke")) (_a$4868 (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx head env)) (_a$4869 (let* ((_a$4864 (var-deref "clojure.core" "mapv")) (_a$4865 (lambda (p__54_) (let fnrec4863 ((p__54_ p__54_)) (jolt-invoke (var-deref "jolt.analyzer" "analyze") ctx p__54_ env)))) (_a$4866 (jolt-rest items))) (jolt-invoke _a$4864 _a$4865 _a$4866)))) (jolt-invoke _a$4867 _a$4868 _a$4869))) (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 fnrec4870 ((ctx ctx) (form form)) (jolt-invoke analyze ctx form (jolt-invoke (var-deref "jolt.analyzer" "empty-env"))))) ((ctx form env) (let fnrec4871 ((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$4873 (var-deref "clojure.core" "mapv")) (_a$4874 (lambda (p__55_) (let fnrec4872 ((p__55_ p__55_)) (jolt-invoke analyze ctx p__55_ env)))) (_a$4875 (jolt-invoke (var-deref "jolt.host" "form-vec-items") form))) (jolt-invoke _a$4873 _a$4874 _a$4875))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-map?") form)) (jolt-invoke (var-deref "jolt.ir" "map-node") (let* ((_a$4879 (var-deref "clojure.core" "mapv")) (_a$4880 (lambda (p) (let fnrec4876 ((p p)) (let* ((_o$4877 (jolt-invoke analyze ctx (jolt-first p) env)) (_o$4878 (jolt-invoke analyze ctx (jolt-invoke (var-deref "clojure.core" "second") p) env))) (jolt-vector _o$4877 _o$4878))))) (_a$4881 (jolt-invoke (var-deref "jolt.host" "form-map-pairs") form))) (jolt-invoke _a$4879 _a$4880 _a$4881))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-set?") form)) (jolt-invoke (var-deref "jolt.ir" "set-node") (let* ((_a$4883 (var-deref "clojure.core" "mapv")) (_a$4884 (lambda (p__56_) (let fnrec4882 ((p__56_ p__56_)) (jolt-invoke analyze ctx p__56_ env)))) (_a$4885 (jolt-invoke (var-deref "jolt.host" "form-set-items") form))) (jolt-invoke _a$4883 _a$4884 _a$4885))) (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$4886 (keyword #f "op")) (_o$4887 (keyword #f "regex")) (_o$4888 (keyword #f "source")) (_o$4889 (jolt-invoke (var-deref "jolt.host" "form-regex-source") form))) (jolt-hash-map _o$4886 _o$4887 _o$4888 _o$4889)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-inst?") form)) (let* ((_o$4890 (keyword #f "op")) (_o$4891 (keyword #f "inst")) (_o$4892 (keyword #f "source")) (_o$4893 (jolt-invoke (var-deref "jolt.host" "form-inst-source") form))) (jolt-hash-map _o$4890 _o$4891 _o$4892 _o$4893)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-uuid?") form)) (let* ((_o$4894 (keyword #f "op")) (_o$4895 (keyword #f "uuid")) (_o$4896 (keyword #f "source")) (_o$4897 (jolt-invoke (var-deref "jolt.host" "form-uuid-source") form))) (jolt-hash-map _o$4894 _o$4895 _o$4896 _o$4897)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-bigdec?") form)) (let* ((_o$4898 (keyword #f "op")) (_o$4899 (keyword #f "bigdec")) (_o$4900 (keyword #f "source")) (_o$4901 (jolt-invoke (var-deref "jolt.host" "form-bigdec-source") form))) (jolt-hash-map _o$4898 _o$4899 _o$4900 _o$4901)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.host" "form-ns-value?") form)) (let* ((_o$4902 (keyword #f "op")) (_o$4903 (keyword #f "the-ns")) (_o$4904 (keyword #f "name")) (_o$4905 (jolt-invoke (var-deref "jolt.host" "form-ns-value-name") form))) (jolt-hash-map _o$4902 _o$4903 _o$4904 _o$4905)) (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$3666 "+") (_o$3667 "+") (_o$3668 "-") (_o$3669 "-") (_o$3670 "*") (_o$3671 "*") (_o$3672 "/") (_o$3673 "/") (_o$3674 "<") (_o$3675 "<") (_o$3676 ">") (_o$3677 ">") (_o$3678 "<=") (_o$3679 "<=") (_o$3680 ">=") (_o$3681 ">=") (_o$3682 "=") (_o$3683 "jolt=") (_o$3684 "inc") (_o$3685 "jolt-inc") (_o$3686 "dec") (_o$3687 "jolt-dec") (_o$3688 "not") (_o$3689 "jolt-not") (_o$3690 "min") (_o$3691 "min") (_o$3692 "max") (_o$3693 "max") (_o$3694 "mod") (_o$3695 "modulo") (_o$3696 "rem") (_o$3697 "remainder") (_o$3698 "quot") (_o$3699 "quotient") (_o$3700 "vector") (_o$3701 "jolt-vector") (_o$3702 "hash-map") (_o$3703 "jolt-hash-map") (_o$3704 "hash-set") (_o$3705 "jolt-hash-set") (_o$3706 "conj") (_o$3707 "jolt-conj") (_o$3708 "get") (_o$3709 "jolt-get") (_o$3710 "nth") (_o$3711 "jolt-nth") (_o$3712 "count") (_o$3713 "jolt-count") (_o$3714 "assoc") (_o$3715 "jolt-assoc") (_o$3716 "dissoc") (_o$3717 "jolt-dissoc") (_o$3718 "contains?") (_o$3719 "jolt-contains?") (_o$3720 "empty?") (_o$3721 "jolt-empty?") (_o$3722 "peek") (_o$3723 "jolt-peek") (_o$3724 "pop") (_o$3725 "jolt-pop") (_o$3726 "first") (_o$3727 "jolt-first") (_o$3728 "rest") (_o$3729 "jolt-rest") (_o$3730 "next") (_o$3731 "jolt-next") (_o$3732 "seq") (_o$3733 "jolt-seq") (_o$3734 "cons") (_o$3735 "jolt-cons") (_o$3736 "list") (_o$3737 "jolt-list") (_o$3738 "reverse") (_o$3739 "jolt-reverse") (_o$3740 "last") (_o$3741 "jolt-last") (_o$3742 "map") (_o$3743 "jolt-map") (_o$3744 "filter") (_o$3745 "jolt-filter") (_o$3746 "remove") (_o$3747 "jolt-remove") (_o$3748 "reduce") (_o$3749 "jolt-reduce") (_o$3750 "into") (_o$3751 "jolt-into") (_o$3752 "concat") (_o$3753 "jolt-concat") (_o$3754 "apply") (_o$3755 "jolt-apply") (_o$3756 "range") (_o$3757 "jolt-range") (_o$3758 "take") (_o$3759 "jolt-take") (_o$3760 "drop") (_o$3761 "jolt-drop") (_o$3762 "keys") (_o$3763 "jolt-keys") (_o$3764 "vals") (_o$3765 "jolt-vals") (_o$3766 "even?") (_o$3767 "jolt-even?") (_o$3768 "odd?") (_o$3769 "jolt-odd?") (_o$3770 "pos?") (_o$3771 "jolt-pos?") (_o$3772 "neg?") (_o$3773 "jolt-neg?") (_o$3774 "zero?") (_o$3775 "jolt-zero?") (_o$3776 "identity") (_o$3777 "jolt-identity") (_o$3778 "ex-info") (_o$3779 "jolt-ex-info")) (jolt-hash-map _o$3666 _o$3667 _o$3668 _o$3669 _o$3670 _o$3671 _o$3672 _o$3673 _o$3674 _o$3675 _o$3676 _o$3677 _o$3678 _o$3679 _o$3680 _o$3681 _o$3682 _o$3683 _o$3684 _o$3685 _o$3686 _o$3687 _o$3688 _o$3689 _o$3690 _o$3691 _o$3692 _o$3693 _o$3694 _o$3695 _o$3696 _o$3697 _o$3698 _o$3699 _o$3700 _o$3701 _o$3702 _o$3703 _o$3704 _o$3705 _o$3706 _o$3707 _o$3708 _o$3709 _o$3710 _o$3711 _o$3712 _o$3713 _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)) (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$3780 "+") (_o$3781 "jolt-add") (_o$3782 "-") (_o$3783 "jolt-sub") (_o$3784 "*") (_o$3785 "jolt-mul") (_o$3786 "/") (_o$3787 "jolt-div")) (jolt-hash-map _o$3780 _o$3781 _o$3782 _o$3783 _o$3784 _o$3785 _o$3786 _o$3787))) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "op-arity" (let* ((_o$3829 "inc") (_o$3830 (lambda (p__4_) (let fnrec3788 ((p__4_ p__4_)) (jolt= p__4_ 1)))) (_o$3831 "dec") (_o$3832 (lambda (p__5_) (let fnrec3789 ((p__5_ p__5_)) (jolt= p__5_ 1)))) (_o$3833 "not") (_o$3834 (lambda (p__6_) (let fnrec3790 ((p__6_ p__6_)) (jolt= p__6_ 1)))) (_o$3835 "count") (_o$3836 (lambda (p__7_) (let fnrec3791 ((p__7_ p__7_)) (jolt= p__7_ 1)))) (_o$3837 "empty?") (_o$3838 (lambda (p__8_) (let fnrec3792 ((p__8_ p__8_)) (jolt= p__8_ 1)))) (_o$3839 "peek") (_o$3840 (lambda (p__9_) (let fnrec3793 ((p__9_ p__9_)) (jolt= p__9_ 1)))) (_o$3841 "pop") (_o$3842 (lambda (p__10_) (let fnrec3794 ((p__10_ p__10_)) (jolt= p__10_ 1)))) (_o$3843 "mod") (_o$3844 (lambda (p__11_) (let fnrec3795 ((p__11_ p__11_)) (jolt= p__11_ 2)))) (_o$3845 "rem") (_o$3846 (lambda (p__12_) (let fnrec3796 ((p__12_ p__12_)) (jolt= p__12_ 2)))) (_o$3847 "quot") (_o$3848 (lambda (p__13_) (let fnrec3797 ((p__13_ p__13_)) (jolt= p__13_ 2)))) (_o$3849 "contains?") (_o$3850 (lambda (p__14_) (let fnrec3798 ((p__14_ p__14_)) (jolt= p__14_ 2)))) (_o$3851 "get") (_o$3852 (lambda (p__15_) (let fnrec3799 ((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$3853 "nth") (_o$3854 (lambda (p__16_) (let fnrec3800 ((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$3855 "assoc") (_o$3856 (lambda (p__17_) (let fnrec3801 ((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$3857 "dissoc") (_o$3858 (lambda (p__18_) (let fnrec3802 ((p__18_ p__18_)) (>= p__18_ 1)))) (_o$3859 "conj") (_o$3860 (lambda (p__19_) (let fnrec3803 ((p__19_ p__19_)) (>= p__19_ 1)))) (_o$3861 "first") (_o$3862 (lambda (p__20_) (let fnrec3804 ((p__20_ p__20_)) (jolt= p__20_ 1)))) (_o$3863 "rest") (_o$3864 (lambda (p__21_) (let fnrec3805 ((p__21_ p__21_)) (jolt= p__21_ 1)))) (_o$3865 "next") (_o$3866 (lambda (p__22_) (let fnrec3806 ((p__22_ p__22_)) (jolt= p__22_ 1)))) (_o$3867 "seq") (_o$3868 (lambda (p__23_) (let fnrec3807 ((p__23_ p__23_)) (jolt= p__23_ 1)))) (_o$3869 "reverse") (_o$3870 (lambda (p__24_) (let fnrec3808 ((p__24_ p__24_)) (jolt= p__24_ 1)))) (_o$3871 "last") (_o$3872 (lambda (p__25_) (let fnrec3809 ((p__25_ p__25_)) (jolt= p__25_ 1)))) (_o$3873 "keys") (_o$3874 (lambda (p__26_) (let fnrec3810 ((p__26_ p__26_)) (jolt= p__26_ 1)))) (_o$3875 "vals") (_o$3876 (lambda (p__27_) (let fnrec3811 ((p__27_ p__27_)) (jolt= p__27_ 1)))) (_o$3877 "even?") (_o$3878 (lambda (p__28_) (let fnrec3812 ((p__28_ p__28_)) (jolt= p__28_ 1)))) (_o$3879 "odd?") (_o$3880 (lambda (p__29_) (let fnrec3813 ((p__29_ p__29_)) (jolt= p__29_ 1)))) (_o$3881 "pos?") (_o$3882 (lambda (p__30_) (let fnrec3814 ((p__30_ p__30_)) (jolt= p__30_ 1)))) (_o$3883 "neg?") (_o$3884 (lambda (p__31_) (let fnrec3815 ((p__31_ p__31_)) (jolt= p__31_ 1)))) (_o$3885 "zero?") (_o$3886 (lambda (p__32_) (let fnrec3816 ((p__32_ p__32_)) (jolt= p__32_ 1)))) (_o$3887 "identity") (_o$3888 (lambda (p__33_) (let fnrec3817 ((p__33_ p__33_)) (jolt= p__33_ 1)))) (_o$3889 "cons") (_o$3890 (lambda (p__34_) (let fnrec3818 ((p__34_ p__34_)) (jolt= p__34_ 2)))) (_o$3891 "filter") (_o$3892 (lambda (p__35_) (let fnrec3819 ((p__35_ p__35_)) (jolt= p__35_ 2)))) (_o$3893 "remove") (_o$3894 (lambda (p__36_) (let fnrec3820 ((p__36_ p__36_)) (jolt= p__36_ 2)))) (_o$3895 "into") (_o$3896 (lambda (p__37_) (let fnrec3821 ((p__37_ p__37_)) (jolt= p__37_ 2)))) (_o$3897 "take") (_o$3898 (lambda (p__38_) (let fnrec3822 ((p__38_ p__38_)) (jolt= p__38_ 2)))) (_o$3899 "drop") (_o$3900 (lambda (p__39_) (let fnrec3823 ((p__39_ p__39_)) (jolt= p__39_ 2)))) (_o$3901 "map") (_o$3902 (lambda (p__40_) (let fnrec3824 ((p__40_ p__40_)) (>= p__40_ 2)))) (_o$3903 "apply") (_o$3904 (lambda (p__41_) (let fnrec3825 ((p__41_ p__41_)) (>= p__41_ 2)))) (_o$3905 "reduce") (_o$3906 (lambda (p__42_) (let fnrec3826 ((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$3907 "range") (_o$3908 (lambda (p__43_) (let fnrec3827 ((p__43_ p__43_)) (let* ((and__13__auto (>= p__43_ 0))) (if (jolt-truthy? and__13__auto) (<= p__43_ 3) and__13__auto))))) (_o$3909 "ex-info") (_o$3910 (lambda (p__44_) (let fnrec3828 ((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$3829 _o$3830 _o$3831 _o$3832 _o$3833 _o$3834 _o$3835 _o$3836 _o$3837 _o$3838 _o$3839 _o$3840 _o$3841 _o$3842 _o$3843 _o$3844 _o$3845 _o$3846 _o$3847 _o$3848 _o$3849 _o$3850 _o$3851 _o$3852 _o$3853 _o$3854 _o$3855 _o$3856 _o$3857 _o$3858 _o$3859 _o$3860 _o$3861 _o$3862 _o$3863 _o$3864 _o$3865 _o$3866 _o$3867 _o$3868 _o$3869 _o$3870 _o$3871 _o$3872 _o$3873 _o$3874 _o$3875 _o$3876 _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)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "cmp1-ops" (let* ((_o$3911 "<") (_o$3912 ">") (_o$3913 "<=") (_o$3914 ">=")) (jolt-hash-set _o$3911 _o$3912 _o$3913 _o$3914)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "supported-host-methods" (let* ((_o$3915 "isDirectory") (_o$3916 "listFiles")) (jolt-hash-set _o$3915 _o$3916)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.backend-scheme" "bool-returning-ops" (let* ((_o$3917 "<") (_o$3918 "<=") (_o$3919 ">") (_o$3920 ">=") (_o$3921 "jolt=") (_o$3922 "jolt-not") (_o$3923 "jolt-even?") (_o$3924 "jolt-odd?") (_o$3925 "jolt-pos?") (_o$3926 "jolt-neg?") (_o$3927 "jolt-zero?") (_o$3928 "jolt-empty?") (_o$3929 "jolt-contains?")) (jolt-hash-set _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)) (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 fnrec3930 ((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 fnrec3931 ((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$3932 "if") (_o$3933 "begin") (_o$3934 "lambda") (_o$3935 "let") (_o$3936 "let*") (_o$3937 "letrec") (_o$3938 "letrec*") (_o$3939 "quote") (_o$3940 "quasiquote") (_o$3941 "unquote") (_o$3942 "set!") (_o$3943 "define") (_o$3944 "define-syntax") (_o$3945 "cond") (_o$3946 "case") (_o$3947 "when") (_o$3948 "unless") (_o$3949 "and") (_o$3950 "or") (_o$3951 "do") (_o$3952 "else") (_o$3953 "guard") (_o$3954 "parameterize") (_o$3955 "delay") (_o$3956 "values")) (jolt-hash-set _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)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "munge-name" (letrec ((munge-name (lambda (s) (let fnrec3957 ((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 fnrec3958 ((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 fnrec3959 ((s s)) (jolt-invoke (var-deref "clojure.core" "str") "\"" (jolt-apply (var-deref "clojure.core" "str") (jolt-map (lambda (c) (let fnrec3960 ((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 fnrec3961 ((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$3962 (var-deref "clojure.core" "str")) (_a$3963 "(keyword ") (_a$3964 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") kns)) (_a$3965 " ") (_a$3966 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-invoke (var-deref "clojure.core" "name") v))) (_a$3967 ")")) (jolt-invoke _a$3962 _a$3963 _a$3964 _a$3965 _a$3966 _a$3967))) (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$3968 (jolt-invoke (var-deref "clojure.core" "str") "emit-const: unsupported literal " (jolt-invoke (var-deref "clojure.core" "pr-str") v))) (_a$3969 (jolt-hash-map))) (jolt-ex-info _a$3968 _a$3969))) jolt-nil))))))))))) emit-const)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-ordered" (letrec ((emit-ordered (lambda (ctor arg-strs) (let fnrec3970 ((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 fnrec3971 ((_ _)) (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 fnrec3972 ((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 fnrec3973 ((n n)) (let* ((_a$3979 (let* ((_o$3974 (keyword #f "const")) (_o$3975 (keyword #f "local")) (_o$3976 (keyword #f "var")) (_o$3977 (keyword #f "the-var")) (_o$3978 (keyword #f "quote"))) (jolt-hash-set _o$3974 _o$3975 _o$3976 _o$3977 _o$3978))) (_a$3980 (jolt-get n (keyword #f "op")))) (jolt-contains? _a$3979 _a$3980)))))) side-effect-free?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "needs-order?" (letrec ((needs-order? (lambda (nodes) (let fnrec3981 ((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 fnrec3982 ((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 fnrec3983 ((_ _)) (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 fnrec3984 ((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 fnrec3985 ((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 fnrec3986 ((p p)) (let* ((_o$3987 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 0))) (_o$3988 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-nth p 1)))) (jolt-vector _o$3987 _o$3988)))) 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 fnrec3989 ((m m)) (let* ((pairs (jolt-invoke (var-deref "clojure.core" "sort") (let* ((_a$3995 (lambda (k) (let fnrec3990 ((k k)) (let* ((_a$3991 (var-deref "clojure.core" "str")) (_a$3992 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") k)) (_a$3993 " ") (_a$3994 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get m k)))) (jolt-invoke _a$3991 _a$3992 _a$3993 _a$3994))))) (_a$3996 (jolt-keys m))) (jolt-map _a$3995 _a$3996))))) (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 fnrec3997 ((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$3998 (var-deref "clojure.core" "str")) (_a$3999 "(jolt-symbol/meta ") (_a$4000 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$4001 " ") (_a$4002 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$4003 " ") (_a$4004 (jolt-invoke emit-quoted m)) (_a$4005 ")")) (jolt-invoke _a$3998 _a$3999 _a$4000 _a$4001 _a$4002 _a$4003 _a$4004 _a$4005)) (let* ((_a$4006 (var-deref "clojure.core" "str")) (_a$4007 "(jolt-symbol ") (_a$4008 (if (jolt-truthy? sns) (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") sns) "#f")) (_a$4009 " ") (_a$4010 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") nm)) (_a$4011 ")")) (jolt-invoke _a$4006 _a$4007 _a$4008 _a$4009 _a$4010 _a$4011)))) (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$4012 (jolt-invoke (var-deref "clojure.core" "str") "emit-quoted: unsupported quoted form " (jolt-invoke (var-deref "clojure.core" "pr-str") form))) (_a$4013 (jolt-hash-map))) (jolt-ex-info _a$4012 _a$4013))) jolt-nil)))))))))))))))) emit-quoted)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "jmeta-nonempty?" (letrec ((jmeta-nonempty? (lambda (m) (let fnrec4014 ((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 fnrec4015 ((b b)) (let* ((_a$4016 (var-deref "clojure.core" "str")) (_a$4017 "(") (_a$4018 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") (jolt-nth b 0))) (_a$4019 " ") (_a$4020 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-nth b 1))) (_a$4021 ")")) (jolt-invoke _a$4016 _a$4017 _a$4018 _a$4019 _a$4020 _a$4021)))))) emit-binding)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-let" (letrec ((emit-let (lambda (node) (let fnrec4022 ((node node)) (let* ((kw (if (jolt-truthy? (jolt-get node (keyword #f "letrec"))) "letrec*" "let*"))) (let* ((_a$4023 (var-deref "clojure.core" "str")) (_a$4024 "(") (_a$4025 kw) (_a$4026 " (") (_a$4027 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "emit-binding") (jolt-get node (keyword #f "bindings"))))) (_a$4028 ") ") (_a$4029 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$4030 ")")) (jolt-invoke _a$4023 _a$4024 _a$4025 _a$4026 _a$4027 _a$4028 _a$4029 _a$4030))))))) emit-let)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-loop" (letrec ((emit-loop (lambda (node) (let fnrec4031 ((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 fnrec4032 ((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 fnrec4033 ((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 fnrec4034 ((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 fnrec4035 ((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$4036 "int") (_o$4037 "int") (_o$4038 "uint") (_o$4039 "unsigned-int") (_o$4040 "long") (_o$4041 "long") (_o$4042 "ulong") (_o$4043 "unsigned-long") (_o$4044 "int64") (_o$4045 "integer-64") (_o$4046 "uint64") (_o$4047 "unsigned-64") (_o$4048 "size_t") (_o$4049 "size_t") (_o$4050 "ssize_t") (_o$4051 "ssize_t") (_o$4052 "iptr") (_o$4053 "iptr") (_o$4054 "uptr") (_o$4055 "uptr") (_o$4056 "double") (_o$4057 "double") (_o$4058 "float") (_o$4059 "float") (_o$4060 "pointer") (_o$4061 "void*") (_o$4062 "void*") (_o$4063 "void*") (_o$4064 "string") (_o$4065 "string") (_o$4066 "void") (_o$4067 "void") (_o$4068 "uint8") (_o$4069 "unsigned-8") (_o$4070 "u8") (_o$4071 "unsigned-8") (_o$4072 "byte") (_o$4073 "unsigned-8") (_o$4074 "char") (_o$4075 "char")) (jolt-hash-map _o$4036 _o$4037 _o$4038 _o$4039 _o$4040 _o$4041 _o$4042 _o$4043 _o$4044 _o$4045 _o$4046 _o$4047 _o$4048 _o$4049 _o$4050 _o$4051 _o$4052 _o$4053 _o$4054 _o$4055 _o$4056 _o$4057 _o$4058 _o$4059 _o$4060 _o$4061 _o$4062 _o$4063 _o$4064 _o$4065 _o$4066 _o$4067 _o$4068 _o$4069 _o$4070 _o$4071 _o$4072 _o$4073 _o$4074 _o$4075)) (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 fnrec4076 ((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$4077 (jolt-invoke (var-deref "clojure.core" "str") "jolt.ffi: unknown foreign type :" t)) (_a$4078 (jolt-hash-map))) (jolt-ex-info _a$4077 _a$4078))))))))) ffi-type->chez)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-ffi-fn" (letrec ((emit-ffi-fn (lambda (node) (let fnrec4079 ((node node)) (let* ((_a$4080 (var-deref "clojure.core" "str")) (_a$4081 "(foreign-procedure ") (_a$4082 (if (jolt-truthy? (jolt-get node (keyword #f "blocking"))) "__collect_safe " jolt-nil)) (_a$4083 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "csym")))) (_a$4084 " (") (_a$4085 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "argtypes"))))) (_a$4086 ") ") (_a$4087 (jolt-invoke (var-deref "jolt.backend-scheme" "ffi-type->chez") (jolt-get node (keyword #f "rettype")))) (_a$4088 ")")) (jolt-invoke _a$4080 _a$4081 _a$4082 _a$4083 _a$4084 _a$4085 _a$4086 _a$4087 _a$4088)))))) emit-ffi-fn)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-recur" (letrec ((emit-recur (lambda (node) (let fnrec4089 ((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$4091 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4092 arg-nodes) (_a$4093 (jolt-invoke (var-deref "clojure.core" "mapv") (var-deref "jolt.backend-scheme" "emit") arg-nodes)) (_a$4094 (lambda (as) (let fnrec4090 ((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$4091 _a$4092 _a$4093 _a$4094)))))))) emit-recur)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-arity-clause" (letrec ((emit-arity-clause (lambda (a) (let fnrec4095 ((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$4097 (jolt-map (lambda (p) (let fnrec4096 ((p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " p ")"))) params)) (_a$4098 (jolt-vector (jolt-invoke (var-deref "clojure.core" "str") "(" restp " (list->cseq " restp "))")))) (jolt-concat _a$4097 _a$4098)) (jolt-map (lambda (p) (let fnrec4099 ((p p)) (jolt-invoke (var-deref "clojure.core" "str") "(" p " " p ")"))) params)))) (let* ((_o$4100 paramlist) (_o$4101 (jolt-invoke (var-deref "clojure.core" "str") "(let " label " (" (jolt-invoke (var-deref "clojure.string" "join") " " binds) ") " body ")"))) (jolt-vector _o$4100 _o$4101))))))) emit-arity-clause)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.backend-scheme" "emit-fn" (letrec ((emit-fn (lambda (node) (let fnrec4102 ((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$4103 (var-deref "clojure.core" "str")) (_a$4104 "(lambda ") (_a$4105 (jolt-nth c 0)) (_a$4106 " ") (_a$4107 (jolt-nth c 1)) (_a$4108 ")")) (jolt-invoke _a$4103 _a$4104 _a$4105 _a$4106 _a$4107 _a$4108))) (jolt-invoke (var-deref "clojure.core" "str") "(case-lambda " (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map (lambda (c) (let fnrec4109 ((c c)) (let* ((_a$4110 (var-deref "clojure.core" "str")) (_a$4111 "(") (_a$4112 (jolt-nth c 0)) (_a$4113 " ") (_a$4114 (jolt-nth c 1)) (_a$4115 ")")) (jolt-invoke _a$4110 _a$4111 _a$4112 _a$4113 _a$4114 _a$4115)))) 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 fnrec4116 ((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 fnrec4117 ((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 fnrec4118 ((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 fnrec4119 ((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 fnrec4120 ((build build)) (jolt-invoke (var-deref "jolt.backend-scheme" "ordered-call") arg-nodes args build)))) (defstr (lambda (as) (let fnrec4121 ((as as)) (if (> (jolt-count as) 1) (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-nth as 1)) "")))) (invoke (lambda () (let fnrec4122 () (let* ((_a$4124 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4125 (jolt-cons fnode arg-nodes)) (_a$4126 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$4127 (lambda (G__36) (let fnrec4123 ((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$4124 _a$4125 _a$4126 _a$4127)))))) (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 fnrec4128 ((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 fnrec4129 ((as as)) (let* ((_a$4130 (var-deref "clojure.core" "str")) (_a$4131 "(jolt-get ") (_a$4132 (jolt-first as)) (_a$4133 " ") (_a$4134 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode)) (_a$4135 (jolt-invoke defstr as)) (_a$4136 ")")) (jolt-invoke _a$4130 _a$4131 _a$4132 _a$4133 _a$4134 _a$4135 _a$4136))))) (if (jolt= kind (keyword #f "coll")) (let* ((_a$4138 (var-deref "jolt.backend-scheme" "ordered-call")) (_a$4139 (jolt-cons fnode arg-nodes)) (_a$4140 (jolt-cons (jolt-invoke (var-deref "jolt.backend-scheme" "emit") fnode) args)) (_a$4141 (lambda (G__38) (let fnrec4137 ((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$4138 _a$4139 _a$4140 _a$4141)) (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$4148 (let* ((_a$4142 (var-deref "clojure.core" "str")) (_a$4143 "emit: unsupported stdlib fn `") (_a$4144 (jolt-get fnode (keyword #f "ns"))) (_a$4145 "/") (_a$4146 (jolt-get fnode (keyword #f "name"))) (_a$4147 "` (no core on Chez yet)")) (jolt-invoke _a$4142 _a$4143 _a$4144 _a$4145 _a$4146 _a$4147))) (_a$4149 (jolt-hash-map))) (jolt-ex-info _a$4148 _a$4149))) (if (jolt= (keyword #f "host-static") (jolt-get fnode (keyword #f "op"))) (jolt-invoke order-args (lambda (as) (let fnrec4150 ((as as)) (let* ((_a$4151 (var-deref "clojure.core" "str")) (_a$4152 "(host-static-call ") (_a$4153 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "class")))) (_a$4154 " ") (_a$4155 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get fnode (keyword #f "member")))) (_a$4156 (if (jolt-empty? as) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " as)))) (_a$4157 ")")) (jolt-invoke _a$4151 _a$4152 _a$4153 _a$4154 _a$4155 _a$4156 _a$4157))))) (if (jolt= (keyword #f "host") (jolt-get fnode (keyword #f "op"))) (jolt-throw (let* ((_a$4158 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host call `" (jolt-get fnode (keyword #f "name")) "`")) (_a$4159 (jolt-hash-map))) (jolt-ex-info _a$4158 _a$4159))) (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 fnrec4160 ((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$4161 (var-deref "clojure.core" "str")) (_a$4162 "(guard (") (_a$4163 (jolt-invoke (var-deref "jolt.backend-scheme" "munge-name") cs)) (_a$4164 " (else ") (_a$4165 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "catch-body")))) (_a$4166 ")) ") (_a$4167 (jolt-invoke (var-deref "jolt.backend-scheme" "emit") (jolt-get node (keyword #f "body")))) (_a$4168 ")")) (jolt-invoke _a$4161 _a$4162 _a$4163 _a$4164 _a$4165 _a$4166 _a$4167 _a$4168))) (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 fnrec4169 ((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$4170 (var-deref "jolt.backend-scheme" "native-op")) (_a$4171 (jolt-get node (keyword #f "fn"))) (_a$4172 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt-invoke _a$4170 _a$4171 _a$4172)))) (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 fnrec4173 ((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$4180 (let* ((_a$4174 (var-deref "clojure.core" "str")) (_a$4175 "emit: unsupported stdlib ref `") (_a$4176 (jolt-get node (keyword #f "ns"))) (_a$4177 "/") (_a$4178 (jolt-get node (keyword #f "name"))) (_a$4179 "` (no core on Chez yet)")) (jolt-invoke _a$4174 _a$4175 _a$4176 _a$4177 _a$4178 _a$4179))) (_a$4181 (jolt-hash-map))) (jolt-ex-info _a$4180 _a$4181))) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$4182 (var-deref "clojure.core" "str")) (_a$4183 "(var-deref ") (_a$4184 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4185 " ") (_a$4186 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4187 ")")) (jolt-invoke _a$4182 _a$4183 _a$4184 _a$4185 _a$4186 _a$4187)) jolt-nil)))) (if (jolt= G__40 (keyword #f "the-var")) (let* ((_a$4188 (var-deref "clojure.core" "str")) (_a$4189 "(jolt-var ") (_a$4190 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4191 " ") (_a$4192 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4193 ")")) (jolt-invoke _a$4188 _a$4189 _a$4190 _a$4191 _a$4192 _a$4193)) (if (jolt= G__40 (keyword #f "set-var")) (let* ((_a$4194 (var-deref "clojure.core" "str")) (_a$4195 "(jolt-var-set ") (_a$4196 (jolt-invoke emit (jolt-get node (keyword #f "the-var")))) (_a$4197 " ") (_a$4198 (jolt-invoke emit (jolt-get node (keyword #f "val")))) (_a$4199 ")")) (jolt-invoke _a$4194 _a$4195 _a$4196 _a$4197 _a$4198 _a$4199)) (if (jolt= G__40 (keyword #f "set-field")) (let* ((_a$4200 (var-deref "clojure.core" "str")) (_a$4201 "(jolt-set-field! ") (_a$4202 (jolt-invoke emit (jolt-get node (keyword #f "obj")))) (_a$4203 " (keyword #f ") (_a$4204 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "field")))) (_a$4205 ") ") (_a$4206 (jolt-invoke emit (jolt-get node (keyword #f "val")))) (_a$4207 ")")) (jolt-invoke _a$4200 _a$4201 _a$4202 _a$4203 _a$4204 _a$4205 _a$4206 _a$4207)) (if (jolt= G__40 (keyword #f "defmacro")) (let* ((_a$4208 (var-deref "clojure.core" "str")) (_a$4209 "(begin (def-var! ") (_a$4210 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4211 " ") (_a$4212 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4213 " ") (_a$4214 (jolt-invoke emit (jolt-get node (keyword #f "fn")))) (_a$4215 ") (mark-macro! ") (_a$4216 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4217 " ") (_a$4218 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4219 ") jolt-nil)")) (jolt-invoke _a$4208 _a$4209 _a$4210 _a$4211 _a$4212 _a$4213 _a$4214 _a$4215 _a$4216 _a$4217 _a$4218 _a$4219)) (if (jolt= G__40 (keyword #f "host")) (jolt-throw (let* ((_a$4220 (jolt-invoke (var-deref "clojure.core" "str") "emit: unsupported host ref `" (jolt-get node (keyword #f "name")) "`")) (_a$4221 (jolt-hash-map))) (jolt-ex-info _a$4220 _a$4221))) (if (jolt= G__40 (keyword #f "host-static")) (let* ((_a$4222 (var-deref "clojure.core" "str")) (_a$4223 "(host-static-ref ") (_a$4224 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$4225 " ") (_a$4226 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "member")))) (_a$4227 ")")) (jolt-invoke _a$4222 _a$4223 _a$4224 _a$4225 _a$4226 _a$4227)) (if (jolt= G__40 (keyword #f "host-new")) (let* ((_a$4228 (var-deref "clojure.core" "str")) (_a$4229 "(host-new ") (_a$4230 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "class")))) (_a$4231 (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$4232 ")")) (jolt-invoke _a$4228 _a$4229 _a$4230 _a$4231 _a$4232)) (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$4233 (var-deref "clojure.core" "str")) (_a$4234 "(if ") (_a$4235 t) (_a$4236 " ") (_a$4237 (jolt-invoke emit (jolt-get node (keyword #f "then")))) (_a$4238 " ") (_a$4239 (jolt-invoke emit (jolt-get node (keyword #f "else")))) (_a$4240 ")")) (jolt-invoke _a$4233 _a$4234 _a$4235 _a$4236 _a$4237 _a$4238 _a$4239 _a$4240))) (if (jolt= G__40 (keyword #f "do")) (let* ((_a$4241 (var-deref "clojure.core" "str")) (_a$4242 "(begin ") (_a$4243 (jolt-invoke (var-deref "clojure.string" "join") " " (jolt-map emit (jolt-get node (keyword #f "statements"))))) (_a$4244 (if (jolt-empty? (jolt-get node (keyword #f "statements"))) "" " ")) (_a$4245 (jolt-invoke emit (jolt-get node (keyword #f "ret")))) (_a$4246 ")")) (jolt-invoke _a$4241 _a$4242 _a$4243 _a$4244 _a$4245 _a$4246)) (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$4250 (var-deref "clojure.core" "mapcat")) (_a$4251 (lambda (p) (let fnrec4247 ((p p)) (let* ((_o$4248 (jolt-invoke emit (jolt-nth p 0))) (_o$4249 (jolt-invoke emit (jolt-nth p 1)))) (jolt-vector _o$4248 _o$4249))))) (_a$4252 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$4250 _a$4251 _a$4252))) (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$4253 (var-deref "clojure.core" "str")) (_a$4254 "(jolt-host-call ") (_a$4255 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$4256 " ") (_a$4257 target) (_a$4258 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$4259 ")")) (jolt-invoke _a$4253 _a$4254 _a$4255 _a$4256 _a$4257 _a$4258 _a$4259)) (let* ((_a$4260 (var-deref "clojure.core" "str")) (_a$4261 "(record-method-dispatch ") (_a$4262 target) (_a$4263 " ") (_a$4264 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") m)) (_a$4265 " (jolt-vector") (_a$4266 (if (jolt-empty? args) "" (jolt-invoke (var-deref "clojure.core" "str") " " (jolt-invoke (var-deref "clojure.string" "join") " " args)))) (_a$4267 "))")) (jolt-invoke _a$4260 _a$4261 _a$4262 _a$4263 _a$4264 _a$4265 _a$4266 _a$4267)))) (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$4268 (var-deref "clojure.core" "str")) (_a$4269 "(declare-var! ") (_a$4270 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4271 " ") (_a$4272 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4273 ")")) (jolt-invoke _a$4268 _a$4269 _a$4270 _a$4271 _a$4272 _a$4273)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.backend-scheme" "jmeta-nonempty?") (jolt-get node (keyword #f "meta")))) (let* ((_a$4274 (var-deref "clojure.core" "str")) (_a$4275 "(def-var-with-meta! ") (_a$4276 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4277 " ") (_a$4278 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4279 " ") (_a$4280 (jolt-invoke emit (jolt-get node (keyword #f "init")))) (_a$4281 " ") (_a$4282 (jolt-invoke (var-deref "jolt.backend-scheme" "emit-quoted") (jolt-get node (keyword #f "meta")))) (_a$4283 ")")) (jolt-invoke _a$4274 _a$4275 _a$4276 _a$4277 _a$4278 _a$4279 _a$4280 _a$4281 _a$4282 _a$4283)) (if (jolt-truthy? (keyword #f "else")) (let* ((_a$4284 (var-deref "clojure.core" "str")) (_a$4285 "(def-var! ") (_a$4286 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "ns")))) (_a$4287 " ") (_a$4288 (jolt-invoke (var-deref "jolt.backend-scheme" "chez-str-lit") (jolt-get node (keyword #f "name")))) (_a$4289 " ") (_a$4290 (jolt-invoke emit (jolt-get node (keyword #f "init")))) (_a$4291 ")")) (jolt-invoke _a$4284 _a$4285 _a$4286 _a$4287 _a$4288 _a$4289 _a$4290 _a$4291)) jolt-nil))) (jolt-throw (let* ((_a$4292 (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$4293 (jolt-hash-map))) (jolt-ex-info _a$4292 _a$4293))))))))))))))))))))))))))))))))))))))) emit)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.fold" "foldable" (let* ((_o$4294 "+") (_o$4295 jolt-add) (_o$4296 "-") (_o$4297 jolt-sub) (_o$4298 "*") (_o$4299 jolt-mul) (_o$4300 "/") (_o$4301 jolt-div) (_o$4302 "<") (_o$4303 <) (_o$4304 ">") (_o$4305 >) (_o$4306 "<=") (_o$4307 <=) (_o$4308 ">=") (_o$4309 >=) (_o$4310 "=") (_o$4311 jolt=) (_o$4312 "inc") (_o$4313 jolt-inc) (_o$4314 "dec") (_o$4315 jolt-dec) (_o$4316 "mod") (_o$4317 modulo) (_o$4318 "rem") (_o$4319 remainder) (_o$4320 "quot") (_o$4321 quotient) (_o$4322 "bit-and") (_o$4323 (var-deref "clojure.core" "__bit-and")) (_o$4324 "bit-or") (_o$4325 (var-deref "clojure.core" "__bit-or")) (_o$4326 "bit-xor") (_o$4327 (var-deref "clojure.core" "__bit-xor"))) (jolt-hash-map _o$4294 _o$4295 _o$4296 _o$4297 _o$4298 _o$4299 _o$4300 _o$4301 _o$4302 _o$4303 _o$4304 _o$4305 _o$4306 _o$4307 _o$4308 _o$4309 _o$4310 _o$4311 _o$4312 _o$4313 _o$4314 _o$4315 _o$4316 _o$4317 _o$4318 _o$4319 _o$4320 _o$4321 _o$4322 _o$4323 _o$4324 _o$4325 _o$4326 _o$4327)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.fold" "const?" (letrec ((const? (lambda (n) (let fnrec4328 ((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 fnrec4329 ((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 fnrec4330 ((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 fnrec4331 ((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$4333 (keyword #f "op")) (_o$4334 (keyword #f "const")) (_o$4335 (keyword #f "val")) (_o$4336 (jolt-apply ff (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec4332 ((a a)) (jolt-get a (keyword #f "val")))) args)))) (jolt-hash-map _o$4333 _o$4334 _o$4335 _o$4336))) 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$4337 node) (_a$4338 (keyword #f "test")) (_a$4339 t) (_a$4340 (keyword #f "then")) (_a$4341 (jolt-invoke const-fold (jolt-get node (keyword #f "then")))) (_a$4342 (keyword #f "else")) (_a$4343 (jolt-invoke const-fold (jolt-get node (keyword #f "else"))))) (jolt-assoc _a$4337 _a$4338 _a$4339 _a$4340 _a$4341 _a$4342 _a$4343)))) (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 fnrec4344 ((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)) (if (jolt-not (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") (jolt-get node (keyword #f "op")))) 100000 (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (acc c) (let fnrec2883 ((acc acc) (c c)) (+ acc (jolt-invoke body-size c)))) 1 node)))))) body-size)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "subst" (letrec ((subst (lambda (node env) (let fnrec2884 ((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$2896 (lambda (acc b) (let fnrec2885 ((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$2892 (jolt-assoc e nm (let* ((_o$2886 (keyword #f "op")) (_o$2887 (keyword #f "local")) (_o$2888 (keyword #f "name")) (_o$2889 f)) (jolt-hash-map _o$2886 _o$2887 _o$2888 _o$2889)))) (_o$2893 (jolt-conj binds (let* ((_o$2890 f) (_o$2891 init)) (jolt-vector _o$2890 _o$2891))))) (jolt-vector _o$2892 _o$2893)))))) (_a$2897 (let* ((_o$2894 env) (_o$2895 (jolt-vector))) (jolt-vector _o$2894 _o$2895))) (_a$2898 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2896 _a$2897 _a$2898)))) (let* ((_a$2902 node) (_a$2903 (keyword #f "bindings")) (_a$2904 (jolt-nth res 1)) (_a$2905 (keyword #f "body")) (_a$2906 (let* ((_a$2899 subst) (_a$2900 (jolt-get node (keyword #f "body"))) (_a$2901 (jolt-nth res 0))) (jolt-invoke _a$2899 _a$2900 _a$2901)))) (jolt-assoc _a$2902 _a$2903 _a$2904 _a$2905 _a$2906))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2907 ((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 fnrec2908 ((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 fnrec2909 ((node node) (scope scope)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "local")) (jolt-contains? scope (jolt-get node (keyword #f "name"))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$2915 (lambda (acc b) (let fnrec2910 ((acc acc) (b b)) (let* ((sc (jolt-nth acc 0)) (ok (jolt-nth acc 1))) (if (jolt-not ok) acc (let* ((_o$2911 (jolt-conj sc (jolt-nth b 0))) (_o$2912 (jolt-invoke body-closed? (jolt-nth b 1) sc))) (jolt-vector _o$2911 _o$2912))))))) (_a$2916 (let* ((_o$2913 scope) (_o$2914 #t)) (jolt-vector _o$2913 _o$2914))) (_a$2917 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$2915 _a$2916 _a$2917)))) (let* ((and__13__auto (jolt-nth res 1))) (if (jolt-truthy? and__13__auto) (let* ((_a$2918 body-closed?) (_a$2919 (jolt-get node (keyword #f "body"))) (_a$2920 (jolt-nth res 0))) (jolt-invoke _a$2918 _a$2919 _a$2920)) and__13__auto))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec2921 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke body-closed? c scope) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil))))))))) body-closed?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "try-inline" (letrec ((try-inline (lambda (node ctx) (let fnrec2922 ((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$2923 (var-deref "jolt.host" "inline-ir")) (_a$2924 ctx) (_a$2925 (jolt-get f (keyword #f "ns"))) (_a$2926 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$2923 _a$2924 _a$2925 _a$2926)))) (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$2927 (jolt-count params)) (_a$2928 (jolt-count args))) (jolt= _a$2927 _a$2928)))) (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 loop2929 ((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$2930 (jolt-inc i)) (_a$2931 (jolt-assoc env p a)) (_a$2932 binds)) (loop2929 _a$2930 _a$2931 _a$2932)) (let* ((f (jolt-invoke (var-deref "jolt.passes.inline" "fresh") p))) (let* ((_a$2939 (jolt-inc i)) (_a$2940 (jolt-assoc env p (let* ((_o$2933 (keyword #f "op")) (_o$2934 (keyword #f "local")) (_o$2935 (keyword #f "name")) (_o$2936 f)) (jolt-hash-map _o$2933 _o$2934 _o$2935 _o$2936)))) (_a$2941 (jolt-conj binds (let* ((_o$2937 f) (_o$2938 a)) (jolt-vector _o$2937 _o$2938))))) (loop2929 _a$2939 _a$2940 _a$2941))))) (let* ((_o$2942 env) (_o$2943 binds)) (jolt-vector _o$2942 _o$2943)))))) (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$2944 (keyword #f "op")) (_o$2945 (keyword #f "let")) (_o$2946 (keyword #f "bindings")) (_o$2947 binds) (_o$2948 (keyword #f "body")) (_o$2949 rbody)) (jolt-hash-map _o$2944 _o$2945 _o$2946 _o$2947 _o$2948 _o$2949))))) node)) node)) node)))))) try-inline)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "inline-node" (letrec ((inline-node (lambda (node ctx) (let fnrec2950 ((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 fnrec2951 ((c c)) (jolt-invoke inline-node c ctx))) node) ctx) (jolt-invoke (var-deref "jolt.ir" "map-ir-children") (lambda (c) (let fnrec2952 ((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 fnrec2953 ((binds binds)) (let* ((_a$2959 (lambda (out b) (let fnrec2954 ((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$2957 (jolt-reduce jolt-conj out (jolt-get init (keyword #f "bindings")))) (_a$2958 (let* ((_o$2955 nm) (_o$2956 (jolt-get init (keyword #f "body")))) (jolt-vector _o$2955 _o$2956)))) (jolt-conj _a$2957 _a$2958))) (jolt-conj out b)))))) (_a$2960 (jolt-vector)) (_a$2961 binds)) (jolt-reduce _a$2959 _a$2960 _a$2961)))))) flatten-let-bindings)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "flatten-lets" (letrec ((flatten-lets (lambda (node) (let fnrec2962 ((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$2963 "+") (_o$2964 "-") (_o$2965 "*") (_o$2966 "/") (_o$2967 "<") (_o$2968 ">") (_o$2969 "<=") (_o$2970 ">=") (_o$2971 "=") (_o$2972 "not=") (_o$2973 "inc") (_o$2974 "dec") (_o$2975 "mod") (_o$2976 "rem") (_o$2977 "quot") (_o$2978 "min") (_o$2979 "max") (_o$2980 "abs") (_o$2981 "nil?") (_o$2982 "some?") (_o$2983 "not") (_o$2984 "get") (_o$2985 "zero?") (_o$2986 "pos?") (_o$2987 "neg?") (_o$2988 "even?") (_o$2989 "odd?") (_o$2990 "bit-and") (_o$2991 "bit-or") (_o$2992 "bit-xor")) (jolt-hash-set _o$2963 _o$2964 _o$2965 _o$2966 _o$2967 _o$2968 _o$2969 _o$2970 _o$2971 _o$2972 _o$2973 _o$2974 _o$2975 _o$2976 _o$2977 _o$2978 _o$2979 _o$2980 _o$2981 _o$2982 _o$2983 _o$2984 _o$2985 _o$2986 _o$2987 _o$2988 _o$2989 _o$2990 _o$2991 _o$2992)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "pure-fn?" (letrec ((pure-fn? (lambda (f) (let fnrec2993 ((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 fnrec2994 ((node node)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "invoke")) (let* ((and__13__auto (let* ((or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "pure-fn?") (jolt-get node (keyword #f "fn"))))) (if (jolt-truthy? or__14__auto) or__14__auto (jolt-invoke (var-deref "jolt.passes.inline" "ctor-shape") node))))) (if (jolt-truthy? and__13__auto) (jolt-invoke (var-deref "clojure.core" "every?") pure? (jolt-get node (keyword #f "args"))) and__13__auto)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.inline" "safe-op?") op)) (jolt-invoke (var-deref "jolt.ir" "reduce-ir-children") (lambda (ok c) (let fnrec2995 ((ok ok) (c c)) (let* ((and__13__auto ok)) (if (jolt-truthy? and__13__auto) (jolt-invoke pure? c) and__13__auto)))) #t node) (if (jolt-truthy? (keyword #f "else")) #f jolt-nil)))))))) pure?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "const-key-map?" (letrec ((const-key-map? (lambda (node) (let fnrec2996 ((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 fnrec2997 ((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 fnrec2998 ((node node)) (let* ((_a$3000 (var-deref "clojure.core" "every?")) (_a$3001 (lambda (pr) (let fnrec2999 ((pr pr)) (jolt-invoke (var-deref "jolt.passes.inline" "pure?") (jolt-nth pr 1))))) (_a$3002 (jolt-get node (keyword #f "pairs")))) (jolt-invoke _a$3000 _a$3001 _a$3002)))))) all-vals-pure?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "map-val" (letrec ((map-val (lambda (mapnode k) (let fnrec3003 ((mapnode mapnode) (k k)) (let* ((prs (jolt-get mapnode (keyword #f "pairs"))) (n (jolt-count prs))) (let* ((i 0)) (let loop3004 ((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) (loop3004 (jolt-inc i)))) (let* ((_o$3005 (keyword #f "op")) (_o$3006 (keyword #f "const")) (_o$3007 (keyword #f "val")) (_o$3008 jolt-nil)) (jolt-hash-map _o$3005 _o$3006 _o$3007 _o$3008)))))))))) map-val)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "lookup-key" (letrec ((lookup-key (lambda (node nm) (let fnrec3009 ((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 fnrec3010 ((binds binds) (nm nm)) (let* ((i 0)) (let loop3011 ((i i)) (if (< i (jolt-count binds)) (if (jolt= nm (jolt-nth (jolt-nth binds i) 0)) #t (loop3011 (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 fnrec3012 ((names names) (nm nm)) (let* ((i 0)) (let loop3013 ((i i)) (if (< i (jolt-count names)) (if (jolt= nm (jolt-nth names i)) #t (loop3013 (jolt-inc i))) #f))))))) any-name?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "local-escapes?" (letrec ((local-escapes? (lambda (node nm) (let fnrec3014 ((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 loop3015 ((i i)) (if (< i (jolt-count args)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth args i) nm)) #t (loop3015 (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 loop3016 ((i i) (ss ss)) (if (< i (jolt-count ss)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth ss i) nm)) #t (loop3016 (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 loop3017 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3017 (jolt-inc i) as)) #f))))) (if (jolt= op (keyword #f "vector")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3018 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3018 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "set")) (let* ((i 0) (xs (jolt-get node (keyword #f "items")))) (let loop3019 ((i i) (xs xs)) (if (< i (jolt-count xs)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth xs i) nm)) #t (loop3019 (jolt-inc i) xs)) #f))) (if (jolt= op (keyword #f "map")) (let* ((i 0) (ps (jolt-get node (keyword #f "pairs")))) (let loop3020 ((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 (loop3020 (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 loop3021 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3021 (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 loop3022 ((i i) (as as)) (if (< i (jolt-count as)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth as i) nm)) #t (loop3022 (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 loop3023 ((i i)) (if (< i (jolt-count binds)) (if (jolt-truthy? (jolt-invoke local-escapes? (jolt-nth (jolt-nth binds i) 1) nm)) #t (loop3023 (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 loop3024 ((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 (loop3024 (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 fnrec3025 ((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$3030 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.inline" "rec-shapes"))) (_a$3031 (let* ((_a$3026 (var-deref "clojure.core" "str")) (_a$3027 (jolt-get f (keyword #f "ns"))) (_a$3028 "/") (_a$3029 (jolt-get f (keyword #f "name")))) (jolt-invoke _a$3026 _a$3027 _a$3028 _a$3029)))) (jolt-get _a$3030 _a$3031)))) (if (jolt-truthy? (let* ((and__13__auto rs)) (if (jolt-truthy? and__13__auto) (let* ((_a$3032 (jolt-count (jolt-get rs (keyword #f "fields")))) (_a$3033 (jolt-count (jolt-get node (keyword #f "args"))))) (jolt= _a$3032 _a$3033)) 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 fnrec3034 ((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 fnrec3035 ((fields fields) (k k)) (let* ((n (jolt-count fields))) (let* ((i 0)) (let loop3036 ((i i)) (if (< i n) (if (jolt= (jolt-nth fields i) k) i (loop3036 (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 fnrec3037 ((ctor ctor) (rs rs) (k k)) (let* ((_a$3038 (jolt-get ctor (keyword #f "args"))) (_a$3039 (jolt-invoke (var-deref "jolt.passes.inline" "field-index") (jolt-get rs (keyword #f "fields")) k))) (jolt-nth _a$3038 _a$3039)))))) ctor-val)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "collect-keys!" (letrec ((collect-keys! (lambda (node nm acc) (let fnrec3040 ((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 fnrec3041 ((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 fnrec3042 ((nodes nodes) (nm nm) (fields fields)) (jolt-invoke (var-deref "clojure.core" "every?") (lambda (node) (let fnrec3043 ((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$3045 (var-deref "clojure.core" "every?")) (_a$3046 (lambda (k) (let fnrec3044 ((k k)) (jolt-invoke (var-deref "jolt.passes.inline" "field-index") fields k)))) (_a$3047 (jolt-invoke (var-deref "clojure.core" "deref") acc))) (jolt-invoke _a$3045 _a$3046 _a$3047)))))) nodes))))) lookups-all-fields?)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "src-val" (letrec ((src-val (lambda (src k) (let fnrec3048 ((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 fnrec3049 ((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 fnrec3050 ((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 fnrec3051 ((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 fnrec3052 ((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 loop3053 ((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 loop3054 ((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 (loop3054 (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$3059 (var-deref "jolt.passes.inline" "lookups-all-fields?")) (_a$3060 (jolt-conj (let* ((_a$3056 (var-deref "clojure.core" "mapv")) (_a$3057 (lambda (bb) (let fnrec3055 ((bb bb)) (jolt-nth bb 1)))) (_a$3058 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3056 _a$3057 _a$3058)) body)) (_a$3061 nm) (_a$3062 (jolt-get rs (keyword #f "fields")))) (jolt-invoke _a$3059 _a$3060 _a$3061 _a$3062)))) 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$3066 (var-deref "clojure.core" "mapv")) (_a$3067 (lambda (bb) (let fnrec3063 ((bb bb)) (let* ((_o$3064 (jolt-nth bb 0)) (_o$3065 (jolt-invoke (var-deref "jolt.passes.inline" "subst-lookup") (jolt-nth bb 1) nm init))) (jolt-vector _o$3064 _o$3065))))) (_a$3068 (jolt-invoke (var-deref "clojure.core" "subvec") binds (jolt-inc i) n))) (jolt-invoke _a$3066 _a$3067 _a$3068))) (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)))) (loop3053 (jolt-inc i)))) node)))))))) elim-let-structs)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.inline" "scalar-replace" (letrec ((scalar-replace (lambda (node) (let fnrec3069 ((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 fnrec3070 ((t t)) (jolt-get t (keyword #f "vec")))))) velem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "selem" (letrec ((selem (lambda (t) (let fnrec3071 ((t t)) (jolt-get t (keyword #f "set")))))) selem)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "sfields" (letrec ((sfields (lambda (t) (let fnrec3072 ((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 fnrec3073 ((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 fnrec3074 ((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 fnrec3075 ((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 fnrec3076 ((t t)) (let* ((_o$3077 (keyword #f "vec")) (_o$3078 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3077 _o$3078)))))) mk-vec)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mk-set" (letrec ((mk-set (lambda (t) (let fnrec3079 ((t t)) (let* ((_o$3080 (keyword #f "set")) (_o$3081 (if (jolt-truthy? t) t (keyword #f "any")))) (jolt-hash-map _o$3080 _o$3081)))))) mk-set)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "mk-struct" (letrec ((mk-struct (lambda (fs) (let fnrec3082 ((fs fs)) (let* ((_o$3083 (keyword #f "struct")) (_o$3084 fs)) (jolt-hash-map _o$3083 _o$3084)))))) 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 fnrec3085 ((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 fnrec3086 ((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 fnrec3087 ((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 fnrec3088 ((ts ts)) (let* ((flat (let* ((_a$3090 (lambda (acc t) (let fnrec3089 ((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$3091 (jolt-hash-set)) (_a$3092 ts)) (jolt-reduce _a$3090 _a$3091 _a$3092)))) (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$3093 (keyword #f "union")) (_o$3094 flat)) (jolt-hash-map _o$3093 _o$3094)) 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 fnrec3095 ((fa fa) (fb fb)) (let* ((m1 (let* ((_a$3100 (lambda (m k) (let fnrec3096 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3097 (var-deref "jolt.passes.types" "join-t")) (_a$3098 (jolt-get fa k (keyword #f "any"))) (_a$3099 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3097 _a$3098 _a$3099)))))) (_a$3101 (jolt-hash-map)) (_a$3102 (jolt-keys fa))) (jolt-reduce _a$3100 _a$3101 _a$3102)))) (let* ((_a$3107 (lambda (m k) (let fnrec3103 ((m m) (k k)) (if (jolt-truthy? (jolt-get m k)) m (jolt-assoc m k (let* ((_a$3104 (var-deref "jolt.passes.types" "join-t")) (_a$3105 (jolt-get fa k (keyword #f "any"))) (_a$3106 (jolt-get fb k (keyword #f "any")))) (jolt-invoke _a$3104 _a$3105 _a$3106))))))) (_a$3108 m1) (_a$3109 (jolt-keys fb))) (jolt-reduce _a$3107 _a$3108 _a$3109))))))) merge-fields)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "join-t" (letrec ((join-t (lambda (a b) (let fnrec3110 ((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$3111 (var-deref "jolt.passes.types" "merge-fields")) (_a$3112 (jolt-invoke (var-deref "jolt.passes.types" "sfields") a)) (_a$3113 (jolt-invoke (var-deref "jolt.passes.types" "sfields") b))) (jolt-invoke _a$3111 _a$3112 _a$3113))))) (if (jolt-truthy? (let* ((and__13__auto (jolt-get a (keyword #f "shape")))) (if (jolt-truthy? and__13__auto) (let* ((_a$3114 (jolt-get a (keyword #f "shape"))) (_a$3115 (jolt-get b (keyword #f "shape")))) (jolt= _a$3114 _a$3115)) 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$3116 join-t) (_a$3117 (jolt-invoke (var-deref "jolt.passes.types" "velem") a)) (_a$3118 (jolt-invoke (var-deref "jolt.passes.types" "velem") b))) (jolt-invoke _a$3116 _a$3117 _a$3118))) (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$3119 join-t) (_a$3120 (jolt-invoke (var-deref "jolt.passes.types" "selem") a)) (_a$3121 (jolt-invoke (var-deref "jolt.passes.types" "selem") b))) (jolt-invoke _a$3119 _a$3120 _a$3121))) (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 fnrec3122 ((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 fnrec3123 ((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$3128 (lambda (m k) (let fnrec3124 ((m m) (k k)) (jolt-assoc m k (let* ((_a$3125 cap) (_a$3126 (jolt-get (jolt-invoke (var-deref "jolt.passes.types" "sfields") t) k)) (_a$3127 (jolt-dec d))) (jolt-invoke _a$3125 _a$3126 _a$3127)))))) (_a$3129 (jolt-hash-map)) (_a$3130 (jolt-keys (jolt-invoke (var-deref "jolt.passes.types" "sfields") t)))) (jolt-reduce _a$3128 _a$3129 _a$3130)))) (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$3131 cap) (_a$3132 (jolt-invoke (var-deref "jolt.passes.types" "velem") t)) (_a$3133 (jolt-dec d))) (jolt-invoke _a$3131 _a$3132 _a$3133))) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "set-type?") t)) (jolt-invoke (var-deref "jolt.passes.types" "mk-set") (let* ((_a$3134 cap) (_a$3135 (jolt-invoke (var-deref "jolt.passes.types" "selem") t)) (_a$3136 (jolt-dec d))) (jolt-invoke _a$3134 _a$3135 _a$3136))) (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 fnrec3137 ((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 fnrec3138 ((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 fnrec3139 ((ks ks)) (jolt-invoke (var-deref "clojure.core" "vec") (jolt-invoke (var-deref "clojure.core" "sort") (lambda (a b) (let fnrec3140 ((a a) (b b)) (let* ((_a$3141 (var-deref "clojure.core" "compare")) (_a$3142 (jolt-invoke (var-deref "clojure.core" "str") a)) (_a$3143 (jolt-invoke (var-deref "clojure.core" "str") b))) (jolt-invoke _a$3141 _a$3142 _a$3143)))) ks)))))) shape-order)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "type-shape" (letrec ((type-shape (lambda (t) (let fnrec3144 ((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 fnrec3145 ((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 fnrec3146 ((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$3147 "+") (_o$3148 "-") (_o$3149 "*") (_o$3150 "/") (_o$3151 "inc") (_o$3152 "dec") (_o$3153 "mod") (_o$3154 "rem") (_o$3155 "quot") (_o$3156 "min") (_o$3157 "max") (_o$3158 "abs") (_o$3159 "bit-and") (_o$3160 "bit-or") (_o$3161 "bit-xor") (_o$3162 "count")) (jolt-hash-set _o$3147 _o$3148 _o$3149 _o$3150 _o$3151 _o$3152 _o$3153 _o$3154 _o$3155 _o$3156 _o$3157 _o$3158 _o$3159 _o$3160 _o$3161 _o$3162)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "vector-ret-fns" (let* ((_o$3163 "vec") (_o$3164 "vector") (_o$3165 "mapv") (_o$3166 "filterv") (_o$3167 "subvec")) (jolt-hash-set _o$3163 _o$3164 _o$3165 _o$3166 _o$3167)) (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 fnrec3168 ((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 fnrec3169 ((rs rs) (depth depth)) (let* ((fields (jolt-get rs (keyword #f "fields"))) (tags (jolt-get rs (keyword #f "tags"))) (fmap (let* ((_a$3177 (lambda (m i) (let fnrec3170 ((m m) (i i)) (let* ((_a$3174 m) (_a$3175 (jolt-nth fields i)) (_a$3176 (let* ((_a$3171 (var-deref "jolt.passes.types" "field-type-from-tag")) (_a$3172 (if (jolt-truthy? tags) (jolt-nth tags i) jolt-nil)) (_a$3173 (jolt-dec depth))) (jolt-invoke _a$3171 _a$3172 _a$3173)))) (jolt-assoc _a$3174 _a$3175 _a$3176))))) (_a$3178 (jolt-hash-map)) (_a$3179 (jolt-range (jolt-count fields)))) (jolt-reduce _a$3177 _a$3178 _a$3179)))) (let* ((_a$3180 (jolt-invoke (var-deref "jolt.passes.types" "mk-struct") fmap)) (_a$3181 (keyword #f "shape")) (_a$3182 (jolt-invoke (var-deref "clojure.core" "vec") fields)) (_a$3183 (keyword #f "type")) (_a$3184 (jolt-get rs (keyword #f "type")))) (jolt-assoc _a$3180 _a$3181 _a$3182 _a$3183 _a$3184))))))) 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$3185 "rand-nth") (_o$3186 "first") (_o$3187 "peek") (_o$3188 "last") (_o$3189 "nth") (_o$3190 "fnext") (_o$3191 "second")) (jolt-hash-set _o$3185 _o$3186 _o$3187 _o$3188 _o$3189 _o$3190 _o$3191)) (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 fnrec3192 ((fnode fnode)) (let* ((_a$3193 (var-deref "clojure.core" "str")) (_a$3194 (jolt-get fnode (keyword #f "ns"))) (_a$3195 "/") (_a$3196 (jolt-get fnode (keyword #f "name")))) (jolt-invoke _a$3193 _a$3194 _a$3195 _a$3196)))))) var-key)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "call-ret-type" (letrec ((call-ret-type (lambda (fnode) (let fnrec3197 ((fnode fnode)) (let* ((op (jolt-get fnode (keyword #f "op")))) (if (jolt= op (keyword #f "var")) (let* ((rs (let* ((_a$3198 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3199 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3198 _a$3199)))) (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$3200 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "rtenv-box"))) (_a$3201 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3200 _a$3201)))) (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$3202 "number?") (_o$3203 "string?") (_o$3204 "keyword?") (_o$3205 "record?") (_o$3206 "nil?") (_o$3207 "some?")) (jolt-hash-set _o$3202 _o$3203 _o$3204 _o$3205 _o$3206 _o$3207)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "record-t?" (letrec ((record-t? (lambda (t) (let fnrec3208 ((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 fnrec3209 ((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$3211 (lambda (m) (let fnrec3210 ((m m)) (jolt-invoke pred-on pname m)))) (_a$3212 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-map _a$3211 _a$3212)))) (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 fnrec3213 ((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$3230 "map") (_o$3231 (let* ((_o$3214 (keyword #f "epos")) (_o$3215 0)) (jolt-hash-map _o$3214 _o$3215))) (_o$3232 "mapv") (_o$3233 (let* ((_o$3216 (keyword #f "epos")) (_o$3217 0)) (jolt-hash-map _o$3216 _o$3217))) (_o$3234 "filter") (_o$3235 (let* ((_o$3218 (keyword #f "epos")) (_o$3219 0)) (jolt-hash-map _o$3218 _o$3219))) (_o$3236 "filterv") (_o$3237 (let* ((_o$3220 (keyword #f "epos")) (_o$3221 0)) (jolt-hash-map _o$3220 _o$3221))) (_o$3238 "keep") (_o$3239 (let* ((_o$3222 (keyword #f "epos")) (_o$3223 0)) (jolt-hash-map _o$3222 _o$3223))) (_o$3240 "remove") (_o$3241 (let* ((_o$3224 (keyword #f "epos")) (_o$3225 0)) (jolt-hash-map _o$3224 _o$3225))) (_o$3242 "run!") (_o$3243 (let* ((_o$3226 (keyword #f "epos")) (_o$3227 0)) (jolt-hash-map _o$3226 _o$3227))) (_o$3244 "mapcat") (_o$3245 (let* ((_o$3228 (keyword #f "epos")) (_o$3229 0)) (jolt-hash-map _o$3228 _o$3229)))) (jolt-hash-map _o$3230 _o$3231 _o$3232 _o$3233 _o$3234 _o$3235 _o$3236 _o$3237 _o$3238 _o$3239 _o$3240 _o$3241 _o$3242 _o$3243 _o$3244 _o$3245)) (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 fnrec3246 ((node node) (seeds seeds) (tenv tenv)) (let* ((res (let* ((_a$3257 (var-deref "clojure.core" "mapv")) (_a$3258 (lambda (a) (let fnrec3247 ((a a)) (let* ((params (jolt-get a (keyword #f "params"))) (pe (let* ((_a$3252 (lambda (e i) (let fnrec3248 ((e e) (i i)) (let* ((_a$3249 e) (_a$3250 (jolt-nth params i)) (_a$3251 (let* ((s (jolt-get seeds i))) (if (jolt-truthy? s) s (keyword #f "any"))))) (jolt-assoc _a$3249 _a$3250 _a$3251))))) (_a$3253 tenv) (_a$3254 (jolt-range (jolt-count params)))) (jolt-reduce _a$3252 _a$3253 _a$3254))) (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$3255 (jolt-nth br 0)) (_o$3256 (jolt-assoc a (keyword #f "body") (jolt-nth br 1)))) (jolt-vector _o$3255 _o$3256)))))) (_a$3259 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3257 _a$3258 _a$3259))) (rets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3260 ((r r)) (jolt-nth r 0))) res)) (ret (if (jolt-empty? rets) (keyword #f "any") (let* ((_a$3261 (var-deref "jolt.passes.types" "join")) (_a$3262 (jolt-first rets)) (_a$3263 (jolt-rest rets))) (jolt-reduce _a$3261 _a$3262 _a$3263))))) (let* ((_o$3265 ret) (_o$3266 (jolt-assoc node (keyword #f "arities") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3264 ((r r)) (jolt-nth r 1))) res)))) (jolt-vector _o$3265 _o$3266))))))) infer-fn-seeded)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer" (letrec ((infer (lambda (node tenv) (let fnrec3267 ((node node) (tenv tenv)) (let* ((op (jolt-get node (keyword #f "op")))) (if (jolt= op (keyword #f "const")) (let* ((_o$3268 (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$3269 node)) (jolt-vector _o$3268 _o$3269)) (if (jolt= op (keyword #f "local")) (let* ((t (jolt-get tenv (jolt-get node (keyword #f "name"))))) (let* ((_o$3270 (if (jolt-truthy? t) t (keyword #f "any"))) (_o$3271 (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$3270 _o$3271))) (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 fnrec3272 ((pr pr)) (let* ((kr (jolt-invoke infer (jolt-nth pr 0) tenv)) (vr (jolt-invoke infer (jolt-nth pr 1) tenv))) (let* ((_o$3273 (jolt-nth kr 1)) (_o$3274 (jolt-nth vr 1)) (_o$3275 (jolt-nth vr 0)) (_o$3276 (jolt-get (jolt-nth pr 0) (keyword #f "val")))) (jolt-vector _o$3273 _o$3274 _o$3275 _o$3276))))) 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 fnrec3277 ((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 fnrec3278 ((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$3283 (lambda (m r) (let fnrec3279 ((m m) (r r)) (let* ((_a$3280 m) (_a$3281 (jolt-nth r 3)) (_a$3282 (jolt-nth r 2))) (jolt-assoc _a$3280 _a$3281 _a$3282))))) (_a$3284 (jolt-hash-map)) (_a$3285 res)) (jolt-reduce _a$3283 _a$3284 _a$3285))) (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 fnrec3286 ((r r)) (let* ((_o$3287 (jolt-nth r 0)) (_o$3288 (jolt-nth r 1))) (jolt-vector _o$3287 _o$3288)))) res)))) (let* ((_o$3289 t) (_o$3290 (if (jolt-truthy? shp) (jolt-assoc node_PRIME_ (keyword #f "shape") shp) node_PRIME_))) (jolt-vector _o$3289 _o$3290))) (if (jolt= op (keyword #f "vector")) (let* ((irs (let* ((_a$3292 (var-deref "clojure.core" "mapv")) (_a$3293 (lambda (x) (let fnrec3291 ((x x)) (jolt-invoke infer x tenv)))) (_a$3294 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3292 _a$3293 _a$3294))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3295 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3296 (var-deref "jolt.passes.types" "join")) (_a$3297 (jolt-first ets)) (_a$3298 (jolt-rest ets))) (jolt-reduce _a$3296 _a$3297 _a$3298))))) (let* ((_o$3300 (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$3301 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3299 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3300 _o$3301))) (if (jolt= op (keyword #f "set")) (let* ((irs (let* ((_a$3303 (var-deref "clojure.core" "mapv")) (_a$3304 (lambda (x) (let fnrec3302 ((x x)) (jolt-invoke infer x tenv)))) (_a$3305 (jolt-get node (keyword #f "items")))) (jolt-invoke _a$3303 _a$3304 _a$3305))) (ets (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3306 ((r r)) (jolt-nth r 0))) irs)) (el (if (jolt-empty? ets) (keyword #f "any") (let* ((_a$3307 (var-deref "jolt.passes.types" "join")) (_a$3308 (jolt-first ets)) (_a$3309 (jolt-rest ets))) (jolt-reduce _a$3307 _a$3308 _a$3309))))) (let* ((_o$3311 (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$3312 (jolt-assoc node (keyword #f "items") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3310 ((r r)) (jolt-nth r 1))) irs)))) (jolt-vector _o$3311 _o$3312))) (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$3323 (let* ((_a$3313 (var-deref "jolt.passes.types" "join")) (_a$3314 (jolt-nth thn 0)) (_a$3315 (jolt-nth els 0))) (jolt-invoke _a$3313 _a$3314 _a$3315))) (_o$3324 (let* ((_a$3316 node) (_a$3317 (keyword #f "test")) (_a$3318 (jolt-nth tr 1)) (_a$3319 (keyword #f "then")) (_a$3320 (jolt-nth thn 1)) (_a$3321 (keyword #f "else")) (_a$3322 (jolt-nth els 1))) (jolt-assoc _a$3316 _a$3317 _a$3318 _a$3319 _a$3320 _a$3321 _a$3322)))) (jolt-vector _o$3323 _o$3324))) (if (jolt= op (keyword #f "do")) (let* ((stmts (let* ((_a$3326 (var-deref "clojure.core" "mapv")) (_a$3327 (lambda (s) (let fnrec3325 ((s s)) (jolt-nth (jolt-invoke infer s tenv) 1)))) (_a$3328 (jolt-get node (keyword #f "statements")))) (jolt-invoke _a$3326 _a$3327 _a$3328))) (r (jolt-invoke infer (jolt-get node (keyword #f "ret")) tenv))) (let* ((_o$3329 (jolt-nth r 0)) (_o$3330 (jolt-assoc node (keyword #f "statements") stmts (keyword #f "ret") (jolt-nth r 1)))) (jolt-vector _o$3329 _o$3330))) (if (jolt= op (keyword #f "throw")) (let* ((_o$3331 (keyword #f "any")) (_o$3332 (jolt-assoc node (keyword #f "expr") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "expr")) tenv) 1)))) (jolt-vector _o$3331 _o$3332)) (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$3335 (let* ((vt (let* ((_a$3333 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3334 (jolt-invoke (var-deref "jolt.passes.types" "var-key") node))) (jolt-get _a$3333 _a$3334)))) (if (jolt-truthy? vt) vt (keyword #f "any")))) (_o$3336 node)) (jolt-vector _o$3335 _o$3336))) (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$3341 (keyword #f "any")) (_o$3342 (let* ((_o$3337 (keyword #f "op")) (_o$3338 (keyword #f "const")) (_o$3339 (keyword #f "val")) (_o$3340 v)) (jolt-hash-map _o$3337 _o$3338 _o$3339 _o$3340)))) (jolt-vector _o$3341 _o$3342)) (let* ((_o$3343 (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode)) (_o$3344 (jolt-assoc node (keyword #f "args") (jolt-vector (jolt-nth ar 1))))) (jolt-vector _o$3343 _o$3344)))) (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$3347 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3348 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3345 msub) (_o$3346 (jolt-nth dr 1))) (jolt-vector _o$3345 _o$3346)) (jolt-vector msub))))) (jolt-vector _o$3347 _o$3348))) (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$3354 (if (jolt-truthy? dr) (jolt-invoke (var-deref "jolt.passes.types" "join") ft (jolt-nth dr 0)) ft)) (_o$3355 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? dr) (let* ((_o$3349 msub) (_o$3350 (jolt-nth kr 1)) (_o$3351 (jolt-nth dr 1))) (jolt-vector _o$3349 _o$3350 _o$3351)) (let* ((_o$3352 msub) (_o$3353 (jolt-nth kr 1))) (jolt-vector _o$3352 _o$3353)))))) (jolt-vector _o$3354 _o$3355))) (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$3360 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3361 (jolt-nth args 0)) (_a$3362 (let* ((_o$3356 0) (_o$3357 init-t) (_o$3358 1) (_o$3359 et)) (jolt-hash-map _o$3356 _o$3357 _o$3358 _o$3359))) (_a$3363 tenv)) (jolt-invoke _a$3360 _a$3361 _a$3362 _a$3363)))) (let* ((_o$3369 (jolt-invoke (var-deref "jolt.passes.types" "join") init-t (jolt-nth fn-r 0))) (_o$3370 (jolt-assoc node (keyword #f "args") (if (jolt-truthy? three) (let* ((_o$3364 (jolt-nth fn-r 1)) (_o$3365 (jolt-nth init-r 1)) (_o$3366 (jolt-nth coll-r 1))) (jolt-vector _o$3364 _o$3365 _o$3366)) (let* ((_o$3367 (jolt-nth fn-r 1)) (_o$3368 (jolt-nth coll-r 1))) (jolt-vector _o$3367 _o$3368)))))) (jolt-vector _o$3369 _o$3370))) (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$3373 (var-deref "jolt.passes.types" "infer-fn-seeded")) (_a$3374 (jolt-nth args 0)) (_a$3375 (let* ((_o$3371 (jolt-get (jolt-get (var-deref "jolt.passes.types" "hof-table") cn) (keyword #f "epos"))) (_o$3372 et)) (jolt-hash-map _o$3371 _o$3372))) (_a$3376 tenv)) (jolt-invoke _a$3373 _a$3374 _a$3375 _a$3376))) (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$3379 rt) (_o$3380 (jolt-assoc node (keyword #f "args") (let* ((_o$3377 (jolt-nth fn-r 1)) (_o$3378 (jolt-nth coll-r 1))) (jolt-vector _o$3377 _o$3378))))) (jolt-vector _o$3379 _o$3380))) (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 fnrec3381 ((a a)) (jolt-invoke infer a tenv))) args)) (base (jolt-nth (jolt-nth ares 0) 0)) (rest-ts (let* ((_a$3383 (var-deref "clojure.core" "mapv")) (_a$3384 (lambda (r) (let fnrec3382 ((r r)) (jolt-nth r 0)))) (_a$3385 (jolt-rest ares))) (jolt-invoke _a$3383 _a$3384 _a$3385))) (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$3386 (var-deref "jolt.passes.types" "join")) (_a$3387 (jolt-invoke (var-deref "jolt.passes.types" "velem") base)) (_a$3388 (jolt-invoke (var-deref "jolt.passes.types" "velem") (jolt-nth rest-ts 0)))) (jolt-invoke _a$3386 _a$3387 _a$3388))) (if (jolt-truthy? (keyword #f "else")) (jolt-invoke (var-deref "jolt.passes.types" "call-ret-type") fnode) jolt-nil))))) (let* ((_o$3390 rt) (_o$3391 (jolt-assoc node (keyword #f "args") (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3389 ((r r)) (jolt-nth r 1))) ares)))) (jolt-vector _o$3390 _o$3391))) (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$3392 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "vtype-box"))) (_a$3393 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3392 _a$3393)) (jolt-nth fr 0))) (ares (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (a) (let fnrec3394 ((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$3396 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode)) (_o$3397 (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (r) (let fnrec3395 ((r r)) (jolt-nth r 0))) ares))) (jolt-vector _o$3396 _o$3397))) 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 fnrec3398 ((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$3399 (keyword #f "op")) (_o$3400 (keyword #f "call")) (_o$3401 (keyword #f "type")) (_o$3402 (jolt-invoke (var-deref "jolt.passes.types" "type-name") callee-t)) (_o$3403 (keyword #f "pos")) (_o$3404 pos) (_o$3405 (keyword #f "msg")) (_o$3406 (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$3399 _o$3400 _o$3401 _o$3402 _o$3403 _o$3404 _o$3405 _o$3406))) 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$3407 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "protocol-methods-box"))) (_a$3408 (jolt-invoke (var-deref "jolt.passes.types" "var-key") fnode))) (jolt-get _a$3407 _a$3408)) 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 fnrec3409 ((r r)) (jolt-nth r 1))) ares)))) (let* ((_o$3417 (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$3418 (if (jolt-truthy? rtype) (let* ((_a$3410 base) (_a$3411 (keyword #f "devirt-type")) (_a$3412 rtype) (_a$3413 (keyword #f "devirt-proto")) (_a$3414 (jolt-nth pm 0)) (_a$3415 (keyword #f "devirt-method")) (_a$3416 (jolt-nth pm 1))) (jolt-assoc _a$3410 _a$3411 _a$3412 _a$3413 _a$3414 _a$3415 _a$3416)) base))) (jolt-vector _o$3417 _o$3418))))) jolt-nil)))))))) (if (jolt= op (keyword #f "let")) (let* ((res (let* ((_a$3429 (lambda (acc b) (let fnrec3419 ((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$3425 (let* ((_a$3420 te) (_a$3421 (jolt-nth b 0)) (_a$3422 (jolt-nth ir 0))) (jolt-assoc _a$3420 _a$3421 _a$3422))) (_o$3426 (jolt-conj binds (let* ((_o$3423 (jolt-nth b 0)) (_o$3424 (jolt-nth ir 1))) (jolt-vector _o$3423 _o$3424))))) (jolt-vector _o$3425 _o$3426)))))) (_a$3430 (let* ((_o$3427 tenv) (_o$3428 (jolt-vector))) (jolt-vector _o$3427 _o$3428))) (_a$3431 (jolt-get node (keyword #f "bindings")))) (jolt-reduce _a$3429 _a$3430 _a$3431))) (br (let* ((_a$3432 infer) (_a$3433 (jolt-get node (keyword #f "body"))) (_a$3434 (jolt-nth res 0))) (jolt-invoke _a$3432 _a$3433 _a$3434)))) (let* ((_o$3440 (jolt-nth br 0)) (_o$3441 (let* ((_a$3435 node) (_a$3436 (keyword #f "bindings")) (_a$3437 (jolt-nth res 1)) (_a$3438 (keyword #f "body")) (_a$3439 (jolt-nth br 1))) (jolt-assoc _a$3435 _a$3436 _a$3437 _a$3438 _a$3439)))) (jolt-vector _o$3440 _o$3441))) (if (jolt= op (keyword #f "loop")) (let* ((_o$3453 (keyword #f "any")) (_o$3454 (let* ((_a$3448 node) (_a$3449 (keyword #f "bindings")) (_a$3450 (let* ((_a$3445 (var-deref "clojure.core" "mapv")) (_a$3446 (lambda (b) (let fnrec3442 ((b b)) (let* ((_o$3443 (jolt-nth b 0)) (_o$3444 (jolt-nth (jolt-invoke infer (jolt-nth b 1) tenv) 1))) (jolt-vector _o$3443 _o$3444))))) (_a$3447 (jolt-get node (keyword #f "bindings")))) (jolt-invoke _a$3445 _a$3446 _a$3447))) (_a$3451 (keyword #f "body")) (_a$3452 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1))) (jolt-assoc _a$3448 _a$3449 _a$3450 _a$3451 _a$3452)))) (jolt-vector _o$3453 _o$3454)) (if (jolt= op (keyword #f "recur")) (let* ((_o$3459 (keyword #f "any")) (_o$3460 (jolt-assoc node (keyword #f "args") (let* ((_a$3456 (var-deref "clojure.core" "mapv")) (_a$3457 (lambda (a) (let fnrec3455 ((a a)) (jolt-nth (jolt-invoke infer a tenv) 1)))) (_a$3458 (jolt-get node (keyword #f "args")))) (jolt-invoke _a$3456 _a$3457 _a$3458))))) (jolt-vector _o$3459 _o$3460)) (if (jolt= op (keyword #f "fn")) (let* ((_o$3478 (keyword #f "any")) (_o$3479 (jolt-assoc node (keyword #f "arities") (let* ((_a$3475 (var-deref "clojure.core" "mapv")) (_a$3476 (lambda (a) (let fnrec3461 ((a a)) (let* ((phm (let* ((_a$3466 (lambda (m pr) (let fnrec3462 ((m m) (pr pr)) (let* ((_a$3463 m) (_a$3464 (jolt-nth pr 0)) (_a$3465 (jolt-nth pr 1))) (jolt-assoc _a$3463 _a$3464 _a$3465))))) (_a$3467 (jolt-hash-map)) (_a$3468 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3466 _a$3467 _a$3468))) (pe (let* ((_a$3472 (lambda (e p) (let fnrec3469 ((e e) (p p)) (jolt-assoc e p (let* ((ent (let* ((_a$3470 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3471 (jolt-get phm p))) (jolt-get _a$3470 _a$3471)))) (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$3473 tenv) (_a$3474 (jolt-get a (keyword #f "params")))) (jolt-reduce _a$3472 _a$3473 _a$3474))) (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$3477 (jolt-get node (keyword #f "arities")))) (jolt-invoke _a$3475 _a$3476 _a$3477))))) (jolt-vector _o$3478 _o$3479)) (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$3480 (keyword #f "any")) (_o$3481 (jolt-assoc node (keyword #f "init") (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "init")) tenv) 1)))) (jolt-vector _o$3480 _o$3481))) (if (jolt= op (keyword #f "try")) (let* ((_o$3489 (keyword #f "any")) (_o$3490 (let* ((_a$3482 node) (_a$3483 (keyword #f "body")) (_a$3484 (jolt-nth (jolt-invoke infer (jolt-get node (keyword #f "body")) tenv) 1)) (_a$3485 (keyword #f "catch-body")) (_a$3486 (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$3487 (keyword #f "finally")) (_a$3488 (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$3482 _a$3483 _a$3484 _a$3485 _a$3486 _a$3487 _a$3488)))) (jolt-vector _o$3489 _o$3490)) (if (jolt-truthy? (keyword #f "else")) (let* ((_o$3491 (keyword #f "any")) (_o$3492 node)) (jolt-vector _o$3491 _o$3492)) jolt-nil)))))))))))))))))))))) infer)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "infer-top" (letrec ((infer-top (lambda (node) (let fnrec3493 ((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 fnrec3494 ((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 fnrec3495 ((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 fnrec3496 ((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$3497 "+") (_o$3498 "-") (_o$3499 "*") (_o$3500 "/") (_o$3501 "inc") (_o$3502 "dec") (_o$3503 "mod") (_o$3504 "rem") (_o$3505 "quot") (_o$3506 "min") (_o$3507 "max") (_o$3508 "abs") (_o$3509 "bit-and") (_o$3510 "bit-or") (_o$3511 "bit-xor") (_o$3512 "bit-not") (_o$3513 "bit-shift-left") (_o$3514 "bit-shift-right")) (jolt-hash-set _o$3497 _o$3498 _o$3499 _o$3500 _o$3501 _o$3502 _o$3503 _o$3504 _o$3505 _o$3506 _o$3507 _o$3508 _o$3509 _o$3510 _o$3511 _o$3512 _o$3513 _o$3514)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var-with-meta! "jolt.passes.types" "seq-ops" (let* ((_o$3515 "count") (_o$3516 "first") (_o$3517 "rest") (_o$3518 "next") (_o$3519 "seq") (_o$3520 "nth")) (jolt-hash-set _o$3515 _o$3516 _o$3517 _o$3518 _o$3519 _o$3520)) (jolt-hash-map (keyword #f "private") #t)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "type-name" (letrec ((type-name (lambda (t) (let fnrec3521 ((t t)) (if (jolt-truthy? (jolt-invoke (var-deref "jolt.passes.types" "union-type?") t)) (let* ((_a$3523 (lambda (s m) (let fnrec3522 ((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$3524 "") (_a$3525 (jolt-invoke (var-deref "jolt.passes.types" "umembers") t))) (jolt-reduce _a$3523 _a$3524 _a$3525)) (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 fnrec3526 ((cn cn) (args args) (arg-types arg-types) (pos pos)) (if (jolt-contains? (var-deref "jolt.passes.types" "num-ops") cn) (let* ((_a$3545 (lambda (_ i) (let fnrec3527 ((_ _) (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$3535 (keyword #f "op")) (_o$3536 cn) (_o$3537 (keyword #f "argpos")) (_o$3538 i) (_o$3539 (keyword #f "type")) (_o$3540 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3541 (keyword #f "pos")) (_o$3542 pos) (_o$3543 (keyword #f "msg")) (_o$3544 (let* ((_a$3528 (var-deref "clojure.core" "str")) (_a$3529 "`") (_a$3530 cn) (_a$3531 "` requires a number, but argument ") (_a$3532 (jolt-inc i)) (_a$3533 " is ") (_a$3534 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3528 _a$3529 _a$3530 _a$3531 _a$3532 _a$3533 _a$3534)))) (jolt-hash-map _o$3535 _o$3536 _o$3537 _o$3538 _o$3539 _o$3540 _o$3541 _o$3542 _o$3543 _o$3544))) jolt-nil)) jolt-nil)))) (_a$3546 jolt-nil) (_a$3547 (jolt-range (jolt-count args)))) (jolt-reduce _a$3545 _a$3546 _a$3547)) (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$3555 (keyword #f "op")) (_o$3556 cn) (_o$3557 (keyword #f "argpos")) (_o$3558 0) (_o$3559 (keyword #f "type")) (_o$3560 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t)) (_o$3561 (keyword #f "pos")) (_o$3562 pos) (_o$3563 (keyword #f "msg")) (_o$3564 (let* ((_a$3548 (var-deref "clojure.core" "str")) (_a$3549 "`") (_a$3550 cn) (_a$3551 "` requires ") (_a$3552 (if (jolt= cn "count") "a countable collection" "a seqable")) (_a$3553 ", but argument 1 is ") (_a$3554 (jolt-invoke (var-deref "jolt.passes.types" "type-name") t))) (jolt-invoke _a$3548 _a$3549 _a$3550 _a$3551 _a$3552 _a$3553 _a$3554)))) (jolt-hash-map _o$3555 _o$3556 _o$3557 _o$3558 _o$3559 _o$3560 _o$3561 _o$3562 _o$3563 _o$3564))) 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 fnrec3565 ((params params)) (let* ((_a$3567 (lambda (e p) (let fnrec3566 ((e e) (p p)) (jolt-assoc e p (keyword #f "any"))))) (_a$3568 (jolt-hash-map)) (_a$3569 params)) (jolt-reduce _a$3567 _a$3568 _a$3569)))))) all-any-env)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "isolated-diag-count" (letrec ((isolated-diag-count (lambda (body tenv) (let fnrec3570 ((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 fnrec3571 ((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$3582 (var-deref "clojure.core" "swap!")) (_a$3583 (var-deref "jolt.passes.types" "user-sig-box")) (_a$3584 jolt-assoc) (_a$3585 (let* ((_a$3572 (var-deref "clojure.core" "str")) (_a$3573 (jolt-get node (keyword #f "ns"))) (_a$3574 "/") (_a$3575 (jolt-get node (keyword #f "name")))) (jolt-invoke _a$3572 _a$3573 _a$3574 _a$3575))) (_a$3586 (let* ((_o$3576 (keyword #f "name")) (_o$3577 (jolt-get node (keyword #f "name"))) (_o$3578 (keyword #f "params")) (_o$3579 (jolt-get ar (keyword #f "params"))) (_o$3580 (keyword #f "body")) (_o$3581 (jolt-get ar (keyword #f "body")))) (jolt-hash-map _o$3576 _o$3577 _o$3578 _o$3579 _o$3580 _o$3581)))) (jolt-invoke _a$3582 _a$3583 _a$3584 _a$3585 _a$3586)) 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 fnrec3587 ((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$3588 (keyword #f "op")) (_o$3589 (keyword #f "user-call")) (_o$3590 (keyword #f "type")) (_o$3591 (keyword #f "arity")) (_o$3592 (keyword #f "pos")) (_o$3593 pos) (_o$3594 (keyword #f "msg")) (_o$3595 (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$3588 _o$3589 _o$3590 _o$3591 _o$3592 _o$3593 _o$3594 _o$3595))) (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$3618 (lambda (_ i) (let fnrec3596 ((_ _) (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$3597 (jolt-invoke (var-deref "jolt.passes.types" "all-any-env") params)) (_a$3598 (jolt-nth params i)) (_a$3599 at)) (jolt-assoc _a$3597 _a$3598 _a$3599)))) (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$3608 (keyword #f "op")) (_o$3609 (keyword #f "user-call")) (_o$3610 (keyword #f "argpos")) (_o$3611 i) (_o$3612 (keyword #f "type")) (_o$3613 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_o$3614 (keyword #f "pos")) (_o$3615 pos) (_o$3616 (keyword #f "msg")) (_o$3617 (let* ((_a$3600 (var-deref "clojure.core" "str")) (_a$3601 "argument ") (_a$3602 (jolt-inc i)) (_a$3603 " to `") (_a$3604 (jolt-get sig (keyword #f "name"))) (_a$3605 "` is ") (_a$3606 (jolt-invoke (var-deref "jolt.passes.types" "type-name") at)) (_a$3607 ", which its body provably rejects")) (jolt-invoke _a$3600 _a$3601 _a$3602 _a$3603 _a$3604 _a$3605 _a$3606 _a$3607)))) (jolt-hash-map _o$3608 _o$3609 _o$3610 _o$3611 _o$3612 _o$3613 _o$3614 _o$3615 _o$3616 _o$3617))) jolt-nil)) jolt-nil)) jolt-nil)))) (_a$3619 jolt-nil) (_a$3620 (jolt-range npar))) (jolt-reduce _a$3618 _a$3619 _a$3620))))) (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 fnrec3621 ((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 fnrec3622 ((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 fnrec3623 ((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 fnrec3624 ((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 fnrec3625 ((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 fnrec3626 ((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 fnrec3627 () (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 fnrec3628 () (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 fnrec3629 ((node node)) (jolt-invoke check-form node #f))) ((node strict?) (let fnrec3630 ((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 fnrec3631 ((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$3632 (jolt-nth r 0)) (_o$3633 (jolt-nth r 1)) (_o$3634 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "calls-box")))) (jolt-vector _o$3632 _o$3633 _o$3634)))))))) infer-body)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "reinfer-def" (letrec ((reinfer-def (lambda (def-node ptmap) (let fnrec3635 ((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$3643 (var-deref "clojure.core" "mapv")) (_a$3644 (lambda (a) (let fnrec3636 ((a a)) (let* ((pt (let* ((_a$3640 (lambda (m pr) (let fnrec3637 ((m m) (pr pr)) (let* ((nm (jolt-nth pr 0)) (e (let* ((_a$3638 (jolt-invoke (var-deref "clojure.core" "deref") (var-deref "jolt.passes.types" "record-shapes-box"))) (_a$3639 (jolt-nth pr 1))) (jolt-get _a$3638 _a$3639)))) (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$3641 ptmap) (_a$3642 (jolt-get a (keyword #f "phints")))) (jolt-reduce _a$3640 _a$3641 _a$3642)))) (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$3645 (jolt-get fnode (keyword #f "arities")))) (jolt-invoke _a$3643 _a$3644 _a$3645)))) def-node)))))) reinfer-def)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "phint-seed" (letrec ((phint-seed (lambda (params phints) (let fnrec3646 ((params params) (phints phints)) (let* ((m (let* ((_a$3651 (lambda (acc pr) (let fnrec3647 ((acc acc) (pr pr)) (let* ((_a$3648 acc) (_a$3649 (jolt-nth pr 0)) (_a$3650 (jolt-nth pr 1))) (jolt-assoc _a$3648 _a$3649 _a$3650))))) (_a$3652 (jolt-hash-map)) (_a$3653 phints)) (jolt-reduce _a$3651 _a$3652 _a$3653)))) (jolt-invoke (var-deref "clojure.core" "mapv") (lambda (nm) (let fnrec3654 ((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$3655 (keyword #f "on")) (_o$3656 #f) (_o$3657 (keyword #f "strict")) (_o$3658 #f)) (jolt-hash-map _o$3655 _o$3656 _o$3657 _o$3658))) (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 fnrec3659 ((on on) (strict? strict?)) (jolt-invoke (var-deref "clojure.core" "reset!") (var-deref "jolt.passes.types" "check-mode-box") (let* ((_o$3660 (keyword #f "on")) (_o$3661 (if (jolt-truthy? on) #t #f)) (_o$3662 (keyword #f "strict")) (_o$3663 (if (jolt-truthy? strict?) #t #f))) (jolt-hash-map _o$3660 _o$3661 _o$3662 _o$3663))))))) set-check-mode!)))
|
|
(guard (e (#t #f))
|
|
(def-var! "jolt.passes.types" "take-diags!" (letrec ((take-diags! (lambda () (let fnrec3664 () (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 fnrec3665 ((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))) |