parse macro functions

This commit is contained in:
Jon Rafkind 2010-05-07 18:59:37 -06:00
parent 31cafd7974
commit 3d52f5ff12
3 changed files with 30 additions and 5 deletions

View File

@ -1,10 +1,12 @@
#lang scheme/base
(require (for-syntax scheme/base))
(require scheme/class)
(require "private/honu-typed-scheme.ss"
;; "private/honu.ss"
"private/parse.ss"
(for-syntax "private/literals.ss")
"private/literals.ss"
"private/syntax.ss"
"private/macro.ss")
@ -30,6 +32,9 @@
(honu-. |.|)
)
#%datum
(for-syntax #%datum
(rename-out (semicolon \;
)))
#%braces
#%parens
x
@ -37,6 +42,7 @@
false
display
display2
(for-syntax display)
newline
else
foobar2000

View File

@ -22,7 +22,6 @@
(provide (all-defined-out))
;; (define-syntax (\; stx) (raise-syntax-error '\; "out of context" stx))
(begin-for-syntax
@ -477,8 +476,6 @@ if (foo){
(define (display2 x y)
(printf "~a ~a" x y))
(define-syntax (honu-unparsed-begin stx)
(printf "honu unparsed begin: ~a\n" (syntax->datum stx))
(syntax-case stx ()

View File

@ -7,6 +7,8 @@
;; (for-template "syntax.ss")
(for-syntax "debug.ss"
"contexts.ss"
"parse.ss"
"honu-typed-scheme.ss"
scheme/base
syntax/parse
syntax/stx
@ -392,10 +394,29 @@
(with-syntax ([pulled (pull #'(x ...))])
#'(unpull pulled)))]))
(define-honu-syntax honu-macro
(lambda (stx ctx)
(define-syntax-class honu-macro2
#:literals (#%parens #%braces)
[pattern (_ name (#%braces code ...)
. rest)
#:with result
(list
(syntax/loc stx
(define-honu-syntax name
(lambda (stx ctx)
(honu-unparsed-begin code ...))))
#;
(with-syntax ([parsed (let-values ([(out rest*)
(parse-block-one/2 #'(code ...)
the-expression-context)])
out)])
(syntax/loc stx
(define-honu-syntax name
(lambda (stx ctx)
parsed))))
#'rest)])
(define-syntax-class honu-macro1
#:literals (#%parens #%braces)
[pattern (_ (#%parens honu-literal ...)
@ -465,6 +486,7 @@
(printf "Executing honu macro\n")
(syntax-parse stx #:literals (#%parens #%braces)
[out:honu-macro1 (apply (lambda (a b) (values a b)) (syntax->list (attribute out.result)))]
[out:honu-macro2 (apply (lambda (a b) (values a b)) (syntax->list (attribute out.result)))]
#;
[(_ (#%parens honu-literal ...)