switch to #lang, reformat
svn: r12655
This commit is contained in:
parent
8905cc86e5
commit
7ea8ab6592
|
@ -1,124 +1,118 @@
|
||||||
(module sandbox scheme/base
|
#lang scheme/base
|
||||||
(require scheme/sandbox
|
|
||||||
(prefix-in mz: (only-in mzscheme make-namespace)))
|
|
||||||
(provide sandbox-init-hook
|
|
||||||
sandbox-reader
|
|
||||||
sandbox-input
|
|
||||||
sandbox-output
|
|
||||||
sandbox-error-output
|
|
||||||
sandbox-propagate-breaks
|
|
||||||
sandbox-coverage-enabled
|
|
||||||
sandbox-namespace-specs
|
|
||||||
sandbox-override-collection-paths
|
|
||||||
sandbox-security-guard
|
|
||||||
sandbox-path-permissions
|
|
||||||
sandbox-network-guard
|
|
||||||
sandbox-make-inspector
|
|
||||||
sandbox-eval-limits
|
|
||||||
kill-evaluator
|
|
||||||
break-evaluator
|
|
||||||
set-eval-limits
|
|
||||||
put-input
|
|
||||||
get-output
|
|
||||||
get-error-output
|
|
||||||
get-uncovered-expressions
|
|
||||||
call-with-limits
|
|
||||||
with-limits
|
|
||||||
exn:fail:resource?
|
|
||||||
exn:fail:resource-resource
|
|
||||||
(rename-out [*make-evaluator make-evaluator]
|
|
||||||
[gui? mred?]))
|
|
||||||
|
|
||||||
(define-namespace-anchor anchor)
|
(require scheme/sandbox
|
||||||
|
(prefix-in mz: (only-in mzscheme make-namespace)))
|
||||||
|
|
||||||
;; Compatbility:
|
(provide sandbox-init-hook
|
||||||
;; * recognize 'r5rs, etc, and wrap them as a list.
|
sandbox-reader
|
||||||
;; * 'begin form of reqs
|
sandbox-input
|
||||||
;; * more agressively extract requires from lang and reqs
|
sandbox-output
|
||||||
(define *make-evaluator
|
sandbox-error-output
|
||||||
(case-lambda
|
sandbox-propagate-breaks
|
||||||
[(lang reqs . progs)
|
sandbox-coverage-enabled
|
||||||
(with-ns-params
|
sandbox-namespace-specs
|
||||||
(lambda ()
|
sandbox-override-collection-paths
|
||||||
(let ([beg-req? (and (list? reqs)
|
sandbox-security-guard
|
||||||
(pair? reqs)
|
sandbox-path-permissions
|
||||||
(eq? 'begin (car reqs)))]
|
sandbox-network-guard
|
||||||
[reqs (or reqs '())]
|
sandbox-make-inspector
|
||||||
[lang (or lang '(begin))])
|
sandbox-eval-limits
|
||||||
(keyword-apply
|
kill-evaluator
|
||||||
make-evaluator
|
break-evaluator
|
||||||
'(#:allow-read #:requires)
|
set-eval-limits
|
||||||
(list (extract-requires lang reqs)
|
put-input
|
||||||
(if beg-req? null reqs))
|
get-output
|
||||||
(case lang
|
get-error-output
|
||||||
[(r5rs beginner beginner-abbr intermediate intermediate-lambda advanced)
|
get-uncovered-expressions
|
||||||
(list 'special lang)]
|
call-with-limits
|
||||||
[else lang])
|
with-limits
|
||||||
(append
|
exn:fail:resource?
|
||||||
(if beg-req? (cdr reqs) null)
|
exn:fail:resource-resource
|
||||||
progs)))))]
|
(rename-out [*make-evaluator make-evaluator]
|
||||||
[(mod)
|
[gui? mred?]))
|
||||||
(with-ns-params
|
|
||||||
(lambda ()
|
|
||||||
(make-module-evaluator mod)))]))
|
|
||||||
|
|
||||||
(define (make-mz-namespace)
|
(define-namespace-anchor anchor)
|
||||||
(let ([ns (mz:make-namespace)])
|
|
||||||
;; Because scheme/sandbox needs scheme/base:
|
|
||||||
(namespace-attach-module (namespace-anchor->namespace anchor)
|
|
||||||
'scheme/base
|
|
||||||
ns)
|
|
||||||
ns))
|
|
||||||
|
|
||||||
(define (with-ns-params thunk)
|
;; Compatbility:
|
||||||
(let ([v (sandbox-namespace-specs)])
|
;; * recognize 'r5rs, etc, and wrap them as a list.
|
||||||
(cond
|
;; * 'begin form of reqs
|
||||||
[(and (not gui?)
|
;; * more agressively extract requires from lang and reqs
|
||||||
(eq? (car v) make-base-namespace))
|
(define *make-evaluator
|
||||||
(parameterize ([sandbox-namespace-specs
|
(case-lambda
|
||||||
(cons make-mz-namespace
|
[(lang reqs . progs)
|
||||||
(cdr v))])
|
(with-ns-params
|
||||||
(thunk))]
|
(lambda ()
|
||||||
[(and gui?
|
(let ([beg-req? (and (list? reqs)
|
||||||
(eq? (car v) (dynamic-require 'mred 'make-gui-namespace)))
|
(pair? reqs)
|
||||||
(parameterize ([sandbox-namespace-specs
|
(eq? 'begin (car reqs)))]
|
||||||
;; Simulate the old make-namespace-with-mred:
|
[reqs (or reqs '())]
|
||||||
(cons (lambda ()
|
[lang (or lang '(begin))])
|
||||||
(let ([ns (make-mz-namespace)]
|
(keyword-apply
|
||||||
[ns2 ((dynamic-require 'mred 'make-gui-namespace))])
|
make-evaluator
|
||||||
(namespace-attach-module ns2 'mred ns)
|
'(#:allow-read #:requires)
|
||||||
(namespace-attach-module ns2 'scheme/class ns)
|
(list (extract-requires lang reqs)
|
||||||
(parameterize ([current-namespace ns])
|
(if beg-req? null reqs))
|
||||||
(namespace-require 'mred)
|
(case lang
|
||||||
(namespace-require 'scheme/class))
|
[(r5rs beginner beginner-abbr intermediate intermediate-lambda
|
||||||
ns))
|
advanced)
|
||||||
(cdr v))])
|
(list 'special lang)]
|
||||||
(thunk))]
|
[else lang])
|
||||||
[else (thunk)])))
|
(append (if beg-req? (cdr reqs) null) progs)))))]
|
||||||
|
[(mod) (with-ns-params (lambda () (make-module-evaluator mod)))]))
|
||||||
(define (literal-identifier=? x y)
|
|
||||||
(or (free-identifier=? x y)
|
|
||||||
(eq? (syntax-e x) (syntax-e y))))
|
|
||||||
|
|
||||||
(define (extract-requires language requires)
|
(define (make-mz-namespace)
|
||||||
(define (find-requires forms)
|
(let ([ns (mz:make-namespace)])
|
||||||
(let loop ([forms (reverse forms)] [reqs '()])
|
;; Because scheme/sandbox needs scheme/base:
|
||||||
(if (null? forms)
|
(namespace-attach-module (namespace-anchor->namespace anchor)
|
||||||
reqs
|
'scheme/base ns)
|
||||||
(loop (cdr forms)
|
ns))
|
||||||
(syntax-case* (car forms) (require) literal-identifier=?
|
|
||||||
[(require specs ...)
|
(define (with-ns-params thunk)
|
||||||
(append (syntax->datum #'(specs ...)) reqs)]
|
(let ([v (sandbox-namespace-specs)])
|
||||||
[_else reqs])))))
|
(cond [(and (not gui?) (eq? (car v) make-base-namespace))
|
||||||
(let* ([requires (if (and (pair? requires) (eq? 'begin (car requires)))
|
(parameterize ([sandbox-namespace-specs
|
||||||
(find-requires (cdr requires))
|
(cons make-mz-namespace (cdr v))])
|
||||||
null)]
|
(thunk))]
|
||||||
[requires (cond [(string? language) requires]
|
[(and gui? (eq? (car v) (dynamic-require 'mred 'make-gui-namespace)))
|
||||||
[(not (pair? language)) requires]
|
(parameterize
|
||||||
[(memq (car language) '(lib file planet quote))
|
([sandbox-namespace-specs
|
||||||
requires]
|
;; Simulate the old make-namespace-with-mred:
|
||||||
[(eq? (car language) 'begin)
|
(cons (lambda ()
|
||||||
(append (find-requires (cdr language)) requires)]
|
(let ([ns (make-mz-namespace)]
|
||||||
[else (error 'extract-requires
|
[ns2 ((dynamic-require
|
||||||
"bad language spec: ~e" language)])])
|
'mred 'make-gui-namespace))])
|
||||||
requires)))
|
(namespace-attach-module ns2 'mred ns)
|
||||||
|
(namespace-attach-module ns2 'scheme/class ns)
|
||||||
|
(parameterize ([current-namespace ns])
|
||||||
|
(namespace-require 'mred)
|
||||||
|
(namespace-require 'scheme/class))
|
||||||
|
ns))
|
||||||
|
(cdr v))])
|
||||||
|
(thunk))]
|
||||||
|
[else (thunk)])))
|
||||||
|
|
||||||
|
(define (literal-identifier=? x y)
|
||||||
|
(or (free-identifier=? x y) (eq? (syntax-e x) (syntax-e y))))
|
||||||
|
|
||||||
|
(define (extract-requires language requires)
|
||||||
|
(define (find-requires forms)
|
||||||
|
(let loop ([forms (reverse forms)] [reqs '()])
|
||||||
|
(if (null? forms)
|
||||||
|
reqs
|
||||||
|
(loop (cdr forms)
|
||||||
|
(syntax-case* (car forms) (require) literal-identifier=?
|
||||||
|
[(require specs ...)
|
||||||
|
(append (syntax->datum #'(specs ...)) reqs)]
|
||||||
|
[_else reqs])))))
|
||||||
|
(let* ([requires (if (and (pair? requires) (eq? 'begin (car requires)))
|
||||||
|
(find-requires (cdr requires))
|
||||||
|
null)]
|
||||||
|
[requires (cond [(string? language) requires]
|
||||||
|
[(not (pair? language)) requires]
|
||||||
|
[(memq (car language) '(lib file planet quote))
|
||||||
|
requires]
|
||||||
|
[(eq? (car language) 'begin)
|
||||||
|
(append (find-requires (cdr language)) requires)]
|
||||||
|
[else (error 'extract-requires
|
||||||
|
"bad language spec: ~e" language)])])
|
||||||
|
requires))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user