expander: avoid parameters for dynamic-extent indicators
Using a parameter for the current expansion context means that if a macro spawns a thread, the thread thinks that it's in an expansion context. Switching to a raw continuation mark avoids that problem. Along the way, bring Racket and RacketCS more in line by making both have an internal notion of "root" prompt tag that can be used to get all continuation marks independent of any prompts. That's not structly necessary, since a continuation mark could be combined with a distinct tag to make the mark always accessible, but it's simpler and more lightweight to use a root prompt tag.
This commit is contained in:
parent
eed18fac93
commit
16e496b0c5
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
(define collection 'multi)
|
(define collection 'multi)
|
||||||
|
|
||||||
(define version "7.0.0.13")
|
(define version "7.0.0.14")
|
||||||
|
|
||||||
(define deps `("racket-lib"
|
(define deps `("racket-lib"
|
||||||
["racket" #:version ,version]))
|
["racket" #:version ,version]))
|
||||||
|
|
|
@ -2293,6 +2293,21 @@
|
||||||
(define-syntax (f a)
|
(define-syntax (f a)
|
||||||
(complain-about-this-one (not-about-this-one)))))
|
(complain-about-this-one (not-about-this-one)))))
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
;; Make sure "currently expanding" is not propagated to threads
|
||||||
|
|
||||||
|
(let ()
|
||||||
|
(define-syntax (m stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ e)
|
||||||
|
(let ([ok? #t])
|
||||||
|
(sync (thread (lambda ()
|
||||||
|
(local-expand #'e 'expression null)
|
||||||
|
(set! ok? #f))))
|
||||||
|
(if ok? #''ok #''oops))]))
|
||||||
|
|
||||||
|
(test 'ok values (m 1)))
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
(report-errs)
|
(report-errs)
|
||||||
|
|
|
@ -64,10 +64,11 @@
|
||||||
(let-values ([(expr opaque-expr)
|
(let-values ([(expr opaque-expr)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ ([local-key id] ...) body ...)
|
[(_ ([local-key id] ...) body ...)
|
||||||
(parameterize ([current-parameter-environment
|
(with-continuation-mark
|
||||||
|
current-parameter-environment
|
||||||
(extend-parameter-environment
|
(extend-parameter-environment
|
||||||
(current-parameter-environment)
|
(current-parameter-environment)
|
||||||
#'([local-key id] ...))])
|
#'([local-key id] ...))
|
||||||
(syntax-local-expand-expression
|
(syntax-local-expand-expression
|
||||||
#'(let-values () body ...)
|
#'(let-values () body ...)
|
||||||
#t))])])
|
#t))])])
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
|
|
||||||
(module stxparamkey '#%kernel
|
(module stxparamkey '#%kernel
|
||||||
(#%require "small-scheme.rkt" "define.rkt"
|
(#%require "small-scheme.rkt" "define.rkt"
|
||||||
"stxcase.rkt" "stxloc.rkt" "with-stx.rkt")
|
"stxcase.rkt" "stxloc.rkt" "with-stx.rkt"
|
||||||
|
(only '#%unsafe unsafe-root-continuation-prompt-tag))
|
||||||
|
|
||||||
;; Consulted before the expander's table, for use by compile-time
|
;; Consulted before the expander's table, for use by compile-time
|
||||||
;; code wrapped by a run-time-phased `syntax-parameterize`:
|
;; code wrapped by a run-time-phased `syntax-parameterize`:
|
||||||
(define current-parameter-environment (make-parameter #hasheq()))
|
(define (current-parameter-environment)
|
||||||
|
;; Implemented with continuation marks, not parameters, so that the
|
||||||
|
;; "state" is not inherited by new threads
|
||||||
|
(continuation-mark-set-first #f current-parameter-environment #hasheq()
|
||||||
|
(unsafe-root-continuation-prompt-tag)))
|
||||||
|
|
||||||
;; Wrap the value for a syntax parameter in a `parameter-value` struct,
|
;; Wrap the value for a syntax parameter in a `parameter-value` struct,
|
||||||
;; so that we can distinguish it from rename transformers that arrive
|
;; so that we can distinguish it from rename transformers that arrive
|
||||||
|
|
|
@ -306,8 +306,9 @@
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ binds orig-ids body)
|
[(_ binds orig-ids body)
|
||||||
(let ([ctx (syntax-local-make-definition-context #f #f)])
|
(let ([ctx (syntax-local-make-definition-context #f #f)])
|
||||||
(let ([body (parameterize ([current-parameter-environment
|
(let ([body (with-continuation-mark
|
||||||
(extend-parameter-environment (current-parameter-environment) #'binds)])
|
current-parameter-environment
|
||||||
|
(extend-parameter-environment (current-parameter-environment) #'binds)
|
||||||
(local-expand #'(force-expand body)
|
(local-expand #'(force-expand body)
|
||||||
(syntax-local-context)
|
(syntax-local-context)
|
||||||
null ;; `force-expand' actually determines stopping places
|
null ;; `force-expand' actually determines stopping places
|
||||||
|
@ -359,9 +360,10 @@
|
||||||
(unless (eq? (syntax-local-context) 'module-begin)
|
(unless (eq? (syntax-local-context) 'module-begin)
|
||||||
(raise-syntax-error #f "only allowed in module-begin context" stx))
|
(raise-syntax-error #f "only allowed in module-begin context" stx))
|
||||||
(with-syntax ([new-binds (update-parameter-keys #'orig-ids #'binds)])
|
(with-syntax ([new-binds (update-parameter-keys #'orig-ids #'binds)])
|
||||||
(parameterize ([current-parameter-environment
|
(with-continuation-mark
|
||||||
|
current-parameter-environment
|
||||||
(extend-parameter-environment (current-parameter-environment)
|
(extend-parameter-environment (current-parameter-environment)
|
||||||
#'new-binds)])
|
#'new-binds)
|
||||||
(let* ([forms (syntax->list #'(body-form ...))]
|
(let* ([forms (syntax->list #'(body-form ...))]
|
||||||
;; emulate how the macroexpander expands module bodies and introduces #%module-begin
|
;; emulate how the macroexpander expands module bodies and introduces #%module-begin
|
||||||
[body (if (= (length forms) 1)
|
[body (if (= (length forms) 1)
|
||||||
|
@ -407,8 +409,9 @@
|
||||||
[(_ e binds)
|
[(_ e binds)
|
||||||
(let ([as-expression
|
(let ([as-expression
|
||||||
(lambda ()
|
(lambda ()
|
||||||
#'(parameterize ([current-parameter-environment
|
#'(with-continuation-mark
|
||||||
(extend-parameter-environment (current-parameter-environment) (quote-syntax binds))])
|
current-parameter-environment
|
||||||
|
(extend-parameter-environment (current-parameter-environment) (quote-syntax binds))
|
||||||
e))])
|
e))])
|
||||||
(if (eq? (syntax-local-context) 'expression)
|
(if (eq? (syntax-local-context) 'expression)
|
||||||
(as-expression)
|
(as-expression)
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
unsafe-set-on-atomic-timeout!
|
unsafe-set-on-atomic-timeout!
|
||||||
unsafe-abort-current-continuation/no-wind
|
unsafe-abort-current-continuation/no-wind
|
||||||
unsafe-call-with-composable-continuation/no-wind
|
unsafe-call-with-composable-continuation/no-wind
|
||||||
|
unsafe-root-continuation-prompt-tag
|
||||||
unsafe-os-thread-enabled?
|
unsafe-os-thread-enabled?
|
||||||
unsafe-call-in-os-thread
|
unsafe-call-in-os-thread
|
||||||
unsafe-make-os-semaphore
|
unsafe-make-os-semaphore
|
||||||
|
|
|
@ -267,7 +267,7 @@
|
||||||
[date? (known-procedure/succeeds 2)]
|
[date? (known-procedure/succeeds 2)]
|
||||||
[datum->syntax (known-procedure 60)]
|
[datum->syntax (known-procedure 60)]
|
||||||
[datum-intern-literal (known-procedure 2)]
|
[datum-intern-literal (known-procedure 2)]
|
||||||
[default-continuation-prompt-tag (known-procedure 1)]
|
[default-continuation-prompt-tag (known-procedure/succeeds 1)]
|
||||||
[delete-directory (known-procedure 2)]
|
[delete-directory (known-procedure 2)]
|
||||||
[delete-file (known-procedure 2)]
|
[delete-file (known-procedure 2)]
|
||||||
[denominator (known-procedure 2)]
|
[denominator (known-procedure 2)]
|
||||||
|
|
|
@ -125,6 +125,7 @@
|
||||||
[unsafe-port->socket (known-procedure 2)]
|
[unsafe-port->socket (known-procedure 2)]
|
||||||
[unsafe-register-process-global (known-procedure 4)]
|
[unsafe-register-process-global (known-procedure 4)]
|
||||||
[unsafe-remove-collect-callbacks (known-procedure 2)]
|
[unsafe-remove-collect-callbacks (known-procedure 2)]
|
||||||
|
[unsafe-root-continuation-prompt-tag (known-procedure/succeeds 1)]
|
||||||
[unsafe-s16vector-ref (known-procedure 4)]
|
[unsafe-s16vector-ref (known-procedure 4)]
|
||||||
[unsafe-s16vector-set! (known-procedure 8)]
|
[unsafe-s16vector-set! (known-procedure 8)]
|
||||||
[unsafe-set-box! (known-procedure 4)]
|
[unsafe-set-box! (known-procedure 4)]
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
make-continuation-prompt-tag
|
make-continuation-prompt-tag
|
||||||
continuation-prompt-tag?
|
continuation-prompt-tag?
|
||||||
default-continuation-prompt-tag
|
default-continuation-prompt-tag
|
||||||
root-continuation-prompt-tag
|
unsafe-root-continuation-prompt-tag
|
||||||
call-with-continuation-prompt
|
call-with-continuation-prompt
|
||||||
call-with-continuation-barrier
|
call-with-continuation-barrier
|
||||||
abort-current-continuation
|
abort-current-continuation
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
(create-continuation-prompt-tag name)]))
|
(create-continuation-prompt-tag name)]))
|
||||||
|
|
||||||
(define (default-continuation-prompt-tag) the-default-continuation-prompt-tag)
|
(define (default-continuation-prompt-tag) the-default-continuation-prompt-tag)
|
||||||
(define (root-continuation-prompt-tag) the-root-continuation-prompt-tag)
|
(define (unsafe-root-continuation-prompt-tag) the-root-continuation-prompt-tag)
|
||||||
|
|
||||||
;; To support special treatment of break parameterizations, and also
|
;; To support special treatment of break parameterizations, and also
|
||||||
;; to initialize disabled breaks for `dynamic-wind` pre and post
|
;; to initialize disabled breaks for `dynamic-wind` pre and post
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
[threaded? rumble:threaded?]
|
[threaded? rumble:threaded?]
|
||||||
[get-thread-id rumble:get-thread-id]
|
[get-thread-id rumble:get-thread-id]
|
||||||
[set-ctl-c-handler! rumble:set-ctl-c-handler!]
|
[set-ctl-c-handler! rumble:set-ctl-c-handler!]
|
||||||
[root-continuation-prompt-tag rumble:root-continuation-prompt-tag]
|
[unsafe-root-continuation-prompt-tag rumble:unsafe-root-continuation-prompt-tag]
|
||||||
[set-break-enabled-transition-hook! rumble:set-break-enabled-transition-hook!]))
|
[set-break-enabled-transition-hook! rumble:set-break-enabled-transition-hook!]))
|
||||||
|
|
||||||
;; Special handling of `current-atomic`: use the last virtual register.
|
;; Special handling of `current-atomic`: use the last virtual register.
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
'engine-return rumble:engine-return
|
'engine-return rumble:engine-return
|
||||||
'current-engine-state (lambda (v) (rumble:current-engine-state v))
|
'current-engine-state (lambda (v) (rumble:current-engine-state v))
|
||||||
'set-ctl-c-handler! rumble:set-ctl-c-handler!
|
'set-ctl-c-handler! rumble:set-ctl-c-handler!
|
||||||
'root-continuation-prompt-tag rumble:root-continuation-prompt-tag
|
'root-continuation-prompt-tag rumble:unsafe-root-continuation-prompt-tag
|
||||||
'poll-will-executors poll-will-executors
|
'poll-will-executors poll-will-executors
|
||||||
'make-will-executor rumble:make-will-executor
|
'make-will-executor rumble:make-will-executor
|
||||||
'make-stubborn-will-executor rumble:make-stubborn-will-executor
|
'make-stubborn-will-executor rumble:make-stubborn-will-executor
|
||||||
|
|
25
racket/src/expander/common/parameter-like.rkt
Normal file
25
racket/src/expander/common/parameter-like.rkt
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require (only-in '#%unsafe
|
||||||
|
unsafe-root-continuation-prompt-tag))
|
||||||
|
|
||||||
|
(provide define-parameter-like
|
||||||
|
parameterize-like)
|
||||||
|
|
||||||
|
;; A parameter-like function differs from a parameter by not being
|
||||||
|
;; mutable and not being propagated to a new thread. It's just a
|
||||||
|
;; continuation mark.
|
||||||
|
|
||||||
|
(define root-tag (unsafe-root-continuation-prompt-tag))
|
||||||
|
|
||||||
|
(define-syntax-rule (define-parameter-like id val)
|
||||||
|
(begin
|
||||||
|
(define default-val val)
|
||||||
|
(define (id)
|
||||||
|
(continuation-mark-set-first #f id default-val root-tag))))
|
||||||
|
|
||||||
|
(define-syntax parameterize-like
|
||||||
|
(syntax-rules ()
|
||||||
|
[(_ #:with () body0 body ...)
|
||||||
|
(let () body0 body ...)]
|
||||||
|
[(_ #:with ([key0 val0] [key val] ...) body0 body ...)
|
||||||
|
(with-continuation-mark key0 val0 (parameterize-like #:with ([key val] ...) body0 body ...))]))
|
|
@ -11,7 +11,8 @@
|
||||||
"../common/phase.rkt"
|
"../common/phase.rkt"
|
||||||
"../syntax/match.rkt"
|
"../syntax/match.rkt"
|
||||||
"../expand/context.rkt"
|
"../expand/context.rkt"
|
||||||
(rename-in "../expand/main.rkt" [expand expand-in-context])
|
(rename-in "../expand/main.rkt"
|
||||||
|
[expand expand-in-context])
|
||||||
"../compile/main.rkt"
|
"../compile/main.rkt"
|
||||||
"../compile/compiled-in-memory.rkt"
|
"../compile/compiled-in-memory.rkt"
|
||||||
"top.rkt"
|
"top.rkt"
|
||||||
|
@ -134,7 +135,7 @@
|
||||||
(define (expand s [ns (current-namespace)] [observable? #f] [to-parsed? #f] [serializable? #f])
|
(define (expand s [ns (current-namespace)] [observable? #f] [to-parsed? #f] [serializable? #f])
|
||||||
(define observer (and observable? (current-expand-observe)))
|
(define observer (and observable? (current-expand-observe)))
|
||||||
(when observer (...log-expand observer ['start-top]))
|
(when observer (...log-expand observer ['start-top]))
|
||||||
(parameterize ((current-expand-observe #f))
|
(parameterize ([current-expand-observe #f])
|
||||||
(per-top-level s ns
|
(per-top-level s ns
|
||||||
#:single (lambda (s ns as-tail?) (expand-single s ns observer to-parsed? serializable?))
|
#:single (lambda (s ns as-tail?) (expand-single s ns observer to-parsed? serializable?))
|
||||||
#:combine cons
|
#:combine cons
|
||||||
|
@ -201,7 +202,7 @@
|
||||||
;; but `#:single #f` makes it return immediately
|
;; but `#:single #f` makes it return immediately
|
||||||
(define observer (current-expand-observe))
|
(define observer (current-expand-observe))
|
||||||
(when observer (...log-expand observer ['start-top]))
|
(when observer (...log-expand observer ['start-top]))
|
||||||
(parameterize ((current-expand-observe #f))
|
(parameterize ([current-expand-observe #f])
|
||||||
(per-top-level s ns
|
(per-top-level s ns
|
||||||
#:single #f
|
#:single #f
|
||||||
#:quick-immediate? #f
|
#:quick-immediate? #f
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "../common/promise.rkt"
|
(require "../common/promise.rkt"
|
||||||
"../common/performance.rkt"
|
"../common/performance.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"../namespace/namespace.rkt"
|
"../namespace/namespace.rkt"
|
||||||
"../namespace/module.rkt"
|
"../namespace/module.rkt"
|
||||||
"../namespace/inspector.rkt"
|
"../namespace/inspector.rkt"
|
||||||
|
@ -211,10 +212,11 @@
|
||||||
;; For phase level 1 and up, set the expansion context
|
;; For phase level 1 and up, set the expansion context
|
||||||
;; to point back to the module's info:
|
;; to point back to the module's info:
|
||||||
(define ns-1 (namespace->namespace-at-phase ns (phase+ phase-shift (sub1 phase-level))))
|
(define ns-1 (namespace->namespace-at-phase ns (phase+ phase-shift (sub1 phase-level))))
|
||||||
(parameterize ([current-expand-context (delay (make-expand-context ns-1))]
|
(parameterize ([current-namespace ns])
|
||||||
[current-namespace ns]
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context (delay (make-expand-context ns-1))]
|
||||||
[current-module-code-inspector insp])
|
[current-module-code-inspector insp])
|
||||||
(instantiate-body))]))))))
|
(instantiate-body)))]))))))
|
||||||
|
|
||||||
(define declare-name (substitute-module-declare-name default-name))
|
(define declare-name (substitute-module-declare-name default-name))
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(require "../common/set.rkt"
|
(require "../common/set.rkt"
|
||||||
"../common/phase.rkt"
|
"../common/phase.rkt"
|
||||||
"../common/performance.rkt"
|
"../common/performance.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"../namespace/namespace.rkt"
|
"../namespace/namespace.rkt"
|
||||||
"../namespace/module.rkt"
|
"../namespace/module.rkt"
|
||||||
"../compile/module-use.rkt"
|
"../compile/module-use.rkt"
|
||||||
|
@ -167,9 +168,10 @@
|
||||||
[else
|
[else
|
||||||
(define ns-1 (namespace->namespace-at-phase phase-ns (sub1 phase)))
|
(define ns-1 (namespace->namespace-at-phase phase-ns (sub1 phase)))
|
||||||
(lambda (tail?)
|
(lambda (tail?)
|
||||||
(parameterize ([current-expand-context (make-expand-context ns-1)]
|
(parameterize ([current-namespace phase-ns])
|
||||||
[current-namespace phase-ns])
|
(parameterize-like
|
||||||
(instantiate tail?)))])]
|
#:with ([current-expand-context (make-expand-context ns-1)])
|
||||||
|
(instantiate tail?))))])]
|
||||||
[else void])))
|
[else void])))
|
||||||
|
|
||||||
;; Call last thunk tail position --- maybe, since using a prompt if not `as-tail?`
|
;; Call last thunk tail position --- maybe, since using a prompt if not `as-tail?`
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "../common/promise.rkt"
|
(require "../common/promise.rkt"
|
||||||
"../common/struct-star.rkt"
|
"../common/struct-star.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"../syntax/syntax.rkt"
|
"../syntax/syntax.rkt"
|
||||||
"../syntax/scope.rkt"
|
"../syntax/scope.rkt"
|
||||||
"../syntax/binding.rkt"
|
"../syntax/binding.rkt"
|
||||||
|
@ -130,7 +131,7 @@
|
||||||
[binding-layer (root-expand-context-frame-id root-ctx)]))
|
[binding-layer (root-expand-context-frame-id root-ctx)]))
|
||||||
|
|
||||||
;; An expand-context or a delayed expand context (so use `force`):
|
;; An expand-context or a delayed expand context (so use `force`):
|
||||||
(define current-expand-context (make-parameter #f))
|
(define-parameter-like current-expand-context #f)
|
||||||
|
|
||||||
(define (get-current-expand-context [who 'unexpected]
|
(define (get-current-expand-context [who 'unexpected]
|
||||||
#:fail-ok? [fail-ok? #f])
|
#:fail-ok? [fail-ok? #f])
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
"../syntax/binding.rkt"
|
"../syntax/binding.rkt"
|
||||||
"../namespace/core.rkt"
|
"../namespace/core.rkt"
|
||||||
"../namespace/module.rkt"
|
"../namespace/module.rkt"
|
||||||
|
"../namespace/namespace.rkt"
|
||||||
"context.rkt"
|
"context.rkt"
|
||||||
"main.rkt"
|
"main.rkt"
|
||||||
"syntax-local.rkt"
|
"syntax-local.rkt"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "../common/set.rkt"
|
(require "../common/set.rkt"
|
||||||
"../common/struct-star.rkt"
|
"../common/struct-star.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"../syntax/syntax.rkt"
|
"../syntax/syntax.rkt"
|
||||||
"../syntax/property.rkt"
|
"../syntax/property.rkt"
|
||||||
"../syntax/scope.rkt"
|
"../syntax/scope.rkt"
|
||||||
|
@ -427,15 +428,16 @@
|
||||||
;; lose them at the point where expansion stops
|
;; lose them at the point where expansion stops
|
||||||
(expand-context-def-ctx-scopes ctx))]))
|
(expand-context-def-ctx-scopes ctx))]))
|
||||||
(define transformed-s
|
(define transformed-s
|
||||||
(parameterize ([current-expand-context m-ctx]
|
(parameterize ([current-namespace (namespace->namespace-at-phase
|
||||||
[current-namespace (namespace->namespace-at-phase
|
|
||||||
(expand-context-namespace ctx)
|
(expand-context-namespace ctx)
|
||||||
(add1 (expand-context-phase ctx)))]
|
(add1 (expand-context-phase ctx)))])
|
||||||
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context m-ctx]
|
||||||
[current-module-code-inspector (or insp-of-t #;(current-module-code-inspector))])
|
[current-module-code-inspector (or insp-of-t #;(current-module-code-inspector))])
|
||||||
(call-with-continuation-barrier
|
(call-with-continuation-barrier
|
||||||
(lambda ()
|
(lambda ()
|
||||||
;; Call the transformer!
|
;; Call the transformer!
|
||||||
((transformer->procedure t) cleaned-s)))))
|
((transformer->procedure t) cleaned-s))))))
|
||||||
(log-expand ctx 'macro-post-x transformed-s cleaned-s)
|
(log-expand ctx 'macro-post-x transformed-s cleaned-s)
|
||||||
(unless (syntax? transformed-s)
|
(unless (syntax? transformed-s)
|
||||||
(raise-arguments-error (syntax-e id)
|
(raise-arguments-error (syntax-e id)
|
||||||
|
@ -671,12 +673,13 @@
|
||||||
#:phase phase))))
|
#:phase phase))))
|
||||||
(define vals
|
(define vals
|
||||||
(call-with-values (lambda ()
|
(call-with-values (lambda ()
|
||||||
(parameterize ([current-expand-context ctx]
|
(parameterize ([current-namespace ns]
|
||||||
[current-namespace ns]
|
|
||||||
[eval-jit-enabled #f])
|
[eval-jit-enabled #f])
|
||||||
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context ctx])
|
||||||
(if compiled
|
(if compiled
|
||||||
(eval-single-top compiled ns)
|
(eval-single-top compiled ns)
|
||||||
(direct-eval p ns (root-expand-context-self-mpi ctx)))))
|
(direct-eval p ns (root-expand-context-self-mpi ctx))))))
|
||||||
list))
|
list))
|
||||||
(unless (= (length vals) (length ids))
|
(unless (= (length vals) (length ids))
|
||||||
(apply raise-result-arity-error
|
(apply raise-result-arity-error
|
||||||
|
@ -772,7 +775,8 @@
|
||||||
;; as a function, and that fnuction might want to use
|
;; as a function, and that fnuction might want to use
|
||||||
;; `syntax-local-value`, etc.
|
;; `syntax-local-value`, etc.
|
||||||
(define (rename-transformer-target-in-context t ctx)
|
(define (rename-transformer-target-in-context t ctx)
|
||||||
(parameterize ([current-expand-context ctx])
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context ctx])
|
||||||
(rename-transformer-target t)))
|
(rename-transformer-target t)))
|
||||||
|
|
||||||
;; In case the rename-transformer has a callback, ensure that the
|
;; In case the rename-transformer has a callback, ensure that the
|
||||||
|
@ -780,7 +784,8 @@
|
||||||
;; `free-identifier=?` equivalence
|
;; `free-identifier=?` equivalence
|
||||||
(define (maybe-install-free=id-in-context! val id phase ctx)
|
(define (maybe-install-free=id-in-context! val id phase ctx)
|
||||||
(when (rename-transformer? val)
|
(when (rename-transformer? val)
|
||||||
(parameterize ([current-expand-context ctx])
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context ctx])
|
||||||
(maybe-install-free=id! val id phase))))
|
(maybe-install-free=id! val id phase))))
|
||||||
|
|
||||||
;; Transfer the original ID's source location, if any, when expanding
|
;; Transfer the original ID's source location, if any, when expanding
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(require "../common/promise.rkt"
|
(require "../common/promise.rkt"
|
||||||
"../common/struct-star.rkt"
|
"../common/struct-star.rkt"
|
||||||
"../common/performance.rkt"
|
"../common/performance.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"../syntax/syntax.rkt"
|
"../syntax/syntax.rkt"
|
||||||
"../syntax/debug.rkt"
|
"../syntax/debug.rkt"
|
||||||
"../syntax/property.rkt"
|
"../syntax/property.rkt"
|
||||||
|
@ -1300,13 +1301,14 @@
|
||||||
(void)]
|
(void)]
|
||||||
[else
|
[else
|
||||||
;; an expression
|
;; an expression
|
||||||
(parameterize ([current-expand-context ctx]
|
(parameterize ([current-namespace m-ns])
|
||||||
[current-namespace m-ns])
|
(parameterize-like
|
||||||
|
#:with ([current-expand-context ctx])
|
||||||
(eval-single-top
|
(eval-single-top
|
||||||
(compile-single p (make-compile-context
|
(compile-single p (make-compile-context
|
||||||
#:namespace m-ns
|
#:namespace m-ns
|
||||||
#:phase phase))
|
#:phase phase))
|
||||||
m-ns))])))
|
m-ns)))])))
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
|
(require "../common/parameter-like.rkt")
|
||||||
|
|
||||||
(provide current-module-code-inspector)
|
(provide current-module-code-inspector)
|
||||||
|
|
||||||
;; Parameter to select inspector for functions like `syntax-arm`
|
;; Parameter to select inspector for functions like `syntax-arm`
|
||||||
(define current-module-code-inspector (make-parameter #f))
|
(define-parameter-like current-module-code-inspector #f)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "../common/struct-star.rkt"
|
(require "../common/struct-star.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"readtable-parameter.rkt")
|
"readtable-parameter.rkt")
|
||||||
|
|
||||||
(provide (struct*-out read-config)
|
(provide (struct*-out read-config)
|
||||||
|
@ -36,7 +37,7 @@
|
||||||
(struct read-config-state ([accum-str #:mutable] ; string-buffer cache
|
(struct read-config-state ([accum-str #:mutable] ; string-buffer cache
|
||||||
[graph #:mutable])) ; #f or hash of number -> value
|
[graph #:mutable])) ; #f or hash of number -> value
|
||||||
|
|
||||||
(define current-read-config (make-parameter #f)) ; for `read/recursive`
|
(define-parameter-like current-read-config #f) ; for `read/recursive`
|
||||||
|
|
||||||
(define (make-read-config
|
(define (make-read-config
|
||||||
#:source [source #f]
|
#:source [source #f]
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "config.rkt"
|
(require "../common/parameter-like.rkt"
|
||||||
|
"config.rkt"
|
||||||
"special.rkt"
|
"special.rkt"
|
||||||
"consume.rkt"
|
"consume.rkt"
|
||||||
"error.rkt"
|
"error.rkt"
|
||||||
|
@ -195,7 +196,8 @@
|
||||||
[(and for-syntax? (not get-info?))
|
[(and for-syntax? (not get-info?))
|
||||||
(cond
|
(cond
|
||||||
[(procedure-arity-includes? extension 6)
|
[(procedure-arity-includes? extension 6)
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(extension (read-config-source config)
|
(extension (read-config-source config)
|
||||||
in
|
in
|
||||||
mod-path-wrapped
|
mod-path-wrapped
|
||||||
|
@ -203,7 +205,8 @@
|
||||||
(read-config-col config)
|
(read-config-col config)
|
||||||
(read-config-pos config)))]
|
(read-config-pos config)))]
|
||||||
[(procedure-arity-includes? extension 2)
|
[(procedure-arity-includes? extension 2)
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(extension (read-config-source config) in))]
|
(extension (read-config-source config) in))]
|
||||||
[else
|
[else
|
||||||
(raise-argument-error who
|
(raise-argument-error who
|
||||||
|
@ -212,7 +215,8 @@
|
||||||
[else
|
[else
|
||||||
(cond
|
(cond
|
||||||
[(procedure-arity-includes? extension 5)
|
[(procedure-arity-includes? extension 5)
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(extension in
|
(extension in
|
||||||
mod-path-wrapped
|
mod-path-wrapped
|
||||||
(read-config-line config)
|
(read-config-line config)
|
||||||
|
@ -223,7 +227,8 @@
|
||||||
"(procedure-arity-includes?/c 5)"
|
"(procedure-arity-includes?/c 5)"
|
||||||
extension)]
|
extension)]
|
||||||
[(procedure-arity-includes? extension 1)
|
[(procedure-arity-includes? extension 1)
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(extension in))]
|
(extension in))]
|
||||||
[else
|
[else
|
||||||
(raise-argument-error who
|
(raise-argument-error who
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require "../common/inline.rkt"
|
(require "../common/inline.rkt"
|
||||||
|
"../common/parameter-like.rkt"
|
||||||
"config.rkt"
|
"config.rkt"
|
||||||
"coerce.rkt"
|
"coerce.rkt"
|
||||||
"parameter.rkt"
|
"parameter.rkt"
|
||||||
|
@ -159,12 +160,14 @@
|
||||||
(define v
|
(define v
|
||||||
(cond
|
(cond
|
||||||
[(not for-syntax?)
|
[(not for-syntax?)
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(if (procedure-arity-includes? handler 2)
|
(if (procedure-arity-includes? handler 2)
|
||||||
(handler c in)
|
(handler c in)
|
||||||
(handler c in #f line col pos)))]
|
(handler c in #f line col pos)))]
|
||||||
[else
|
[else
|
||||||
(parameterize ([current-read-config config])
|
(parameterize-like
|
||||||
|
#:with ([current-read-config config])
|
||||||
(handler c in (read-config-source config) line col pos))]))
|
(handler c in (read-config-source config) line col pos))]))
|
||||||
(if (special-comment? v)
|
(if (special-comment? v)
|
||||||
v
|
v
|
||||||
|
|
|
@ -60,6 +60,7 @@ READ_ONLY Scheme_Object *scheme_call_with_immed_mark_proc;
|
||||||
READ_ONLY Scheme_Object *scheme_reduced_procedure_struct;
|
READ_ONLY Scheme_Object *scheme_reduced_procedure_struct;
|
||||||
READ_ONLY Scheme_Object *scheme_tail_call_waiting;
|
READ_ONLY Scheme_Object *scheme_tail_call_waiting;
|
||||||
READ_ONLY Scheme_Object *scheme_default_prompt_tag;
|
READ_ONLY Scheme_Object *scheme_default_prompt_tag;
|
||||||
|
READ_ONLY Scheme_Object *scheme_root_prompt_tag;
|
||||||
READ_ONLY Scheme_Object *scheme_chaperone_undefined_property;
|
READ_ONLY Scheme_Object *scheme_chaperone_undefined_property;
|
||||||
|
|
||||||
/* READ ONLY SHARABLE GLOBALS */
|
/* READ ONLY SHARABLE GLOBALS */
|
||||||
|
@ -177,6 +178,7 @@ static Scheme_Object *chaperone_unsafe_undefined(int argc, Scheme_Object **argv)
|
||||||
|
|
||||||
static Scheme_Object *unsafe_abort_continuation_no_dws(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *unsafe_abort_continuation_no_dws(int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *unsafe_call_with_control_no_dws(int argc, Scheme_Object *argv[]);
|
static Scheme_Object *unsafe_call_with_control_no_dws(int argc, Scheme_Object *argv[]);
|
||||||
|
static Scheme_Object *unsafe_root_continuation_prompt_tag(int argc, Scheme_Object *argv[]);
|
||||||
|
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key,
|
scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key,
|
||||||
|
@ -689,6 +691,14 @@ scheme_init_fun (Scheme_Startup_Env *env)
|
||||||
(void)scheme_hash_key(SCHEME_PTR_VAL(scheme_default_prompt_tag));
|
(void)scheme_hash_key(SCHEME_PTR_VAL(scheme_default_prompt_tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REGISTER_SO(scheme_root_prompt_tag);
|
||||||
|
{
|
||||||
|
Scheme_Object *a[1];
|
||||||
|
a[0] = scheme_intern_symbol("root");
|
||||||
|
scheme_root_prompt_tag = make_prompt_tag(1, a);
|
||||||
|
(void)scheme_hash_key(SCHEME_PTR_VAL(scheme_root_prompt_tag));
|
||||||
|
}
|
||||||
|
|
||||||
REGISTER_SO(original_default_prompt);
|
REGISTER_SO(original_default_prompt);
|
||||||
original_default_prompt = MALLOC_ONE_TAGGED(Scheme_Prompt);
|
original_default_prompt = MALLOC_ONE_TAGGED(Scheme_Prompt);
|
||||||
original_default_prompt->so.type = scheme_prompt_type;
|
original_default_prompt->so.type = scheme_prompt_type;
|
||||||
|
@ -736,6 +746,8 @@ scheme_init_unsafe_fun (Scheme_Startup_Env *env)
|
||||||
|
|
||||||
ADD_PRIM_W_ARITY("unsafe-abort-current-continuation/no-wind", unsafe_abort_continuation_no_dws, 2, 2, env);
|
ADD_PRIM_W_ARITY("unsafe-abort-current-continuation/no-wind", unsafe_abort_continuation_no_dws, 2, 2, env);
|
||||||
ADD_PRIM_W_ARITY("unsafe-call-with-composable-continuation/no-wind", unsafe_call_with_control_no_dws, 2, 2, env);
|
ADD_PRIM_W_ARITY("unsafe-call-with-composable-continuation/no-wind", unsafe_call_with_control_no_dws, 2, 2, env);
|
||||||
|
|
||||||
|
ADD_PRIM_W_ARITY("unsafe-root-continuation-prompt-tag", unsafe_root_continuation_prompt_tag, 0, 0, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -5314,6 +5326,11 @@ static MZ_MARK_STACK_TYPE exec_dyn_wind_pres(Scheme_Dynamic_Wind_List *dwl,
|
||||||
return copied_cms;
|
return copied_cms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void root_prompt_tag_misuse(const char *who)
|
||||||
|
{
|
||||||
|
scheme_signal_error("%s: misuse of root prompt tag", who);
|
||||||
|
}
|
||||||
|
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
call_cc (int argc, Scheme_Object *argv[])
|
call_cc (int argc, Scheme_Object *argv[])
|
||||||
{
|
{
|
||||||
|
@ -5924,6 +5941,13 @@ internal_call_cc (int argc, Scheme_Object *argv[])
|
||||||
|
|
||||||
composable = (argc > 2);
|
composable = (argc > 2);
|
||||||
|
|
||||||
|
if (SAME_OBJ(pt, scheme_root_prompt_tag)) {
|
||||||
|
root_prompt_tag_misuse(composable
|
||||||
|
? "call-with-composable-continuation"
|
||||||
|
: "call-with-current-continuation");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
prompt = scheme_get_prompt(SCHEME_PTR_VAL(pt), &prompt_cont, &prompt_pos);
|
prompt = scheme_get_prompt(SCHEME_PTR_VAL(pt), &prompt_cont, &prompt_pos);
|
||||||
if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, pt)) {
|
if (!prompt && !SAME_OBJ(scheme_default_prompt_tag, pt)) {
|
||||||
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
||||||
|
@ -6979,6 +7003,10 @@ static Scheme_Object *call_with_prompt (int in_argc, Scheme_Object *in_argv[])
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
prompt_tag = in_argv[1];
|
prompt_tag = in_argv[1];
|
||||||
|
if (SAME_OBJ(prompt_tag, scheme_root_prompt_tag)) {
|
||||||
|
root_prompt_tag_misuse("call-with-continuation-prompt");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
prompt_tag = scheme_default_prompt_tag;
|
prompt_tag = scheme_default_prompt_tag;
|
||||||
|
|
||||||
|
@ -7432,6 +7460,11 @@ static Scheme_Object *do_abort_continuation (int argc, Scheme_Object *argv[], in
|
||||||
} else
|
} else
|
||||||
prompt_tag = argv[0];
|
prompt_tag = argv[0];
|
||||||
|
|
||||||
|
if (SAME_OBJ(prompt_tag, scheme_root_prompt_tag)) {
|
||||||
|
root_prompt_tag_misuse("abort-current-continuation");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag));
|
prompt = (Scheme_Prompt *)scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag));
|
||||||
if (!prompt && SAME_OBJ(scheme_default_prompt_tag, prompt_tag))
|
if (!prompt && SAME_OBJ(scheme_default_prompt_tag, prompt_tag))
|
||||||
prompt = original_default_prompt;
|
prompt = original_default_prompt;
|
||||||
|
@ -7522,6 +7555,10 @@ static Scheme_Object *do_call_with_control (int argc, Scheme_Object *argv[], int
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (SAME_OBJ(prompt_tag, scheme_root_prompt_tag)) {
|
||||||
|
root_prompt_tag_misuse("abort-current-continuation");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
prompt_tag = scheme_default_prompt_tag;
|
prompt_tag = scheme_default_prompt_tag;
|
||||||
|
|
||||||
|
@ -7556,6 +7593,11 @@ static Scheme_Object *unsafe_call_with_control_no_dws(int argc, Scheme_Object *a
|
||||||
return do_call_with_control(argc, argv, 1);
|
return do_call_with_control(argc, argv, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Scheme_Object *unsafe_root_continuation_prompt_tag(int argc, Scheme_Object *argv[])
|
||||||
|
{
|
||||||
|
return scheme_root_prompt_tag;
|
||||||
|
}
|
||||||
|
|
||||||
static Scheme_Cont_Mark *copy_cm_shared_on_write(Scheme_Meta_Continuation *mc)
|
static Scheme_Cont_Mark *copy_cm_shared_on_write(Scheme_Meta_Continuation *mc)
|
||||||
{
|
{
|
||||||
Scheme_Cont_Mark *cp;
|
Scheme_Cont_Mark *cp;
|
||||||
|
@ -7585,6 +7627,9 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p,
|
||||||
intptr_t cmpos, first_cmpos = 0, cdelta = 0;
|
intptr_t cmpos, first_cmpos = 0, cdelta = 0;
|
||||||
int found_tag = 0, at_mc_boundary = 0;
|
int found_tag = 0, at_mc_boundary = 0;
|
||||||
|
|
||||||
|
if (SAME_OBJ(prompt_tag, scheme_root_prompt_tag))
|
||||||
|
prompt_tag = NULL;
|
||||||
|
|
||||||
if (cont && SAME_OBJ(cont->prompt_tag, prompt_tag))
|
if (cont && SAME_OBJ(cont->prompt_tag, prompt_tag))
|
||||||
found_tag = 1;
|
found_tag = 1;
|
||||||
if (!prompt_tag)
|
if (!prompt_tag)
|
||||||
|
@ -7906,7 +7951,8 @@ cc_marks(int argc, Scheme_Object *argv[])
|
||||||
0, argc, argv);
|
0, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SAME_OBJ(scheme_default_prompt_tag, prompt_tag))
|
if (!SAME_OBJ(scheme_default_prompt_tag, prompt_tag)
|
||||||
|
&& !SAME_OBJ(scheme_root_prompt_tag, prompt_tag))
|
||||||
if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) {
|
if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) {
|
||||||
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
||||||
"current-continuation-marks: no corresponding prompt in the continuation\n"
|
"current-continuation-marks: no corresponding prompt in the continuation\n"
|
||||||
|
@ -8274,6 +8320,9 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key
|
||||||
{
|
{
|
||||||
Scheme_Object *key = key_arg;
|
Scheme_Object *key = key_arg;
|
||||||
|
|
||||||
|
if (prompt_tag && SAME_OBJ(prompt_tag, SCHEME_PTR_VAL(scheme_root_prompt_tag)))
|
||||||
|
prompt_tag = NULL;
|
||||||
|
|
||||||
if (SCHEME_NP_CHAPERONEP(key)
|
if (SCHEME_NP_CHAPERONEP(key)
|
||||||
&& SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) {
|
&& SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) {
|
||||||
key = SCHEME_CHAPERONE_VAL(key);
|
key = SCHEME_CHAPERONE_VAL(key);
|
||||||
|
@ -8661,7 +8710,8 @@ extract_one_cc_mark(int argc, Scheme_Object *argv[])
|
||||||
} else
|
} else
|
||||||
prompt_tag = argv[3];
|
prompt_tag = argv[3];
|
||||||
|
|
||||||
if (!SAME_OBJ(scheme_default_prompt_tag, prompt_tag)) {
|
if (!SAME_OBJ(scheme_default_prompt_tag, prompt_tag)
|
||||||
|
&& !SAME_OBJ(scheme_root_prompt_tag, prompt_tag)) {
|
||||||
if (SCHEME_FALSEP(argv[0])) {
|
if (SCHEME_FALSEP(argv[0])) {
|
||||||
if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) {
|
if (!scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag))) {
|
||||||
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
scheme_raise_exn(MZEXN_FAIL_CONTRACT_CONTINUATION,
|
||||||
|
@ -8723,7 +8773,8 @@ static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *arg
|
||||||
} else {
|
} else {
|
||||||
Scheme_Meta_Continuation *mc;
|
Scheme_Meta_Continuation *mc;
|
||||||
|
|
||||||
if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag))
|
if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag)
|
||||||
|
|| SAME_OBJ(scheme_root_prompt_tag, prompt_tag))
|
||||||
return scheme_true;
|
return scheme_true;
|
||||||
|
|
||||||
mc = scheme_get_meta_continuation(argv[1]);
|
mc = scheme_get_meta_continuation(argv[1]);
|
||||||
|
@ -8740,7 +8791,8 @@ static Scheme_Object *continuation_prompt_available(int argc, Scheme_Object *arg
|
||||||
1, argc, argv);
|
1, argc, argv);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag))
|
if (SAME_OBJ(scheme_default_prompt_tag, prompt_tag)
|
||||||
|
|| SAME_OBJ(scheme_root_prompt_tag, prompt_tag))
|
||||||
return scheme_true;
|
return scheme_true;
|
||||||
|
|
||||||
if (scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag)))
|
if (scheme_extract_one_cc_mark(NULL, SCHEME_PTR_VAL(prompt_tag)))
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#define USE_COMPILED_STARTUP 1
|
#define USE_COMPILED_STARTUP 1
|
||||||
|
|
||||||
#define EXPECTED_PRIM_COUNT 1440
|
#define EXPECTED_PRIM_COUNT 1441
|
||||||
|
|
||||||
#ifdef MZSCHEME_SOMETHING_OMITTED
|
#ifdef MZSCHEME_SOMETHING_OMITTED
|
||||||
# undef USE_COMPILED_STARTUP
|
# undef USE_COMPILED_STARTUP
|
||||||
|
|
|
@ -676,6 +676,7 @@ extern Scheme_Hash_Tree *scheme_source_stx_props;
|
||||||
|
|
||||||
extern Scheme_Object *scheme_stack_dump_key;
|
extern Scheme_Object *scheme_stack_dump_key;
|
||||||
|
|
||||||
|
extern Scheme_Object *scheme_root_prompt_tag;
|
||||||
extern Scheme_Object *scheme_default_prompt_tag;
|
extern Scheme_Object *scheme_default_prompt_tag;
|
||||||
|
|
||||||
THREAD_LOCAL_DECL(extern Scheme_Object *scheme_system_idle_channel);
|
THREAD_LOCAL_DECL(extern Scheme_Object *scheme_system_idle_channel);
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
consistently.)
|
consistently.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MZSCHEME_VERSION "7.0.0.13"
|
#define MZSCHEME_VERSION "7.0.0.14"
|
||||||
|
|
||||||
#define MZSCHEME_VERSION_X 7
|
#define MZSCHEME_VERSION_X 7
|
||||||
#define MZSCHEME_VERSION_Y 0
|
#define MZSCHEME_VERSION_Y 0
|
||||||
#define MZSCHEME_VERSION_Z 0
|
#define MZSCHEME_VERSION_Z 0
|
||||||
#define MZSCHEME_VERSION_W 13
|
#define MZSCHEME_VERSION_W 14
|
||||||
|
|
||||||
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
|
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
|
||||||
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)
|
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)
|
||||||
|
|
|
@ -15392,6 +15392,7 @@ static const char *startup_source =
|
||||||
"(if(syntax-tainted?$1 id_0)"
|
"(if(syntax-tainted?$1 id_0)"
|
||||||
" (let-values () (raise-syntax-error$1 #f \"cannot use identifier tainted by macro transformation\" id_0))"
|
" (let-values () (raise-syntax-error$1 #f \"cannot use identifier tainted by macro transformation\" id_0))"
|
||||||
"(void)))))"
|
"(void)))))"
|
||||||
|
"(define-values(root-tag)(unsafe-root-continuation-prompt-tag))"
|
||||||
"(define-values(cons-ish)(lambda(a_0 b_0)(begin(if(null? b_0) a_0(cons a_0 b_0)))))"
|
"(define-values(cons-ish)(lambda(a_0 b_0)(begin(if(null? b_0) a_0(cons a_0 b_0)))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(to-syntax-list.1)"
|
"(to-syntax-list.1)"
|
||||||
|
@ -16184,7 +16185,10 @@ static const char *startup_source =
|
||||||
"(expand-context/outer-current-use-scopes the-struct_0)"
|
"(expand-context/outer-current-use-scopes the-struct_0)"
|
||||||
"(expand-context/outer-name the-struct_0)))"
|
"(expand-context/outer-name the-struct_0)))"
|
||||||
" (raise-argument-error 'struct-copy \"expand-context/outer?\" the-struct_0)))))))"
|
" (raise-argument-error 'struct-copy \"expand-context/outer?\" the-struct_0)))))))"
|
||||||
"(define-values(current-expand-context)(make-parameter #f))"
|
"(define-values(default-val.1$2) #f)"
|
||||||
|
"(define-values"
|
||||||
|
"(current-expand-context)"
|
||||||
|
"(lambda()(begin(continuation-mark-set-first #f current-expand-context default-val.1$2 root-tag))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(get-current-expand-context16.1)"
|
"(get-current-expand-context16.1)"
|
||||||
"(lambda(fail-ok?13_0 who15_0)"
|
"(lambda(fail-ok?13_0 who15_0)"
|
||||||
|
@ -16644,7 +16648,10 @@ static const char *startup_source =
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(syntax-remove-taint-dispatch-properties)"
|
"(syntax-remove-taint-dispatch-properties)"
|
||||||
"(lambda(s_0)(begin(1/syntax-property-remove(1/syntax-property-remove s_0 'taint-mode) 'certify-mode))))"
|
"(lambda(s_0)(begin(1/syntax-property-remove(1/syntax-property-remove s_0 'taint-mode) 'certify-mode))))"
|
||||||
"(define-values(current-module-code-inspector)(make-parameter #f))"
|
"(define-values(default-val.1$1) #f)"
|
||||||
|
"(define-values"
|
||||||
|
"(current-module-code-inspector)"
|
||||||
|
"(lambda()(begin(continuation-mark-set-first #f current-module-code-inspector default-val.1$1 root-tag))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(syntax-debug-info$1)"
|
"(syntax-debug-info$1)"
|
||||||
"(lambda(s_0 phase_0 all-bindings?_0)"
|
"(lambda(s_0 phase_0 all-bindings?_0)"
|
||||||
|
@ -34824,6 +34831,10 @@ static const char *startup_source =
|
||||||
"(continuation-mark-set-first"
|
"(continuation-mark-set-first"
|
||||||
" #f"
|
" #f"
|
||||||
" parameterization-key)"
|
" parameterization-key)"
|
||||||
|
" 1/current-namespace"
|
||||||
|
" ns_2)"
|
||||||
|
"(let-values()"
|
||||||
|
"(with-continuation-mark"
|
||||||
" current-expand-context"
|
" current-expand-context"
|
||||||
"(promise1.1"
|
"(promise1.1"
|
||||||
"(lambda()"
|
"(lambda()"
|
||||||
|
@ -34835,12 +34846,11 @@ static const char *startup_source =
|
||||||
" #f"
|
" #f"
|
||||||
" ns-153_0)))"
|
" ns-153_0)))"
|
||||||
" #f)"
|
" #f)"
|
||||||
" 1/current-namespace"
|
"(with-continuation-mark"
|
||||||
" ns_2"
|
|
||||||
" current-module-code-inspector"
|
" current-module-code-inspector"
|
||||||
" insp_0)"
|
" insp_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(instantiate-body_0))))))))))))"
|
"(instantiate-body_0)))))))))))))))"
|
||||||
"(void)))))"
|
"(void)))))"
|
||||||
"(if log-performance?"
|
"(if log-performance?"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
|
@ -37868,6 +37878,10 @@ static const char *startup_source =
|
||||||
"(continuation-mark-set-first"
|
"(continuation-mark-set-first"
|
||||||
" #f"
|
" #f"
|
||||||
" parameterization-key)"
|
" parameterization-key)"
|
||||||
|
" 1/current-namespace"
|
||||||
|
" phase-ns_0)"
|
||||||
|
"(let-values()"
|
||||||
|
"(with-continuation-mark"
|
||||||
" current-expand-context"
|
" current-expand-context"
|
||||||
"(let-values(((ns-144_0)"
|
"(let-values(((ns-144_0)"
|
||||||
" ns-1_0))"
|
" ns-1_0))"
|
||||||
|
@ -37876,11 +37890,9 @@ static const char *startup_source =
|
||||||
" #f"
|
" #f"
|
||||||
" #f"
|
" #f"
|
||||||
" ns-144_0))"
|
" ns-144_0))"
|
||||||
" 1/current-namespace"
|
|
||||||
" phase-ns_0)"
|
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(instantiate_0"
|
"(instantiate_0"
|
||||||
" tail?_0))))))))))))"
|
" tail?_0))))))))))))))"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
" void)))))))))))"
|
" void)))))))))))"
|
||||||
"(values"
|
"(values"
|
||||||
|
@ -39918,17 +39930,20 @@ static const char *startup_source =
|
||||||
" parameterization-key"
|
" parameterization-key"
|
||||||
"(extend-parameterization"
|
"(extend-parameterization"
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
"(continuation-mark-set-first #f parameterization-key)"
|
||||||
" current-expand-context"
|
|
||||||
" m-ctx_0"
|
|
||||||
" 1/current-namespace"
|
" 1/current-namespace"
|
||||||
"(namespace->namespace-at-phase"
|
"(namespace->namespace-at-phase"
|
||||||
"(expand-context-namespace ctx_0)"
|
"(expand-context-namespace ctx_0)"
|
||||||
"(add1(expand-context-phase ctx_0)))"
|
"(add1(expand-context-phase ctx_0))))"
|
||||||
|
"(let-values()"
|
||||||
|
"(with-continuation-mark"
|
||||||
|
" current-expand-context"
|
||||||
|
" m-ctx_0"
|
||||||
|
"(with-continuation-mark"
|
||||||
" current-module-code-inspector"
|
" current-module-code-inspector"
|
||||||
" insp-of-t_0)"
|
" insp-of-t_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(call-with-continuation-barrier"
|
"(call-with-continuation-barrier"
|
||||||
"(lambda()((transformer->procedure t_0) cleaned-s_0)))))))"
|
"(lambda()((transformer->procedure t_0) cleaned-s_0))))))))))"
|
||||||
"(begin"
|
"(begin"
|
||||||
"(let-values(((obs_0)(expand-context-observer ctx_0)))"
|
"(let-values(((obs_0)(expand-context-observer ctx_0)))"
|
||||||
"(if obs_0"
|
"(if obs_0"
|
||||||
|
@ -40454,16 +40469,18 @@ static const char *startup_source =
|
||||||
" parameterization-key"
|
" parameterization-key"
|
||||||
"(extend-parameterization"
|
"(extend-parameterization"
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
"(continuation-mark-set-first #f parameterization-key)"
|
||||||
" current-expand-context"
|
|
||||||
" ctx_0"
|
|
||||||
" 1/current-namespace"
|
" 1/current-namespace"
|
||||||
" ns_0"
|
" ns_0"
|
||||||
" eval-jit-enabled"
|
" eval-jit-enabled"
|
||||||
" #f)"
|
" #f)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
|
"(with-continuation-mark"
|
||||||
|
" current-expand-context"
|
||||||
|
" ctx_0"
|
||||||
|
"(let-values()"
|
||||||
"(if compiled_0"
|
"(if compiled_0"
|
||||||
"(eval-single-top compiled_0 ns_0)"
|
"(eval-single-top compiled_0 ns_0)"
|
||||||
"(direct-eval p_0 ns_0(root-expand-context-self-mpi ctx_0))))))"
|
"(direct-eval p_0 ns_0(root-expand-context-self-mpi ctx_0))))))))"
|
||||||
" list)))"
|
" list)))"
|
||||||
"(begin"
|
"(begin"
|
||||||
"(if(=(length vals_0)(length ids_0))"
|
"(if(=(length vals_0)(length ids_0))"
|
||||||
|
@ -40645,11 +40662,7 @@ static const char *startup_source =
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(rename-transformer-target-in-context)"
|
"(rename-transformer-target-in-context)"
|
||||||
"(lambda(t_0 ctx_0)"
|
"(lambda(t_0 ctx_0)"
|
||||||
"(begin"
|
"(begin(with-continuation-mark current-expand-context ctx_0(let-values()(1/rename-transformer-target t_0))))))"
|
||||||
"(with-continuation-mark"
|
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization(continuation-mark-set-first #f parameterization-key) current-expand-context ctx_0)"
|
|
||||||
"(let-values()(1/rename-transformer-target t_0))))))"
|
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(maybe-install-free=id-in-context!)"
|
"(maybe-install-free=id-in-context!)"
|
||||||
"(lambda(val_0 id_0 phase_0 ctx_0)"
|
"(lambda(val_0 id_0 phase_0 ctx_0)"
|
||||||
|
@ -40657,8 +40670,8 @@ static const char *startup_source =
|
||||||
"(if(1/rename-transformer? val_0)"
|
"(if(1/rename-transformer? val_0)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
" current-expand-context"
|
||||||
"(extend-parameterization(continuation-mark-set-first #f parameterization-key) current-expand-context ctx_0)"
|
" ctx_0"
|
||||||
"(let-values()(maybe-install-free=id! val_0 id_0 phase_0))))"
|
"(let-values()(maybe-install-free=id! val_0 id_0 phase_0))))"
|
||||||
"(void)))))"
|
"(void)))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
|
@ -48176,7 +48189,10 @@ static const char *startup_source =
|
||||||
"(make-struct-field-accessor -ref_0 1 'graph)"
|
"(make-struct-field-accessor -ref_0 1 'graph)"
|
||||||
"(make-struct-field-mutator -set!_0 0 'accum-str)"
|
"(make-struct-field-mutator -set!_0 0 'accum-str)"
|
||||||
"(make-struct-field-mutator -set!_0 1 'graph))))"
|
"(make-struct-field-mutator -set!_0 1 'graph))))"
|
||||||
"(define-values(current-read-config)(make-parameter #f))"
|
"(define-values(default-val.1) #f)"
|
||||||
|
"(define-values"
|
||||||
|
"(current-read-config)"
|
||||||
|
"(lambda()(begin(continuation-mark-set-first #f current-read-config default-val.1 root-tag))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
"(make-read-config26.1)"
|
"(make-read-config26.1)"
|
||||||
"(lambda(coerce12_0"
|
"(lambda(coerce12_0"
|
||||||
|
@ -48826,22 +48842,16 @@ static const char *startup_source =
|
||||||
"(if(not for-syntax?_0)"
|
"(if(not for-syntax?_0)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(if(procedure-arity-includes? handler_0 2)"
|
"(if(procedure-arity-includes? handler_0 2)"
|
||||||
"(handler_0 c_0 in_0)"
|
"(handler_0 c_0 in_0)"
|
||||||
"(handler_0 c_0 in_0 #f line_0 col_0 pos_0)))))"
|
"(handler_0 c_0 in_0 #f line_0 col_0 pos_0)))))"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()(handler_0 c_0 in_0(read-config-source config_0) line_0 col_0 pos_0)))))))"
|
"(let-values()(handler_0 c_0 in_0(read-config-source config_0) line_0 col_0 pos_0)))))))"
|
||||||
"(if(1/special-comment? v_0) v_0(coerce v_0 in_0 config_0)))))))"
|
"(if(1/special-comment? v_0) v_0(coerce v_0 in_0 config_0)))))))"
|
||||||
"(define-values"
|
"(define-values"
|
||||||
|
@ -55456,11 +55466,8 @@ static const char *startup_source =
|
||||||
"(if(procedure-arity-includes? extension_0 6)"
|
"(if(procedure-arity-includes? extension_0 6)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(extension_0"
|
"(extension_0"
|
||||||
"(read-config-source config_0)"
|
"(read-config-source config_0)"
|
||||||
|
@ -55472,13 +55479,8 @@ static const char *startup_source =
|
||||||
"(if(procedure-arity-includes? extension_0 2)"
|
"(if(procedure-arity-includes? extension_0 2)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first"
|
|
||||||
" #f"
|
|
||||||
" parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(extension_0(read-config-source config_0) in_0))))"
|
"(extension_0(read-config-source config_0) in_0))))"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
|
@ -55490,11 +55492,8 @@ static const char *startup_source =
|
||||||
"(if(procedure-arity-includes? extension_0 5)"
|
"(if(procedure-arity-includes? extension_0 5)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first #f parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(extension_0"
|
"(extension_0"
|
||||||
" in_0"
|
" in_0"
|
||||||
|
@ -55511,13 +55510,8 @@ static const char *startup_source =
|
||||||
"(if(procedure-arity-includes? extension_0 1)"
|
"(if(procedure-arity-includes? extension_0 1)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(with-continuation-mark"
|
"(with-continuation-mark"
|
||||||
" parameterization-key"
|
|
||||||
"(extend-parameterization"
|
|
||||||
"(continuation-mark-set-first"
|
|
||||||
" #f"
|
|
||||||
" parameterization-key)"
|
|
||||||
" current-read-config"
|
" current-read-config"
|
||||||
" config_0)"
|
" config_0"
|
||||||
"(let-values()(extension_0 in_0))))"
|
"(let-values()(extension_0 in_0))))"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
"(raise-argument-error"
|
"(raise-argument-error"
|
||||||
|
@ -77134,11 +77128,13 @@ static const char *startup_source =
|
||||||
"(continuation-mark-set-first"
|
"(continuation-mark-set-first"
|
||||||
" #f"
|
" #f"
|
||||||
" parameterization-key)"
|
" parameterization-key)"
|
||||||
" current-expand-context"
|
|
||||||
" ctx_0"
|
|
||||||
" 1/current-namespace"
|
" 1/current-namespace"
|
||||||
" m-ns_0)"
|
" m-ns_0)"
|
||||||
"(let-values()"
|
"(let-values()"
|
||||||
|
"(with-continuation-mark"
|
||||||
|
" current-expand-context"
|
||||||
|
" ctx_0"
|
||||||
|
"(let-values()"
|
||||||
"(eval-single-top"
|
"(eval-single-top"
|
||||||
"(compile-single"
|
"(compile-single"
|
||||||
" p_0"
|
" p_0"
|
||||||
|
@ -77153,7 +77149,7 @@ static const char *startup_source =
|
||||||
" m-ns672_0"
|
" m-ns672_0"
|
||||||
" phase673_0"
|
" phase673_0"
|
||||||
" unsafe-undefined)))"
|
" unsafe-undefined)))"
|
||||||
" m-ns_0)))))))))"
|
" m-ns_0)))))))))))"
|
||||||
"(values)))))"
|
"(values)))))"
|
||||||
"(values)))))"
|
"(values)))))"
|
||||||
"(if(not #f)(for-loop_0 rest_0)(values))))"
|
"(if(not #f)(for-loop_0 rest_0)(values))))"
|
||||||
|
|
|
@ -8766,7 +8766,6 @@ static Scheme_Object *unsafe_remove_collect_callbacks(int argc, Scheme_Object *a
|
||||||
return scheme_void;
|
return scheme_void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
# define mzOSAPI WINAPI
|
# define mzOSAPI WINAPI
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue
Block a user