Skip to content

Commit 6e4e61b

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 858d6d4 + f12415f commit 6e4e61b

File tree

20 files changed

+166
-176
lines changed

20 files changed

+166
-176
lines changed

typed-racket-lib/typed-racket/optimizer/sequence.rkt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
#lang racket/base
22

3-
(require syntax/parse
4-
racket/match
3+
(require (for-template racket/base
4+
racket/unsafe/ops)
55
racket/function
6+
racket/match
7+
syntax/parse
68
syntax/parse/experimental/specialize
7-
(for-template racket/base racket/unsafe/ops)
8-
"../utils/utils.rkt" "../utils/tc-utils.rkt"
99
"../rep/type-rep.rkt"
1010
"../types/abbrev.rkt"
11-
"utils.rkt"
11+
"../utils/tc-utils.rkt"
12+
"../utils/utils.rkt"
13+
"float.rkt"
1214
"logging.rkt"
13-
"float.rkt")
15+
"utils.rkt")
1416

1517
(provide sequence-opt-expr)
1618

typed-racket-lib/typed-racket/static-contracts/combinators/derived.rkt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,16 @@
44
;; These are used during optimizations as simplifications.
55
;; Ex: (listof/sc any/sc) => list?/sc
66

7-
(require "simple.rkt" "structural.rkt"
8-
(for-template racket/base racket/list racket/set racket/promise
9-
racket/class racket/unit racket/async-channel racket/future))
7+
(require (for-template racket/async-channel
8+
racket/base
9+
racket/class
10+
racket/future
11+
racket/list
12+
racket/promise
13+
racket/set
14+
racket/unit)
15+
"simple.rkt"
16+
"structural.rkt")
1017
(provide (all-defined-out))
1118

