[honu] add syntax_var which is the same as define-syntax
This commit is contained in:
parent
8b627ed8fd
commit
204333fc25
|
@ -24,6 +24,7 @@
|
|||
[honu-function function]
|
||||
[honu-function fun]
|
||||
[honu-var var]
|
||||
[honu-syntax-var syntax_var]
|
||||
[honu-== ==]
|
||||
[honu-not-equal !=]
|
||||
[honu--> %arrow]
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
(debug "Parse expression ~a\n" (pretty-format (syntax->datum #'(stuff ...))))
|
||||
(define-values (parsed unparsed)
|
||||
(parse #'(stuff ...)))
|
||||
(with-syntax ([parsed* (honu->racket parsed)]
|
||||
(with-syntax ([parsed* parsed]
|
||||
[unparsed unparsed])
|
||||
(emit-local-step parsed #'parsed* #:id #'honu-parse-expression)
|
||||
(debug "Parsed ~a. Unparsed ~a\n" #'parsed #'unparsed)
|
||||
|
@ -411,6 +411,22 @@
|
|||
#:with (name ...) #'(variables.id ...)
|
||||
#:with expression #'one.result]))
|
||||
|
||||
(begin-for-syntax
|
||||
(provide honu-declaration/phase+1)
|
||||
|
||||
;; parses a declaration
|
||||
;; var x = 9
|
||||
;; var a, b, c = values(1 + 2, 5, 9)
|
||||
(define-splicing-syntax-class honu-declaration/phase+1
|
||||
#:literal-sets (cruft)
|
||||
#:literals (honu-syntax-var)
|
||||
[pattern (~seq honu-syntax-var (~var variables (separate-ids (literal-syntax-class honu-comma)
|
||||
(literal-syntax-class honu-equal)))
|
||||
honu-equal one:honu-expression/phase+1)
|
||||
#:with (name ...) #'(variables.id ...)
|
||||
#:with expression #'one.result]))
|
||||
|
||||
;; like define
|
||||
(provide honu-var)
|
||||
(define-honu-syntax honu-var
|
||||
(lambda (code)
|
||||
|
@ -421,6 +437,17 @@
|
|||
(racket-syntax (define-values (var.name ...) (let () var.expression))))
|
||||
(values result #'rest #t)])))
|
||||
|
||||
;; like define-syntax
|
||||
(provide honu-syntax-var)
|
||||
(define-honu-syntax honu-syntax-var
|
||||
(lambda (code)
|
||||
(syntax-parse code #:literal-sets (cruft)
|
||||
[(var:honu-declaration/phase+1 . rest)
|
||||
(define result
|
||||
;; wrap the expression in a let so that we can insert new `define-syntax'es
|
||||
(racket-syntax (define-syntaxes (var.name ...) (let () var.expression))))
|
||||
(values result #'rest #t)])))
|
||||
|
||||
(provide (rename-out [honu-with-syntax withSyntax]))
|
||||
(define-honu-syntax honu-with-syntax
|
||||
(lambda (code)
|
||||
|
|
Loading…
Reference in New Issue
Block a user