contracts: union => or/c

svn: r2290
This commit is contained in:
Philippe Meunier 2006-02-20 23:09:21 +00:00
parent cf85841c57
commit 4190ed9af2
6 changed files with 34 additions and 34 deletions

View File

@ -201,7 +201,7 @@
env)) env))
env args args-labels)) env args args-labels))
; syntax-object (listof (cons symbol label)) -> (union label #f) ; syntax-object (listof (cons symbol label)) -> (or/c label #f)
(define (lookup-env var env) (define (lookup-env var env)
(let ([name-label-pair (assq (syntax-e var) env)]) (let ([name-label-pair (assq (syntax-e var) env)])
(if name-label-pair (if name-label-pair
@ -224,7 +224,7 @@
(define (add-top-level-name sba-state term label) (define (add-top-level-name sba-state term label)
(hash-table-put! (sba-state-top-level-name->label sba-state) (syntax-object->datum term) label)) (hash-table-put! (sba-state-top-level-name->label sba-state) (syntax-object->datum term) label))
; sba-state symbol -> (union label #f) ; sba-state symbol -> (or/c label #f)
; finds the label for a top level var. ; finds the label for a top level var.
(define (lookup-top-level-name sba-state name) (define (lookup-top-level-name sba-state name)
(hash-table-get (sba-state-top-level-name->label sba-state) name cst:thunk-false)) (hash-table-get (sba-state-top-level-name->label sba-state) name cst:thunk-false))
@ -3222,7 +3222,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRIMITIVE TYPE PARSER AND LOOKUP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRIMITIVE TYPE PARSER AND LOOKUP
; sba-state symbol -> (union prim-data #f) ; sba-state symbol -> (or/c prim-data #f)
(define (lookup-primitive-data sba-state name) (define (lookup-primitive-data sba-state name)
(hash-table-get (sba-state-primitive-types-table sba-state) name cst:thunk-false)) (hash-table-get (sba-state-primitive-types-table sba-state) name cst:thunk-false))
@ -4450,14 +4450,14 @@
; called when t2 is a (flow var free) type instead of a handle ; called when t2 is a (flow var free) type instead of a handle
(define/contract subtype-type (define/contract subtype-type
(sba-state? handle? hc:hashcons-type? any/c boolean? (union false/c label?) . -> . boolean?) (sba-state? handle? hc:hashcons-type? any/c boolean? (or/c false/c label?) . -> . boolean?)
(lambda (sba-state t1-handle t2 delta-flow error? label) (lambda (sba-state t1-handle t2 delta-flow error? label)
(subtype sba-state t1-handle (subtype sba-state t1-handle
(hc:hashcons-type (sba-state-hashcons-tbl sba-state) t2) (hc:hashcons-type (sba-state-hashcons-tbl sba-state) t2)
delta-flow error? label))) delta-flow error? label)))
(define/contract subtype (define/contract subtype
(sba-state? handle? handle? any/c boolean? (union false/c label?) . -> . boolean?) (sba-state? handle? handle? any/c boolean? (or/c false/c label?) . -> . boolean?)
(lambda (sba-state t1-handle t2-handle delta-flow error? label) (lambda (sba-state t1-handle t2-handle delta-flow error? label)
(if (subt sba-state (sba-state-hashcons-tbl sba-state) t1-handle t2-handle delta-flow (set-make 'equal)) (if (subt sba-state (sba-state-hashcons-tbl sba-state) t1-handle t2-handle delta-flow (set-make 'equal))
#t #t
@ -4493,11 +4493,11 @@
(eq? term-type '#%top) (eq? term-type '#%top)
(eq? term-type 'quote)))))) (eq? term-type 'quote))))))
; label -> (union number #f) ; label -> (or/c number #f)
(define (get-span-from-label label) (define (get-span-from-label label)
(syntax-span (label-term label))) (syntax-span (label-term label)))
; sba-state label (union 'red 'green 'orange) string -> void ; sba-state label (or/c 'red 'green 'orange) string -> void
(define (set-error-for-label sba-state label gravity message) (define (set-error-for-label sba-state label gravity message)
(err:error-table-set (sba-state-errors sba-state) (err:error-table-set (sba-state-errors sba-state)
(list label) (list label)
@ -4573,7 +4573,7 @@
(set-type-var-reach! (label-type-var label) set) (set-type-var-reach! (label-type-var label) set)
set)))) set))))
; label -> (union type-var handle) ; label -> (or/c type-var handle)
; the label better have a type-var... ; the label better have a type-var...
(define (get-handle-or-type-var label) (define (get-handle-or-type-var label)
(let* ([type-var (label-type-var label)] (let* ([type-var (label-type-var label)]
@ -4646,7 +4646,7 @@
(set-type-var-handle! (label-type-var label) handle) (set-type-var-handle! (label-type-var label) handle)
handle))) handle)))
; type (union (hash-table-of type-flow-var (cons label type)) symbol) -> string ; type (or/c (hash-table-of type-flow-var (cons label type)) symbol) -> string
; type pretty printer ; type pretty printer
; delta-flow is the flow variable environment, or a symbol if no flow environment ; delta-flow is the flow variable environment, or a symbol if no flow environment
; was available at the time of the call. ; was available at the time of the call.

View File

@ -109,7 +109,7 @@
(lambda (dfa state-number) (lambda (dfa state-number)
(hash-table-get (dfa-stnum->state dfa) state-number))) (hash-table-get (dfa-stnum->state dfa) state-number)))
(define/contract greatest-handle (dfa? . -> . (union false/c handle?)) (define/contract greatest-handle (dfa? . -> . (or/c false/c handle?))
(lambda (dfa) (lambda (dfa)
(let ([greatest-handle -1]) (let ([greatest-handle -1])
(hash-table-for-each (dfa-stnum->state dfa) (hash-table-for-each (dfa-stnum->state dfa)
@ -292,7 +292,7 @@
(hash-table-put! state->var state str) (hash-table-put! state->var state str)
str)))] str)))]
[statify [statify
(lambda (sym state) ;((union symbol? list?) state-number? . -> . (union symbol? list?)) (lambda (sym state) ;((or/c symbol? list?) state-number? . -> . (or/c symbol? list?))
(let* ([first (if (list? sym) (car sym) sym)] (let* ([first (if (list? sym) (car sym) sym)]
[first (string->symbol [first (string->symbol
(string-append (symbol->string first) ":" (number->string state)))]) (string-append (symbol->string first) ":" (number->string state)))])
@ -802,13 +802,13 @@
;; ;;
(define/contract set-equiv-class-of-state-number! (define/contract set-equiv-class-of-state-number!
((vectorof (union false/c natural?)) equiv-class? state-number? . -> . void?) ((vectorof (or/c false/c natural?)) equiv-class? state-number? . -> . void?)
(lambda (classes equiv-class stnum) (lambda (classes equiv-class stnum)
(vector-set! classes stnum (equiv-class-number equiv-class)))) (vector-set! classes stnum (equiv-class-number equiv-class))))
;; A function extracting some value from a dfa-state. Discriminators ;; A function extracting some value from a dfa-state. Discriminators
;; are used when comparing two states ;; are used when comparing two states
(define discriminator? (state? . -> . (union integer? boolean?))) (define discriminator? (state? . -> . (or/c integer? boolean?)))
(define/contract block->partition (block? . -> . partition?) (define/contract block->partition (block? . -> . partition?)
list-immutable) list-immutable)

View File

@ -48,16 +48,16 @@
;(pretty-print-columns 105) ;(pretty-print-columns 105)
;; Some predicates for contracts ;; Some predicates for contracts
(define label-type? (union type-case-lambda? type-cons? type-promise? (define label-type? (or/c type-case-lambda? type-cons? type-promise?
type-struct-value? type-union? type-values? type-vector?)) type-struct-value? type-union? type-values? type-vector?))
(define base-type? (union type-empty? type-cst? type-struct-type?)) (define base-type? (or/c type-empty? type-cst? type-struct-type?))
(define hashcons-type? (union label-type? base-type? type-rec?)) (define hashcons-type? (or/c label-type? base-type? type-rec?))
;; ;;
;; Hashcons tables ;; Hashcons tables
;; ;;
(define-struct hashcons-table (define-struct hashcons-table
(from-handle ;; handle -> (union dfa label base-type) (from-handle ;; handle -> (or/c dfa label base-type)
from-dfa ;; dfa -> handle from-dfa ;; dfa -> handle
from-label ;; label -> handle from-label ;; label -> handle
from-base-type ;; base-type -> handle from-base-type ;; base-type -> handle
@ -270,7 +270,7 @@
;; After we've hashconsed a recursive type this does the final job ;; After we've hashconsed a recursive type this does the final job
;; of adding it to the hashcons table. ;; of adding it to the hashcons table.
(define/contract hashcons-rec-type-body (hashcons-table? (union type? handle?) . -> . (union type? handle?)) (define/contract hashcons-rec-type-body (hashcons-table? (or/c type? handle?) . -> . (or/c type? handle?))
(lambda (tbl type) (lambda (tbl type)
(let ([recall-type (lambda (type) (if (has-type? tbl type) (let ([recall-type (lambda (type) (if (has-type? tbl type)
(get-type-handle tbl type) (get-type-handle tbl type)
@ -374,7 +374,7 @@
(hashcons type)))) (hashcons type))))
(define/contract bottom-up-hashcons-rec-type (define/contract bottom-up-hashcons-rec-type
(hashcons-table? . -> . ((listof type-var?) (listof (union type? handle?)) (union type? handle?) . ->d . (hashcons-table? . -> . ((listof type-var?) (listof (or/c type? handle?)) (or/c type? handle?) . ->d .
(lambda (vars types body) (lambda (vars types body)
(when (has-free-vars? (make-type-rec vars types body)) (when (has-free-vars? (make-type-rec vars types body))
(error 'bottom-up-hashcons "~a has free type variables~n" (make-type-rec vars types body))) (error 'bottom-up-hashcons "~a has free type variables~n" (make-type-rec vars types body)))
@ -646,7 +646,7 @@
[else (error 'fold-type "Unmatched type ~a" type)]))))) [else (error 'fold-type "Unmatched type ~a" type)])))))
;; Return a type with handles replacing variables ;; Return a type with handles replacing variables
(define/contract subst-handles/vars ((union label-type? handle? type-var?) tenv? . -> . (union type? handle?)) (define/contract subst-handles/vars ((or/c label-type? handle? type-var?) tenv? . -> . (or/c type? handle?))
(lambda (type tenv) (lambda (type tenv)
(let subst ([type type]) (let subst ([type type])
(cond (cond
@ -684,7 +684,7 @@
[else (error 'subst-handles/vars "Unmatched type ~a" type)])))) [else (error 'subst-handles/vars "Unmatched type ~a" type)]))))
(define/contract subst-handles/vars-if-possible (define/contract subst-handles/vars-if-possible
((union hashcons-type? handle? type-var?) tenv? . -> . (union type? handle?)) ((or/c hashcons-type? handle? type-var?) tenv? . -> . (or/c type? handle?))
(lambda (type tenv) (lambda (type tenv)
(let subst ([type type]) (let subst ([type type])
(match type (match type
@ -722,7 +722,7 @@
type]) type])
))) )))
(define/contract has-free-vars? ((union type? handle?) . -> . boolean?) (define/contract has-free-vars? ((or/c type? handle?) . -> . boolean?)
(lambda (type) (lambda (type)
(let* ([bound-vars (make-hash-table)] (let* ([bound-vars (make-hash-table)]
[bind (lambda (var) [bind (lambda (var)
@ -769,7 +769,7 @@
[_ (error 'has-free-vars? "Unmatched type ~a" type)])]) [_ (error 'has-free-vars? "Unmatched type ~a" type)])])
(has-free-vars? type)))))) (has-free-vars? type))))))
(define/contract get-referenced-vars ((union type? handle?) . -> . (listof symbol?)) (define/contract get-referenced-vars ((or/c type? handle?) . -> . (listof symbol?))
(lambda (type) (lambda (type)
(let ([refed (make-hash-table)]) (let ([refed (make-hash-table)])
(let loop ([type type]) (let loop ([type type])
@ -797,7 +797,7 @@
(hash-table-map refed (lambda (v _) v)))))) (hash-table-map refed (lambda (v _) v))))))
(define/contract same-label-type? (define/contract same-label-type?
(hashcons-table? state? (union type? handle?) . -> . boolean?) (hashcons-table? state? (or/c type? handle?) . -> . boolean?)
(lambda (tbl state type) (lambda (tbl state type)
(or (and (handle-state? state) (handle? type) (= (handle-state-handle state) type)) (or (and (handle-state? state) (handle? type) (= (handle-state-handle state) type))
(and (handle-state? state) (equal? (get-type tbl (handle-state-handle state)) type)) (and (handle-state? state) (equal? (get-type tbl (handle-state-handle state)) type))
@ -1163,7 +1163,7 @@
(hash-table-put! handle->var handle str) (hash-table-put! handle->var handle str)
str)))] str)))]
[handlify [handlify
(lambda (str handle) ;(any/c handle? . -> . (union symbol? (cons/p symbol? any/c))) (lambda (str handle) ;(any/c handle? . -> . (or/c symbol? (cons/p symbol? any/c)))
(let* ([first (if (list? str) (car str) str)] (let* ([first (if (list? str) (car str) str)]
[first-handle [first-handle
(string->symbol (string->symbol

View File

@ -114,7 +114,7 @@
(for-each-label-in-source (gui-model-state? any/c (label? . -> . void?) . -> . void?)) (for-each-label-in-source (gui-model-state? any/c (label? . -> . void?) . -> . void?))
(add-arrow (gui-model-state? (list/c label? label? string?) boolean? . -> . void?)) (add-arrow (gui-model-state? (list/c label? label? string?) boolean? . -> . void?))
(remove-arrows (gui-model-state? label? (union symbol? boolean?) boolean? . -> . void?)) (remove-arrows (gui-model-state? label? (or/c symbol? boolean?) boolean? . -> . void?))
(remove-all-arrows (gui-model-state? . -> . void?)) (remove-all-arrows (gui-model-state? . -> . void?))
(for-each-arrow (gui-model-state? (non-negative-exact-integer? non-negative-exact-integer? non-negative-exact-integer? non-negative-exact-integer? any/c any/c boolean? string? . -> . void?) . -> . void?)) (for-each-arrow (gui-model-state? (non-negative-exact-integer? non-negative-exact-integer? non-negative-exact-integer? non-negative-exact-integer? any/c any/c boolean? string? . -> . void?) . -> . void?))
(get-tacked-arrows-from-label (gui-model-state? label? . -> . non-negative-exact-integer?)) (get-tacked-arrows-from-label (gui-model-state? label? . -> . non-negative-exact-integer?))
@ -222,7 +222,7 @@
(label-gui-data-left-new-pos label-gui-data) (label-gui-data-left-new-pos label-gui-data)
(get-new-pos-from-label gui-model-state label)))) (get-new-pos-from-label gui-model-state label))))
; gui-model-state label -> (union top #f) ; gui-model-state label -> (or/c top #f)
; we register the source of the label and the label by its position, ; we register the source of the label and the label by its position,
; but we don't associate any label-gui-data with it yet, to save memory. ; but we don't associate any label-gui-data with it yet, to save memory.
; We'll associate some label-gui-data with it on the fly, as needed (when ; We'll associate some label-gui-data with it on the fly, as needed (when
@ -556,7 +556,7 @@
(make-ending-arrow-set))))) (make-ending-arrow-set)))))
cst:void) cst:void)
; gui-model-state label (union symbol boolean) boolean -> void ; gui-model-state label (or/c symbol boolean) boolean -> void
; remove arrows starting at given label AND arrows ending at same given label ; remove arrows starting at given label AND arrows ending at same given label
; Note that assoc-set-get will fail if we try to remove non-existant arrows... ; Note that assoc-set-get will fail if we try to remove non-existant arrows...
(define (remove-arrows gui-model-state start-label tacked? exn?) (define (remove-arrows gui-model-state start-label tacked? exn?)
@ -588,7 +588,7 @@
get-source-from-label))) get-source-from-label)))
cst:void) cst:void)
; (assoc-setof top source-gui-data) (setof arrow) (union symbol boolean) ; (assoc-setof top source-gui-data) (setof arrow) (or/c symbol boolean)
; (arrow -> label) (label-gui-data -> (setof arrow)) ; (arrow -> label) (label-gui-data -> (setof arrow))
; (label -> top) ; (label -> top)
; -> (setof arrow) ; -> (setof arrow)

View File

@ -64,7 +64,7 @@
(add-arrow (gui-view-state? (list/c label? label? string?) boolean? . -> . void?)) (add-arrow (gui-view-state? (list/c label? label? string?) boolean? . -> . void?))
(get-tacked-arrows-from-label (gui-view-state? label? . -> . non-negative-exact-integer?)) (get-tacked-arrows-from-label (gui-view-state? label? . -> . non-negative-exact-integer?))
(remove-arrows (gui-view-state? label? (union symbol? boolean?) boolean? . -> . void?)) (remove-arrows (gui-view-state? label? (or/c symbol? boolean?) boolean? . -> . void?))
(redraw-arrows (gui-view-state? (is-a?/c dc<%>) real? real? . -> . void?)) (redraw-arrows (gui-view-state? (is-a?/c dc<%>) real? real? . -> . void?))
(invalidate-bitmap-cache (gui-view-state? . -> . void?)) (invalidate-bitmap-cache (gui-view-state? . -> . void?))
@ -167,7 +167,7 @@
(define (add-arrow gui-view-state arrow-info tacked?) (define (add-arrow gui-view-state arrow-info tacked?)
(saam:add-arrow (gui-view-state-gui-model-state gui-view-state) arrow-info tacked?)) (saam:add-arrow (gui-view-state-gui-model-state gui-view-state) arrow-info tacked?))
; gui-view-state label (union symbol boolean) boolean -> void ; gui-view-state label (or/c symbol boolean) boolean -> void
(define (remove-arrows gui-view-state start-label tacked? exn?) (define (remove-arrows gui-view-state start-label tacked? exn?)
(saam:remove-arrows (gui-view-state-gui-model-state gui-view-state) start-label tacked? exn?)) (saam:remove-arrows (gui-view-state-gui-model-state gui-view-state) start-label tacked? exn?))

View File

@ -29,7 +29,7 @@
(old-make-trie '() (make-hash-table 'equal))))) (old-make-trie '() (make-hash-table 'equal)))))
; Get the trie on the edge labeled by the DFA state ; Get the trie on the edge labeled by the DFA state
(define/contract get-trie-child (trie? state? . -> . (union trie? false/c)) (define/contract get-trie-child (trie? state? . -> . (or/c trie? false/c))
(lambda (trie letter) (lambda (trie letter)
(hash-table-get (trie-dfa-state->trie trie) letter cst:thunk-false))) (hash-table-get (trie-dfa-state->trie trie) letter cst:thunk-false)))
@ -75,7 +75,7 @@
; contains the start state. Getting the representative handle, we ; contains the start state. Getting the representative handle, we
; can lookup the handle of the start state in this noted trie. ; can lookup the handle of the start state in this noted trie.
(define/contract dfa-present? (define/contract dfa-present?
(trie? (nonempty-list-of? state?) . -> . (union false/c (listof handle?))) (trie? (nonempty-list-of? state?) . -> . (or/c false/c (listof handle?)))
(lambda (trie nstates) (lambda (trie nstates)
(let/ec return-with (let/ec return-with
(let* ([rev-tries (list:foldl (lambda (state tries) (let* ([rev-tries (list:foldl (lambda (state tries)