Strengthening contracts

svn: r6634
This commit is contained in:
Jay McCarthy 2007-06-13 17:11:17 +00:00
parent 841a600e30
commit 50eeb657fd
4 changed files with 14 additions and 25 deletions

View File

@ -55,11 +55,9 @@ provides:
@file{servlet/servlet-structs.ss} provides a number of contracts @file{servlet/servlet-structs.ss} provides a number of contracts
for use in servlets. for use in servlets.
@defthing[servlet-response? contract?]{Equivalent to @scheme[any/c].}
@defthing[k-url? contract?]{Equivalent to @scheme[string?].} @defthing[k-url? contract?]{Equivalent to @scheme[string?].}
@defthing[response-generator? contract?]{Equivalent to @scheme[(k-url? . -> . servlet-response?)].} @defthing[response-generator? contract?]{Equivalent to @scheme[(k-url? . -> . response?)].}
@defthing[url-transform? contract?]{Equivalent to @scheme[(k-url? . -> . k-url?)].} @defthing[url-transform? contract?]{Equivalent to @scheme[(k-url? . -> . k-url?)].}
@ -217,8 +215,7 @@ transmission that the server will not catch.}
@file{servlet/web.ss} provides the primary functions of interest for the @file{servlet/web.ss} provides the primary functions of interest for the
servlet developer. servlet developer.
@; XXX Contract harder @defproc[(send/back [response response?])
@defproc[(send/back [response any/c])
void?]{ void?]{
Sends @scheme[response] to the client. Sends @scheme[response] to the client.
} }
@ -261,13 +258,12 @@ servlet developer.
Calls @scheme[clear-continuation-table!], then @scheme[send/suspend]. Calls @scheme[clear-continuation-table!], then @scheme[send/suspend].
} }
@; XXX Contract harder @defproc[(send/finish [response response?])
@defproc[(send/finish [response any/c])
void?]{ void?]{
Calls @scheme[clear-continuation-table!], then @scheme[send/back]. Calls @scheme[clear-continuation-table!], then @scheme[send/back].
} }
@defproc[(send/suspend/dispatch [make-response (embed/url? . -> . servlet-response?)]) @defproc[(send/suspend/dispatch [make-response (embed/url? . -> . response?)])
any/c]{ any/c]{
Calls @scheme[make-response] with a function that, when called with a procedure from Calls @scheme[make-response] with a function that, when called with a procedure from
@scheme[request?] to @scheme[any/c] will generate a URL, that when invoked will call @scheme[request?] to @scheme[any/c] will generate a URL, that when invoked will call

View File

@ -1,9 +1,8 @@
(module servlet mzscheme (module servlet mzscheme
(require (lib "contract.ss")) (require (lib "contract.ss"))
(require "../managers/manager.ss" (require "../managers/manager.ss"
"../servlet/servlet-structs.ss" "../private/request-structs.ss"
"connection-manager.ss" "../private/response-structs.ss")
"../private/request-structs.ss")
(define servlet-prompt (make-continuation-prompt-tag 'servlet)) (define servlet-prompt (make-continuation-prompt-tag 'servlet))
(provide servlet-prompt) (provide servlet-prompt)
@ -28,7 +27,7 @@
([custodian custodian?] ([custodian custodian?]
[namespace namespace?] [namespace namespace?]
[manager manager?] [manager manager?]
[handler (request? . -> . servlet-response?)])] [handler (request? . -> . response?)])]
[struct servlet-instance-data [struct servlet-instance-data
([mutex semaphore?])] ([mutex semaphore?])]
[struct execution-context [struct execution-context

View File

@ -4,14 +4,11 @@
(require "../private/request-structs.ss" (require "../private/request-structs.ss"
"../private/response-structs.ss") "../private/response-structs.ss")
(define servlet-response?
any/c)
(define k-url? (define k-url?
string?) string?)
(define response-generator? (define response-generator?
(k-url? . -> . servlet-response?)) (k-url? . -> . response?))
(define url-transform? (define url-transform?
(k-url? . -> . k-url?)) (k-url? . -> . k-url?))
@ -24,7 +21,6 @@
(((request? . -> . any/c)) (expiration-handler?) . opt-> . string?)) (((request? . -> . any/c)) (expiration-handler?) . opt-> . string?))
(provide/contract (provide/contract
[servlet-response? contract?]
[response-generator? contract?] [response-generator? contract?]
[k-url? (any/c . -> . boolean?)] [k-url? (any/c . -> . boolean?)]
[url-transform? contract?] [url-transform? contract?]

View File

@ -3,14 +3,14 @@
(lib "list.ss") (lib "list.ss")
(lib "plt-match.ss") (lib "plt-match.ss")
(lib "contract.ss") (lib "contract.ss")
(lib "etc.ss") (lib "etc.ss"))
(lib "xml.ss" "xml"))
(require "../managers/manager.ss" (require "../managers/manager.ss"
"../private/util.ss" "../private/util.ss"
"../private/servlet.ss" "../private/servlet.ss"
"../servlet/helpers.ss" "../servlet/helpers.ss"
"../servlet/web-cells.ss" "../servlet/web-cells.ss"
"../servlet/servlet-structs.ss" "../servlet/servlet-structs.ss"
"../private/response-structs.ss"
"../private/request-structs.ss") "../private/request-structs.ss")
;; ************************************************************ ;; ************************************************************
@ -67,8 +67,6 @@
(rest old-path)))) (rest old-path))))
in-url))) in-url)))
;; XXX Weak contracts: the input is checked in output-response, and a message is
;; sent directly to the client (Web browser) instead of the terminal/log.
(provide/contract (provide/contract
[current-url-transform parameter?] [current-url-transform parameter?]
[current-servlet-continuation-expiration-handler parameter?] [current-servlet-continuation-expiration-handler parameter?]
@ -76,11 +74,11 @@
[redirect/get/forget (-> request?)] [redirect/get/forget (-> request?)]
[adjust-timeout! (number? . -> . void?)] [adjust-timeout! (number? . -> . void?)]
[clear-continuation-table! (-> void?)] [clear-continuation-table! (-> void?)]
[send/back (any/c . -> . void?)] [send/back (response? . -> . void?)]
[send/finish (any/c . -> . void?)] [send/finish (response? . -> . void?)]
[send/suspend ((response-generator?) (expiration-handler?) . opt-> . request?)] [send/suspend ((response-generator?) (expiration-handler?) . opt-> . request?)]
[send/forward ((response-generator?) (expiration-handler?) . opt-> . request?)] [send/forward ((response-generator?) (expiration-handler?) . opt-> . request?)]
[send/suspend/dispatch ((embed/url? . -> . servlet-response?) . -> . any/c)]) [send/suspend/dispatch ((embed/url? . -> . response?) . -> . any/c)])
;; ************************************************************ ;; ************************************************************
;; EXPORTS ;; EXPORTS