every case-lambda case now has a label
This commit is contained in:
parent
c54ade7cef
commit
36b3ec82d2
BIN
lib/ikarus.boot
BIN
lib/ikarus.boot
Binary file not shown.
|
@ -231,7 +231,7 @@
|
||||||
(define-record fix (lhs* rhs* body))
|
(define-record fix (lhs* rhs* body))
|
||||||
|
|
||||||
(define-record seq (e0 e1))
|
(define-record seq (e0 e1))
|
||||||
(define-record case-info (args proper))
|
(define-record case-info (label args proper))
|
||||||
(define-record clambda-case (info body))
|
(define-record clambda-case (info body))
|
||||||
(define-record clambda (label cases free))
|
(define-record clambda (label cases free))
|
||||||
(define-record closure (code free*))
|
(define-record closure (code free*))
|
||||||
|
@ -348,6 +348,7 @@
|
||||||
(let ([body (E body (extend-env fml* nfml* env))])
|
(let ([body (E body (extend-env fml* nfml* env))])
|
||||||
(make-clambda-case
|
(make-clambda-case
|
||||||
(make-case-info
|
(make-case-info
|
||||||
|
(gensym)
|
||||||
(properize nfml*)
|
(properize nfml*)
|
||||||
(list? fml*))
|
(list? fml*))
|
||||||
body)))))
|
body)))))
|
||||||
|
@ -491,7 +492,7 @@
|
||||||
(record-case cls
|
(record-case cls
|
||||||
[(clambda-case info body)
|
[(clambda-case info body)
|
||||||
(record-case info
|
(record-case info
|
||||||
[(case-info fml* proper)
|
[(case-info label fml* proper)
|
||||||
(if proper
|
(if proper
|
||||||
(and (fx= (length fml*) (length rand*))
|
(and (fx= (length fml*) (length rand*))
|
||||||
(make-bind fml* rand* body))
|
(make-bind fml* rand* body))
|
||||||
|
@ -1065,10 +1066,10 @@
|
||||||
(record-case cls
|
(record-case cls
|
||||||
[(clambda-case info body)
|
[(clambda-case info body)
|
||||||
(record-case info
|
(record-case info
|
||||||
[(case-info fml* proper)
|
[(case-info label fml* proper)
|
||||||
(let-values ([(fml* a-lhs* a-rhs*) (fix-lhs* fml*)])
|
(let-values ([(fml* a-lhs* a-rhs*) (fix-lhs* fml*)])
|
||||||
(make-clambda-case
|
(make-clambda-case
|
||||||
(make-case-info fml* proper)
|
(make-case-info label fml* proper)
|
||||||
(bind-assigned a-lhs* a-rhs* (Expr body))))])]))
|
(bind-assigned a-lhs* a-rhs* (Expr body))))])]))
|
||||||
cls*)
|
cls*)
|
||||||
#f)]
|
#f)]
|
||||||
|
@ -2062,11 +2063,12 @@
|
||||||
(lambda (x)
|
(lambda (x)
|
||||||
(record-case x
|
(record-case x
|
||||||
[(clambda-case info body)
|
[(clambda-case info body)
|
||||||
(let-values ([(fml* si r live)
|
(record-case info
|
||||||
(bind-fml* (case-info-args info) r)])
|
[(case-info label fml* proper)
|
||||||
|
(let-values ([(fml* si r live) (bind-fml* fml* r)])
|
||||||
(make-clambda-case
|
(make-clambda-case
|
||||||
(make-case-info fml* (case-info-proper info))
|
(make-case-info label fml* proper)
|
||||||
(Tail body si r live)))]))))
|
(Tail body si r live)))])]))))
|
||||||
(define (CodeExpr x)
|
(define (CodeExpr x)
|
||||||
(record-case x
|
(record-case x
|
||||||
[(clambda L cases free)
|
[(clambda L cases free)
|
||||||
|
@ -3736,9 +3738,10 @@
|
||||||
(define (Entry check? x ac)
|
(define (Entry check? x ac)
|
||||||
(record-case x
|
(record-case x
|
||||||
[(clambda-case info body)
|
[(clambda-case info body)
|
||||||
(let ([ac (Tail body ac)])
|
|
||||||
(record-case info
|
(record-case info
|
||||||
[(case-info fml* proper)
|
[(case-info L fml* proper)
|
||||||
|
(let ([ac
|
||||||
|
(cons (label L) (Tail body ac))])
|
||||||
(cond
|
(cond
|
||||||
[(and proper check?)
|
[(and proper check?)
|
||||||
(list* (cmpl (int (argc-convention (length fml*))) eax)
|
(list* (cmpl (int (argc-convention (length fml*))) eax)
|
||||||
|
@ -3746,7 +3749,7 @@
|
||||||
ac)]
|
ac)]
|
||||||
[proper ac]
|
[proper ac]
|
||||||
[else
|
[else
|
||||||
(handle-vararg (length fml*) ac)])]))]))
|
(handle-vararg (length fml*) ac)]))])]))
|
||||||
(define make-dispatcher
|
(define make-dispatcher
|
||||||
(lambda (j? L L* x x* ac)
|
(lambda (j? L L* x x* ac)
|
||||||
(cond
|
(cond
|
||||||
|
@ -3755,7 +3758,7 @@
|
||||||
(record-case x
|
(record-case x
|
||||||
[(clambda-case info _)
|
[(clambda-case info _)
|
||||||
(record-case info
|
(record-case info
|
||||||
[(case-info fml* proper)
|
[(case-info _ fml* proper)
|
||||||
(cond
|
(cond
|
||||||
[proper
|
[proper
|
||||||
(list* (cmpl (int (argc-convention (length fml*))) eax)
|
(list* (cmpl (int (argc-convention (length fml*))) eax)
|
||||||
|
|
Loading…
Reference in New Issue