diff --git a/collects/honu/core/private/debug.rkt b/collects/honu/core/private/debug.rkt index cd39c32d8d..ccd1cf6655 100644 --- a/collects/honu/core/private/debug.rkt +++ b/collects/honu/core/private/debug.rkt @@ -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 () diff --git a/collects/honu/core/private/honu2.rkt b/collects/honu/core/private/honu2.rkt new file mode 100644 index 0000000000..c82ca3f298 --- /dev/null +++ b/collects/honu/core/private/honu2.rkt @@ -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)]))) diff --git a/collects/honu/core/private/parse2.rkt b/collects/honu/core/private/parse2.rkt index 4c51f5d74d..1e211d45ce 100644 --- a/collects/honu/core/private/parse2.rkt +++ b/collects/honu/core/private/parse2.rkt @@ -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) diff --git a/collects/tests/honu/test.rkt b/collects/tests/honu/test.rkt index ba60fb44ae..f29db3d786 100644 --- a/collects/tests/honu/test.rkt +++ b/collects/tests/honu/test.rkt @@ -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))