From 011ca1771c0072f644021ed7d19b20eaa0e2561b Mon Sep 17 00:00:00 2001 From: ben Date: Sun, 20 Mar 2016 00:26:47 -0400 Subject: [PATCH] [format] add define form --- test/format-fail.rkt | 7 ++++++- trivial/define.rkt | 9 +++++++-- trivial/private/format.rkt | 6 +++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/test/format-fail.rkt b/test/format-fail.rkt index 78dbb3c..97a8cb3 100644 --- a/test/format-fail.rkt +++ b/test/format-fail.rkt @@ -4,7 +4,7 @@ ;; `format:` expressions that should fail to compile (module+ test (test-compile-error - #:require trivial/format + #:require trivial/format trivial/define #:exn #rx"format::|Type Checker" (printf: "hello ~a" "john" "doe") (printf: "hello ~a" "john" "doe") @@ -12,4 +12,9 @@ (printf: "character ~c\n" 88) (printf: "octl ~o\n" 1.0+2i) (printf: "hex ~o\n" (exact->inexact 0)) + (let () + (define: s "asdf ~a asdf") + (printf: s)) + (let: ([s "asdf ~a asdf"]) + (printf: s)) )) diff --git a/trivial/define.rkt b/trivial/define.rkt index 48ded70..a03f68f 100644 --- a/trivial/define.rkt +++ b/trivial/define.rkt @@ -11,6 +11,9 @@ trivial/private/common syntax/parse typed/racket/base) + (only-in trivial/private/format + format-define + format-let) (only-in trivial/private/math num-define num-let) @@ -26,14 +29,16 @@ (define-syntax define: (make-keyword-alias 'define (lambda (stx) - (or (num-define stx) + (or (format-define stx) + (num-define stx) (rx-define stx) (fun-define stx) (vec-define stx))))) (define-syntax let: (make-keyword-alias 'let (lambda (stx) - (or (fun-let stx) + (or (format-let stx) + (fun-let stx) (num-let stx) (rx-let stx) (vec-let stx))))) diff --git a/trivial/private/format.rkt b/trivial/private/format.rkt index 934dda9..5457f47 100644 --- a/trivial/private/format.rkt +++ b/trivial/private/format.rkt @@ -5,6 +5,10 @@ (provide format: printf: + + (for-syntax + format-define + format-let) ) (require @@ -59,7 +63,7 @@ (loop (+ i 1) acc)]))] [else #f])) - (define-values (_key fmt? _define _let) + (define-values (_key fmt? format-define format-let) (make-value-property 'string:format format-parser)) (define-syntax-class/predicate string/format fmt?)