checkpoint
svn: r12954
This commit is contained in:
parent
4f002a60d5
commit
ed48078523
|
@ -100,9 +100,9 @@
|
||||||
(define (cgen/eff V X t s)
|
(define (cgen/eff V X t s)
|
||||||
(match* (t s)
|
(match* (t s)
|
||||||
[(e e) (empty-cset X)]
|
[(e e) (empty-cset X)]
|
||||||
[((Latent-Restrict-Effect: t) (Latent-Restrict-Effect: s))
|
[((Latent-Restrict-Effect: t k) (Latent-Restrict-Effect: s k))
|
||||||
(cset-meet (cgen V X t s) (cgen V X s t))]
|
(cset-meet (cgen V X t s) (cgen V X s t))]
|
||||||
[((Latent-Remove-Effect: t) (Latent-Remove-Effect: s))
|
[((Latent-Remove-Effect: t k) (Latent-Remove-Effect: s k))
|
||||||
(cset-meet (cgen V X t s) (cgen V X s t))]
|
(cset-meet (cgen V X t s) (cgen V X s t))]
|
||||||
[(_ _) (fail! t s)]))
|
[(_ _) (fail! t s)]))
|
||||||
|
|
||||||
|
|
|
@ -107,8 +107,8 @@
|
||||||
[filter (-poly (a b) (cl->*
|
[filter (-poly (a b) (cl->*
|
||||||
((a . -> . B
|
((a . -> . B
|
||||||
:
|
:
|
||||||
(list (make-Latent-Restrict-Effect b))
|
(list (make-Latent-Restrict-Effect b 0))
|
||||||
(list (make-Latent-Remove-Effect b)))
|
(list (make-Latent-Remove-Effect b 0)))
|
||||||
(-lst a)
|
(-lst a)
|
||||||
. -> .
|
. -> .
|
||||||
(-lst b))
|
(-lst b))
|
||||||
|
|
|
@ -81,15 +81,15 @@
|
||||||
(ormap (lambda (e) (arr-subtype*/no-fail A e s)) ts))
|
(ormap (lambda (e) (arr-subtype*/no-fail A e s)) ts))
|
||||||
|
|
||||||
(define (sub-eff e1 e2)
|
(define (sub-eff e1 e2)
|
||||||
(match (list e1 e2)
|
(match* (e1 e2)
|
||||||
[(list e e) #t]
|
[(e e) #t]
|
||||||
[(list (Latent-Restrict-Effect: t) (Latent-Restrict-Effect: t*))
|
[((Latent-Restrict-Effect: t k) (Latent-Restrict-Effect: t* k))
|
||||||
(and (subtype t t*)
|
(and (subtype t t*)
|
||||||
(subtype t* t))]
|
(subtype t* t))]
|
||||||
[(list (Latent-Remove-Effect: t) (Latent-Remove-Effect: t*))
|
[((Latent-Remove-Effect: t k) (Latent-Remove-Effect: t* k))
|
||||||
(and (subtype t t*)
|
(and (subtype t t*)
|
||||||
(subtype t* t))]
|
(subtype t* t))]
|
||||||
[else #f]))
|
[(_ _) #f]))
|
||||||
|
|
||||||
;(trace sub-eff)
|
;(trace sub-eff)
|
||||||
|
|
||||||
|
|
|
@ -38,10 +38,10 @@
|
||||||
|
|
||||||
(define ((add-var v) eff)
|
(define ((add-var v) eff)
|
||||||
(match eff
|
(match eff
|
||||||
[(Latent-Var-True-Effect:) (-vet v)]
|
[(Latent-Var-True-Effect: k) (-vet v)]
|
||||||
[(Latent-Var-False-Effect:) (-vef v)]
|
[(Latent-Var-False-Effect: k) (-vef v)]
|
||||||
[(Latent-Restrict-Effect: t) (make-Restrict-Effect t v)]
|
[(Latent-Restrict-Effect: t k) (make-Restrict-Effect t v)]
|
||||||
[(Latent-Remove-Effect: t) (make-Remove-Effect t v)]
|
[(Latent-Remove-Effect: t k) (make-Remove-Effect t v)]
|
||||||
[(True-Effect:) eff]
|
[(True-Effect:) eff]
|
||||||
[(False-Effect:) eff]
|
[(False-Effect:) eff]
|
||||||
[_ (int-err "can't add var ~a to effect ~a" v eff)]))
|
[_ (int-err "can't add var ~a to effect ~a" v eff)]))
|
||||||
|
@ -208,7 +208,7 @@
|
||||||
(define make-pred-ty
|
(define make-pred-ty
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(in out t)
|
[(in out t)
|
||||||
(->* in out : (list (make-Latent-Restrict-Effect t)) (list (make-Latent-Remove-Effect t)))]
|
(->* in out : (list (make-Latent-Restrict-Effect t 0)) (list (make-Latent-Remove-Effect t 0)))]
|
||||||
[(t) (make-pred-ty (list Univ) B t)]))
|
[(t) (make-pred-ty (list Univ) B t)]))
|
||||||
|
|
||||||
(define -Pathlike (*Un -Path -String))
|
(define -Pathlike (*Un -Path -String))
|
||||||
|
|
|
@ -32,10 +32,10 @@
|
||||||
(match c
|
(match c
|
||||||
[(Restrict-Effect: t v) (fp "(restrict ~a ~a)" t (syntax-e v))]
|
[(Restrict-Effect: t v) (fp "(restrict ~a ~a)" t (syntax-e v))]
|
||||||
[(Remove-Effect: t v) (fp "(remove ~a ~a)" t (syntax-e v))]
|
[(Remove-Effect: t v) (fp "(remove ~a ~a)" t (syntax-e v))]
|
||||||
[(Latent-Restrict-Effect: t) (fp "(restrict ~a)" t)]
|
[(Latent-Restrict-Effect: t k) (fp "(restrict ~a ~a)" t k)]
|
||||||
[(Latent-Remove-Effect: t) (fp "(remove ~a)" t)]
|
[(Latent-Remove-Effect: t k) (fp "(remove ~a ~a)" t k)]
|
||||||
[(Latent-Var-True-Effect:) (fp "(var #t)")]
|
[(Latent-Var-True-Effect: k) (fp "(var #t ~a)" k)]
|
||||||
[(Latent-Var-False-Effect:) (fp "(var #f)")]
|
[(Latent-Var-False-Effect: k) (fp "(var #f ~a)" k)]
|
||||||
[(True-Effect:) (fp "T")]
|
[(True-Effect:) (fp "T")]
|
||||||
[(False-Effect:) (fp "F")]
|
[(False-Effect:) (fp "F")]
|
||||||
[(Var-True-Effect: v) (fp "(var #t ~a)" (syntax-e v))]
|
[(Var-True-Effect: v) (fp "(var #t ~a)" (syntax-e v))]
|
||||||
|
@ -64,9 +64,10 @@
|
||||||
(when drest
|
(when drest
|
||||||
(fp "~a ... ~a " (car drest) (cdr drest)))
|
(fp "~a ... ~a " (car drest) (cdr drest)))
|
||||||
(fp "-> ~a" rng)
|
(fp "-> ~a" rng)
|
||||||
(match* (thn-eff els-eff)
|
(match* (thn-eff els-eff)
|
||||||
[((list) (list)) (void)]
|
[((list) (list)) (void)]
|
||||||
[((list (Latent-Restrict-Effect: t)) (list (Latent-Remove-Effect: t))) (fp " : ~a" t)]
|
[((list (Latent-Restrict-Effect: t 0)) (list (Latent-Remove-Effect: t 0))) (fp " : ~a" t)]
|
||||||
|
[((list (Latent-Restrict-Effect: t k)) (list (Latent-Remove-Effect: t k))) (fp " : ~a_~a" t k)]
|
||||||
[(_ _) (fp " : ~a ~a" thn-eff els-eff)])
|
[(_ _) (fp " : ~a ~a" thn-eff els-eff)])
|
||||||
(fp ")")]))
|
(fp ")")]))
|
||||||
(define (tuple? t)
|
(define (tuple? t)
|
||||||
|
|
|
@ -27,13 +27,19 @@
|
||||||
[#:fold-rhs (*Remove-Effect (type-rec-id t) v)])
|
[#:fold-rhs (*Remove-Effect (type-rec-id t) v)])
|
||||||
|
|
||||||
;; t is a Type
|
;; t is a Type
|
||||||
(de Latent-Restrict-Effect (t))
|
;; k is a nat
|
||||||
|
(de Latent-Restrict-Effect (t k) [#:frees (free-vars* t) (free-idxs* t)]
|
||||||
|
[#:fold-rhs (*Latent-Restrict-Effect (type-rec-id t) k)])
|
||||||
|
|
||||||
;; t is a Type
|
;; t is a Type
|
||||||
(de Latent-Remove-Effect (t))
|
;; k is a nat
|
||||||
|
(de Latent-Remove-Effect (t k) [#:frees (free-vars* t) (free-idxs* t)]
|
||||||
|
[#:fold-rhs (*Latent-Remove-Effect (type-rec-id t) k)])
|
||||||
|
|
||||||
(de Latent-Var-True-Effect () [#:frees #f] [#:fold-rhs #:base])
|
;; k is a nat
|
||||||
|
(de Latent-Var-True-Effect (k) [#:frees #f] [#:fold-rhs #:base])
|
||||||
|
|
||||||
(de Latent-Var-False-Effect () [#:frees #f] [#:fold-rhs #:base])
|
;; k is a nat
|
||||||
|
(de Latent-Var-False-Effect (k) [#:frees #f] [#:fold-rhs #:base])
|
||||||
|
|
||||||
;; could also have latent true/false effects, but seems pointless
|
;; could also have latent true/false effects, but seems pointless
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
(define-signature-form (cnt stx)
|
(define-signature-form (cnt stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ nm cnt)
|
[(_ nm cnt)
|
||||||
#;(list #'nm)
|
(list #'nm)
|
||||||
(list #'[contracted nm cnt])]))
|
#;(list #'[contracted nm cnt])]))
|
||||||
|
|
||||||
(define-syntax (define-values/link-units/infer stx)
|
(define-syntax (define-values/link-units/infer stx)
|
||||||
;; construct something we can put in the imports/exports clause from the datum
|
;; construct something we can put in the imports/exports clause from the datum
|
||||||
|
|
Loading…
Reference in New Issue
Block a user