Avoid dumb parsing bugs in require/typed.

original commit: 561fdc8db580c828a45dc27c4ca61b21dccad311
This commit is contained in:
Sam Tobin-Hochstadt 2010-10-26 16:37:52 -04:00
parent 28406c5093
commit db3c6bbbe0
2 changed files with 21 additions and 1 deletions

View File

@ -0,0 +1,16 @@
#lang racket/load
(module m1 racket
(define x (make-parameter 1))
(define y 1)
(provide y)
(provide/contract [x (parameter/c number?)]))
(module m2 typed/racket
(require/typed 'm1
[y Number]
[x (Parameterof Number)])
(x 1)
(x))
(require 'm2)

View File

@ -84,9 +84,13 @@ This file defines two sorts of primitives. All of them are provided into any mod
(raise-syntax-error #f "at least one specification is required" stx))
#'(begin
(require/opaque-type oc.ty oc.pred lib . oc.opt) ...
(require/typed sc.nm sc.ty lib) ...
(require/typed #:internal sc.nm sc.ty lib) ...
(require-typed-struct strc.nm (strc.body ...) lib) ...)]
[(_ nm:opt-rename ty lib (~optional [~seq #:struct-maker parent]) ...)
#`(require/typed #:internal nm ty lib #,@(if (attribute parent)
#'(#:struct-maker parent)
#'()))]
[(_ #:internal nm:opt-rename ty lib (~optional [~seq #:struct-maker parent]) ...)
(with-syntax ([cnt* (generate-temporary #'nm.nm)]
[sm (if (attribute parent)
#'(#:struct-maker parent)