-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheval.ss
More file actions
30 lines (26 loc) · 1.14 KB
/
eval.ss
File metadata and controls
30 lines (26 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#lang scheme/base
(require scheme/contract
"private/syntax/parse.ss"
"private/syntax/ast-core.ss"
"private/compiler/compile.ss"
"lang/lang.ss"
"private/runtime/namespace.ss")
;; (union input-source sytax) [namespace] -> any
(define (eval-script src [ns (make-js-namespace)])
(if (syntax? src)
(eval src ns)
(with-syntax ([(ast ...) (with-syntax-errors
(lambda ()
(parse-program-unit src)))])
(eval #'(script-begin ast ...) ns))))
;; (union input-source sytax) [namespace] -> any
(define (eval-expression src [ns (make-js-namespace)])
(if (syntax? src)
(eval src ns)
(let ([ast (with-syntax-errors
(lambda ()
(parse-expression src)))])
(with-syntax ([ast (make-ExpressionStatement (Term-location ast) ast)])
(eval #'(script-begin ast) ns)))))
(provide/contract [eval-script (((or/c input-source? syntax?)) (namespace?) . ->* . any)]
[eval-expression (((or/c input-source? syntax?)) (namespace?) . ->* . any)])