fix template bug in nested sequence of multiple ellipses, such as ((a ... ...) ...)

svn: r3277
This commit is contained in:
Matthew Flatt 2006-06-08 10:51:46 +00:00
parent 7e61d42fda
commit b773eeb6c2
3 changed files with 1386 additions and 1364 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1269,9 +1269,15 @@
"(let sub((p p)(use-ellipses? #t))"
"(cond "
"((and use-ellipses?(ellipsis? p))"
"(let-values(((rest nest)"
"(let loop((p(stx-cdr(stx-cdr p)))(nest list))"
"(if(and(stx-pair? p)"
"(...?(stx-car p)))"
"(loop(stx-cdr p)(lambda(x)(list(nest x))))"
"(values p nest)))))"
"(let((subs(sub(stx-car p) #t)))"
"(append(map list subs)"
"(sub(stx-cdr(stx-cdr p)) #t))))"
"(append(map nest subs)"
"(sub rest #t)))))"
"((stx-pair? p) "
"(let((hd(stx-car p)))"
"(if(and use-ellipses?"

View File

@ -1520,9 +1520,15 @@
(let sub ([p p][use-ellipses? #t])
(cond
[(and use-ellipses? (ellipsis? p))
(let ([subs (sub (stx-car p) #t)])
(append (map list subs)
(sub (stx-cdr (stx-cdr p)) #t)))]
(let-values ([(rest nest)
(let loop ([p (stx-cdr (stx-cdr p))][nest list])
(if (and (stx-pair? p)
(...? (stx-car p)))
(loop (stx-cdr p) (lambda (x) (list (nest x))))
(values p nest)))])
(let ([subs (sub (stx-car p) #t)])
(append (map nest subs)
(sub rest #t))))]
[(stx-pair? p)
(let ([hd (stx-car p)])
(if (and use-ellipses?