Allow ... rest variables to be used as lists.

Bind Values as a type.

svn: r11010
This commit is contained in:
Sam Tobin-Hochstadt 2008-07-31 19:26:46 +00:00
parent 14b180d5a7
commit fa857a40ac
2 changed files with 7 additions and 5 deletions

View File

@ -82,7 +82,7 @@
-> U mu Un All Opaque Vectorof
Parameter Tuple Class
Parameter Tuple Class Values
)
(provide-extra-tnames)

View File

@ -1,6 +1,6 @@
#lang scheme/base
(require "type-environments.ss" "tc-utils.ss" "type-env.ss" "mutated-vars.ss" "type-utils.ss")
(require "type-environments.ss" "tc-utils.ss" "type-env.ss" "mutated-vars.ss" "type-utils.ss" "type-effect-convenience.ss")
(provide (all-defined-out))
@ -23,9 +23,11 @@
(lookup (lexical-env) i
(lambda (i) (lookup-type
i (lambda ()
(if (lookup (dotted-env) i (lambda _ #f))
(tc-error/expr "Rest variable ~a with ... type used in an inappropriate context" (syntax-e i))
(lookup-fail (syntax-e i))))))))
(cond [(lookup (dotted-env) i (lambda _ #f))
=>
(lambda (a)
(-lst (substitute Univ (cdr a) (car a))))]
[else (lookup-fail (syntax-e i))]))))))
;; refine the type of i in the lexical env
;; (identifier type -> type) identifier -> environment