commit fc25ef0323b5ae2c91446a8e3c3ca3028bd631f2
parent 2c1a36f55f45489e5a02682403e7c879d80461aa
Author: Ryan Culpepper <ryanc@racket-lang.org>
Date: Tue, 16 May 2017 18:21:22 -0400
support string, bytes (bindings from racket) as stxclass refs
add compile-time table as alternative to stxclass binding
Diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/parse/private/lib.rkt b/parse/private/lib.rkt
@@ -1,6 +1,7 @@
#lang racket/base
(require "sc.rkt"
syntax/parse/private/keywords
+ (for-syntax syntax/parse/private/residual-ct)
(for-syntax racket/base))
(provide identifier
@@ -29,6 +30,7 @@
(define keyword-stx? (stxof keyword?))
(define boolean-stx? (stxof boolean?))
(define string-stx? (stxof string?))
+(define bytes-stx? (stxof bytes?))
(define char-stx? (stxof char?))
(define number-stx? (stxof number?))
(define integer-stx? (stxof integer?))
@@ -36,6 +38,7 @@
(define exact-nonnegative-integer-stx? (stxof exact-nonnegative-integer?))
(define exact-positive-integer-stx? (stxof exact-positive-integer?))
+
;; == Integrable syntax classes ==
(define-integrable-syntax-class identifier (quote "identifier") identifier?)
@@ -43,7 +46,6 @@
(define-integrable-syntax-class keyword (quote "keyword") keyword-stx?)
(define-integrable-syntax-class boolean (quote "boolean") boolean-stx?)
(define-integrable-syntax-class character (quote "character") char-stx?)
-(define-integrable-syntax-class str (quote "string") string-stx?)
(define-integrable-syntax-class number (quote "number") number-stx?)
(define-integrable-syntax-class integer (quote "integer") integer-stx?)
(define-integrable-syntax-class exact-integer (quote "exact-integer") exact-integer-stx?)
@@ -54,10 +56,19 @@
(quote "exact-positive-integer")
exact-positive-integer-stx?)
+(define-integrable-syntax-class -string (quote "string") string-stx?)
+(define-integrable-syntax-class -bytes (quote "bytes") bytes-stx?)
+(begin-for-syntax
+ (set-box! alt-stxclass-mapping
+ (list (cons #'string (syntax-local-value #'-string))
+ (cons #'bytes (syntax-local-value #'-bytes)))))
+
;; Aliases
(define-syntax id (make-rename-transformer #'identifier))
(define-syntax nat (make-rename-transformer #'exact-nonnegative-integer))
(define-syntax char (make-rename-transformer #'character))
+(define-syntax str (make-rename-transformer #'-string))
+
;; == Normal syntax classes ==