[plt-scheme] #%app literal does not match in syntax-case pattern
Hello.
I have this reader in pltcollects/masm/lang/reader.ss
-------
(module reader syntax/module-reader
-ignored-
;; Reads and expands the module; then, use process-body on the module
definitions and
;; expressions, to efectivelly remove (replace by (void)) the application
expressions and
;; define all variables to be null.
#:wrapper2
(lambda (in read stx?)
(let ([mod (let ([m (read in)])
(if stx? m (datum->syntax #f m)))])
(syntax-case mod ()
[(module name lang* . body)
(let ([lang `(file ,(path->string (resolved-module-path-name
masm-lang-path)))])
(with-syntax ([lang (datum->syntax #'lang* lang #'lang*)])
(let ([expanded-mod (parameterize ([current-namespace
(make-base-namespace)])
(expand #'(module name lang . body)))])
(let ([r (syntax-case expanded-mod ()
[(module name lang (module-begin . body*))
(with-syntax ([body (process-body #'body*)])
(syntax/loc mod (module name lang (module-begin
. body))))])])
(if stx? r (syntax->datum r))))))])))
(require scheme/runtime-path)
(define-runtime-module-path masm-lang-path "../masm-lang.ss")
(define (process-body body)
(datum->syntax body (map process-form (syntax->list body))))
(define (process-form stx)
(syntax-case stx (define-values #%app)
[(define-values (id) value)
#'(define-values (id) (void))]
[(#%app . _)
#'(void)]
[_
(error "unsupported form" (syntax->datum stx))]))
)
-------
and this in pltcollects/masm/masm-lang.ss
-------
#lang scheme
(define-syntax (_#%module-begin stx)
(syntax-case stx ()
[(_ . forms)
#'(#%plain-module-begin . forms)]))
(provide (rename-out (_#%module-begin #%module-begin))
define
#%app
#%datum)
-------
. When I tried to use this language with the code
-------
#lang masm
(define x (2 1))
(1 2)
-------
I was expecting no error. But I got "pltcollects/masm/lang/reader.ss:36:7:
unsupported form (#%app (quote 1) (quote 2))".
The process-form procedure matches the literal define-values, but not the
literal #%app. Why does this happen?
I tried to require #%app from scheme module both at phases 0 an 1, but it
still does not work. I was thinking that the problem could be the
(make-base-namespace), but using module->namespace with the masm-lang.ss
module does not work. What am I missing?
Thanks.
Marco
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20091119/0bf25e83/attachment.html>