2.2 KiB
js-maker
js-maker is a deliberately small Racket macro for generating JavaScript text
from a compact Racket/Scheme-like surface syntax.
The public API is intentionally small:
(require js-maker)
(js form ...)
There is no public js1 and no js/expression. Expression-oriented examples
should be written as normal JavaScript-producing programs, usually by placing an
explicit (return ...) in a generated function.
Supported core forms
The js-maker 3 restart supports the following core forms:
(define (name arg ...) body ...)(define name expr)(lambda (arg ...) body ...)and(λ (arg ...) body ...)(if condition then else)(begin body ...)(return expr)(set! target expr)- ordinary
letwith parallel binding semantics let*with sequential binding semantics- named
let, compiled towhile (true)with parallel loop-variable updates - quote/eval for simple datum insertion
- calls, infix arithmetic/comparison operators,
and,or,not (send obj method arg ...)(new Class arg ...)(js-dot obj field ...)/(dot obj field ...)(js-ref obj key ...)for JavaScript bracket/index access(list ...)and(cons a b)
js-ref is a DSL form inside (js ...), not a separately exported binding.
For example, (js-ref xs i) generates xs[i], (js-ref obj "name")
generates obj["name"], and (set! (js-ref xs i) value) generates an
indexed assignment.
Named let is statement-oriented. A tail call to the loop name continues the
loop. The branch that leaves the loop should use an explicit (return ...).
Running tests
From the package root:
raco test -p js-maker
If Node is available, several generated JavaScript programs are executed. If no Node executable is found, those runtime checks are skipped and the string-level checks still run.
What was removed from the old test set
The previous larger branch contained tests and demos for a broader language and
runtime shim. Those are not part of the compact js-maker 3 restart. The old
hash, regexp, with-handlers, for/list, for/fold, while, when, cond,
case, object/class/destructuring and runtime helper tests were removed or
replaced by tests for the supported core forms above.