Prevent unbound identifiers from being in the base env.
Fix some bugs caught by this. svn: r18526
This commit is contained in:
parent
3edf8cdac6
commit
9035e2e584
42
collects/tests/typed-scheme/succeed/cps.ss
Normal file
42
collects/tests/typed-scheme/succeed/cps.ss
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#lang typed/scheme
|
||||||
|
|
||||||
|
;; variables
|
||||||
|
(define-type Var Symbol)
|
||||||
|
(define-type UserVar Var)
|
||||||
|
(define-struct: ContVar ([v : Var]))
|
||||||
|
(define-type AnyVar (U UserVar ContVar))
|
||||||
|
|
||||||
|
;; constructors
|
||||||
|
(define-struct: (V A) lamV ([x : V] [b : A]))
|
||||||
|
(define-struct: (A B) app ([rator : A] [rand : B]))
|
||||||
|
|
||||||
|
(define-type (lam A) (lamV Var A))
|
||||||
|
(define-type (lamC A) (lamV ContVar A))
|
||||||
|
|
||||||
|
;; non-partitioned CPS (from Dimitrios Vardoulakis)
|
||||||
|
(define-type Λ (Rec L (U Var (lam L) (app L L))))
|
||||||
|
(define-type Uv (Rec Uv
|
||||||
|
(U Var (lam (lam (U (app (app Uv Uv) (Rec Cv (U Var (lam (U (app (app Uv Uv) Cv)
|
||||||
|
(app Cv Uv))))))
|
||||||
|
(app (Rec Cv (U Var (lam (U (app (app Uv Uv) Cv)
|
||||||
|
(app Cv Uv)))))
|
||||||
|
Uv)))))))
|
||||||
|
|
||||||
|
(define-type Cv (Rec Cv (U Var (lam (U (app (app Uv Uv) Cv)
|
||||||
|
(app Cv Uv))))))
|
||||||
|
(define-type Call (U (app (app Uv Uv) Cv)
|
||||||
|
(app Cv Uv)))
|
||||||
|
(define-type CPS (U Cv Uv Call))
|
||||||
|
|
||||||
|
(: f (CPS -> Λ))
|
||||||
|
(define (f x) x)
|
||||||
|
|
||||||
|
;; partitioned CPS (from Sabry and Felleisen LaSC 93)
|
||||||
|
(define-type Λ2 (Rec L (U AnyVar (lamV AnyVar L) (app L L))))
|
||||||
|
|
||||||
|
(define-type K (Rec K (U ContVar (app (U Var (lamC K)) K) (lam (app K (U Var (lamC K)))))))
|
||||||
|
(define-type P (app K (U Var (lamC K))))
|
||||||
|
(define-type W (U Var (lamC K)))
|
||||||
|
|
||||||
|
(: f* (P -> Λ2))
|
||||||
|
(define (f* x) x)
|
|
@ -8,7 +8,7 @@
|
||||||
(define-type OddParity (Rec Odd (U (Z Odd) (O (Rec Even (U '() (Z Even) (O Odd)))))))
|
(define-type OddParity (Rec Odd (U (Z Odd) (O (Rec Even (U '() (Z Even) (O Odd)))))))
|
||||||
|
|
||||||
(: append-one (case-lambda (EvenParity -> OddParity)
|
(: append-one (case-lambda (EvenParity -> OddParity)
|
||||||
(OddParity -> EvenParity)
|
(OddParity -> EvenParity)
|
||||||
(Bitstring -> Bitstring)))
|
(Bitstring -> Bitstring)))
|
||||||
(define (append-one l)
|
(define (append-one l)
|
||||||
(if (null? l)
|
(if (null? l)
|
||||||
|
@ -16,3 +16,8 @@
|
||||||
(if (Z? l)
|
(if (Z? l)
|
||||||
(make-Z (append-one (Z-b l)))
|
(make-Z (append-one (Z-b l)))
|
||||||
(make-O (append-one (O-b l))))))
|
(make-O (append-one (O-b l))))))
|
||||||
|
|
||||||
|
(: bs-id (Bitstring -> Bitstring))
|
||||||
|
(define (bs-id x) x)
|
||||||
|
|
||||||
|
(define: z : Bitstring (bs-id (append-one null)))
|
||||||
|
|
|
@ -699,6 +699,7 @@
|
||||||
[tc-e (filter even? (filter exact-integer? (list 1 2 3 'foo)))
|
[tc-e (filter even? (filter exact-integer? (list 1 2 3 'foo)))
|
||||||
(-lst -Integer)]
|
(-lst -Integer)]
|
||||||
|
|
||||||
|
#|
|
||||||
[tc-err (plambda: (a ...) [as : a ... a]
|
[tc-err (plambda: (a ...) [as : a ... a]
|
||||||
(apply fold-left (lambda: ([c : Integer] [a : Char] . [xs : a ... a]) c)
|
(apply fold-left (lambda: ([c : Integer] [a : Char] . [xs : a ... a]) c)
|
||||||
3 (list #\c) as))]
|
3 (list #\c) as))]
|
||||||
|
@ -712,7 +713,7 @@
|
||||||
[tc-e/t (plambda: (a ...) [as : a ... a]
|
[tc-e/t (plambda: (a ...) [as : a ... a]
|
||||||
(apply fold-left (lambda: ([c : Integer] [a : Char] . [xs : a ... a]) c)
|
(apply fold-left (lambda: ([c : Integer] [a : Char] . [xs : a ... a]) c)
|
||||||
3 (list #\c) (map list as)))
|
3 (list #\c) (map list as)))
|
||||||
(-polydots (a) ((list) (a a) . ->... . -Integer))]
|
(-polydots (a) ((list) (a a) . ->... . -Integer))]|#
|
||||||
|
|
||||||
;; First is same as second, but with map explicitly instantiated.
|
;; First is same as second, but with map explicitly instantiated.
|
||||||
[tc-e/t (plambda: (a ...) [ys : (a ... a -> Number) *]
|
[tc-e/t (plambda: (a ...) [ys : (a ... a -> Number) *]
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
(only-in '#%kernel [apply kernel:apply])
|
(only-in '#%kernel [apply kernel:apply])
|
||||||
scheme/promise scheme/system
|
scheme/promise scheme/system
|
||||||
(only-in string-constants/private/only-once maybe-print-message)
|
(only-in string-constants/private/only-once maybe-print-message)
|
||||||
|
(only-in mzscheme make-namespace)
|
||||||
(only-in scheme/match/runtime match:error matchable? match-equality-test)
|
(only-in scheme/match/runtime match:error matchable? match-equality-test)
|
||||||
(for-syntax (only-in (types abbrev) [-Number N] [-Boolean B] [-Symbol Sym])
|
(for-syntax (only-in (types abbrev) [-Number N] [-Boolean B] [-Symbol Sym])
|
||||||
(only-in (rep type-rep) make-HashtableTop make-MPairTop make-BoxTop make-VectorTop)))
|
(only-in (rep type-rep) make-HashtableTop make-MPairTop make-BoxTop make-VectorTop)))
|
||||||
|
@ -78,10 +79,10 @@
|
||||||
[cons (-poly (a b)
|
[cons (-poly (a b)
|
||||||
(cl->* [->* (list a (-lst a)) (-lst a)]
|
(cl->* [->* (list a (-lst a)) (-lst a)]
|
||||||
[->* (list a b) (-pair a b)]))]
|
[->* (list a b) (-pair a b)]))]
|
||||||
[*cons (-poly (a b) (cl->
|
#;[*cons (-poly (a b) (cl->
|
||||||
[(a b) (-pair a b)]
|
[(a b) (-pair a b)]
|
||||||
[(a (-lst a)) (-lst a)]))]
|
[(a (-lst a)) (-lst a)]))]
|
||||||
[*list? (make-pred-ty (-lst Univ))]
|
#;[*list? (make-pred-ty (-lst Univ))]
|
||||||
|
|
||||||
[null? (make-pred-ty (-val null))]
|
[null? (make-pred-ty (-val null))]
|
||||||
[eof-object? (make-pred-ty (-val eof))]
|
[eof-object? (make-pred-ty (-val eof))]
|
||||||
|
@ -142,9 +143,9 @@
|
||||||
((-lst b) b) . ->... .(-lst c))))]
|
((-lst b) b) . ->... .(-lst c))))]
|
||||||
[for-each (-polydots (c a b) ((list ((list a) (b b) . ->... . Univ) (-lst a))
|
[for-each (-polydots (c a b) ((list ((list a) (b b) . ->... . Univ) (-lst a))
|
||||||
((-lst b) b) . ->... . -Void))]
|
((-lst b) b) . ->... . -Void))]
|
||||||
[fold-left (-polydots (c a b) ((list ((list c a) (b b) . ->... . c) c (-lst a))
|
#;[fold-left (-polydots (c a b) ((list ((list c a) (b b) . ->... . c) c (-lst a))
|
||||||
((-lst b) b) . ->... . c))]
|
((-lst b) b) . ->... . c))]
|
||||||
[fold-right (-polydots (c a b) ((list ((list c a) (b b) . ->... . c) c (-lst a))
|
#;[fold-right (-polydots (c a b) ((list ((list c a) (b b) . ->... . c) c (-lst a))
|
||||||
((-lst b) b) . ->... . c))]
|
((-lst b) b) . ->... . c))]
|
||||||
[foldl
|
[foldl
|
||||||
(-poly (a b c d)
|
(-poly (a b c d)
|
||||||
|
@ -189,8 +190,6 @@
|
||||||
[printf (->* (list -String) Univ -Void)]
|
[printf (->* (list -String) Univ -Void)]
|
||||||
[fprintf (->* (list -Output-Port -String) Univ -Void)]
|
[fprintf (->* (list -Output-Port -String) Univ -Void)]
|
||||||
[format (->* (list -String) Univ -String)]
|
[format (->* (list -String) Univ -String)]
|
||||||
[fst (-poly (a b) (-> (-pair a b) a))]
|
|
||||||
[snd (-poly (a b) (-> (-pair a b) b))]
|
|
||||||
|
|
||||||
[sleep (N . -> . -Void)]
|
[sleep (N . -> . -Void)]
|
||||||
|
|
||||||
|
@ -364,7 +363,7 @@
|
||||||
[vector-length (-poly (a) ((-vec a) . -> . -Nat))]
|
[vector-length (-poly (a) ((-vec a) . -> . -Nat))]
|
||||||
[vector (-poly (a) (->* (list) a (-vec a)))]
|
[vector (-poly (a) (->* (list) a (-vec a)))]
|
||||||
[vector-immutable (-poly (a) (->* (list) a (-vec a)))]
|
[vector-immutable (-poly (a) (->* (list) a (-vec a)))]
|
||||||
[vector->vector-immutable (-poly (a) (-> (-vec a) (-vec a)))]
|
[vector->immutable-vector (-poly (a) (-> (-vec a) (-vec a)))]
|
||||||
[vector-fill! (-poly (a) (-> (-vec a) a -Void))]
|
[vector-fill! (-poly (a) (-> (-vec a) a -Void))]
|
||||||
;; [vector->values no good type here]
|
;; [vector->values no good type here]
|
||||||
|
|
||||||
|
|
|
@ -161,7 +161,8 @@ don't depend on any other portion of the system
|
||||||
(define-syntax-class spec
|
(define-syntax-class spec
|
||||||
#:transparent
|
#:transparent
|
||||||
#:attributes (ty id)
|
#:attributes (ty id)
|
||||||
(pattern [nm:identifier ty]
|
(pattern [nm:identifier ~! ty]
|
||||||
|
#:fail-unless (list? (identifier-template-binding #'nm)) "not a bound identifier"
|
||||||
#:with id #'#'nm)
|
#:with id #'#'nm)
|
||||||
(pattern [e:expr ty]
|
(pattern [e:expr ty]
|
||||||
#:with id #'e))
|
#:with id #'e))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user