Skip to content

Commit cba7c6f

Browse files
committed
WIP
1 parent 1bf5760 commit cba7c6f

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

typed-racket-lib/typed-racket/env/type-alias-helper.rkt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,6 @@
8585
(define (make-placeholder-type id)
8686
(make-Opaque id))
8787

88-
(define (free-id-table-union! a b)
89-
(for ([(id v) (in-free-id-table b)])
90-
(free-id-table-set! a id v)))
9188
;; register-all-type-aliases : Listof<Id> Dict<Id, TypeAliasInfo> -> Void
9289
;;
9390
;; Given parsed type aliases and a type alias map, do the work
@@ -106,6 +103,14 @@
106103
;; #:implements clauses and to determine the order in which
107104
;; recursive type aliases should be initialized.
108105

106+
(define (free-id-table-union! a b)
107+
(define struct-names (list->set (free-id-table-keys b)))
108+
(for ([(id deps) (in-free-id-table b)])
109+
(free-id-table-set! a id (filter (lambda (v)
110+
(or (free-id-table-ref type-alias-map v #f)
111+
(set-member? struct-names v)))
112+
deps))))
113+
109114
(define-values (type-alias-dependency-map type-alias-class-map type-alias-productivity-map)
110115
(for/lists (_1 _2 _3 #:result (values (let ([tbl1 (make-free-id-table _1)])
111116
(free-id-table-union! tbl1 dependency-map)

typed-racket-lib/typed-racket/private/parse-type.rkt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,8 @@
13041304
(add-disappeared-use (syntax-local-introduce #'id)))
13051305
t)]
13061306
[else
1307-
(parse-error #:delayed? #t (~a "type name `" v "' is unbound"))
1307+
(unless (side-effect-mode? mode)
1308+
(parse-error #:delayed? #t (~a "type name `" v "' is unbound")))
13081309
Err])]
13091310
[(:Opaque^ . rest)
13101311
(parse-error "bad syntax in Opaque")]

typed-racket-lib/typed-racket/typecheck/tc-toplevel.rkt

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -432,23 +432,18 @@
432432
;; Listof[Expr] -> Promise[Listof[binding]]
433433
(define (register-struct-type-info! form-li)
434434
;; register type name and alias first
435-
(define (names-referred-in-struct stx)
435+
(define (names-referred-in-struct name stx)
436436
(define-values (tvars field-types)
437437
(syntax-parse stx
438438
[t:typed-struct (values (attribute t.tvars)
439439
(attribute t.types))]))
440440
(cond
441441
[(null? tvars) null]
442442
[else
443-
(let recur ([types field-types])
444-
(match types
445-
[(list-rest h t)
446-
(syntax-parse h
447-
[(rator rand ...)
448-
(cons #'rator
449-
(recur (syntax->list #'(rand ...))))]
450-
[_:id
451-
null])]))]))
443+
(append-map (lambda (t)
444+
(define-values (r _ __) (parse-for-effects name (cons tvars t)))
445+
r)
446+
field-types)]))
452447

453448
(define-values (poly-names binding-reg dependency-map)
454449
(for/fold ([poly-names '()]
@@ -459,7 +454,7 @@
459454
dependency-map))
460455
([form (in-list form-li)])
461456
(define name (name-of-struct form))
462-
(define other-names (names-referred-in-struct form))
457+
(define other-names (names-referred-in-struct name form))
463458
(define tvars (type-vars-of-struct form))
464459
(register-resolved-type-alias name (make-Name name (length tvars) #t))
465460
(register-type-name name)

0 commit comments

Comments
 (0)