From 619d6945c3263d21e6439a40286cde90e6afd585 Mon Sep 17 00:00:00 2001 From: Alexis King Date: Sun, 15 Feb 2015 13:11:56 -0800 Subject: [PATCH] Prevent type alias placeholders from collapsing in unions with symbols Fixes #26 --- .../typed-racket/env/type-alias-helper.rkt | 4 ++-- typed-racket-lib/typed-racket/types/base-abbrev.rkt | 6 ++++++ typed-racket-test/succeed/gh-issue-26.rkt | 10 ++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 typed-racket-test/succeed/gh-issue-26.rkt diff --git a/typed-racket-lib/typed-racket/env/type-alias-helper.rkt b/typed-racket-lib/typed-racket/env/type-alias-helper.rkt index 716864b8..e3eef92b 100644 --- a/typed-racket-lib/typed-racket/env/type-alias-helper.rkt +++ b/typed-racket-lib/typed-racket/env/type-alias-helper.rkt @@ -90,8 +90,8 @@ (register-type-name id (if args - (make-Poly (map syntax-e args) (make-Value (gensym))) - (make-Value (gensym)))) + (make-Poly (map syntax-e args) -Alias-Placeholder) + -Alias-Placeholder)) (values id (list id type-stx args)))) ;; register-all-type-aliases : Listof Dict -> Void diff --git a/typed-racket-lib/typed-racket/types/base-abbrev.rkt b/typed-racket-lib/typed-racket/types/base-abbrev.rkt index 433f1e04..f1500aa2 100644 --- a/typed-racket-lib/typed-racket/types/base-abbrev.rkt +++ b/typed-racket-lib/typed-racket/types/base-abbrev.rkt @@ -6,6 +6,7 @@ ;; extends it with more types and type abbreviations. (require "../utils/utils.rkt" + "../utils/tc-utils.rkt" (rep type-rep filter-rep object-rep rep-utils) (env mvar-env) racket/match racket/list (prefix-in c: (contract-req)) @@ -52,6 +53,11 @@ (define/decl -Symbol (make-Base 'Symbol #'symbol? symbol? #f)) (define/decl -String (make-Base 'String #'string? string? #f)) +;; Used by type-alias-helper.rkt for recursive alias placeholder values +(define/decl -Alias-Placeholder (make-Base 'Alias-Placeholder + #'(int-err "Encountered unresolved alias placeholder") + (lambda _ #f) #f)) + ;; Void is needed for Params (define/decl -Void (make-Base 'Void #'void? void? #f)) diff --git a/typed-racket-test/succeed/gh-issue-26.rkt b/typed-racket-test/succeed/gh-issue-26.rkt new file mode 100644 index 00000000..5c9db449 --- /dev/null +++ b/typed-racket-test/succeed/gh-issue-26.rkt @@ -0,0 +1,10 @@ +#lang typed/racket + +(define-type T1 (Listof (U T2 Symbol))) +(define-type T2 (Setof (U T1 Symbol))) + +(: x1 T1) +(define x1 (list (set 'foo))) + +(: x2 T2) +(define x2 (set (list 'foo)))