1219
(define identifier?/sc (flat/sc #'identifier?))

typed-racket-lib/typed-racket/static-contracts/combinators/exist.rkt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,14 @@
2727
(f rngs 'invariant)
2828
(void))
2929
(define (sc->contract v f)
30-
(match v
31-
[(exist-combinator (list names doms rngs))
32-
(parameterize ([static-contract-may-contain-free-ids? #t])
33-
(let ([a (with-syntax ([doms-stx (f doms)]
34-
[rngs-stx (f rngs)]
35-
[n (car names)])
36-
#'(->i ([n doms-stx])
37-
(_ (n)
38-
rngs-stx)))])
39-
a))]))
30+
(match-define (exist-combinator (list names doms rngs)) v)
31+
(parameterize ([static-contract-may-contain-free-ids? #t])
32+
(define a
33+
(with-syntax ([doms-stx (f doms)]
34+
[rngs-stx (f rngs)]
35+
[n (car names)])
36+
#'(->i ([n doms-stx]) (_ (n) rngs-stx))))
37+
a))
4038
(define (sc->constraints v f)
4139
(simple-contract-restrict 'flat))])
4240

typed-racket-lib/typed-racket/static-contracts/combinators/name.rkt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,9 @@
7676
[else (raise-argument-error 'lookup-name-sc "side?" typed-side)])))
7777

7878
(define (register-name-sc type typed-thunk untyped-thunk both-thunk)
79-
(define-values (typed-name untyped-name both-name)
80-
(values (generate-temporary)
81-
(generate-temporary)
82-
(generate-temporary)))
79+
(define typed-name (generate-temporary))
80+
(define untyped-name (generate-temporary))
81+
(define both-name (generate-temporary))
8382
(hash-set! (name-sc-table)
8483
type
8584
(list (name-combinator null typed-name)

typed-racket-lib/typed-racket/static-contracts/combinators/parametric.rkt

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,18 @@
3535
#:property prop:combinator-name "parametric->/sc"
3636
#:methods gen:sc
3737
[(define (sc-map v f)
38-
(match v
39-
[(parametric-combinator (list arg) vars)
40-
(parametric-combinator (list (f arg 'covariant)) vars)]))
38+
(match-define (parametric-combinator (list arg) vars) v)
39+
(parametric-combinator (list (f arg 'covariant)) vars))
4140
(define (sc-traverse v f)
42-
(match v
43-
[(parametric-combinator (list arg) vars)
44-
(f arg 'covariant)
45-
(void)]))
41+
(match-define (parametric-combinator (list arg) vars) v)
42+
(f arg 'covariant)
43+
(void))
4644
(define (sc->contract v f)
47-
(match v
48-
[(parametric-combinator (list arg) vars)
49-
#`(parametric->/c #,vars #,(f arg))]))
45+
(match-define (parametric-combinator (list arg) vars) v)
46+
#`(parametric->/c #,vars #,(f arg)))
5047
(define (sc->constraints v f)
51-
(match v
52-
[(parametric-combinator (list arg) vars)
53-
(merge-restricts* 'impersonator (list (f arg)))]))])
48+
(match-define (parametric-combinator (list arg) vars) v)
49+
(merge-restricts* 'impersonator (list (f arg))))])
5450

5551
(define (parametric->/sc vars body)
5652
(parametric-combinator (list body) vars))
@@ -70,22 +66,18 @@
7066
#:property prop:combinator-name "sealing->/sc"
7167
#:methods gen:sc
7268
[(define (sc-map v f)
73-
(match v
74-
[(sealing-combinator (list arg) vars members)
75-
(sealing-combinator (list (f arg 'covariant)) vars members)]))
69+
(match-define (sealing-combinator (list arg) vars members) v)
70+
(sealing-combinator (list (f arg 'covariant)) vars members))
7671
(define (sc-traverse v f)
77-
(match v
78-
[(sealing-combinator (list arg) vars members)
79-
(f arg 'covariant)
80-
(void)]))
72+
(match-define (sealing-combinator (list arg) vars members) v)
73+
(f arg 'covariant)
74+
(void))
8175
(define (sc->contract v f)
82-
(match v
83-
[(sealing-combinator (list arg) vars members)
84-
#`(sealing->/c #,(car vars) #,members #,(f arg))]))
76+
(match-define (sealing-combinator (list arg) vars members) v)
77+
#`(sealing->/c #,(car vars) #,members #,(f arg)))
8578
(define (sc->constraints v f)
86-
(match v
87-
[(sealing-combinator (list arg) vars members)
88-
(merge-restricts* 'impersonator (list (f arg)))]))])
79+
(match-define (sealing-combinator (list arg) vars members) v)
80+
(merge-restricts* 'impersonator (list (f arg))))])
8981

9082
(define (sealing->/sc vars members body)
9183
(sealing-combinator (list body) vars members))

typed-racket-lib/typed-racket/static-contracts/constraints.rkt

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -182,32 +182,28 @@
182182

183183

184184
(define (add-constraint cr max)
185-
(match cr
186-
[(contract-restrict v rec constraints)
187-
(define con (constraint v max))
188-
(if (trivial-constraint? con)
189-
cr
190-
(contract-restrict v rec (set-add constraints con)))]))
185+
(match-define (contract-restrict v rec constraints) cr)
186+
(define con (constraint v max))
187+
(if (trivial-constraint? con)
188+
cr
189+
(contract-restrict v rec (set-add constraints con))))
191190

192-
(define (add-recursive-values cr dict)
193-
(match cr
194-
[(contract-restrict v rec constraints)
195-
(contract-restrict v (free-id-table-union (list rec dict)) constraints)]))
191+
(define (add-recursive-values cr dict)
192+
(match-define (contract-restrict v rec constraints) cr)
193+
(contract-restrict v (free-id-table-union (list rec dict)) constraints))
196194

197195
(define (merge-restricts* min crs)
198196
(apply merge-restricts min crs))
199197

200198
(define (merge-restricts min . crs)
201-
(match crs
202-
[(list (contract-restrict vs rec constraints) ...)
203-
(contract-restrict (merge-kind-maxes min vs)
204-
(free-id-table-union rec)
205-
(apply set-union (set) constraints))]))
199+
(match-define (list (contract-restrict vs rec constraints) ...) crs)
200+
(contract-restrict (merge-kind-maxes min vs)
201+
(free-id-table-union rec)
202+
(apply set-union (set) constraints)))
206203

207204
(define (merge-kind-maxes min-kind vs)
208-
(match vs
209-
[(list (kind-max variables maxes) ...)
210-
(kind-max (free-id-set-union variables) (apply combine-kinds min-kind maxes))]))
205+
(match-define (list (kind-max variables maxes) ...) vs)
206+
(kind-max (free-id-set-union variables) (apply combine-kinds min-kind maxes)))
211207

212208
(define (close-loop names crs body)
213209
(define eqs (make-equation-set))
@@ -222,38 +218,36 @@
222218

223219
(define (instantiate-cr cr lookup-id)
224220
(define (instantiate-kind-max km)
225-
(match km
226-
[(kind-max ids actual)
227-
(define-values (bvals unbound-ids)
228-
(for/fold ([bvals '()] [ubids (make-immutable-free-id-table)])
229-
([(id _) (in-free-id-table ids)])
230-
(if (member id names)
231-
(values (cons (contract-restrict-value (lookup-id id)) bvals) ubids)
232-
(values bvals (free-id-table-set ubids id #t)))))
233-
(merge-kind-maxes 'flat (cons (kind-max unbound-ids actual) bvals))]))
221+
(match-define (kind-max ids actual) km)
222+
(define-values (bvals unbound-ids)
223+
(for/fold ([bvals '()]
224+
[ubids (make-immutable-free-id-table)])
225+
([(id _) (in-free-id-table ids)])
226+
(if (member id names)
227+
(values (cons (contract-restrict-value (lookup-id id)) bvals) ubids)
228+
(values bvals (free-id-table-set ubids id #t)))))
229+
(merge-kind-maxes 'flat (cons (kind-max unbound-ids actual) bvals)))
234230

235231
(define (instantiate-constraint con)
236-
(match con
237-
[(constraint km bound)
238-
(constraint (instantiate-kind-max km) bound)]))
239-
240-
(match cr
241-
[(contract-restrict (kind-max ids max) rec constraints)
242-
(define-values (bound-vals unbound-ids)
243-
(for/fold ([bvs '()] [ubids (make-immutable-free-id-table)])
244-
([(id _) (in-free-id-table ids)])
245-
(if (member id names)
246-
(values (cons (lookup-id id) bvs) ubids)
247-
(values bvs (free-id-table-set ubids id #t)))))
248-
(merge-restricts* 'flat (cons
249-
(contract-restrict
250-
(kind-max unbound-ids max)
251-
rec
252-
(for*/set ([c (in-immutable-set constraints)]
253-
[ic (in-value (instantiate-constraint c))]
254-
#:when (not (trivial-constraint? ic)))
255-
ic))
256-
bound-vals))]))
232+
(match-define (constraint km bound) con)
233+
(constraint (instantiate-kind-max km) bound))
234+
235+
(match-define (contract-restrict (kind-max ids max) rec constraints) cr)
236+
(define-values (bound-vals unbound-ids)
237+
(for/fold ([bvs '()]
238+
[ubids (make-immutable-free-id-table)])
239+
([(id _) (in-free-id-table ids)])
240+
(if (member id names)
241+
(values (cons (lookup-id id) bvs) ubids)
242+
(values bvs (free-id-table-set ubids id #t)))))
243+
(merge-restricts* 'flat
244+
(cons (contract-restrict (kind-max unbound-ids max)
245+
rec
246+
(for*/set ([c (in-immutable-set constraints)]
247+
[ic (in-value (instantiate-constraint c))]
248+
#:when (not (trivial-constraint? ic)))
249+
ic))
250+
bound-vals)))
257251

258252
(for ([name (in-list names)]
259253
[cr (in-list crs)])

typed-racket-lib/typed-racket/static-contracts/instantiate.rkt

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,24 @@
22

33
;; Provides functionality to take a static contract and turn it into a regular contract.
44

5-
(require
6-
"../utils/utils.rkt"
7-
racket/match
8-
racket/list
9-
racket/contract
10-
racket/syntax
11-
syntax/private/id-table
12-
(for-template racket/base racket/contract)
13-
"combinators.rkt"
14-
"combinators/name.rkt"
15-
"combinators/case-lambda.rkt"
16-
"combinators/parametric.rkt"
17-
"kinds.rkt"
18-
"optimize.rkt"
19-
"parametric-check.rkt"
20-
"structures.rkt"
21-
"constraints.rkt"
22-
"equations.rkt")
5+
(require (for-template racket/base
6+
racket/contract)
7+
racket/contract
8+
racket/list
9+
racket/match
10+
racket/syntax
11+
syntax/private/id-table
12+
"../utils/utils.rkt"
13+
"combinators.rkt"
14+
"combinators/case-lambda.rkt"
15+
"combinators/name.rkt"
16+
"combinators/parametric.rkt"
17+
"constraints.rkt"
18+
"equations.rkt"
19+
"kinds.rkt"
20+
"optimize.rkt"
21+
"parametric-check.rkt"
22+
"structures.rkt")
2323

2424
(provide static-contract-may-contain-free-ids?)
2525

@@ -145,12 +145,14 @@
145145
(variable-ref (hash-ref vars id)))
146146

147147
(for ([(name v) (in-free-id-table recursives)])
148-
(match v
149-
[(kind-max others max)
150-
(add-equation! eqs
151-
(hash-ref vars name)
152-
(λ () (apply combine-kinds max (for/list ([(id _) (in-free-id-table others)])
153-
(lookup id)))))]))
148+
(match-define (kind-max others max) v)
149+
(add-equation! eqs
150+
(hash-ref vars name)
151+
(λ ()
152+
(apply combine-kinds
153+
max
154+
(for/list ([(id _) (in-free-id-table others)])
155+
(lookup id))))))
154156
(define var-values (resolve-equations eqs))
155157
(for/hash ([(name var) (in-hash vars)])
156158
(values name (hash-ref var-values var))))

typed-racket-lib/typed-racket/static-contracts/optimize.rkt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
;; All results must have the same range
112112
(unless (equal? (set-count (list->set ranges)) 1)
113113
(fail))
114-
(define sorted-args (sort args (λ (l1 l2) (< (length l1) (length l2)))))
114+
(define sorted-args (sort args < #:key length))
115115
(define shortest-args (first sorted-args))
116116
(define longest-args (last sorted-args))
117117
;; The number of arguments must increase by 1 with no gaps
@@ -341,11 +341,11 @@
341341
(let loop ((to-look-at reachable))
342342
(unless (zero? (free-id-table-count to-look-at))
343343
(define new-table (make-free-id-table))
344-
(for ([(id _) (in-free-id-table to-look-at)])
345-
(for ([(id _) (in-free-id-table (free-id-table-ref main-table id))])
346-
(unless (free-id-table-ref seen id #f)
347-
(free-id-table-set! seen id #t)
348-
(free-id-table-set! new-table id #t))))
344+
(for* ([(id _) (in-free-id-table to-look-at)]
345+
[(id _) (in-free-id-table (free-id-table-ref main-table id))]
346+
#:unless (free-id-table-ref seen id #f))
347+
(free-id-table-set! seen id #t)
348+
(free-id-table-set! new-table id #t))
349349
(loop new-table)))
350350

351351
;; Determine if the recursive name is referenced in the static contract
@@ -403,9 +403,9 @@
403403

404404
;; If we trust a specific side then we drop all contracts protecting that side.
405405
(define (optimize sc #:trusted-positive [trusted-positive #f] #:trusted-negative [trusted-negative #f] #:recursive-kinds [recursive-kinds #f])
406-
(define flat-sc?
407-
(let ([sc->kind (make-sc->kind recursive-kinds)])
408-
(λ (sc) (eq? 'flat (sc->kind sc)))))
406+
(define sc->kind (make-sc->kind recursive-kinds))
407+
(define (flat-sc? sc)
408+
(eq? 'flat (sc->kind sc)))
409409
(define trusted-side-reduce (make-trusted-side-reduce flat-sc?))
410410
(define update-side (make-update-side flat-sc?))
411411

typed-racket-lib/typed-racket/static-contracts/structures.rkt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,13 @@
124124
#:transparent
125125
#:methods gen:sc
126126
[(define (sc-map v f)
127-
(match v
128-
[(recursive-sc names values body)
129-
(recursive-sc names (map (λ (v) (f v 'covariant)) values) (f body 'covariant))]))
127+
(match-define (recursive-sc names values body) v)
128+
(recursive-sc names (map (λ (v) (f v 'covariant)) values) (f body 'covariant)))
130129
(define (sc-traverse v f)
131-
(match v
132-
[(recursive-sc names values body)
133-
(for-each (λ (v) (f v 'covariant)) values)
134-
(f body 'covariant)
135-
(void)]))
130+
(match-define (recursive-sc names values body) v)
131+
(for-each (λ (v) (f v 'covariant)) values)
132+
(f body 'covariant)
133+
(void))
136134
(define (sc->constraints v f)
137135
(simple-contract-restrict 'impersonator))]
138136
#:methods gen:custom-write [(define write-proc recursive-sc-write-proc)])

0 commit comments

Comments
 (0)