File tree Expand file tree Collapse file tree 3 files changed +16
-15
lines changed
typed-racket-lib/typed-racket Expand file tree Collapse file tree 3 files changed +16
-15
lines changed Original file line number Diff line number Diff line change 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
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)
Original file line number Diff line number Diff line change 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 " )]
Original file line number Diff line number Diff line change 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 '() ]
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)
You can’t perform that action at this time.
0 commit comments