mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 04:55:04 +02:00
Issue #398 - Support for all anonymous lambda's
This commit is contained in:
parent
ffdeaa96e3
commit
365b19fca7
1 changed files with 27 additions and 1 deletions
|
@ -1341,7 +1341,33 @@ if (acc) {
|
||||||
(list (cps-seq (cddr ast) k))
|
(list (cps-seq (cddr ast) k))
|
||||||
#t))))
|
#t))))
|
||||||
|
|
||||||
;; TODO: still broken for 'args:fixed-with-varargs !!!!
|
;; TODO: add test cases
|
||||||
|
;(define (test)
|
||||||
|
; ((lambda (a . Y) (write Y)) 'x)
|
||||||
|
; ((lambda (a . Y) (write Y)) 'x 'y)
|
||||||
|
; ((lambda (a . Y) (write Y)) 'x 'y 'z)
|
||||||
|
; ((lambda (a b . Y) (write Y)) 'x 'y 'z)
|
||||||
|
; ((lambda Y (write Y)) 'x 'y 'z)
|
||||||
|
; (lambda X (list X)))
|
||||||
|
|
||||||
|
((and (app? ast)
|
||||||
|
(lambda? (app->fun ast))
|
||||||
|
(equal? 'args:fixed-with-varargs (lambda-formals-type (app->fun ast))))
|
||||||
|
(let* ((fn (app->fun ast))
|
||||||
|
(formals (lambda->formals fn))
|
||||||
|
(formals-lis (pair->list formals)) ;; Formals as proper list
|
||||||
|
(formals-len (length formals-lis))
|
||||||
|
(req-args (take (cdr ast) (- formals-len 1)))
|
||||||
|
(opt-args (drop (cdr ast) (- formals-len 1)))
|
||||||
|
)
|
||||||
|
;; Special case, rewrite into a "normal" lambda and try again
|
||||||
|
(cps `((lambda
|
||||||
|
,formals-lis
|
||||||
|
,@(cddr fn))
|
||||||
|
,@req-args
|
||||||
|
(list ,@opt-args))
|
||||||
|
cont-ast) ))
|
||||||
|
|
||||||
((and (app? ast)
|
((and (app? ast)
|
||||||
(lambda? (app->fun ast))
|
(lambda? (app->fun ast))
|
||||||
(equal? 'args:varargs (lambda-formals-type (app->fun ast))))
|
(equal? 'args:varargs (lambda-formals-type (app->fun ast))))
|
||||||
|
|
Loading…
Add table
Reference in a new issue