add function as a macro

This commit is contained in:
Jon Rafkind 2011-07-13 12:08:47 -06:00
parent 03dc212d61
commit acb3bce1e7
4 changed files with 35 additions and 5 deletions

View File

@ -1,10 +1,10 @@
#lang scheme/base
#lang racket/base
(require (for-syntax scheme/base))
(require (for-syntax racket/base))
(provide debug)
(define-for-syntax verbose? #f)
(define-for-syntax verbose? (getenv "HONU_DEBUG"))
(define-syntax (debug stx)
(if verbose?
(syntax-case stx ()

View File

@ -0,0 +1,22 @@
#lang racket/base
(require "macro2.rkt"
(for-syntax syntax/parse
"literals.rkt"
"parse2.rkt"
racket/base))
(provide honu-function)
(define-honu-syntax honu-function
(lambda (code context)
(syntax-parse code #:literal-sets (cruft)
[(_ name:identifier (#%parens arg:identifier ...)
(#%braces code ...)
. rest)
(values
#'(define (name arg ...)
(let-syntax ([do-parse (lambda (stx)
(parse #'(code ...)))])
(do-parse)))
#'rest)])))

View File

@ -63,7 +63,7 @@
(define (do-parse stream precedence left current)
(debug "parse ~a precedence ~a left ~a current ~a\n" stream precedence left current)
(syntax-parse stream
[() #'(void)]
[() left]
[(head rest ...)
(cond
[(honu-macro? #'head)
@ -101,7 +101,7 @@
)]))
(do-parse input 0 #f #f))
(do-parse input 0 #'(void) #'(void)))
(define (parse2 forms)
(debug "parse forms ~a\n" forms)

View File

@ -2,6 +2,8 @@
(require
(prefix-in macro_ honu/core/private/macro2)
(rename-in honu/core/private/honu2
[honu-function honu_function])
(rename-in honu/core/private/literals
[honu-= =]
[semicolon |;|])
@ -33,3 +35,9 @@
(fake-module-begin #hx(var x = 2;
print(x)))
(let ()
(fake-module-begin #hx(honu_function test(x){
print(x)
}))
(test 5))