Contracts on dynamic-requires
svn: r12940
This commit is contained in:
parent
02153a2235
commit
d00db36f66
|
@ -112,22 +112,47 @@
|
||||||
(define s (load/use-compiled a-path))
|
(define s (load/use-compiled a-path))
|
||||||
(cond
|
(cond
|
||||||
[(void? s)
|
[(void? s)
|
||||||
(let* ([module-name `(file ,(path->string a-path))]
|
(let* ([path-string (path->string a-path)]
|
||||||
[version (dynamic-require module-name 'interface-version)])
|
[path-sym (string->symbol path-string)]
|
||||||
|
[neg-blame 'web-server]
|
||||||
|
[pos-blame path-sym]
|
||||||
|
[module-name `(file ,path-string)]
|
||||||
|
[mk-loc
|
||||||
|
(lambda (name)
|
||||||
|
(list (make-srcloc a-path #f #f #f #f)
|
||||||
|
name))]
|
||||||
|
[version
|
||||||
|
(contract (symbols 'v1 'v2 'stateless)
|
||||||
|
(dynamic-require module-name 'interface-version)
|
||||||
|
pos-blame neg-blame
|
||||||
|
(mk-loc "interface-version"))])
|
||||||
(case version
|
(case version
|
||||||
[(v1)
|
[(v1)
|
||||||
(let ([timeout (dynamic-require module-name 'timeout)]
|
(let ([timeout (contract number?
|
||||||
[start (dynamic-require module-name 'start)])
|
(dynamic-require module-name 'timeout)
|
||||||
|
pos-blame neg-blame
|
||||||
|
(mk-loc "timeout"))]
|
||||||
|
[start (contract (request? . -> . response?)
|
||||||
|
(dynamic-require module-name 'start)
|
||||||
|
pos-blame neg-blame
|
||||||
|
(mk-loc "start"))])
|
||||||
(make-v1.servlet (directory-part a-path) timeout start))]
|
(make-v1.servlet (directory-part a-path) timeout start))]
|
||||||
[(v2)
|
[(v2)
|
||||||
(let ([start (dynamic-require module-name 'start)]
|
(let ([start (contract (request? . -> . response?)
|
||||||
[manager (dynamic-require module-name 'manager)])
|
(dynamic-require module-name 'start)
|
||||||
|
pos-blame neg-blame
|
||||||
|
(mk-loc "start"))]
|
||||||
|
[manager (contract manager?
|
||||||
|
(dynamic-require module-name 'manager)
|
||||||
|
pos-blame neg-blame
|
||||||
|
(mk-loc "manager"))])
|
||||||
(make-v2.servlet (directory-part a-path) manager start))]
|
(make-v2.servlet (directory-part a-path) manager start))]
|
||||||
[(stateless)
|
[(stateless)
|
||||||
(let ([start (dynamic-require module-name 'start)])
|
(let ([start (contract (request? . -> . response?)
|
||||||
(make-stateless.servlet (directory-part a-path) start))]
|
(dynamic-require module-name 'start)
|
||||||
[else
|
pos-blame neg-blame
|
||||||
(error 'path->servlet "unknown servlet version ~e, must be 'v1, 'v2, or 'stateless" version)]))]
|
(mk-loc "start"))])
|
||||||
|
(make-stateless.servlet (directory-part a-path) start))]))]
|
||||||
[(response? s)
|
[(response? s)
|
||||||
(make-v1.servlet (directory-part a-path) timeouts-default-servlet
|
(make-v1.servlet (directory-part a-path) timeouts-default-servlet
|
||||||
(v0.response->v1.lambda s a-path))]
|
(v0.response->v1.lambda s a-path))]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user