From 7e93b7d42694227310dc610212ba0529f3f05a8c Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 31 Jul 2015 16:16:23 -0500 Subject: [PATCH] Move make-variable-like-transformer to syntax/transformer. --- racket/collects/syntax/transformer.rkt | 28 ++++++++++++++++++++++++++ racket/collects/unstable/syntax.rkt | 28 ++++---------------------- 2 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 racket/collects/syntax/transformer.rkt diff --git a/racket/collects/syntax/transformer.rkt b/racket/collects/syntax/transformer.rkt new file mode 100644 index 0000000000..b08844afb7 --- /dev/null +++ b/racket/collects/syntax/transformer.rkt @@ -0,0 +1,28 @@ +#lang racket/base + +(require (for-template racket/base)) + +(provide make-variable-like-transformer) + +(define (make-variable-like-transformer ref-stx [set!-handler #f]) + (unless (syntax? ref-stx) + (raise-type-error 'make-variable-like-transformer "syntax?" ref-stx)) + (unless (or (syntax? set!-handler) (procedure? set!-handler) (eq? set!-handler #f)) + (raise-type-error 'make-variable-like-transformer "(or/c syntax? procedure? #f)" set!-handler)) + (make-set!-transformer + (lambda (stx) + (syntax-case stx (set!) + [id + (identifier? #'id) + ref-stx] + [(set! id val) + (cond [(procedure? set!-handler) + (set!-handler stx)] + [(syntax? set!-handler) + (with-syntax ([setter set!-handler]) + (syntax/loc stx (setter val)))] + [else + (raise-syntax-error #f "cannot mutate identifier" stx #'id)])] + [(id . args) + (let ([stx* (cons #'(#%expression id) (cdr (syntax-e stx)))]) + (datum->syntax stx stx* stx))])))) diff --git a/racket/collects/unstable/syntax.rkt b/racket/collects/unstable/syntax.rkt index 88ce1b8adf..90dfc3d772 100644 --- a/racket/collects/unstable/syntax.rkt +++ b/racket/collects/unstable/syntax.rkt @@ -2,7 +2,8 @@ ;; owner: ryanc (and cce and stamourv, where noted) (require racket/syntax (for-syntax racket/base) - (for-template racket/base)) + (for-template racket/base) + syntax/transformer) ; for re-export (provide ;; by endobson syntax-length @@ -18,6 +19,8 @@ ;; by ryanc explode-module-path-index phase-of-enclosing-module + + ;; re-export, for backwards compatibility make-variable-like-transformer) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -81,29 +84,6 @@ (variable-reference->module-base-phase (#%variable-reference))) -(define (make-variable-like-transformer ref-stx [set!-handler #f]) - (unless (syntax? ref-stx) - (raise-type-error 'make-variable-like-transformer "syntax?" ref-stx)) - (unless (or (syntax? set!-handler) (procedure? set!-handler) (eq? set!-handler #f)) - (raise-type-error 'make-variable-like-transformer "(or/c syntax? procedure? #f)" set!-handler)) - (make-set!-transformer - (lambda (stx) - (syntax-case stx (set!) - [id - (identifier? #'id) - ref-stx] - [(set! id val) - (cond [(procedure? set!-handler) - (set!-handler stx)] - [(syntax? set!-handler) - (with-syntax ([setter set!-handler]) - (syntax/loc stx (setter val)))] - [else - (raise-syntax-error #f "cannot mutate identifier" stx #'id)])] - [(id . args) - (let ([stx* (cons #'(#%expression id) (cdr (syntax-e stx)))]) - (datum->syntax stx stx* stx))])))) - ;; by endobson (define (syntax-length stx)