Fiasco with splicing-syntax-parameterize

This commit is contained in:
Georges Dupéron 2016-02-26 21:07:21 +01:00
parent 56fdfaeb8f
commit f7b1db0e3c
5 changed files with 72 additions and 27 deletions

View File

@ -1,23 +1,55 @@
#lang typed/racket
(require ;"graph-6-rich-returns.lp2.rkt"
(except-in "../lib/low.rkt" ~>)
"graph.lp2.rkt"
"get.lp2.rkt"
"../type-expander/type-expander.lp2.rkt"
"../type-expander/multi-id.lp2.rkt"
"structure.lp2.rkt" ; debug
"variant.lp2.rkt" ; debug
"fold-queues.lp2.rkt"; debug
"rewrite-type.lp2.rkt"; debug
"meta-struct.rkt"; debug
racket/splicing; debug
racket/stxparam; debug
(for-syntax syntax/parse)
(for-syntax syntax/parse/experimental/template))
(except-in "../lib/low.rkt" ~>)
"graph.lp2.rkt"
"get.lp2.rkt"
"../type-expander/type-expander.lp2.rkt"
"../type-expander/multi-id.lp2.rkt"
"structure.lp2.rkt" ; debug
"variant.lp2.rkt" ; debug
"fold-queues.lp2.rkt"; debug
"rewrite-type.lp2.rkt"; debug
"meta-struct.rkt"; debug
racket/splicing; debug
racket/stxparam; debug
(for-syntax syntax/parse)
(for-syntax syntax/parse/experimental/template))
(define-rename-transformer-parameter ~>aaa
(make-rename-transformer #'+))
(define-graph gr
#:wrapping-definitions (begin (define-graph-rest))
#:wrapping-definitions
(begin
(define-type-expander
(first-step-expander1 stx)
(syntax-parse
stx
((_ (~datum m-cities))
(template
(U
(first-step #:placeholder m-cities3/node)
(Listof (first-step #:placeholder City)))))
((_ (~datum m-streets))
(template
(U
(first-step #:placeholder m-streets4/node)
(Listof (first-step #:placeholder Street)))))))
(define-type-expander
(first-step-expander2 stx)
(syntax-parse
stx
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
;(define-syntax (g-rest stx) (syntax-local-introduce #'))
(splicing-let-syntaxes
()
(define-graph-rest))
#;(splicing-syntax-parameterize
();([~>aaa (make-rename-transformer #'first-step-expander1)])
(g-rest))
#;(define-graph-rest))
[City [streets : (Listof Street)] [people : (Listof Person)]
[(m-city [c : (Listof (Pairof String String))])
(City (remove-duplicates (map (curry m-street c) (cdrs c)))

View File

@ -50,8 +50,8 @@
(begin
(define-type-expander
(first-step-expander1 stx)
#'Number
#;(syntax-parse
#;#'Number
(syntax-parse
stx
((_ (~datum m-cities))
(template
@ -65,13 +65,17 @@
(Listof (first-step #:placeholder Street)))))))
(define-type-expander
(first-step-expander2 stx)
#'Number
#;(syntax-parse
#;#'Number
(syntax-parse
stx
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
(splicing-syntax-parameterize
((~> (make-rename-transformer #'first-step-expander1)))))
(splicing-let-syntax
([~> (make-rename-transformer #'first-step-expander1)])
(define-graph-rest))
#;(splicing-syntax-parameterize
((~> (make-rename-transformer #'first-step-expander1)))
(define-graph-rest)))
(City
(streets : (Let (~> first-step-expander2) (~> m-streets)))
((City1/simple-mapping (streets : (~> m-streets))) (City streets)))

View File

@ -0,0 +1,5 @@
Attempts:
* (datum->syntax) Commit 876c4d2: works, but introduces ~> into the global scope
* (syntax-local-introduce) Does not work at all
* ((make-delta-introducer) (syntax-local-introduce)), see identifiers.ods and __DEBUG_graph6F.rkt: Works on normal identifiers (not sure?) but not for the graph (why?)
* splicing-syntax-parameterize Commit 56fdfae: splicing-syntax-parameterize messes up the scopes of its body

View File

@ -355,13 +355,17 @@ When the user gave @tc[#:wrapping-definitions] instead of @tc[#:definitions], we
use syntax-parameterize to enable the @tc[(define-graph-rest)] form.
@chunk[<wrapping-first-step>
(splicing-syntax-parameterize
([define-graph-rest
(syntax-rules () ;; TODO: indentation bug here in v 6.4.0.8
[(_) #';(splicing-syntax-parameterize
(begin
(define-syntax (call-second-step stx)
(syntax-local-introduce
#'<call-second-step>))
(splicing-syntax-parameterize
([define-graph-rest
(syntax-rules () ;; TODO: indentation bug here in v 6.4.0.8
[(_) call-second-step])]);(splicing-syntax-parameterize
; ([define-graph-rest default-define-graph-rest])
<call-second-step>])]);)])])
wrapping-extra-definitions)]
;<call-second-step>;)])])
wrapping-extra-definitions))]
The first step macro is defined as follows:

Binary file not shown.