Close holes in what values can be thrown.
- Don't allow 3d-syntax in the exprs field of `exn:fail:syntax` - Don't allow throwing arbitrary higher-order values
This commit is contained in:
parent
597c62949b
commit
9eaae1f93e
|
@ -20,7 +20,7 @@
|
||||||
"base-structs.rkt"
|
"base-structs.rkt"
|
||||||
racket/file
|
racket/file
|
||||||
(only-in racket/private/pre-base new-apply-proc)
|
(only-in racket/private/pre-base new-apply-proc)
|
||||||
(only-in (types abbrev) [-Boolean B] [-Symbol Sym])
|
(only-in (types abbrev) [-Boolean B] [-Symbol Sym] -Flat)
|
||||||
(only-in (types numeric-tower) [-Number N])
|
(only-in (types numeric-tower) [-Number N])
|
||||||
(only-in (rep type-rep)
|
(only-in (rep type-rep)
|
||||||
make-ClassTop
|
make-ClassTop
|
||||||
|
@ -1146,8 +1146,8 @@
|
||||||
((-> ManyUniv) ((list) Univ . ->* . b) . -> . b)))]
|
((-> ManyUniv) ((list) Univ . ->* . b) . -> . b)))]
|
||||||
|
|
||||||
;; Section 10.2
|
;; Section 10.2
|
||||||
[raise (cl->* (Univ . -> . (Un))
|
[raise (cl->* ((Un -Flat -Exn) . -> . (Un))
|
||||||
(Univ Univ . -> . (Un)))]
|
((Un -Flat -Exn) Univ . -> . (Un)))]
|
||||||
[error
|
[error
|
||||||
(cl->* (-> Sym (Un))
|
(cl->* (-> Sym (Un))
|
||||||
(->* (list -String) Univ (Un))
|
(->* (list -String) Univ (Un))
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
(require (for-template racket/base (prefix-in k: '#%kernel)))
|
(require (for-template racket/base (prefix-in k: '#%kernel)))
|
||||||
|
|
||||||
(provide initialize-structs -Date -Srcloc -Date -Arity-At-Least)
|
(provide initialize-structs -Date -Srcloc -Date -Arity-At-Least -Exn)
|
||||||
|
|
||||||
(define-syntax define-hierarchy
|
(define-syntax define-hierarchy
|
||||||
(syntax-rules (define-hierarchy)
|
(syntax-rules (define-hierarchy)
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
(define-hierarchy exn:fail:contract:continuation (#:kernel-maker k:exn:fail:contract:continuation) ())
|
(define-hierarchy exn:fail:contract:continuation (#:kernel-maker k:exn:fail:contract:continuation) ())
|
||||||
(define-hierarchy exn:fail:contract:variable (#:kernel-maker k:exn:fail:contract:variable) ()))
|
(define-hierarchy exn:fail:contract:variable (#:kernel-maker k:exn:fail:contract:variable) ()))
|
||||||
|
|
||||||
(define-hierarchy exn:fail:syntax (#:kernel-maker k:exn:fail:syntax) ([exprs : (-lst (-Syntax Univ))]))
|
(define-hierarchy exn:fail:syntax (#:kernel-maker k:exn:fail:syntax) ([exprs : (-lst Any-Syntax)]))
|
||||||
|
|
||||||
(define-hierarchy exn:fail:read (#:kernel-maker k:exn:fail:read)
|
(define-hierarchy exn:fail:read (#:kernel-maker k:exn:fail:read)
|
||||||
([srclocs : (-lst Univ)]) ;; cce: Univ here should be srcloc
|
([srclocs : (-lst Univ)]) ;; cce: Univ here should be srcloc
|
||||||
|
|
|
@ -164,6 +164,10 @@
|
||||||
(make-Vector sexp)
|
(make-Vector sexp)
|
||||||
(make-Box sexp)
|
(make-Box sexp)
|
||||||
t)))
|
t)))
|
||||||
|
(define/decl -Flat
|
||||||
|
(-mu flat
|
||||||
|
(Un -Null -Number -Boolean -Symbol -String -Keyword -Char
|
||||||
|
(-pair flat flat))))
|
||||||
(define/decl -Sexp (-Sexpof (Un)))
|
(define/decl -Sexp (-Sexpof (Un)))
|
||||||
(define Syntax-Sexp (-Sexpof Any-Syntax))
|
(define Syntax-Sexp (-Sexpof Any-Syntax))
|
||||||
(define Ident (-Syntax -Symbol))
|
(define Ident (-Syntax -Symbol))
|
||||||
|
|
|
@ -3175,6 +3175,14 @@
|
||||||
(raise 'foo))
|
(raise 'foo))
|
||||||
#:ret (ret -String)
|
#:ret (ret -String)
|
||||||
#:msg #rx"expected: Symbol.*given: Any"]
|
#:msg #rx"expected: Symbol.*given: Any"]
|
||||||
|
|
||||||
|
[tc-err
|
||||||
|
(raise (λ ([x : Number]) (add1 x)))
|
||||||
|
#:ret (ret (Un))]
|
||||||
|
|
||||||
|
[tc-err
|
||||||
|
(exn:fail:syntax "" (current-continuation-marks) (list (datum->syntax #f add1)))
|
||||||
|
#:ret (ret -Exn)]
|
||||||
|
|
||||||
;; PR 14218
|
;; PR 14218
|
||||||
[tc-e (ann (values "foo" "bar") (Values String String))
|
[tc-e (ann (values "foo" "bar") (Values String String))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user