From aaed60493a2ddb6c4711ff7105195546771625d1 Mon Sep 17 00:00:00 2001 From: Jon Rafkind Date: Wed, 14 Sep 2011 10:53:35 -0600 Subject: [PATCH] [honu] recognize linq literals --- collects/honu/core/private/literals.rkt | 9 ++++++++- collects/tests/honu/linq.rkt | 11 +++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/collects/honu/core/private/literals.rkt b/collects/honu/core/private/literals.rkt index 90cfde8124..8753038112 100644 --- a/collects/honu/core/private/literals.rkt +++ b/collects/honu/core/private/literals.rkt @@ -2,7 +2,8 @@ (provide (all-defined-out)) (require syntax/parse - (for-syntax racket/base)) + (for-syntax racket/base + syntax/parse)) ;; macro for defining literal tokens that can be used in macros (define-syntax-rule (define-literal name ...) @@ -30,4 +31,10 @@ honu-for-template honu-prefix) +(define-syntax-rule (define-literal+set set literal ...) + (begin + (define-literal literal ...) + (begin-for-syntax + (define-literal-set set (literal ...))))) + (define-literal-set cruft (#%parens #%brackets #%braces semicolon colon honu-comma honu-<-)) diff --git a/collects/tests/honu/linq.rkt b/collects/tests/honu/linq.rkt index 4a4e70eefa..4adbd6a6ff 100644 --- a/collects/tests/honu/linq.rkt +++ b/collects/tests/honu/linq.rkt @@ -10,20 +10,23 @@ honu/core/private/parse2 syntax/parse)) -(define-literal linq-from linq-select) +(define-literal+set linq-literals + linq-from linq-select linq-where) (provide linq (rename-out [linq-from from] + [linq-where where] [linq-select select])) (define-honu-syntax linq (lambda (code context) - (syntax-parse code #:literal-sets (cruft) + (syntax-parse code #:literal-sets (cruft linq-literals) #:literals (honu-in) [(_ linq-from name:id honu-in (~var store honu-expression) - linq-select what:honu-expression . rest) + (~optional (~seq linq-where where:honu-expression)) + linq-select select:honu-expression . rest) (define out #'(for/list ([name store.result]) - what.result)) + select.result)) (values out #'rest #f)]))) #|