eval/inject improved; testing won t fail on non existing javascript engine
This commit is contained in:
@@ -21,6 +21,48 @@
|
||||
(unless (regexp-match? #rx"__cmp" effectful-chain)
|
||||
(error 'jsmaker-regression "effectful chained comparison should use temporaries, got: ~a" effectful-chain))
|
||||
|
||||
(define-syntax with-id->el
|
||||
(syntax-rules ()
|
||||
((_ id el expr)
|
||||
(js (let ((el (send document getElementById (eval id))))
|
||||
expr)))))
|
||||
|
||||
(define (runtime-eval-macro-function id html)
|
||||
(with-id->el id el
|
||||
(begin
|
||||
(set! (js-dot el innerHTML) (eval html))
|
||||
#t)))
|
||||
|
||||
(define runtime-eval-macro-program
|
||||
(runtime-eval-macro-function 't "BEE"))
|
||||
(unless (and (regexp-match? #rx"getElementById\\(\"t\"\\)" runtime-eval-macro-program)
|
||||
(regexp-match? #rx"innerHTML = \"BEE\"" runtime-eval-macro-program)
|
||||
(regexp-match? #rx"return true;" runtime-eval-macro-program))
|
||||
(error 'jsmaker-regression
|
||||
"runtime eval inside a user macro should keep use-site lexical bindings, got: ~a"
|
||||
runtime-eval-macro-program))
|
||||
|
||||
(define-syntax with-id->el/inject
|
||||
(syntax-rules ()
|
||||
((_ id el expr)
|
||||
(js (let ((el (send document getElementById (inject id))))
|
||||
expr)))))
|
||||
|
||||
(define (runtime-inject-macro-function id html)
|
||||
(with-id->el/inject id el
|
||||
(begin
|
||||
(set! (js-dot el innerHTML) (inject html))
|
||||
#t)))
|
||||
|
||||
(define runtime-inject-macro-program
|
||||
(runtime-inject-macro-function 't "BEE"))
|
||||
(unless (and (regexp-match? #rx"getElementById\\(\"t\"\\)" runtime-inject-macro-program)
|
||||
(regexp-match? #rx"innerHTML = \"BEE\"" runtime-inject-macro-program)
|
||||
(regexp-match? #rx"return true;" runtime-inject-macro-program))
|
||||
(error 'jsmaker-regression
|
||||
"runtime inject inside a user macro should keep use-site lexical bindings, got: ~a"
|
||||
runtime-inject-macro-program))
|
||||
|
||||
(define simple-let-star
|
||||
(js (let* ((x 10)
|
||||
(y (+ x x)))
|
||||
@@ -75,6 +117,11 @@
|
||||
(js-expression-test 'runtime-eval-lexical-let
|
||||
(js/expression (let ([a (eval (* x y))]) (* a a)))
|
||||
"40000"))
|
||||
(let ([x 10]
|
||||
[y 20])
|
||||
(js-expression-test 'runtime-inject-lexical-let
|
||||
(js/expression (let ([a (inject (* x y))]) (* a a)))
|
||||
"40000"))
|
||||
(js-expression-test 'substring (js/expression (substring "abcdef" 1 4)) "\"bcd\"")
|
||||
(js-expression-test 'equal-list (js/expression (equal? (list 1 2) (list 1 2))) "true")
|
||||
(js-expression-test 'cond-test-only (js/expression (cond [0] [else 2])) "0")
|
||||
|
||||
Reference in New Issue
Block a user