add replace-context to syntax/strip-context
svn: r14196
This commit is contained in:
parent
7dc8e077ed
commit
91c53fa123
|
@ -10,3 +10,9 @@
|
||||||
|
|
||||||
Removes all lexical context from @scheme[stx], preserving
|
Removes all lexical context from @scheme[stx], preserving
|
||||||
source-location information and properties.}
|
source-location information and properties.}
|
||||||
|
|
||||||
|
@defproc[(replace-context [ctx-stx syntax?] [stx syntax?]) syntax?]{
|
||||||
|
|
||||||
|
Uses the lexical context of @scheme[ctx-stx] to replace the lexical
|
||||||
|
context of all parts of @scheme[stx], preserving source-location
|
||||||
|
information and properties of @scheme[stx].}
|
||||||
|
|
|
@ -1,23 +1,27 @@
|
||||||
#lang scheme/base
|
#lang scheme/base
|
||||||
|
|
||||||
(provide strip-context)
|
(provide strip-context
|
||||||
|
replace-context)
|
||||||
|
|
||||||
(define (strip-context e)
|
(define (strip-context e)
|
||||||
|
(replace-context #f e))
|
||||||
|
|
||||||
|
(define (replace-context ctx e)
|
||||||
(cond
|
(cond
|
||||||
[(syntax? e)
|
[(syntax? e)
|
||||||
(datum->syntax #f
|
(datum->syntax ctx
|
||||||
(strip-context (syntax-e e))
|
(replace-context ctx (syntax-e e))
|
||||||
e
|
e
|
||||||
e)]
|
e)]
|
||||||
[(pair? e) (cons (strip-context (car e))
|
[(pair? e) (cons (replace-context ctx (car e))
|
||||||
(strip-context (cdr e)))]
|
(replace-context ctx (cdr e)))]
|
||||||
[(vector? e) (list->vector
|
[(vector? e) (list->vector
|
||||||
(map strip-context
|
(map (lambda (e) (replace-context ctx e))
|
||||||
(vector->list e)))]
|
(vector->list e)))]
|
||||||
[(box? e) (box (strip-context (unbox e)))]
|
[(box? e) (box (replace-context ctx (unbox e)))]
|
||||||
[(prefab-struct-key e)
|
[(prefab-struct-key e)
|
||||||
=> (lambda (k)
|
=> (lambda (k)
|
||||||
(apply make-prefab-struct
|
(apply make-prefab-struct
|
||||||
k
|
k
|
||||||
(strip-context (cdr (vector->list (struct->vector e))))))]
|
(replace-context ctx (cdr (vector->list (struct->vector e))))))]
|
||||||
[else e]))
|
[else e]))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user