Files
racket-webview/private/js-transform.rkt
2026-04-12 16:51:24 +02:00

69 lines
1.2 KiB
Racket

#lang racket/base
(define-syntax js-let
(syntax-rules ()
((_ (a b))
(string-append "let " (js1 a) " = " (js1 b) ";\n")
)
)
)
(define-syntax js1
(syntax-rules (if let* *)
((_ (if cond body1 body2))
(string-append "if (" (js1 cond) ") then {\n"
(js1 body1) "; }\n"
"else {\n"
(js1 body2)
"; }\n"
)
)
((_ (let (a ...)))
(string-append
(js-let a)
...)
)
((_ a)
(format "~a" 'a))
)
)
#|
((_ (if cond
body1
body2))
(string-append "if ("
(js1 cond) ") then {\n"
(js1 body1) " }\n"
"else { \n"
(js1 body2)
" }\n"
)
)
((_ (let ((a b) ...)
body))
(string-append "let " (js1 a)
" = " (js1 b) ";\n")
...
)
((_ (* a b ...))
(string-append (js1 a) "*" (js1 b) ...))
((_ a)
(format "~a" 'a))
)
)
|#
(define-syntax js
(syntax-rules ()
((_ js-statement ...)
(string-append
"{ \n"
(js1 js-statement)
...
"}\n"
)
)
)
)