3.99.0.13: generalize require and provide to work with arbitrary phases

svn: r8742
This commit is contained in:
Matthew Flatt 2008-02-20 14:17:37 +00:00
parent 68ba174c67
commit ba63bd6f95
36 changed files with 4170 additions and 3281 deletions

View File

@ -25,11 +25,11 @@
(x (apply max x)))) (x (apply max x))))
(define (get-deps code path) (define (get-deps code path)
(let-values ([(imports fs-imports ft-imports fl-imports) (module-compiled-imports code)]) (let-values ([(imports) (apply append (map cdr (module-compiled-imports code)))])
(map path->bytes (map path->bytes
(let ([l (map (lambda (x) (let ([l (map (lambda (x)
(resolve-module-path-index x path)) (resolve-module-path-index x path))
(append imports fs-imports ft-imports fl-imports))]) imports)])
;; Filter symbols: ;; Filter symbols:
(let loop ([l l]) (let loop ([l l])
(cond (cond

View File

@ -133,7 +133,6 @@
"private/match/match-error.ss" "private/match/match-error.ss"
"private/match/test-no-order.ss") "private/match/test-no-order.ss")
(define-syntax match-definer (define-syntax match-definer
(syntax-rules () (syntax-rules ()
[(match-definer name clauses ...) [(match-definer name clauses ...)

View File

@ -9,7 +9,7 @@
(provide (provide
;; PLT Scheme pre-requisites: ;; PLT Scheme pre-requisites:
(rename-out [datum #%datum]) (rename-out [datum #%datum])
#%app #%app #%top #%top-interaction
;; 11.2 ;; 11.2
(rename-out [r5rs:define define] (rename-out [r5rs:define define]

View File

@ -38,13 +38,13 @@
(if for-stx (if for-stx
(with-syntax ([for for-stx]) (with-syntax ([for for-stx])
(syntax/loc stx (syntax/loc stx
(#%require (for elem ...)))) (#%require (for-meta for (just-meta 0 elem ...)))))
(syntax/loc stx (syntax/loc stx
(#%require elem ...)))])))]) (#%require elem ...)))])))])
(values (mk #f) (values (mk #f)
(mk #'for-syntax) (mk #'1)
(mk #'for-template) (mk #'-1)
(mk #'for-label)))) (mk #'#f))))
(define-syntaxes (provide provide-for-syntax provide-for-label) (define-syntaxes (provide provide-for-syntax provide-for-label)
(let ([mk (let ([mk

View File

@ -8,9 +8,9 @@
"struct-info.ss")) "struct-info.ss"))
(#%provide lib file planet (#%provide lib file planet
for-syntax for-template for-label for-syntax for-template for-label for-meta
require require
only-in rename-in prefix-in except-in only-in rename-in prefix-in except-in only-meta-in
provide provide
all-defined-out all-from-out all-defined-out all-from-out
rename-out except-out prefix-out struct-out rename-out except-out prefix-out struct-out
@ -31,7 +31,7 @@
(define-for-syntax (xlate-path stx) (define-for-syntax (xlate-path stx)
(if (pair? (syntax-e stx)) (if (pair? (syntax-e stx))
(let ([kw (let ([kw
;; free-identifier=? identifers are not necessarily module=? ;; symbolic-identifier=? identifers are not necessarily free-identifier=?
(syntax-case stx (lib planet file quote) (syntax-case stx (lib planet file quote)
[(quote . _) 'quote] [(quote . _) 'quote]
[(lib . _) 'lib] [(lib . _) 'lib]
@ -57,26 +57,27 @@
(define-syntaxes (lib file planet) (define-syntaxes (lib file planet)
(let ([t (lambda (stx) (let ([t (lambda (stx)
(check-lib-form stx) (check-lib-form stx)
(let*-values ([(mod-path) (syntax->datum stx)] (let* ([mod-path (syntax->datum stx)]
[(names et-names lt-names) (syntax-local-module-exports stx)]) [namess (syntax-local-module-exports stx)])
(values (values
(apply (apply
append append
(map (lambda (names mode) (map (lambda (names)
(map (lambda (name) (let ([mode (car names)])
(make-import (datum->syntax (map (lambda (name)
stx (make-import (datum->syntax
name stx
stx) name
name stx)
mod-path name
mode mod-path
'run mode
stx)) 0
names)) mode
(list names et-names lt-names) stx))
(list 'run 'syntax 'label))) (cdr names))))
(list (make-import-source stx 'run)))))]) namess))
(list (make-import-source stx 0)))))])
(let ([t2 (let ([t2
(let-values ([(s: mk s? s-ref s-set!) (let-values ([(s: mk s? s-ref s-set!)
(make-struct-type 'req+prov (make-struct-type 'req+prov
@ -96,6 +97,9 @@
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; for-syntax, for-template, for-label ;; for-syntax, for-template, for-label
(define-for-syntax (phase+ a b)
(and a b (+ a b)))
(define-for-syntax (shift-subs stx mode) (define-for-syntax (shift-subs stx mode)
(syntax-case stx () (syntax-case stx ()
[(_ in ...) [(_ in ...)
@ -110,18 +114,17 @@
(make-import (import-local-id import) (make-import (import-local-id import)
(import-src-sym import) (import-src-sym import)
(import-src-mod-path import) (import-src-mod-path import)
mode (phase+ mode (import-mode import))
mode (phase+ mode (import-req-mode import))
(import-orig-mode import)
(import-orig-stx import))) (import-orig-stx import)))
(filter (lambda (import) imports)
(eq? (import-mode import) 'run))
imports))
(map (lambda (source) (map (lambda (source)
(make-import-source (import-source-mod-path-stx source) (make-import-source
mode)) (import-source-mod-path-stx source)
(filter (lambda (source) (phase+ mode
(eq? (import-source-mode source) 'run)) (import-source-mode source))))
sources))))])) sources)))]))
(define-for-syntax (make-require+provide-transformer r p) (define-for-syntax (make-require+provide-transformer r p)
(let-values ([(s: mk s? s-ref s-set!) (let-values ([(s: mk s? s-ref s-set!)
@ -149,21 +152,50 @@
(define-syntax for-syntax (define-syntax for-syntax
(make-require+provide-transformer (make-require+provide-transformer
(lambda (stx) (lambda (stx)
(shift-subs stx 'syntax)) (shift-subs stx 1))
(lambda (stx modes) (lambda (stx modes)
(exports-at-phase stx modes 'syntax)))) (exports-at-phase stx modes 1))))
(define-syntax for-template (define-syntax for-template
(make-require-transformer (make-require+provide-transformer
(lambda (stx) (lambda (stx)
(shift-subs stx 'template)))) (shift-subs stx -1))
(lambda (stx modes)
(exports-at-phase stx modes -1))))
(define-syntax for-label (define-syntax for-label
(make-require+provide-transformer (make-require+provide-transformer
(lambda (stx) (lambda (stx)
(shift-subs stx 'label)) (shift-subs stx #f))
(lambda (stx modes) (lambda (stx modes)
(exports-at-phase stx modes 'label)))) (exports-at-phase stx modes #f))))
(define-syntax for-meta
(make-require+provide-transformer
(lambda (stx)
(syntax-case stx ()
[(_ mode in ...)
(let ([base-mode (syntax-e #'mode)])
(unless (or (not base-mode)
(exact-integer? base-mode))
(raise-syntax-error
#f
"phase level must be #f or an exact integer"
stx
#'mode))
(shift-subs #'(for-meta in ...) base-mode))]))
(lambda (stx modes)
(syntax-case stx ()
[(_ mode out ...)
(let ([base-mode (syntax-e #'mode)])
(unless (or (not base-mode)
(exact-integer? base-mode))
(raise-syntax-error
#f
"phase level must be #f or an exact integer"
stx
#'mode))
(exports-at-phase #'(for-meta out ...) modes base-mode))]))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; require ;; require
@ -176,11 +208,8 @@
(letrec ([mode-wrap (letrec ([mode-wrap
(lambda (mode base) (lambda (mode base)
(cond (cond
[(eq? mode 'run) base] [(eq? mode 0) base]
[(eq? mode 'syntax) #`(for-syntax #,base)] [else #`(for-meta #,mode #,base)]))]
[(eq? mode 'template) #`(for-template #,base)]
[(eq? mode 'label) #`(for-label #,base)]
[else (error "huh?" mode)]))]
[simple-path? (lambda (p) [simple-path? (lambda (p)
(syntax-case p (lib quote) (syntax-case p (lib quote)
[(lib . _) [(lib . _)
@ -249,27 +278,17 @@
;; TODO: collapse back to simple cases when possible ;; TODO: collapse back to simple cases when possible
(append (append
(map (lambda (import) (map (lambda (import)
(mode-wrap (if (eq? base-mode 'run) #`(just-meta
(import-req-mode import) #,(import-orig-mode import)
base-mode) #,(mode-wrap (phase+ base-mode (import-req-mode import))
#`(rename #,(import-src-mod-path import) #`(rename #,(import-src-mod-path import)
#,(import-local-id import) #,(import-local-id import)
#,(import-src-sym import)))) #,(import-src-sym import)))))
(if (eq? base-mode 'run) imports)
imports
(filter (lambda (import)
(eq? (import-mode import) 'run))
imports)))
(map (lambda (src) (map (lambda (src)
(mode-wrap (if (eq? base-mode 'run) (mode-wrap (phase+ base-mode (import-source-mode src))
(import-source-mode src)
base-mode)
#`(only #,(import-source-mod-path-stx src)))) #`(only #,(import-source-mod-path-stx src))))
(if (eq? base-mode 'run) sources)))]))]
sources
(filter (lambda (source)
(eq? (import-source-mode source) 'run))
sources)))))]))]
[transform-one [transform-one
(lambda (in) (lambda (in)
;; Recognize `for-syntax', etc. for simple cases: ;; Recognize `for-syntax', etc. for simple cases:
@ -283,13 +302,13 @@
(transform-simple in (transform-simple in
(cond (cond
[(free-identifier=? #'for-something #'for-syntax) [(free-identifier=? #'for-something #'for-syntax)
'syntax] 1]
[(free-identifier=? #'for-something #'for-template) [(free-identifier=? #'for-something #'for-template)
'template] -1]
[(free-identifier=? #'for-something #'for-label) [(free-identifier=? #'for-something #'for-label)
'label]))) #f])))
(syntax->list #'(elem ...))))] (syntax->list #'(elem ...))))]
[_ (transform-simple in 'run)]))]) [_ (transform-simple in 0 #| run phase |#)]))])
(syntax-case stx () (syntax-case stx ()
[(_ in ...) [(_ in ...)
(with-syntax ([(new-in ...) (with-syntax ([(new-in ...)
@ -339,26 +358,32 @@
stx stx
dup-id))) dup-id)))
(values (values
(map (lambda (new-id orig-id) (apply
(or (ormap (lambda (import) append
(and (free-identifier=? orig-id (map (lambda (new-id orig-id)
(import-local-id import)) (let ([l (filter
(if (eq? new-id orig-id) values
import (map (lambda (import)
(make-import new-id (and (free-identifier=? orig-id (import-local-id import)) ; don't compare at mode
(import-src-sym import) (if (eq? new-id orig-id)
(import-src-mod-path import) import
(import-mode import) (make-import new-id
(import-req-mode import) (import-src-sym import)
new-id)))) (import-src-mod-path import)
imports) (import-mode import)
(raise-syntax-error (import-req-mode import)
#f (import-orig-mode import)
(format "identifier `~a' not included in nested require spec" new-id))))
(syntax-e orig-id)) imports))])
stx (if (null? l)
#'in))) (raise-syntax-error
new-ids orig-ids) #f
(format "identifier `~a' not included in nested require spec"
(syntax-e orig-id))
stx
#'in)
l)))
new-ids orig-ids))
sources)))])))) sources)))]))))
(define-syntax except-in (define-syntax except-in
@ -402,6 +427,31 @@
imports) imports)
sources))])))) sources))]))))
(define-syntax only-meta-in
(make-require-transformer
(lambda (stx)
(syntax-case stx ()
[(_ mode in ...)
(let ([base-mode (syntax-e #'mode)])
(unless (or (not base-mode)
(exact-integer? base-mode))
(raise-syntax-error
#f
"phase level must be #f or an exact integer"
stx
#'mode))
(let ([subs
(map (lambda (in)
(let-values ([(imports sources) (expand-import in)])
(cons
(filter (lambda (import)
(equal? (import-mode import) base-mode))
imports)
sources)))
(syntax->list #'(in ...)))])
(values (apply append (map car subs))
(apply append (map cdr subs)))))]))))
(define-syntax rename-in (define-syntax rename-in
(make-require-transformer (make-require-transformer
(lambda (stx) (lambda (stx)
@ -444,6 +494,7 @@
(import-src-mod-path import) (import-src-mod-path import)
(import-mode import) (import-mode import)
(import-req-mode import) (import-req-mode import)
(import-orig-mode import)
bind-id) bind-id)
import))) import)))
orig-ids bind-ids)]) orig-ids bind-ids)])
@ -500,6 +551,7 @@
(import-src-mod-path import) (import-src-mod-path import)
(import-mode import) (import-mode import)
(import-req-mode import) (import-req-mode import)
(import-orig-mode import)
(import-orig-stx import)))) (import-orig-stx import))))
imports) imports)
sources))])))) sources))]))))
@ -538,9 +590,8 @@
[mode (export-mode export)]) [mode (export-mode export)])
(let ([phased (let ([phased
(cond (cond
[(eq? mode 'run) base] [(eq? mode 0) base]
[(eq? mode 'syntax) #`(for-syntax #,base)] [else #`(for-meta #,mode #,base)])])
[(eq? mode 'label) #`(for-label #,base)])])
(if (export-protect? export) (if (export-protect? export)
#`(protect #,phased) #`(protect #,phased)
phased)))) phased))))
@ -569,16 +620,16 @@
stx stx
(syntax-e id)))))]) (syntax-e id)))))])
(append (append
(if (memq 'syntax modes) (if (memq 1 modes)
(map (lambda (id) (map (lambda (id)
(make-export id (syntax-e id) 'syntax #f stx)) (make-export id (syntax-e id) 1 #f stx))
(filter (same-ctx? free-transformer-identifier=?) (filter (same-ctx? free-transformer-identifier=?)
stx-ids)) stx-ids))
null) null)
(if (or (null? modes) (if (or (null? modes)
(memq 'run modes)) (memq 0 modes))
(map (lambda (id) (map (lambda (id)
(make-export id (syntax-e id) 'run #f stx)) (make-export id (syntax-e id) 0 #f stx))
(filter (same-ctx? free-identifier=?) (filter (same-ctx? free-identifier=?)
ids)) ids))
null)))])))) null)))]))))
@ -598,61 +649,42 @@
"bad module path" "bad module path"
stx stx
mp)) mp))
(let-values ([(ids stx-ids label-ids) (let ([idss
(syntax-local-module-required-identifiers (syntax->datum mp) (apply
(or (null? modes) append
(memq 'run modes)) (map (lambda (mode)
(memq 'syntax modes) (let ([r (syntax-local-module-required-identifiers (syntax->datum mp)
(memq 'label modes))] mode)])
[(ok-context?) (lambda (id id=?) (or r
(id=? id (raise-syntax-error
(datum->syntax mp (syntax-e id))))]) #f
(when (or (null? modes) (format "no corresponding require~a"
(memq 'run modes)) (cond
(unless ids [(eq? mode 0) ""]
(raise-syntax-error [(not mode)
#f " at the label phase level"]
"no corresponding require" [else
stx (format " at phase level ~a" mode)]))
mp))) stx
(when (memq 'syntax modes) mp))))
(unless stx-ids (if (null? modes)
(raise-syntax-error '(0)
#f modes)))]
"no corresponding for-syntax require" [ok-context? (lambda (id id=?)
stx (id=? id
mp))) (datum->syntax mp (syntax-e id))))])
(when (memq 'label modes)
(unless label-ids
(raise-syntax-error
#f
"no corresponding for-label require"
stx
mp)))
(filter (filter
values values
(append (apply
(map (lambda (id) append
(and (ok-context? id free-transformer-identifier=?) (map (lambda (ids)
(make-export id (syntax-e id) 'syntax #f stx))) (let ([mode (car ids)])
(if (or (null? modes) (map (lambda (id)
(memq 'syntax modes)) (and (free-identifier=? id (datum->syntax mp (syntax-e id))
(or stx-ids null) mode)
null)) (make-export id (syntax-e id) mode #f stx)))
(map (lambda (id) (cdr ids))))
(and (ok-context? id free-label-identifier=?) idss)))))
(make-export id (syntax-e id) 'label #f stx)))
(if (or (null? modes)
(memq 'label modes))
(or label-ids null)
null))
(map (lambda (id)
(and (ok-context? id free-identifier=?)
(make-export id (syntax-e id) 'run #f stx)))
(if (or (null? modes)
(memq 'run modes))
ids
null))))))
(syntax->list #'(mp ...))))])))) (syntax->list #'(mp ...))))]))))
(define-syntax rename-out (define-syntax rename-out
@ -672,12 +704,16 @@
(append orig-ids bind-ids)) (append orig-ids bind-ids))
(apply (apply
append append
(map (lambda (mode identifier-binding env-desc) (map (lambda (mode)
(map (lambda (orig-id bind-id) (map (lambda (orig-id bind-id)
(unless (list? (identifier-binding orig-id)) (unless (list? (identifier-binding orig-id mode))
(raise-syntax-error (raise-syntax-error
#f #f
(format "no binding~a for identifier" env-desc) (format "no binding~a for identifier"
(cond
[(eq? mode 0) ""]
[(not mode) " in the label phase level"]
[(not mode) (format " at phase level ~a" mode)]))
stx stx
orig-id)) orig-id))
(make-export orig-id (make-export orig-id
@ -687,24 +723,8 @@
bind-id)) bind-id))
orig-ids bind-ids)) orig-ids bind-ids))
(if (null? modes) (if (null? modes)
'(run) '(0)
modes) modes))))]))))
(if (null? modes)
(list identifier-binding)
(map (lambda (mode)
(cond
[(eq? mode 'run) identifier-binding]
[(eq? mode 'syntax) identifier-transformer-binding]
[(eq? mode 'label) identifier-label-binding]))
modes))
(if (null? modes)
(list "")
(map (lambda (mode)
(cond
[(eq? mode 'run) ""]
[(eq? mode 'syntax) " for-syntax"]
[(eq? mode 'label) " for-label"]))
modes)))))]))))
(define-syntax except-out (define-syntax except-out
(make-provide-transformer (make-provide-transformer
@ -728,26 +748,22 @@
"duplicate identifier" "duplicate identifier"
stx stx
dup-id))) dup-id)))
(map (lambda (id) (for-each (lambda (id)
(or (ormap (lambda (export) (or (ormap (lambda (export)
(free-identifier=? id (export-local-id export))) (free-identifier=? id (export-local-id export)
exports) (export-mode export)))
(raise-syntax-error exports)
#f (raise-syntax-error
(format "identifier `~a' not included in nested provide spec" #f
(syntax-e id)) (format "identifier `~a' not included in nested provide spec"
stx (syntax-e id))
#'out))) stx
ids) #'out)))
ids)
(filter (lambda (export) (filter (lambda (export)
(not (ormap (lambda (id) (not (ormap (lambda (id)
((let ([mode (export-mode export)]) (free-identifier=? id (export-local-id export)
(cond (export-mode export)))
[(eq? mode 'run) free-identifier=?]
[(eq? mode 'syntax) free-transformer-identifier=?]
[(eq? mode 'label) free-label-identifier=?]))
id
(export-local-id export)))
ids))) ids)))
exports))])))) exports))]))))
@ -767,10 +783,10 @@
(make-provide-transformer (make-provide-transformer
(lambda (stx modes) (lambda (stx modes)
(unless (or (null? modes) (unless (or (null? modes)
(memq 'run modes)) (equal? '(0) modes))
(raise-syntax-error (raise-syntax-error
#f #f
"allowed only for run-time bindings" "allowed only for phase level 0"
stx)) stx))
(syntax-case stx () (syntax-case stx ()
[(_ id) [(_ id)
@ -805,9 +821,13 @@
;; used a lot. ;; used a lot.
[avail-ids (append (let-values ([(ids _) (syntax-local-module-defined-identifiers)]) [avail-ids (append (let-values ([(ids _) (syntax-local-module-defined-identifiers)])
ids) ids)
(let-values ([(ids _ __) (let ([idss (syntax-local-module-required-identifiers #f #t)])
(syntax-local-module-required-identifiers #f #t #f #f)]) (if idss
ids))] (let ([a (assoc 0 idss)])
(if a
(cdr a)
null))
null)))]
[find-imported/defined (lambda (id) [find-imported/defined (lambda (id)
(let ([ids (filter (lambda (id2) (let ([ids (filter (lambda (id2)
(and (free-identifier=? id2 id) (and (free-identifier=? id2 id)
@ -839,7 +859,7 @@
(let ([id (find-imported/defined id)]) (let ([id (find-imported/defined id)])
(make-export id (make-export id
(syntax-e id) (syntax-e id)
'run 0
#f #f
id)))) id))))
(append (append

View File

@ -19,8 +19,9 @@
(raise-type-error 'make-export "identifier" i)) (raise-type-error 'make-export "identifier" i))
(unless (symbol? s) (unless (symbol? s)
(raise-type-error 'make-export "symbol" s)) (raise-type-error 'make-export "symbol" s))
(unless (memq mode '(run syntax label)) (unless (or (not mode)
(raise-type-error 'make-export "'run, 'syntax, or 'label" mode)) (exact-integer? mode))
(raise-type-error 'make-export "exact integer or #f" mode))
(unless (syntax? stx) (unless (syntax? stx)
(raise-type-error 'make-export "syntax" stx)) (raise-type-error 'make-export "syntax" stx))
(values i s mode (and protect? #t) stx))) (values i s mode (and protect? #t) stx)))
@ -42,9 +43,9 @@
(map (lambda (mode) (map (lambda (mode)
(list (make-export stx (syntax-e stx) mode #f stx))) (list (make-export stx (syntax-e stx) mode #f stx)))
(if (null? modes) (if (null? modes)
'(run) '(0)
modes))) modes)))
(syntax-case stx (lib) (syntax-case stx ()
[(id . rest) [(id . rest)
(identifier? #'id) (identifier? #'id)
(let ([t (syntax-local-value #'id (lambda () #f))]) (let ([t (syntax-local-value #'id (lambda () #f))])

View File

@ -12,34 +12,46 @@
make-require-transformer prop:require-transformer require-transformer? make-require-transformer prop:require-transformer require-transformer?
;; the import struct type: ;; the import struct type:
import struct:import make-import import? import struct:import make-import import?
import-local-id import-src-sym import-src-mod-path import-orig-stx import-mode import-req-mode import-local-id import-src-sym import-src-mod-path import-orig-stx import-mode import-req-mode import-orig-mode
;; the import-source struct type: ;; the import-source struct type:
import-source struct:import-source make-import-source import-source? import-source struct:import-source make-import-source import-source?
import-source-mod-path-stx import-source-mode) import-source-mod-path-stx import-source-mode)
(define-struct* import (local-id src-sym src-mod-path mode req-mode orig-stx) (define-struct* import (local-id src-sym src-mod-path mode req-mode orig-mode orig-stx)
#:guard (lambda (i s path mode req-mode stx info) #:guard (lambda (i s path mode req-mode orig-mode stx info)
(unless (identifier? i) (unless (identifier? i)
(raise-type-error 'make-import "identifier" i)) (raise-type-error 'make-import "identifier" i))
(unless (symbol? s) (unless (symbol? s)
(raise-type-error 'make-import "symbol" s)) (raise-type-error 'make-import "symbol" s))
(unless (module-path? path) (unless (module-path? path)
(raise-type-error 'make-import "module-path" path)) (raise-type-error 'make-import "module-path" path))
(unless (memq mode '(run syntax template label)) (unless (or (not mode)
(raise-type-error 'make-import "'run, 'syntax, 'template, or 'label" mode)) (exact-integer? mode))
(unless (memq req-mode '(run syntax template label)) (raise-type-error 'make-import "exact integer or #f" mode))
(raise-type-error 'make-import "'run, 'syntax, 'template, or 'label" req-mode)) (unless (or (not req-mode)
(exact-integer? req-mode))
(raise-type-error 'make-import "'exact integer or #f" req-mode))
(unless (or (not orig-mode)
(exact-integer? orig-mode))
(raise-type-error 'make-import "'exact integer or #f" orig-mode))
(unless (equal? mode (and req-mode orig-mode (+ req-mode orig-mode)))
(raise-mismatch-error 'make-import
(format
"orig mode: ~a and require mode: ~a not consistent with mode: "
orig-mode req-mode)
mode))
(unless (syntax? stx) (unless (syntax? stx)
(raise-type-error 'make-import "syntax" stx)) (raise-type-error 'make-import "syntax" stx))
(values i s path mode req-mode stx))) (values i s path mode req-mode orig-mode stx)))
(define-struct* import-source (mod-path-stx mode) (define-struct* import-source (mod-path-stx mode)
#:guard (lambda (path mode info) #:guard (lambda (path mode info)
(unless (and (syntax? path) (unless (and (syntax? path)
(module-path? (syntax->datum path))) (module-path? (syntax->datum path)))
(raise-type-error 'make-import-source "syntax module-path" path)) (raise-type-error 'make-import-source "syntax module-path" path))
(unless (memq mode '(run syntax template label)) (unless (or (not mode)
(raise-type-error 'make-import-source "'run, 'syntax, 'template, or 'label" mode)) (exact-integer? mode))
(raise-type-error 'make-import-source "exact integer or #f" mode))
(values path mode))) (values path mode)))
(define-values (prop:require-transformer require-transformer? require-transformer-get-proc) (define-values (prop:require-transformer require-transformer? require-transformer-get-proc)
@ -69,25 +81,26 @@
#f #f
"invalid module-path form" "invalid module-path form"
stx)) stx))
(let-values ([(names et-names lt-names) (syntax-local-module-exports stx)]) (let ([namess (syntax-local-module-exports stx)])
(values (values
(apply (apply
append append
(map (lambda (names mode) (map (lambda (names)
(map (lambda (name) (let ([mode (car names)])
(make-import (datum->syntax (map (lambda (name)
stx (make-import (datum->syntax
name stx
stx) name
name stx)
mod-path name
mode mod-path
'run mode
stx)) 0
names)) mode
(list names et-names lt-names) stx))
(list 'run 'syntax 'label))) (cdr names))))
(list (make-import-source #'simple 'run)))))] namess))
(list (make-import-source #'simple 0)))))]
[(id . rest) [(id . rest)
(identifier? #'id) (identifier? #'id)
(let ([t (syntax-local-value #'id (lambda () #f))]) (let ([t (syntax-local-value #'id (lambda () #f))])

View File

@ -446,7 +446,7 @@
(let ([s (to-element/no-color elem)]) (let ([s (to-element/no-color elem)])
(make-delayed-element (make-delayed-element
(lambda (renderer sec ri) (lambda (renderer sec ri)
(let* ([tag (find-scheme-tag sec ri sig 'for-label)] (let* ([tag (find-scheme-tag sec ri sig #f)]
[taglet (and tag (append (cadr tag) (list elem)))] [taglet (and tag (append (cadr tag) (list elem)))]
[vtag (and tag `(sig-val ,taglet))] [vtag (and tag `(sig-val ,taglet))]
[stag (and tag `(sig-form ,taglet))] [stag (and tag `(sig-form ,taglet))]
@ -490,7 +490,7 @@
(lambda (c mk) (lambda (c mk)
(make-delayed-element (make-delayed-element
(lambda (ren p ri) (lambda (ren p ri)
(let ([tag (find-scheme-tag p ri id/tag 'for-label)]) (let ([tag (find-scheme-tag p ri id/tag #f)])
(if tag (if tag
(list (mk tag)) (list (mk tag))
content))) content)))
@ -1851,7 +1851,7 @@
(list (list
(make-link-element #f (make-link-element #f
content content
(or (find-scheme-tag p ri stx-id 'for-label) (or (find-scheme-tag p ri stx-id #f)
(format "--UNDEFINED:~a--" (syntax-e stx-id)))))) (format "--UNDEFINED:~a--" (syntax-e stx-id))))))
(lambda () content) (lambda () content)
(lambda () content)))) (lambda () content))))
@ -2023,15 +2023,17 @@
(if (path? p) (if (path? p)
(intern-taglet (path->main-collects-relative p)) (intern-taglet (path->main-collects-relative p))
p)) p))
(cadddr b) (list-ref b 3)
(list-ref b 5)) (list-ref b 4)
(list-ref b 5)
(list-ref b 6))
(error 'scribble "no class/interface/mixin information for identifier: ~e" (error 'scribble "no class/interface/mixin information for identifier: ~e"
id)))) id))))
(define-serializable-struct cls/intf (name-element app-mixins super intfs methods)) (define-serializable-struct cls/intf (name-element app-mixins super intfs methods))
(define (make-inherited-table r d ri decl) (define (make-inherited-table r d ri decl)
(let* ([start (let ([key (find-scheme-tag d ri (decl-name decl) 'for-label)]) (let* ([start (let ([key (find-scheme-tag d ri (decl-name decl) #f)])
(if key (if key
(list (cons key (lookup-cls/intf d ri key))) (list (cons key (lookup-cls/intf d ri key)))
null))] null))]
@ -2047,7 +2049,7 @@
(let ([super (car supers)]) (let ([super (car supers)])
(loop (append (filter values (loop (append (filter values
(map (lambda (i) (map (lambda (i)
(let ([key (find-scheme-tag d ri i 'for-label)]) (let ([key (find-scheme-tag d ri i #f)])
(and key (and key
(cons key (lookup-cls/intf d ri key))))) (cons key (lookup-cls/intf d ri key)))))
(append (append
@ -2452,14 +2454,14 @@
null))]) null))])
(make-delayed-element (make-delayed-element
(lambda (r d ri) (lambda (r d ri)
(let loop ([search (get d ri (find-scheme-tag d ri cname 'for-label))]) (let loop ([search (get d ri (find-scheme-tag d ri cname #f))])
(cond (cond
[(null? search) [(null? search)
(list (make-element #f '("<method not found>")))] (list (make-element #f '("<method not found>")))]
[(not (car search)) [(not (car search))
(loop (cdr search))] (loop (cdr search))]
[else [else
(let* ([a-key (find-scheme-tag d ri (car search) 'for-label)] (let* ([a-key (find-scheme-tag d ri (car search) #f)]
[v (and a-key (lookup-cls/intf d ri a-key))]) [v (and a-key (lookup-cls/intf d ri a-key))])
(if v (if v
(if (member name (cls/intf-methods v)) (if (member name (cls/intf-methods v))
@ -2468,7 +2470,7 @@
(list (**method name a-key) (list (**method name a-key)
" in " " in "
(cls/intf-name-element v)))) (cls/intf-name-element v))))
(loop (append (cdr search) (get d ri (find-scheme-tag d ri (car search) 'for-label))))) (loop (append (cdr search) (get d ri (find-scheme-tag d ri (car search) #f)))))
(loop (cdr search))))]))) (loop (cdr search))))])))
(lambda () (format "~a in ~a" (syntax-e cname) name)) (lambda () (format "~a in ~a" (syntax-e cname) name))
(lambda () (format "~a in ~a" (syntax-e cname) name))))) (lambda () (format "~a in ~a" (syntax-e cname) name)))))

View File

@ -85,7 +85,7 @@
(weak-box-value b)))) (weak-box-value b))))
(let ([e (make-cached-delayed-element (let ([e (make-cached-delayed-element
(lambda (renderer sec ri) (lambda (renderer sec ri)
(let* ([tag (find-scheme-tag sec ri c 'for-label)]) (let* ([tag (find-scheme-tag sec ri c #f)])
(if tag (if tag
(list (list
(case (car tag) (case (car tag)

View File

@ -36,17 +36,21 @@
v))) v)))
;; mode is #f, 'for-label, or 'for-run (define (find-scheme-tag part ri stx/binding phase-level)
(define (find-scheme-tag part ri stx/binding mode) ;; The phase-level argument is used only when `stx/binding'
;; is an identifier.
;;
;; Note: documentation key currently don't distinguish different
;; phase definitions of an identifier from a source module.
;; That is, there's no way to document (define x ....) differently
;; from (define-for-syntax x ...). This isn't a problem in practice,
;; because no one uses the same name for different-phase exported
;; bindings.
(let ([b (cond (let ([b (cond
[(identifier? stx/binding) [(identifier? stx/binding)
((case mode (identifier-binding stx/binding phase-level)]
[(for-label) identifier-label-binding]
[(for-syntax) identifier-transformer-binding]
[else identifier-binding])
stx/binding)]
[(and (list? stx/binding) [(and (list? stx/binding)
(= 6 (length stx/binding))) (= 7 (length stx/binding)))
stx/binding] stx/binding]
[else [else
(and (not (symbol? (car stx/binding))) (and (not (symbol? (car stx/binding)))
@ -57,15 +61,20 @@
(cadr stx/binding) (cadr stx/binding)
p p
(cadr stx/binding) (cadr stx/binding)
#f
(if (= 2 (length stx/binding)) (if (= 2 (length stx/binding))
mode 0
(caddr stx/binding)))))])]) (caddr stx/binding))
(if (= 2 (length stx/binding))
0
(cadddr stx/binding))
(if (= 2 (length stx/binding))
0
(cadddr (cdr stx/binding))))))])])
(and (and
(pair? b) (pair? b)
(let ([seen (make-hash-table)] (let ([seen (make-hash-table)]
[search-key #f]) [search-key #f])
(let loop ([queue (list (list (caddr b) (cadddr b) (eq? mode (list-ref b 5))))] (let loop ([queue (list (list (caddr b) (cadddr b) (list-ref b 4) (list-ref b 5) (list-ref b 6)))]
[rqueue null]) [rqueue null])
(cond (cond
[(null? queue) [(null? queue)
@ -74,12 +83,14 @@
#f #f
(loop (reverse rqueue) null))] (loop (reverse rqueue) null))]
[else [else
(let ([mod (caar queue)] (let ([mod (list-ref (car queue) 0)]
[id (cadar queue)] [id (list-ref (car queue) 1)]
[here? (caddar queue)] [defn-phase (list-ref (car queue) 2)]
[import-phase (list-ref (car queue) 3)]
[export-phase (list-ref (car queue) 4)]
[queue (cdr queue)]) [queue (cdr queue)])
(let* ([rmp (module-path-index-resolve mod)] (let* ([rmp (module-path-index-resolve mod)]
[eb (and here? [eb (and (equal? defn-phase export-phase)
(list (let ([p (resolved-module-path-name rmp)]) (list (let ([p (resolved-module-path-name rmp)])
(if (path? p) (if (path? p)
(intern-taglet (path->main-collects-relative p)) (intern-taglet (path->main-collects-relative p))
@ -106,35 +117,46 @@
module-info-cache module-info-cache
rmp rmp
(lambda () (lambda ()
(let-values ([(run-vals run-stxes (let-values ([(valss stxess)
syntax-vals syntax-stxes
label-vals label-stxes)
(module-compiled-exports (module-compiled-exports
(get-module-code (resolved-module-path-name rmp)))]) (get-module-code (resolved-module-path-name rmp)))])
(let ([t (list (append run-vals run-stxes) (let ([t
(append syntax-vals syntax-stxes) ;; Merge the two association lists:
(append label-vals label-stxes))]) (let loop ([base valss]
[stxess stxess])
(cond
[(null? stxess) base]
[(assoc (caar stxess) base)
=> (lambda (l)
(loop (cons (cons (car l)
(append (cdar stxess)
(cdr l)))
(remq l base))
(cdr stxess)))]
[else (loop (cons (car stxess)
base)
(cdr stxess))]))])
(hash-table-put! module-info-cache rmp t) (hash-table-put! module-info-cache rmp t)
t))))]) t))))])
(hash-table-put! seen rmp #t) (hash-table-put! seen rmp #t)
(let ([a (assq id (list-ref exports (let ([a (assq id (let ([a (assoc export-phase exports)])
(if here? (if a
0 (cdr a)
(case mode null)))])
[(for-syntax) 1]
[(for-label) 2]
[else 0]))))])
(if a (if a
(loop queue (loop queue
(append (map (lambda (m) (append (map (lambda (m)
(if (pair? m) (if (pair? m)
(list (module-path-index-rejoin (car m) mod) (list (module-path-index-rejoin (car m) mod)
(caddr m) (list-ref m 2)
(or here? defn-phase
(eq? mode (cadr m)))) (list-ref m 1)
(list-ref m 3))
(list (module-path-index-rejoin m mod) (list (module-path-index-rejoin m mod)
id id
here?))) 0
0
0)))
(cadr a)) (cadr a))
rqueue)) rqueue))
(error 'find-scheme-tag (error 'find-scheme-tag

View File

@ -242,37 +242,34 @@ the module's declared name.}
@defproc[(module-compiled-imports [compiled-module-code compiled-module-expression?]) @defproc[(module-compiled-imports [compiled-module-code compiled-module-expression?])
(values (listof module-path-index?) (listof (cons/c (or/c exact-integer? false/c)
(listof module-path-index?) (listof module-path-index?)))]{
(listof module-path-index?)
(listof module-path-index?))]{ Takes a module declaration in compiled form and returns an association
list mapping @tech{phase level} shifts (where @scheme[#f] corresponds
to a shift into the @tech{label phase level}) to module references for
the module's explicit imports.}
Takes a module declaration in compiled form and returns four values: a
list of module references for the module's explicit imports, a list of
module references for the module's explicit for-syntax imports, a list
of module references for the module's explicit for-template imports,
and a list of module references for the module's explicit for-label
imports.}
@defproc[(module-compiled-exports [compiled-module-code compiled-module-expression?]) @defproc[(module-compiled-exports [compiled-module-code compiled-module-expression?])
(values list? list? list? list? list? list?)]{ (values (listof (cons/c (or/c exact-integer? false/c) list?))
(listof (cons/c (or/c exact-integer? false/c) list?)))]
Returns six lists: one for the module's explicit variable exports, one Returns two association lists mapping @tech{phase level} values (where
for the module's explicit syntax exports, one for the module's @scheme[#f] corresponds to the @tech{label phase level}) to exports at
explicit @scheme[for-syntax] variable exports, one for the module's the corresponding phase. The first association list is for exported
explicit @scheme[for-syntax] syntax exports, one for the module's variables, and the second is for exported syntax.
explicit @scheme[for-label] variable exports, one for the module's
explicit @scheme[for-label] syntax exports.
Each list more precisely matches the contract Each associated list more precisely matches the contract
@schemeblock[ @schemeblock[
(listof (list/c symbol? (listof (list/c symbol?
(listof (listof
(or/c module-path-index? (or/c module-path-index?
(list/c module-path-index? (list/c module-path-index?
(one-of/c #f 'for-syntax 'for-label) (or/c exact-integer? false/c)
symbol?))))) symbol?
(or/c exact-integer? false/c))))))
] ]
For each element of the list, the leading symbol is the name of the For each element of the list, the leading symbol is the name of the
@ -287,12 +284,15 @@ The origin list has more than one element if the binding was imported
multiple times from (possibly) different sources. multiple times from (possibly) different sources.
For each origin, a @tech{module path index} by itself means that the For each origin, a @tech{module path index} by itself means that the
binding was imported with a plain @scheme[require] (not binding was imported with a @tech{phase level} shift of @scheme[0]
@scheme[for-syntax] or @scheme[for-label]), and imported identifier (i.e., a plain @scheme[require] without @scheme[for-meta],
has the same name as the re-exported name. An origin represented with @scheme[for-syntax], etc.), and imported identifier has the same name
a list indicates explicitly the import, the import mode (plain as the re-exported name. An origin represented with a list indicates
@scheme[require], @scheme[for-syntax], or @scheme[for-label]) and the explicitly the import, the import @tech{phase level} shift (where
original export name of the re-exported binding.} @scheme[#f] corresponds to a @scheme[for-label] import), the import
name of the re-exported binding, and the @tech{phase level} of the
import.}
@;------------------------------------------------------------------------ @;------------------------------------------------------------------------
@section[#:tag "dynreq"]{Dynamic Module Access} @section[#:tag "dynreq"]{Dynamic Module Access}

View File

@ -3,19 +3,30 @@
@title[#:tag "stxcmp"]{Syntax Object Bindings} @title[#:tag "stxcmp"]{Syntax Object Bindings}
@defproc[(bound-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{ @defproc[(bound-identifier=? [a-id syntax?][b-id syntax?]
[phase-level (or/c exact-integer? false/c)
(syntax-local-phase-level)])
boolean?]{
Returns @scheme[#t] if the identifier @scheme[a-id] would bind Returns @scheme[#t] if the identifier @scheme[a-id] would bind
@scheme[b-id] (or vice-versa) if the identifiers were substituted in a @scheme[b-id] (or vice-versa) if the identifiers were substituted in a
suitable expression context, @scheme[#f] otherwise.} suitable expression context at the @tech{phase level} indicated by
@scheme[phase-level], @scheme[#f] otherwise. A @scheme[#f] value for
@scheme[phase-level] corresponds to the @tech{label phase level}.}
@defproc[(free-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{ @defproc[(free-identifier=? [a-id syntax?][b-id syntax?]
[phase-level (or/c exact-integer? false/c)
(syntax-local-phase-level)])
boolean?]{
Returns @scheme[#t] if @scheme[a-id] and @scheme[b-id] access the same Returns @scheme[#t] if @scheme[a-id] and @scheme[b-id] access the same
lexical, module, or top-level binding at @tech{phase level} 0. ``Same lexical, module, or top-level binding at the @tech{phase level}
module binding'' means that the identifiers refer to the same original indicated by @scheme[phase-level]. A @scheme[#f] value for
definition site, not necessarily the @scheme[require] or @scheme[phase-level] corresponds to the @tech{label phase level}.
``Same module binding'' means that the identifiers refer to the same
original definition site, not necessarily the @scheme[require] or
@scheme[provide] site. Due to renaming in @scheme[require] and @scheme[provide] site. Due to renaming in @scheme[require] and
@scheme[provide], the identifiers may return distinct results with @scheme[provide], the identifiers may return distinct results with
@scheme[syntax-e].} @scheme[syntax-e].}
@ -23,23 +34,15 @@ definition site, not necessarily the @scheme[require] or
@defproc[(free-transformer-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{ @defproc[(free-transformer-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{
Returns @scheme[#t] if @scheme[a-id] and @scheme[b-id] access the same Same as @scheme[(free-identifier=? a-id b-id (add1 (syntax-local-phase-level)))].}
lexical, module, or top-level binding at @tech{phase level} 1 (see
@secref["id-model"]).}
@defproc[(free-template-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{ @defproc[(free-template-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{
Returns @scheme[#t] if @scheme[a-id] and @scheme[b-id] access the same Same as @scheme[(free-identifier=? a-id b-id (sub1 (syntax-local-phase-level)))].}
lexical or module binding at @tech{phase level} -1 (see
@secref["id-model"]).}
@defproc[(free-label-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{ @defproc[(free-label-identifier=? [a-id syntax?][b-id syntax?]) boolean?]{
Returns @scheme[#t] if @scheme[a-id] and @scheme[b-id] access the same Same as @scheme[(free-identifier=? a-id b-id #f)].}
lexical or module binding at the @tech{label phase level} (see
@secref["id-model"]).}
@defproc[(check-duplicate-identifier [ids (listof identifier?)]) @defproc[(check-duplicate-identifier [ids (listof identifier?)])
@ -52,33 +55,41 @@ first one in @scheme[ids] that is a duplicate), otherwise the result
is @scheme[#f].} is @scheme[#f].}
@defproc[(identifier-binding [id-stx syntax?]) @defproc[(identifier-binding [id-stx syntax?]
[phase-level (or/c exact-integer? false/c)
(syntax-local-phase-level)])
(or/c (one-of 'lexical #f) (or/c (one-of 'lexical #f)
(listof module-path-index? (listof module-path-index?
symbol? symbol?
module-path-index? module-path-index?
symbol? symbol?
boolean? (one-of/c 0 1)
(one-of/c #f 'for-syntax 'for-template)))]{ (or/c exact-integer? false/c)
(or/c exact-integer? false/c)))]{
Returns one of three kinds of values, depending on the binding of Returns one of three kinds of values, depending on the binding of
@scheme[id-stx] at @tech{phase level} 0: @scheme[id-stx] at the @tech{phase level} indicated by
@scheme[phase-level] (where a @scheme[#f] value for
@scheme[phase-level] corresponds to the @tech{label phase level}):
@itemize{ @itemize{
@item{The result is @indexed-scheme['lexical] if @scheme[id-stx] @item{The result is @indexed-scheme['lexical] if @scheme[id-stx]
has a @tech{local binding}.} has a @tech{local binding}. If @scheme['lexical] is produced for
any @scheme[phase-level] value, then it is produced for all
@scheme[phase-level] values.}
@item{The result is a list of six items when @scheme[id-stx] @item{The result is a list of six items when @scheme[id-stx]
has a @tech{module binding}: @scheme[(list source-mod source-id has a @tech{module binding}: @scheme[(list _source-mod _source-id
nominal-source-mod nominal-source-id et? mode)]. _nominal-source-mod _nominal-source-id _source-phase _import-phase
_nominal-export-phase)].
@itemize{ @itemize{
@item{@scheme[source-mod] is a module path index (see @item{@scheme[_source-mod] is a module path index (see
@secref["modpathidx"]) that indicates the defining module.} @secref["modpathidx"]) that indicates the defining module.}
@item{@scheme[source-id] is a symbol for the identifier's name @item{@scheme[_source-id] is a symbol for the identifier's name
at its definition site in the source module. This can be at its definition site in the source module. This can be
different from the local name returned by different from the local name returned by
@scheme[syntax->datum] for several reasons: the identifier is @scheme[syntax->datum] for several reasons: the identifier is
@ -86,27 +97,32 @@ Returns one of three kinds of values, depending on the binding of
implicitly renamed because the identifier (or its import) was implicitly renamed because the identifier (or its import) was
generated by a macro invocation.} generated by a macro invocation.}
@item{@scheme[nominal-source-mod] is a module path index (see @item{@scheme[_nominal-source-mod] is a module path index (see
@secref["modpathidx"]) that indicates the module @secref["modpathidx"]) that indicates the module
@scheme[require]d into the context of @scheme[id-stx] to @scheme[require]d into the context of @scheme[id-stx] to
provide its binding. It can be different from provide its binding. It can be different from
@scheme[source-mod] due to a re-export in @scheme[_source-mod] due to a re-export in
@scheme[nominal-source-mod] of some imported identifier.} @scheme[_nominal-source-mod] of some imported identifier. If
the same binding is imported in multiple ways, an arbitrary
representative is chosen.}
@item{@scheme[nominal-source-id] is a symbol for the @item{@scheme[_nominal-source-id] is a symbol for the
identifier's name as exported by identifier's name as exported by
@scheme[nominal-source-mod]. It can be different from @scheme[_nominal-source-mod]. It can be different from
@scheme[source-id] due to a renaming @scheme[provide], even if @scheme[_source-id] due to a renaming @scheme[provide], even if
@scheme[source-mod] and @scheme[nominal-source-mod] are the @scheme[_source-mod] and @scheme[_nominal-source-mod] are the
same.} same.}
@item{@scheme[et?] is @scheme[#t] if the source definition is @item{@scheme[_source-phase] is @scheme[1] if the source
for-syntax, @scheme[#f] otherwise.} definition is for-syntax, @scheme[0] otherwise.}
@item{@scheme[mode] is @scheme[#f] if the binding import is a @item{@scheme[_import-phase] is @scheme[0] if the binding
plain @scheme[require], @scheme['for-syntax] if it is from a import of @scheme[_nominal-source-mode] is a plain
@scheme[for-syntax] import, or @scheme['for-template] if it is @scheme[require], @scheme[1] if it is from a
from a @scheme[for-template] import.} @scheme[for-syntax] import, etc.}
@item{@scheme[_nominal-export-phase] is the @tech{phase level}
of the export from @scheme[_nominal-source-mod].}
}} }}
@ -121,17 +137,11 @@ Returns one of three kinds of values, depending on the binding of
symbol? symbol?
module-path-index? module-path-index?
symbol? symbol?
boolean? (one-of/c 0 1)
(one-of/c #f 'for-syntax 'for-template)))]{ (or/c exact-integer? false/c)
(or/c exact-integer? false/c)))]{
Like @scheme[identifier-binding], but that the reported information is Same as @scheme[(identifier-binding id-stx (add1 (syntax-local-phase-level)))].}
for the identifier's binding in @tech{phase level} 1 (see
@secref["id-model"]).
If the result is @scheme['lexical] for either of
@scheme[identifier-binding] or
@scheme[identifier-transformer-binding], then the result is always
@scheme['lexical] for both.}
@defproc[(identifier-template-binding [id-stx syntax?]) @defproc[(identifier-template-binding [id-stx syntax?])
@ -140,32 +150,22 @@ If the result is @scheme['lexical] for either of
symbol? symbol?
module-path-index? module-path-index?
symbol? symbol?
boolean? (one-of/c 0 1)
(one-of/c #f 'for-syntax 'for-template)))]{ (or/c exact-integer? false/c)
(or/c exact-integer? false/c)))]{
Like @scheme[identifier-binding], but that the reported information is Same as @scheme[(identifier-binding id-stx (sub1 (syntax-local-phase-level)))].}
for the identifier's binding in @tech{phase level} -1 (see
@secref["id-model"]).
If the result is @scheme['lexical] for either of
@scheme[identifier-binding] or
@scheme[identifier-template-binding], then the result is always
@scheme['lexical] for both.}
@defproc[(identifier-label-binding [id-stx syntax?]) @defproc[(identifier-label-binding [id-stx syntax?])
(or/c false/c (or/c (one-of 'lexical #f)
(listof (or/c module-path-index? symbol?) (listof module-path-index?
symbol? symbol?
(or/c module-path-index? symbol?) module-path-index?
symbol? symbol?
boolean? (one-of/c 0 1)
(one-of/c #f 'for-label)))]{ (or/c exact-integer? false/c)
(or/c exact-integer? false/c)))]{
Like @scheme[identifier-binding], but that the reported information is Same as @scheme[(identifier-binding id-stx #f)].}
for the identifier's binding in the @tech{label phase level} (see
@secref["id-model"]).
Unlike @scheme[identifier-binding], the result cannot be
@scheme['lexical].}

View File

@ -356,6 +356,13 @@ contexts.
@transform-time[]} @transform-time[]}
@defproc[(syntax-local-phase-level) (or/c exact-integer? false/c)]{
During the dynamic extent of a @tech{syntax transformer} application
by the expander, the result is the @tech{phase level} of the form
being expanded. Otherwise, the result is @scheme[0].}
@defproc[(syntax-local-module-exports [mod-path module-path?]) @defproc[(syntax-local-module-exports [mod-path module-path?])
(values (listof symbol?) (listof symbol?) (listof symbol?))]{ (values (listof symbol?) (listof symbol?) (listof symbol?))]{
@ -558,9 +565,10 @@ Returns @scheme[#t] if @scheme[v] has the
@defstruct[import ([local-id identifier?] @defstruct[import ([local-id identifier?]
[src-sym symbol?] [src-sym symbol?]
[src-mod-path module-path?] [src-mod-path module-path?]
[orig-stx syntax?] [mode (or/c exact-integer? false/c)]
[mode (one-of/c 'run 'syntax 'template 'label)] [req-mode (or/c exact-integer? false/c)]
[req-mode (one-of/c 'run 'syntax 'template 'label)])]{ [orig-mode (or/c exact-integer? false/c)]
[orig-stx syntax?])]{
A structure representing a single imported identifier: A structure representing a single imported identifier:
@ -582,11 +590,10 @@ A structure representing a single imported identifier:
importing module.} importing module.}
@item{@scheme[req-mode] --- the @tech{phase level} shift of the @item{@scheme[req-mode] --- the @tech{phase level} shift of the
import relative to the exporting module. Since the underlying import relative to the exporting module.}
module system currently allows only for-run @scheme[require]s
to import into other @tech{phase levels}, if this value is not @item{@scheme[orig-mode] --- the @tech{phase level} of the
@scheme['run], then it must match the @scheme[mode] field's binding as exported by the exporting module.}
value.}
}} }}
@ -594,7 +601,7 @@ A structure representing a single imported identifier:
@defstruct[import-source ([mod-path-stx (and/c syntax? @defstruct[import-source ([mod-path-stx (and/c syntax?
(lambda (x) (lambda (x)
(module-path? (syntax->datum x))))] (module-path? (syntax->datum x))))]
[mode (one-of/c 'run 'syntax 'template 'label)])]{ [mode (or/c exact-integer? false/c)])]{
A structure representing an imported module, which must be A structure representing an imported module, which must be
instantiated or visited even if no binding is imported into a module. instantiated or visited even if no binding is imported into a module.
@ -630,7 +637,7 @@ If the derived form contains a sub-form that is a
transform the sub-@scheme[_provide-spec] to a lists of exports. transform the sub-@scheme[_provide-spec] to a lists of exports.
@defproc[(expand-export [stx syntax?] [modes (listof (one-of/c 'run 'syntax 'label))]) @defproc[(expand-export [stx syntax?] [modes (listof (or/c exact-integer? false/c))])
(listof export?)]{ (listof export?)]{
Expands the given @scheme[_provide-spec] to a list of exports. The Expands the given @scheme[_provide-spec] to a list of exports. The
@ -638,10 +645,10 @@ Expands the given @scheme[_provide-spec] to a list of exports. The
sub-@scheme[_provide-specs]; for example, an identifier refers to a sub-@scheme[_provide-specs]; for example, an identifier refers to a
@tech{phase level} 0 binding unless the @scheme[modes] list specifies @tech{phase level} 0 binding unless the @scheme[modes] list specifies
otherwise. Normally, @scheme[modes] is either empty or contains a otherwise. Normally, @scheme[modes] is either empty or contains a
single symbol.} single element.}
@defproc[(make-provide-transformer [proc (syntax? (listof (one-of/c 'run 'syntax 'label)) @defproc[(make-provide-transformer [proc (syntax? (listof (or/c exact-integer? false/c))
. -> . (listof export?))]) . -> . (listof export?))])
provide-transformer?]{ provide-transformer?]{
@ -667,7 +674,7 @@ Returns @scheme[#t] if @scheme[v] has the
[out-sym symbol?] [out-sym symbol?]
[orig-stx syntax?] [orig-stx syntax?]
[protect? any/c] [protect? any/c]
[mode (one-of/c 'run 'syntax 'label)])]{ [mode (or/c exact-integer? false/c)])]{
A structure representing a single imported identifier: A structure representing a single imported identifier:

View File

@ -79,7 +79,7 @@ run time of the enclosing module (or the run time of top-level
expression). Bindings in @tech{phase level} 0 constitute the expression). Bindings in @tech{phase level} 0 constitute the
@deftech{base environment}. @tech{Phase level} 1 corresponds to the @deftech{base environment}. @tech{Phase level} 1 corresponds to the
time during which the enclosing module (or top-level expression) is time during which the enclosing module (or top-level expression) is
expanded; bindings in @tech{phase level} 0 constitute the expanded; bindings in @tech{phase level} 1 constitute the
@deftech{transformer environment}. Phase level -1 corresponds to the @deftech{transformer environment}. Phase level -1 corresponds to the
run time of a different module for which the enclosing module is run time of a different module for which the enclosing module is
imported for use at @tech{phase level} 1 (relative to the importing imported for use at @tech{phase level} 1 (relative to the importing
@ -385,20 +385,21 @@ core syntactic forms are encountered:
@tech{phase level}s specified by the exporting modules: @tech{phase level}s specified by the exporting modules:
@tech{phase level} 0 for each normal @scheme[provide], @tech{phase level} 0 for each normal @scheme[provide],
@tech{phase level} 1 for each @scheme[for-syntax] @tech{phase level} 1 for each @scheme[for-syntax]
@scheme[provide], and the @tech{label phase level} for each @scheme[provide], and so on. The @scheme[for-meta]
@scheme[for-label] @scheme[provide]. @scheme[provide] form allows exports at an arbitrary
@tech{phase level} (as long as a binding exists within the
module at the @tech{phase level}).
A @scheme[for-syntax] sub-form within @scheme[require] imports A @scheme[for-syntax] sub-form within @scheme[require] imports
only @tech{phase level} 0 exports from the specified modules, similarly, but the resulting bindings have a @tech{phase level}
but the resulting bindings are for @tech{phase level} 1. that is one more than the exported @tech{phase levels}, when
exports for the @tech{label phase level} are still imported at
A @scheme[for-template] sub-form within @scheme[require] imports the @tech{label phase level}. More generally, a
only @tech{phase level} 0 exports from the specified modules, @scheme[for-meta] sub-form within @scheme[require] imports with
but the resulting bindings are for @tech{phase level} -1. the specified @tech{phase level} shift; if the specified shift
is @scheme[#f], or if @scheme[for-label] is used to import,
A @scheme[for-label] sub-form within @scheme[require] imports then all bindings are imported into the @tech{label phase
only @tech{phase level} 0 exports from the specified modules, level}.}
but the resulting bindings are for the @tech{label phase level}.}
@item{When a @scheme[define], @scheme[define-values], @item{When a @scheme[define], @scheme[define-values],
@scheme[define-syntax], or @scheme[define-syntaxes] form is @scheme[define-syntax], or @scheme[define-syntaxes] form is

View File

@ -1238,16 +1238,18 @@ Legal only in a @tech{module begin context}, and handled by the
@guideintro["module-require"]{@scheme[require]} @guideintro["module-require"]{@scheme[require]}
@defform/subs[#:literals (only-in prefix-in except-in rename-in lib file planet + - = @defform/subs[#:literals (only-in prefix-in except-in rename-in lib file planet + - =
for-syntax for-template for-label quote) for-syntax for-template for-label for-meta only-meta-in quote)
(require require-spec ...) (require require-spec ...)
([require-spec module-path ([require-spec module-path
(only-in require-spec id-maybe-renamed ...) (only-in require-spec id-maybe-renamed ...)
(except-in require-spec id ...) (except-in require-spec id ...)
(prefix-in prefix-id require-spec) (prefix-in prefix-id require-spec)
(rename-in require-spec [orig-id bind-id] ...) (rename-in require-spec [orig-id bind-id] ...)
(only-meta-in require-spec ...)
(for-syntax require-spec ...) (for-syntax require-spec ...)
(for-template require-spec ...) (for-template require-spec ...)
(for-label require-spec ...) (for-label require-spec ...)
(for-meta phase-level require-spec ...)
derived-require-spec] derived-require-spec]
[module-path (#,(scheme quote) id) [module-path (#,(scheme quote) id)
rel-string rel-string
@ -1259,6 +1261,7 @@ Legal only in a @tech{module begin context}, and handled by the
rel-string ...)] rel-string ...)]
[id-maybe-renamed id [id-maybe-renamed id
[orig-id bind-id]] [orig-id bind-id]]
[phase-level exact-integer #f]
[vers nat [vers nat
(nat nat) (nat nat)
(= nat) (= nat)
@ -1316,22 +1319,29 @@ pre-defined forms are as follows.
@scheme[orig-id] is not in the set that @scheme[require-spec] @scheme[orig-id] is not in the set that @scheme[require-spec]
describes, a syntax error is reported.} describes, a syntax error is reported.}
@defsubform[(only-meta-in phase-level require-spec ...)]{
Like the combination of @scheme[require-spec]s, but removing any
binding that is not for @scheme[phase-level], where @scheme[#f] for
@scheme[phase-level] corresponds to the @tech{label phase level}.}
@specsubform[#:literals (for-meta)
(for-meta phase-level require-spec ...)]{Like the combination of
@scheme[require-spec]s, but constrained each binding specified by
each @scheme[require-spec] is shifted by @scheme[phase-level]. The
@tech{label phase level} corresponds to @scheme[#f], and a shifting
combination that involves @scheme[#f] produces @scheme[#f].}
@specsubform[#:literals (for-syntax) @specsubform[#:literals (for-syntax)
(for-syntax require-spec ...)]{Like the combination of (for-syntax require-spec ...)]{Same as
@scheme[require-spec]s, but constrained to imports specified as @scheme[(for-meta 1 require-spec ...)].}
@tech{phase level} 0 imports, each shifted to a @tech{phase level} 1
binding. A @scheme[for-syntax] form cannot appear within a
@scheme[for-syntax], @scheme[for-template], or @scheme[for-label]
form.}
@specsubform[#:literals (for-template) @specsubform[#:literals (for-template)
(for-template require-spec ...)]{Analogous to (for-template require-spec ...)]{Same as
@scheme[for-syntax-spec], but shifts bindings to @tech{phase level} -1.} @scheme[(for-meta -1 require-spec ...)].}
@specsubform[#:literals (for-label) @specsubform[#:literals (for-label)
(for-label require-spec ...)]{Analogous to (for-label require-spec ...)]{Same as
@scheme[for-syntax-spec], but shifts bindings to the @tech{label @scheme[(for-meta #f require-spec ...)].}
phase level}.}
@specsubform[derived-require-spec]{See @secref["require-trans"] for @specsubform[derived-require-spec]{See @secref["require-trans"] for
information on expanding the set of @scheme[require-spec] forms.} information on expanding the set of @scheme[require-spec] forms.}
@ -1427,8 +1437,8 @@ an identifier can be either imported or defined for a given
@guideintro["module-provide"]{@scheme[provide]} @guideintro["module-provide"]{@scheme[provide]}
@defform/subs[#:literals (protect-out all-defined-out all-from-out rename-out @defform/subs[#:literals (protect-out all-defined-out all-from-out rename-out
except-out prefix-out struct-out except-out prefix-out struct-out for-meta
for-syntax for-label) for-syntax for-label for-template)
(provide provide-spec ...) (provide provide-spec ...)
([provide-spec id ([provide-spec id
(all-defined-out) (all-defined-out)
@ -1438,7 +1448,12 @@ an identifier can be either imported or defined for a given
(prefix-out prefix-id provide-spec) (prefix-out prefix-id provide-spec)
(struct-out id) (struct-out id)
(protect-out provide-spec ...) (protect-out provide-spec ...)
derived-provide-spec])]{ (for-meta phase-level provide-spec ...)
(for-syntax provide-spec ...)
(for-template provide-spec ...)
(for-label provide-spec ...)
derived-provide-spec]
[phase-level exact-integer #f])]{
Declares exports from a module. A @scheme[provide] form must appear in Declares exports from a module. A @scheme[provide] form must appear in
a @tech{module context} or a @tech{module-begin context}. a @tech{module context} or a @tech{module-begin context}.
@ -1514,19 +1529,27 @@ pre-defined forms are as follows.
@secref["modprotect"]. The @scheme[provide-spec] must specify only @secref["modprotect"]. The @scheme[provide-spec] must specify only
bindings that are defined within the exporting module.} bindings that are defined within the exporting module.}
@specsubform[#:literals (for-syntax) @specsubform[#:literals (for-meta)
(for-syntax provide-spec ...)]{ Like the union of the (for-meta phase-level provide-spec ...)]{ Like the union of the
@scheme[provide-spec]s, but adjusted to apply to @tech{phase level} @scheme[provide-spec]s, but adjusted to apply to @tech{phase level}
1. In particular, an @scheme[id] or @scheme[rename-out] formas a specified by @scheme[phase-level] (where @scheme[#f] corresponds to the
@scheme[provide-spec] refers to a @tech{phase-level}-1 binding, an @tech{label phase level}). In particular, an @scheme[id] or @scheme[rename-out] form as
@scheme[all-define-out] exports only @tech{phase-level}-1 a @scheme[provide-spec] refers to a binding at @scheme[phase-level], an
definitions, and an @scheme[all-from-out] exports only bindings @scheme[all-define-out] exports only @scheme[phase-level]
imported with a shift to @tech{phase level} 1.} definitions, and an @scheme[all-from-out] exports bindings
imported with a shift by @scheme[phase-level].}
@specsubform[#:literals (for-label) @specsubform[#:literals (for-syntax)
(for-label provide-spec ...)]{Analogous to (for-syntax provide-spec ...)]{Same as
@scheme[for-syntax], adjusting each @scheme[provide-spec] to the @scheme[(for-meta 1 provide-spec ...)].}
@tech{label phase level}.}
@specsubform[#:literals (for-template)
(for-template provide-spec ...)]{Same as
@scheme[(for-meta -1 provide-spec ...)].}
@specsubform[#:literals (for-label)
(for-label provide-spec ...)]{Same as
@scheme[(for-meta #f provide-spec ...)].}
@specsubform[derived-provide-spec]{See @secref["provide-trans"] for @specsubform[derived-provide-spec]{See @secref["provide-trans"] for
information on expanding the set of @scheme[provide-spec] forms.} information on expanding the set of @scheme[provide-spec] forms.}
@ -1536,15 +1559,20 @@ export name, though the same binding can be specified with the
multiple symbolic names.} multiple symbolic names.}
@defform[(for-meta require-spec ...)]{See @scheme[require] and @scheme[provide].}
@defform[(for-syntax require-spec ...)]{See @scheme[require] and @scheme[provide].} @defform[(for-syntax require-spec ...)]{See @scheme[require] and @scheme[provide].}
@defform[(for-template require-spec ...)]{See @scheme[require].} @defform[(for-template require-spec ...)]{See @scheme[require] and @scheme[provide].}
@defform[(for-label require-spec ...)]{See @scheme[require] and @scheme[provide].} @defform[(for-label require-spec ...)]{See @scheme[require] and @scheme[provide].}
@defform/subs[(#%require raw-require-spec ...) @defform/subs[(#%require raw-require-spec ...)
([raw-require-spec phaseless-require-spec ([raw-require-spec phaseless-spec
(#,(schemeidfont "for-meta") phase-level phaseless-spec ...)
(#,(schemeidfont "for-syntax") phaseless-spec ...) (#,(schemeidfont "for-syntax") phaseless-spec ...)
(#,(schemeidfont "for-template") phaseless-spec ...) (#,(schemeidfont "for-template") phaseless-spec ...)
(#,(schemeidfont "for-label") phaseless-spec ...)] (#,(schemeidfont "for-label") phaseless-spec ...)
(#,(schemeidfont "just-meta") phase-level raw-require-spec ...)]
[phase-level exact-integer
#f]
[phaseless-spec raw-module-path [phaseless-spec raw-module-path
(#,(schemeidfont "only") rw-module-path id ...) (#,(schemeidfont "only") rw-module-path id ...)
(#,(schemeidfont "prefix") prefix-id raw-module-path) (#,(schemeidfont "prefix") prefix-id raw-module-path)
@ -1565,7 +1593,9 @@ The primitive import form, to which @scheme[require] expands. A
@scheme[require] form, except that the syntax is more constrained, not @scheme[require] form, except that the syntax is more constrained, not
composable, and not extensible. Also, sub-form names like composable, and not extensible. Also, sub-form names like
@schemeidfont{for-syntax} and @schemeidfont{lib} are recognized @schemeidfont{for-syntax} and @schemeidfont{lib} are recognized
symbolically, instead of via bindings. symbolically, instead of via bindings. Although not formalized in the
grammar above, a @schemeidfont{just-meta} form cannot appear within a
@schemeidfont{just-meta} form.
Each @scheme[raw-require-spec] corresponds to the obvious Each @scheme[raw-require-spec] corresponds to the obvious
@scheme[_require-spec], but the @schemeidfont{rename} sub-form has the @scheme[_require-spec], but the @schemeidfont{rename} sub-form has the
@ -1579,9 +1609,12 @@ where the lexical context of the @scheme[local-id] is preserved.}
@defform/subs[(#%provide raw-provide-spec ...) @defform/subs[(#%provide raw-provide-spec ...)
([raw-provide-spec phaseless-spec ([raw-provide-spec phaseless-spec
(#,(schemeidfont "for-meta") phase-level phaseless-spec)
(#,(schemeidfont "for-syntax") phaseless-spec) (#,(schemeidfont "for-syntax") phaseless-spec)
(#,(schemeidfont "for-label") phaseless-spec) (#,(schemeidfont "for-label") phaseless-spec)
(#,(schemeidfont "protect") raw-provide-spec)] (#,(schemeidfont "protect") raw-provide-spec)]
[phase-level exact-integer
#f]
[phaseless-spec id [phaseless-spec id
(#,(schemeidfont "rename") local-id export-id) (#,(schemeidfont "rename") local-id export-id)
(#,(schemeidfont "struct") struct-id (field-id ...)) (#,(schemeidfont "struct") struct-id (field-id ...))

View File

@ -49,15 +49,18 @@ get all cross-reference information for installed documentation.}
symbol? symbol?
module-path-index? module-path-index?
symbol? symbol?
boolean? (one-of/c 0 1)
(one-of/c #f 'for-syntax 'for-label)) (or/c exact-integer? false/c)
(or/c exact-integer? false/c))
(list/c (or/c module-path? (list/c (or/c module-path?
module-path-index? module-path-index?
path? path?
resolved-module-path?) resolved-module-path?)
symbol? symbol?
(one-of/c #f 'for-syntax 'for-label)))] (one-of/c 0 1)
[mode (one-of/c #f 'for-syntax 'for-label)]) (or/c exact-integer? false/c)
(or/c exact-integer? false/c)))]
[mode (or/c exact-integer? false/c)])
(or/c tag? false/c)]{ (or/c tag? false/c)]{
Locates a tag in @scheme[xref] that documents a module export. The Locates a tag in @scheme[xref] that documents a module export. The
@ -68,35 +71,27 @@ either for the specified module or, if the exported name is
re-exported from other other module, for the other module re-exported from other other module, for the other module
(transitively). (transitively).
The @scheme[mode] argument specifies more information about the The @scheme[mode] argument specifies the relevant phase level for the
binding: whether it refers to a normal binding, a @scheme[for-syntax] binding. The @scheme[binding] is specified in one of four ways:
binding, or a @scheme[for-label] binding.
The @scheme[binding] is specified in one of four ways:
@itemize{ @itemize{
@item{If @scheme[binding] is an identifier, then @item{If @scheme[binding] is an identifier, then
@scheme[identifier-binding], @scheme[identifier-binding] is used with @scheme[mode] to
@scheme[identifier-transformer-binding], or determine the binding.}
@scheme[identifier-label-binding] is used to determine the
binding, depending on the value of @scheme[mode].}
@item{If @scheme[binding] is a two-element list, then the first @item{If @scheme[binding] is a two-element list, then the first
element provides the exporting module and the second the element provides the exporting module and the second the
exported name. The @scheme[mode] argument is effectively exported name. The @scheme[mode] argument is effectively
ignored.} ignored.}
@item{If @scheme[binding] is a six-element list, then it corresponds @item{If @scheme[binding] is a seven-element list, then it corresponds
to a result from @scheme[identifier-binding], to a result from @scheme[identifier-binding] using
@scheme[identifier-transformer-binding], or
@scheme[identifier-label-binding], depending on the value of
@scheme[mode].} @scheme[mode].}
@item{If @scheme[binding] is a three-element list, then the first @item{If @scheme[binding] is a five-element list, then the first
element is as for the 2-element-list case, the second element element is as for the two-element-list case, and the remain
is like the fourth element of the six-element case, and the elements are as in the last four elements of the seven-element
third element is like the sixth element of the six-element
case.} case.}
} }

View File

@ -445,11 +445,11 @@
(cdddr b)) (cdddr b))
b))) b)))
(test '('#%kernel case-lambda (lib "scheme/init") case-lambda #f #f) identifier-binding* #'case-lambda) (test '('#%kernel case-lambda (lib "scheme/init") case-lambda 0 0 0) identifier-binding* #'case-lambda)
(test '(scheme/promise delay (lib "scheme/init") delay #f #f) identifier-binding* #'delay) (test '(scheme/promise delay (lib "scheme/init") delay 0 0 0) identifier-binding* #'delay)
(test '('#%kernel #%module-begin (lib "scheme/init") #%plain-module-begin #f #f) identifier-binding* #'#%plain-module-begin) (test '('#%kernel #%module-begin (lib "scheme/init") #%plain-module-begin 0 0 0) identifier-binding* #'#%plain-module-begin)
(require (only-in scheme/base [#%plain-module-begin #%pmb])) (require (only-in scheme/base [#%plain-module-begin #%pmb]))
(test '('#%kernel #%module-begin scheme/base #%plain-module-begin #f #f) identifier-binding* #'#%pmb) (test '('#%kernel #%module-begin scheme/base #%plain-module-begin 0 0 0) identifier-binding* #'#%pmb)
(let ([b (identifier-binding (syntax-case (expand #'(module m scheme/base (let ([b (identifier-binding (syntax-case (expand #'(module m scheme/base
(require (only-in (lib "lang/htdp-intermediate.ss") [cons bcons])) (require (only-in (lib "lang/htdp-intermediate.ss") [cons bcons]))
@ -1275,6 +1275,97 @@
;; If we get here, then macro expansion didn't fail. ;; If we get here, then macro expansion didn't fail.
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check that the free-identifier=? cache doesn't kick in too eagerly.
(module @w@ scheme/base
(define add '+)
(provide (rename-out [add plus])))
(module @q@ scheme/base
(require (for-syntax scheme/base))
(provide result)
(define-for-syntax a #'plus)
(define-for-syntax b #'plus)
(define-for-syntax accum null)
(begin-for-syntax
(set! accum (cons (free-identifier=? a #'plus)
accum)))
(require '@w@)
(begin-for-syntax
(set! accum (list*
(free-identifier=? a #'plus)
(free-identifier=? b #'plus)
accum)))
(define-syntax (accumulated stx)
(datum->syntax stx `',accum))
(define result (accumulated)))
(require '@q@)
(test '(#t #t #t) values result)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Test namespace-attach with phase-levels -2 and 2
(when (file-exists? "tmp10")
(delete-file "tmp10"))
(module @!a scheme/base
(provide x)
(with-output-to-file "tmp10"
#:exists 'append
(lambda ()
(printf "a\n")))
(define x 5))
(module @!b scheme/base
(provide get-x)
(require (for-meta -2 '@!a))
(define (get-x) #'x))
(module @!c scheme/base
(require (for-meta 2 '@!b)
(for-syntax scheme/base
(for-syntax scheme/base)))
(define-syntax (foo stx)
(let-syntax ([ref-x (lambda (stx)
#`(quote-syntax #,(get-x)))])
(ref-x)))
(with-output-to-file "tmp10"
#:exists 'append
(lambda ()
(printf "~s\n" (foo)))))
(define (check-tmp10 s)
(test s with-input-from-file "tmp10" (lambda () (read-string 1000))))
(require '@!c)
(check-tmp10 "a\n5\n")
(let ()
(define n (make-base-namespace))
(namespace-attach-module (current-namespace) ''@!c n)
(test 5
'use-a
(parameterize ([current-namespace n])
;; Shouldn't instantiate new:
(namespace-require ''@!a)
;; Should see `x' from @!a:
(eval 'x)))
(check-tmp10 "a\n5\n"))
(when (file-exists? "tmp10")
(delete-file "tmp10"))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs) (report-errs)

View File

@ -55,10 +55,9 @@
(printf "Copying ~a to ~a~n" path target) (printf "Copying ~a to ~a~n" path target)
(copy-file path target) (copy-file path target)
(let ([code (get-module-code path "no-such-dir")]) (let ([code (get-module-code path "no-such-dir")])
(let-values ([(a b c d) (module-compiled-imports code)]) (map (lambda (x)
(map (lambda (x) (go x path #f))
(go x path #f)) (apply append (map cdr (module-compiled-imports code))))))))))
(append a b c d)))))))))
(unless (directory-exists? "xform-collects") (unless (directory-exists? "xform-collects")
(make-directory "xform-collects")) (make-directory "xform-collects"))

View File

@ -1,112 +1,111 @@
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,50,0,0,0,1,0,0,6,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,51,50,0,0,0,1,0,0,6,0,
9,0,14,0,18,0,23,0,36,0,41,0,45,0,52,0,55,0,62,0,69, 9,0,22,0,27,0,31,0,36,0,41,0,45,0,52,0,55,0,62,0,69,
0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0, 0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0,
155,0,177,0,179,0,193,0,203,0,209,0,232,0,33,1,43,1,60,1,99, 155,0,177,0,179,0,193,0,250,0,17,1,23,1,29,1,39,1,56,1,95,
1,138,1,212,1,1,2,94,2,139,2,144,2,164,2,54,3,74,3,124,3, 1,134,1,203,1,248,1,80,2,125,2,130,2,150,2,40,3,60,3,110,3,
190,3,75,4,238,4,25,5,36,5,115,5,0,0,133,7,0,0,65,98,101, 176,3,61,4,219,4,6,5,17,5,96,5,0,0,117,7,0,0,65,98,101,
103,105,110,29,11,11,64,108,101,116,42,63,108,101,116,64,119,104,101,110,72, 103,105,110,29,11,11,72,112,97,114,97,109,101,116,101,114,105,122,101,64,108,
112,97,114,97,109,101,116,101,114,105,122,101,64,99,111,110,100,63,97,110,100, 101,116,42,63,108,101,116,64,119,104,101,110,64,99,111,110,100,63,97,110,100,
66,108,101,116,114,101,99,62,111,114,66,100,101,102,105,110,101,66,117,110,108, 66,108,101,116,114,101,99,62,111,114,66,100,101,102,105,110,101,66,117,110,108,
101,115,115,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2, 101,115,115,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2,
14,68,35,37,112,97,114,97,109,122,11,29,94,2,14,68,35,37,107,101,114, 14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35,37,112,97,114,
110,101,108,11,62,105,102,63,115,116,120,61,115,70,108,101,116,45,118,97,108, 97,109,122,11,62,105,102,63,115,116,120,61,115,70,108,101,116,45,118,97,108,
117,101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108, 117,101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,
97,109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105, 97,109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,
111,110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101, 111,110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,
115,95,8,240,48,117,0,0,11,16,0,95,8,193,11,16,0,96,35,11,93, 115,97,10,34,11,94,159,2,16,34,34,159,2,15,34,34,16,20,2,10,2,
159,2,16,34,35,16,2,2,13,161,2,2,35,2,13,2,2,2,13,97,10, 2,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,
34,11,94,159,2,15,34,34,159,2,16,34,34,16,20,2,10,2,2,2,3, 2,8,2,2,2,9,2,2,2,11,2,2,2,12,2,2,96,35,11,93,159,
2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2, 2,15,34,35,16,2,2,13,161,2,2,35,2,13,2,2,2,13,96,10,11,
2,2,9,2,2,2,11,2,2,2,12,2,2,13,16,4,34,29,11,11,2, 11,16,0,96,10,36,11,16,0,13,16,4,34,29,11,11,2,2,11,18,98,
2,11,18,98,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,27,248, 64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,27,248,22,178,3,23,
22,178,3,23,196,1,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22, 196,1,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,88,23,200,2,
88,23,200,2,12,249,22,63,2,1,248,22,90,23,202,1,27,248,22,178,3, 12,249,22,63,2,1,248,22,90,23,202,1,27,248,22,178,3,23,196,1,249,
23,196,1,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,88,23,200, 22,171,3,80,158,37,34,251,22,73,2,17,248,22,88,23,200,2,249,22,63,
2,249,22,63,2,1,248,22,90,23,202,1,12,27,248,22,65,248,22,178,3, 2,1,248,22,90,23,202,1,12,27,248,22,65,248,22,178,3,23,197,1,28,
23,197,1,28,248,22,71,23,194,2,87,94,23,193,1,20,15,159,35,34,35, 248,22,71,23,194,2,20,15,159,35,34,35,28,248,22,71,248,22,65,23,195,
28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,171,3,80,158,37, 2,248,22,64,193,249,22,171,3,80,158,37,34,251,22,73,2,17,248,22,64,
34,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,8,248,22,65,23, 23,200,2,249,22,63,2,8,248,22,65,23,202,1,11,18,100,10,8,31,8,
202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,
18,3,1,7,101,110,118,54,57,49,51,16,4,11,11,2,19,3,1,7,101,
110,118,54,57,49,52,27,248,22,65,248,22,178,3,23,197,1,28,248,22,71,
23,194,2,87,94,23,193,1,20,15,159,35,34,35,28,248,22,71,248,22,65,
23,195,2,248,22,64,193,249,22,171,3,80,158,37,34,250,22,73,2,20,248,
22,73,249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,
2,21,2,21,249,22,63,2,10,248,22,65,23,205,1,18,100,11,8,31,8,
30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,54,57, 30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,54,57,
49,54,16,4,11,11,2,19,3,1,7,101,110,118,54,57,49,55,248,22,178, 56,55,16,4,11,11,2,19,3,1,7,101,110,118,54,57,56,56,27,248,22,
3,193,27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65, 65,248,22,178,3,23,197,1,28,248,22,71,23,194,2,20,15,159,35,34,35,
195,27,248,22,65,248,22,178,3,23,197,1,249,22,171,3,80,158,37,34,28, 28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,171,3,80,158,37,
248,22,51,248,22,172,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162, 34,250,22,73,2,20,248,22,73,249,22,73,248,22,73,2,21,248,22,64,23,
8,44,35,41,9,222,33,39,248,22,178,3,248,22,88,23,200,2,250,22,73, 202,2,251,22,73,2,17,2,21,2,21,249,22,63,2,10,248,22,65,23,205,
2,22,248,22,73,249,22,73,248,22,73,248,22,64,23,204,2,250,22,74,2, 1,18,100,11,8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,
23,249,22,2,22,64,23,204,2,248,22,90,23,206,2,249,22,63,248,22,64, 1,7,101,110,118,54,57,57,48,16,4,11,11,2,19,3,1,7,101,110,118,
23,202,1,249,22,2,22,88,23,200,1,250,22,74,2,20,249,22,2,32,0, 54,57,57,49,248,22,178,3,193,27,248,22,178,3,194,249,22,63,248,22,73,
89,162,42,35,45,9,222,33,40,248,22,178,3,248,22,64,201,248,22,65,198, 248,22,64,196,248,22,65,195,27,248,22,65,248,22,178,3,23,197,1,249,22,
27,248,22,178,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, 171,3,80,158,37,34,28,248,22,51,248,22,172,3,248,22,64,23,198,2,27,
248,22,65,248,22,178,3,23,197,1,249,22,171,3,80,158,37,34,250,22,74, 249,22,2,32,0,89,162,8,44,35,41,9,222,33,39,248,22,178,3,248,22,
2,22,249,22,2,32,0,89,162,42,35,45,9,222,33,42,248,22,178,3,248, 88,23,200,2,250,22,73,2,22,248,22,73,249,22,73,248,22,73,248,22,64,
22,64,201,248,22,65,198,27,248,22,65,248,22,178,3,196,27,248,22,178,3, 23,204,2,250,22,74,2,23,249,22,2,22,64,23,204,2,248,22,90,23,206,
248,22,64,195,249,22,171,3,80,158,38,34,28,248,22,71,195,250,22,74,2, 2,249,22,63,248,22,64,23,202,1,249,22,2,22,88,23,200,1,250,22,74,
20,9,248,22,65,199,250,22,73,2,4,248,22,73,248,22,64,199,250,22,74, 2,20,249,22,2,32,0,89,162,42,35,45,9,222,33,40,248,22,178,3,248,
2,3,248,22,65,201,248,22,65,202,27,248,22,65,248,22,178,3,23,197,1, 22,64,201,248,22,65,198,27,248,22,178,3,194,249,22,63,248,22,73,248,22,
27,249,22,1,22,77,249,22,2,22,178,3,248,22,178,3,248,22,64,199,249, 64,196,248,22,65,195,27,248,22,65,248,22,178,3,23,197,1,249,22,171,3,
22,171,3,80,158,38,34,251,22,73,1,22,119,105,116,104,45,99,111,110,116, 80,158,37,34,250,22,74,2,22,249,22,2,32,0,89,162,42,35,45,9,222,
105,110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,1,23,101, 33,42,248,22,178,3,248,22,64,201,248,22,65,198,27,248,22,65,248,22,178,
120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, 3,196,27,248,22,178,3,248,22,64,195,249,22,171,3,80,158,38,34,28,248,
110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114, 22,71,195,250,22,74,2,20,9,248,22,65,199,250,22,73,2,5,248,22,73,
107,45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9, 248,22,64,199,250,22,74,2,4,248,22,65,201,248,22,65,202,27,248,22,65,
248,22,65,203,27,248,22,65,248,22,178,3,23,197,1,28,248,22,71,23,194, 248,22,178,3,23,197,1,27,249,22,1,22,77,249,22,2,22,178,3,248,22,
2,87,94,23,193,1,20,15,159,35,34,35,249,22,171,3,80,158,37,34,27, 178,3,248,22,64,199,249,22,171,3,80,158,38,34,251,22,73,1,22,119,105,
248,22,178,3,248,22,64,23,198,2,28,249,22,138,8,62,61,62,248,22,172, 116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,
3,248,22,88,23,197,2,250,22,73,2,20,248,22,73,249,22,73,21,93,2, 24,250,22,74,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,
25,248,22,64,199,250,22,74,2,7,249,22,73,2,25,249,22,73,248,22,97, 114,105,122,97,116,105,111,110,21,95,1,27,99,111,110,116,105,110,117,97,116,
203,2,25,248,22,65,202,251,22,73,2,17,28,249,22,138,8,248,22,172,3, 105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,11,2,24,
248,22,64,23,201,2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74, 201,250,22,74,2,20,9,248,22,65,203,27,248,22,65,248,22,178,3,23,197,
2,20,9,248,22,65,23,201,1,249,22,63,2,7,248,22,65,23,203,1,99, 1,28,248,22,71,23,194,2,20,15,159,35,34,35,249,22,171,3,80,158,37,
8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110, 34,27,248,22,178,3,248,22,64,23,198,2,28,249,22,138,8,62,61,62,248,
118,54,57,51,57,16,4,11,11,2,19,3,1,7,101,110,118,54,57,52,48, 22,172,3,248,22,88,23,197,2,250,22,73,2,20,248,22,73,249,22,73,21,
18,158,94,10,64,118,111,105,100,8,47,27,248,22,65,248,22,178,3,196,249, 93,2,25,248,22,64,199,250,22,74,2,7,249,22,73,2,25,249,22,73,248,
22,171,3,80,158,37,34,28,248,22,51,248,22,172,3,248,22,64,197,250,22, 22,97,203,2,25,248,22,65,202,251,22,73,2,17,28,249,22,138,8,248,22,
73,2,26,248,22,73,248,22,64,199,248,22,88,198,27,248,22,172,3,248,22, 172,3,248,22,64,23,201,2,64,101,108,115,101,10,248,22,64,23,198,2,250,
64,197,250,22,73,2,26,248,22,73,248,22,64,197,250,22,74,2,23,248,22, 22,74,2,20,9,248,22,65,23,201,1,249,22,63,2,7,248,22,65,23,203,
65,199,248,22,65,202,159,34,20,102,159,34,16,1,20,24,2,1,16,0,83, 1,99,8,31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,7,
158,40,20,99,134,69,35,37,109,105,110,45,115,116,120,2,2,10,11,10,10, 101,110,118,55,48,49,51,16,4,11,11,2,19,3,1,7,101,110,118,55,48,
10,10,34,80,158,34,34,20,102,159,34,16,0,16,0,11,11,16,0,34,11, 49,52,18,158,94,10,64,118,111,105,100,8,47,27,248,22,65,248,22,178,3,
11,11,16,0,16,0,16,0,34,34,11,11,16,0,16,0,16,0,34,34,11, 196,249,22,171,3,80,158,37,34,28,248,22,51,248,22,172,3,248,22,64,197,
16,10,9,9,9,9,9,9,9,9,9,9,16,10,2,3,2,4,2,5,2, 250,22,73,2,26,248,22,73,248,22,64,199,248,22,88,198,27,248,22,172,3,
6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11, 248,22,64,197,250,22,73,2,26,248,22,73,248,22,64,197,250,22,74,2,23,
11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2, 248,22,65,199,248,22,65,202,159,34,20,103,159,34,16,1,20,24,2,1,16,
10,2,11,2,12,34,44,16,11,16,5,93,2,13,20,15,159,34,34,34,34, 0,83,158,40,20,100,137,69,35,37,109,105,110,45,115,116,120,2,2,10,11,
20,102,159,34,16,0,16,1,33,32,10,16,5,93,2,12,89,162,8,44,35, 10,34,80,158,34,34,20,103,159,34,16,0,16,0,11,11,16,0,34,11,37,
51,9,223,0,33,33,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13, 34,11,16,10,9,9,9,9,9,9,9,9,9,9,16,10,2,3,2,4,2,
16,0,11,16,5,93,2,5,89,162,8,44,35,51,9,223,0,33,34,34,20, 5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,
102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,8, 11,11,11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,
89,162,8,44,35,51,9,223,0,33,35,34,20,102,159,34,16,1,20,25,159, 9,2,10,2,11,2,12,34,44,35,11,11,16,0,16,0,16,0,34,34,11,
35,2,2,2,13,16,1,33,36,11,16,5,93,2,10,89,162,8,44,35,54, 11,11,16,0,16,0,16,0,34,34,16,11,16,5,93,2,13,20,15,159,34,
9,223,0,33,37,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16, 34,34,34,20,103,159,34,16,0,16,1,33,32,10,16,5,93,2,12,89,162,
1,33,38,11,16,5,93,2,4,89,162,8,44,35,56,9,223,0,33,41,34, 8,44,35,51,9,223,0,33,33,34,20,103,159,34,16,1,20,25,159,35,2,
20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2, 2,2,13,16,0,11,16,5,93,2,6,89,162,8,44,35,51,9,223,0,33,
9,89,162,8,44,35,51,9,223,0,33,43,34,20,102,159,34,16,1,20,25, 34,34,20,103,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,
159,35,2,2,2,13,16,0,11,16,5,93,2,3,89,162,8,44,35,52,9, 93,2,8,89,162,8,44,35,51,9,223,0,33,35,34,20,103,159,34,16,1,
223,0,33,44,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0, 20,25,159,35,2,2,2,13,16,1,33,36,11,16,5,93,2,10,89,162,8,
11,16,5,93,2,6,89,162,8,44,35,53,9,223,0,33,45,34,20,102,159, 44,35,54,9,223,0,33,37,34,20,103,159,34,16,1,20,25,159,35,2,2,
34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,7,89,162, 2,13,16,1,33,38,11,16,5,93,2,5,89,162,8,44,35,56,9,223,0,
8,44,35,56,9,223,0,33,46,34,20,102,159,34,16,1,20,25,159,35,2, 33,41,34,20,103,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,
2,2,13,16,1,33,48,11,16,5,93,2,11,89,162,8,44,35,52,9,223, 5,93,2,9,89,162,8,44,35,51,9,223,0,33,43,34,20,103,159,34,16,
0,33,49,34,20,102,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11, 1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,4,89,162,8,44,
16,0,94,2,16,2,15,93,2,16,9,0}; 35,52,9,223,0,33,44,34,20,103,159,34,16,1,20,25,159,35,2,2,2,
EVAL_ONE_SIZED_STR((char *)expr, 2048); 13,16,0,11,16,5,93,2,3,89,162,8,44,35,53,9,223,0,33,45,34,
20,103,159,34,16,1,20,25,159,35,2,2,2,13,16,0,11,16,5,93,2,
7,89,162,8,44,35,56,9,223,0,33,46,34,20,103,159,34,16,1,20,25,
159,35,2,2,2,13,16,1,33,48,11,16,5,93,2,11,89,162,8,44,35,
52,9,223,0,33,49,34,20,103,159,34,16,1,20,25,159,35,2,2,2,13,
16,0,11,16,0,94,2,15,2,16,93,2,15,9,9,34,0};
EVAL_ONE_SIZED_STR((char *)expr, 2032);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,61,0,0,0,1,0,0,3,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,51,61,0,0,0,1,0,0,3,0,
16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169, 16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169,
0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1, 0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1,
112,1,157,1,202,1,226,1,9,2,11,2,20,2,71,2,87,3,96,3,126, 112,1,157,1,202,1,226,1,9,2,11,2,20,2,77,2,167,3,176,3,217,
3,170,4,242,4,58,5,146,5,158,5,201,5,217,5,204,6,218,6,69,7, 3,51,5,155,5,3,6,119,6,133,6,176,6,192,6,42,8,56,8,219,8,
8,8,202,8,209,8,215,8,75,9,87,9,155,9,1,10,14,10,36,10,170, 226,9,232,10,239,10,245,10,117,11,129,11,242,11,88,12,101,12,123,12,75,
10,36,11,37,12,45,12,53,12,79,12,158,12,0,0,209,15,0,0,29,11, 13,235,13,50,15,58,15,66,15,92,15,193,15,0,0,251,18,0,0,29,11,
11,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110, 11,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110,
111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99, 111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99,
107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108, 107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108,
@ -133,199 +132,238 @@
99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116, 99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,
111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,68,35,37,107, 111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,68,35,37,107,
101,114,110,101,108,27,20,14,159,80,158,35,49,250,80,158,38,50,249,22,27, 101,114,110,101,108,27,20,14,159,80,158,35,49,250,80,158,38,50,249,22,27,
11,80,158,40,49,22,138,12,10,248,22,186,4,195,28,248,22,164,5,193,12, 11,80,158,40,49,22,138,12,10,248,22,186,4,23,196,2,28,248,22,164,5,
87,94,248,22,141,8,193,248,80,159,36,53,35,195,28,248,22,71,194,9,27, 23,194,2,12,87,94,248,22,141,8,23,194,1,248,80,159,36,53,35,195,28,
248,22,64,195,27,28,248,22,183,12,194,193,28,248,22,182,12,194,249,22,184, 248,22,71,23,195,2,9,27,248,22,64,23,196,2,27,28,248,22,183,12,23,
12,195,250,80,158,41,47,248,22,134,13,2,20,11,10,250,80,158,39,47,248, 195,2,23,194,1,28,248,22,182,12,23,195,2,249,22,184,12,23,196,1,250,
22,134,13,2,20,196,10,28,192,249,22,63,248,22,186,12,249,22,184,12,197, 80,158,41,47,248,22,134,13,2,20,11,10,250,80,158,39,47,248,22,134,13,
247,22,135,13,27,248,22,65,199,28,248,22,71,193,9,27,248,22,64,194,27, 2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,186,12,249,22,184,12,
28,248,22,183,12,194,193,28,248,22,182,12,194,249,22,184,12,195,250,80,158, 23,198,1,247,22,135,13,27,248,22,65,23,200,1,28,248,22,71,23,194,2,
46,47,248,22,134,13,2,20,11,10,250,80,158,44,47,248,22,134,13,2,20, 9,27,248,22,64,23,195,2,27,28,248,22,183,12,23,195,2,23,194,1,28,
196,10,28,192,249,22,63,248,22,186,12,249,22,184,12,197,247,22,135,13,248, 248,22,182,12,23,195,2,249,22,184,12,23,196,1,250,80,158,46,47,248,22,
80,159,44,52,35,248,22,65,198,248,80,159,42,52,35,248,22,65,196,27,248, 134,13,2,20,11,10,250,80,158,44,47,248,22,134,13,2,20,23,197,1,10,
22,65,197,28,248,22,71,193,9,27,248,22,64,194,27,28,248,22,183,12,194, 28,23,193,2,249,22,63,248,22,186,12,249,22,184,12,23,198,1,247,22,135,
193,28,248,22,182,12,194,249,22,184,12,195,250,80,158,44,47,248,22,134,13, 13,248,80,159,44,52,35,248,22,65,23,199,1,87,94,23,193,1,248,80,159,
2,20,11,10,250,80,158,42,47,248,22,134,13,2,20,196,10,28,192,249,22, 42,52,35,248,22,65,23,197,1,87,94,23,193,1,27,248,22,65,23,198,1,
63,248,22,186,12,249,22,184,12,197,247,22,135,13,248,80,159,42,52,35,248, 28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,183,12,
22,65,198,248,80,159,40,52,35,248,22,65,196,249,80,159,36,37,35,2,7, 23,195,2,23,194,1,28,248,22,182,12,23,195,2,249,22,184,12,23,196,1,
195,27,248,22,159,12,194,28,192,192,28,248,22,133,6,194,27,248,22,181,12, 250,80,158,44,47,248,22,134,13,2,20,11,10,250,80,158,42,47,248,22,134,
195,28,192,192,248,22,182,12,195,11,87,94,28,28,248,22,160,12,194,10,27, 13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,186,12,249,22,184,
248,22,159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28, 12,23,198,1,247,22,135,13,248,80,159,42,52,35,248,22,65,23,199,1,248,
192,192,248,22,182,12,196,11,12,250,22,168,8,76,110,111,114,109,97,108,45, 80,159,40,52,35,248,22,65,196,249,80,159,36,37,35,2,7,195,27,248,22,
112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114, 159,12,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,133,6,23,
32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100, 195,2,27,248,22,181,12,195,28,192,192,248,22,182,12,195,11,87,94,28,28,
45,112,97,116,104,32,115,116,114,105,110,103,196,28,28,248,22,160,12,194,249, 248,22,160,12,23,195,2,10,27,248,22,159,12,23,196,2,28,23,193,2,192,
22,138,8,248,22,161,12,196,2,21,249,22,138,8,247,22,152,7,2,21,27, 87,94,23,193,1,28,248,22,133,6,23,196,2,27,248,22,181,12,23,197,2,
28,248,22,133,6,195,194,248,22,142,7,248,22,164,12,196,28,249,22,147,13, 28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,197,2,11,12,250,22,
0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92, 168,8,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,
93,34,194,28,248,22,133,6,195,248,22,167,12,195,194,27,248,22,172,6,194, 42,112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,
249,22,168,12,248,22,145,7,250,22,153,13,0,6,35,114,120,34,47,34,28, 41,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,
249,22,147,13,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, 103,23,197,2,28,28,248,22,160,12,23,195,2,249,22,138,8,248,22,161,12,
47,92,92,93,42,36,34,200,198,250,22,153,13,0,19,35,114,120,34,91,32, 23,197,2,2,21,249,22,138,8,247,22,152,7,2,21,27,28,248,22,133,6,
46,93,43,40,91,47,92,92,93,42,41,36,34,201,6,2,2,92,49,80,158, 23,196,2,23,195,2,248,22,142,7,248,22,164,12,23,197,2,28,249,22,147,
42,35,2,21,28,248,22,133,6,194,248,22,167,12,194,193,87,94,28,27,248, 13,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,
22,159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192, 92,93,34,23,195,2,28,248,22,133,6,195,248,22,167,12,195,194,27,248,22,
192,248,22,182,12,196,11,12,250,22,168,8,195,2,22,196,28,248,22,181,12, 172,6,23,195,1,249,22,168,12,248,22,145,7,250,22,153,13,0,6,35,114,
194,12,248,22,183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,199, 120,34,47,34,28,249,22,147,13,0,22,35,114,120,34,91,47,92,92,93,91,
200,247,22,23,87,94,28,27,248,22,159,12,195,28,192,192,28,248,22,133,6, 46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,153,
195,27,248,22,181,12,196,28,192,192,248,22,182,12,196,11,12,250,22,168,8, 13,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,
195,2,22,196,28,248,22,181,12,194,12,248,22,183,10,249,22,128,10,248,22, 34,23,202,1,6,2,2,92,49,80,158,42,35,2,21,28,248,22,133,6,194,
162,6,250,22,181,6,2,23,199,200,247,22,23,87,94,87,94,28,27,248,22, 248,22,167,12,194,193,87,94,28,27,248,22,159,12,23,196,2,28,23,193,2,
159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192,192, 192,87,94,23,193,1,28,248,22,133,6,23,196,2,27,248,22,181,12,23,197,
248,22,182,12,196,11,12,250,22,168,8,195,2,22,196,28,248,22,181,12,194, 2,28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,197,2,11,12,250,
12,248,22,183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,199,200, 22,168,8,23,196,2,2,22,23,197,2,28,248,22,181,12,23,195,2,12,248,
247,22,23,249,22,3,89,162,34,35,48,9,223,2,33,36,196,248,22,183,10, 22,183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,23,200,1,23,
249,22,158,10,195,247,22,23,87,94,87,94,249,80,159,36,37,35,2,7,195, 201,1,247,22,23,87,94,28,27,248,22,159,12,23,196,2,28,23,193,2,192,
87,94,23,193,1,28,248,22,133,6,23,196,2,27,248,22,181,12,23,197,2,
28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,197,2,11,12,250,22,
168,8,23,196,2,2,22,23,197,2,28,248,22,181,12,23,195,2,12,248,22,
183,10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,23,200,1,23,201,
1,247,22,23,87,94,87,94,28,27,248,22,159,12,23,196,2,28,23,193,2,
192,87,94,23,193,1,28,248,22,133,6,23,196,2,27,248,22,181,12,23,197,
2,28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,197,2,11,12,250,
22,168,8,195,2,22,23,197,2,28,248,22,181,12,23,195,2,12,248,22,183,
10,249,22,128,10,248,22,162,6,250,22,181,6,2,23,199,23,201,1,247,22,
23,249,22,3,89,162,42,35,48,9,223,2,33,36,196,248,22,183,10,249,22,
158,10,23,196,1,247,22,23,87,94,87,94,249,80,159,36,37,35,2,7,195,
249,22,3,80,159,36,51,35,196,251,80,159,38,40,35,2,7,32,0,89,162, 249,22,3,80,159,36,51,35,196,251,80,159,38,40,35,2,7,32,0,89,162,
34,35,43,9,222,33,38,197,198,32,40,89,162,34,40,57,65,99,108,111,111, 42,35,43,9,222,33,38,197,198,32,40,89,162,42,40,57,65,99,108,111,111,
112,222,33,41,28,248,22,71,198,248,195,251,22,181,6,2,24,198,28,248,22, 112,222,33,41,28,248,22,71,23,199,2,87,94,23,198,1,248,23,196,1,251,
71,202,200,250,22,1,22,177,12,203,204,197,27,249,22,177,12,248,22,64,201, 22,181,6,2,24,23,199,1,28,248,22,71,23,203,2,87,94,23,202,1,23,
198,28,248,22,172,12,193,27,250,22,1,22,177,12,196,201,28,248,22,172,12, 201,1,250,22,1,22,177,12,23,204,1,23,205,1,23,198,1,27,249,22,177,
193,192,27,248,22,65,201,28,248,22,71,193,248,198,251,22,181,6,2,24,201, 12,248,22,64,23,202,2,23,199,2,28,248,22,172,12,23,194,2,27,250,22,
28,248,22,71,205,203,250,22,1,22,177,12,206,23,15,200,27,249,22,177,12, 1,22,177,12,23,197,1,23,202,2,28,248,22,172,12,23,194,2,192,87,94,
248,22,64,196,201,28,248,22,172,12,193,27,250,22,1,22,177,12,196,204,28, 23,193,1,27,248,22,65,23,202,1,28,248,22,71,23,194,2,87,94,23,193,
248,22,172,12,193,192,253,2,40,203,204,205,206,23,15,248,22,65,201,253,2, 1,248,23,199,1,251,22,181,6,2,24,23,202,1,28,248,22,71,23,206,2,
40,202,203,204,205,206,248,22,65,200,27,248,22,65,200,28,248,22,71,193,248, 87,94,23,205,1,23,204,1,250,22,1,22,177,12,23,207,1,23,208,1,23,
197,251,22,181,6,2,24,200,28,248,22,71,204,202,250,22,1,22,177,12,205, 201,1,27,249,22,177,12,248,22,64,23,197,2,23,202,2,28,248,22,172,12,
206,199,27,249,22,177,12,248,22,64,196,200,28,248,22,172,12,193,27,250,22, 23,194,2,27,250,22,1,22,177,12,23,197,1,204,28,248,22,172,12,193,192,
1,22,177,12,196,203,28,248,22,172,12,193,192,253,2,40,202,203,204,205,206, 253,2,40,203,204,205,206,23,15,248,22,65,201,253,2,40,202,203,204,205,206,
248,22,65,201,253,2,40,201,202,203,204,205,248,22,65,200,27,247,22,136,13, 248,22,65,200,87,94,23,193,1,27,248,22,65,23,201,1,28,248,22,71,23,
253,2,40,198,199,200,201,202,198,87,95,28,28,248,22,160,12,193,10,27,248, 194,2,87,94,23,193,1,248,23,198,1,251,22,181,6,2,24,23,201,1,28,
22,159,12,194,28,192,192,28,248,22,133,6,194,27,248,22,181,12,195,28,192, 248,22,71,23,205,2,87,94,23,204,1,23,203,1,250,22,1,22,177,12,23,
192,248,22,182,12,195,11,12,252,22,168,8,199,2,25,34,197,198,28,28,248, 206,1,23,207,1,23,200,1,27,249,22,177,12,248,22,64,23,197,2,23,201,
22,133,6,194,10,248,22,185,6,194,12,252,22,168,8,199,2,26,35,197,198, 2,28,248,22,172,12,23,194,2,27,250,22,1,22,177,12,23,197,1,203,28,
91,159,37,11,90,161,37,34,11,248,22,180,12,196,87,94,28,192,12,250,22, 248,22,172,12,193,192,253,2,40,202,203,204,205,206,248,22,65,201,253,2,40,
169,8,200,2,27,198,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87, 201,202,203,204,205,248,22,65,200,27,247,22,136,13,253,2,40,198,199,200,201,
95,28,28,248,22,160,12,195,10,27,248,22,159,12,196,28,192,192,28,248,22, 202,198,87,95,28,28,248,22,160,12,23,194,2,10,27,248,22,159,12,23,195,
133,6,196,27,248,22,181,12,197,28,192,192,248,22,182,12,197,11,12,252,22, 2,28,23,193,2,192,87,94,23,193,1,28,248,22,133,6,23,195,2,27,248,
168,8,2,10,2,25,34,199,200,28,28,248,22,133,6,196,10,248,22,185,6, 22,181,12,23,196,2,28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,
196,12,252,22,168,8,2,10,2,26,35,199,200,91,159,37,11,90,161,37,34, 196,2,11,12,252,22,168,8,23,200,2,2,25,34,23,198,2,23,199,2,28,
11,248,22,180,12,198,87,94,28,192,12,250,22,169,8,2,10,2,27,200,249, 28,248,22,133,6,23,195,2,10,248,22,185,6,23,195,2,87,94,23,194,1,
22,7,194,195,27,249,22,169,12,250,22,152,13,0,18,35,114,120,35,34,40, 12,252,22,168,8,23,200,2,2,26,35,23,198,2,23,199,1,91,159,37,11,
91,46,93,91,94,46,93,42,124,41,36,34,248,22,165,12,200,28,248,22,133, 90,161,37,34,11,248,22,180,12,23,197,2,87,94,23,195,1,87,94,28,192,
6,202,249,22,145,7,203,8,63,201,28,248,22,160,12,198,248,22,161,12,198, 12,250,22,169,8,23,201,1,2,27,23,199,1,249,22,7,194,195,91,159,36,
247,22,162,12,28,248,22,159,12,194,249,22,177,12,195,194,192,91,159,36,11, 11,90,161,36,34,11,87,95,28,28,248,22,160,12,23,196,2,10,27,248,22,
90,161,36,34,11,87,95,28,28,248,22,160,12,195,10,27,248,22,159,12,196, 159,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,133,6,23,
28,192,192,28,248,22,133,6,196,27,248,22,181,12,197,28,192,192,248,22,182, 197,2,27,248,22,181,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,
12,197,11,12,252,22,168,8,2,11,2,25,34,199,200,28,28,248,22,133,6, 22,182,12,23,198,2,11,12,252,22,168,8,2,10,2,25,34,23,200,2,23,
196,10,248,22,185,6,196,12,252,22,168,8,2,11,2,26,35,199,200,91,159, 201,2,28,28,248,22,133,6,23,197,2,10,248,22,185,6,23,197,2,12,252,
37,11,90,161,37,34,11,248,22,180,12,198,87,94,28,192,12,250,22,169,8, 22,168,8,2,10,2,26,35,23,200,2,23,201,2,91,159,37,11,90,161,37,
2,11,2,27,200,249,22,7,194,195,27,249,22,169,12,249,22,131,7,250,22, 34,11,248,22,180,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12,
153,13,0,9,35,114,120,35,34,91,46,93,34,248,22,165,12,202,6,1,1, 250,22,169,8,2,10,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27,
95,28,248,22,133,6,201,249,22,145,7,202,8,63,200,28,248,22,160,12,198, 249,22,169,12,250,22,152,13,0,18,35,114,120,35,34,40,91,46,93,91,94,
248,22,161,12,198,247,22,162,12,28,248,22,159,12,194,249,22,177,12,195,194, 46,93,42,124,41,36,34,248,22,165,12,23,201,1,28,248,22,133,6,23,203,
192,249,247,22,184,5,194,11,248,80,158,35,45,9,27,247,22,138,13,249,80, 2,249,22,145,7,23,204,1,8,63,23,202,1,28,248,22,160,12,23,199,2,
158,37,46,28,194,27,248,22,150,7,6,11,11,80,76,84,67,79,76,76,69, 248,22,161,12,23,199,1,87,94,23,198,1,247,22,162,12,28,248,22,159,12,
67,84,83,28,192,192,6,0,0,6,0,0,27,28,195,250,22,177,12,248,22, 194,249,22,177,12,195,194,192,91,159,36,11,90,161,36,34,11,87,95,28,28,
248,22,160,12,23,196,2,10,27,248,22,159,12,23,197,2,28,23,193,2,192,
87,94,23,193,1,28,248,22,133,6,23,197,2,27,248,22,181,12,23,198,2,
28,23,193,2,192,87,94,23,193,1,248,22,182,12,23,198,2,11,12,252,22,
168,8,2,11,2,25,34,23,200,2,23,201,2,28,28,248,22,133,6,23,197,
2,10,248,22,185,6,23,197,2,12,252,22,168,8,2,11,2,26,35,23,200,
2,23,201,2,91,159,37,11,90,161,37,34,11,248,22,180,12,23,199,2,87,
94,23,195,1,87,94,28,23,193,2,12,250,22,169,8,2,11,2,27,23,201,
2,249,22,7,23,195,1,23,196,1,27,249,22,169,12,249,22,131,7,250,22,
153,13,0,9,35,114,120,35,34,91,46,93,34,248,22,165,12,23,203,1,6,
1,1,95,28,248,22,133,6,23,202,2,249,22,145,7,23,203,1,8,63,23,
201,1,28,248,22,160,12,23,199,2,248,22,161,12,23,199,1,87,94,23,198,
1,247,22,162,12,28,248,22,159,12,194,249,22,177,12,195,194,192,249,247,22,
184,5,194,11,248,80,158,35,45,9,27,247,22,138,13,249,80,158,37,46,28,
23,195,2,27,248,22,150,7,6,11,11,80,76,84,67,79,76,76,69,67,84,
83,28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,177,12,248,22,
134,13,69,97,100,100,111,110,45,100,105,114,247,22,148,7,6,8,8,99,111, 134,13,69,97,100,100,111,110,45,100,105,114,247,22,148,7,6,8,8,99,111,
108,108,101,99,116,115,11,27,248,80,159,40,52,35,249,22,77,201,248,22,73, 108,108,101,99,116,115,11,27,248,80,159,40,52,35,249,22,77,23,202,1,248,
248,22,134,13,72,99,111,108,108,101,99,116,115,45,100,105,114,28,193,249,22, 22,73,248,22,134,13,72,99,111,108,108,101,99,116,115,45,100,105,114,28,23,
63,195,194,192,32,49,89,162,34,37,49,2,19,222,33,50,27,249,22,145,13, 194,2,249,22,63,23,196,1,23,195,1,192,32,49,89,162,42,37,49,2,19,
196,197,28,192,27,248,22,88,194,27,250,2,49,198,199,248,22,97,198,28,249, 222,33,50,27,249,22,145,13,23,197,2,23,198,2,28,23,193,2,87,94,23,
22,191,6,195,2,28,249,22,77,197,194,249,22,63,248,22,168,12,196,194,28, 196,1,27,248,22,88,23,195,2,27,250,2,49,23,199,2,23,200,1,248,22,
249,22,191,6,197,2,28,249,22,77,195,9,249,22,63,248,22,168,12,198,9, 97,23,199,1,28,249,22,191,6,23,196,2,2,28,249,22,77,197,194,87,94,
87,95,28,28,248,22,185,6,194,10,248,22,133,6,194,12,250,22,168,8,2, 23,196,1,249,22,63,248,22,168,12,23,197,1,194,87,95,23,195,1,23,193,
14,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116, 1,28,249,22,191,6,23,198,2,2,28,249,22,77,195,9,87,94,23,194,1,
114,105,110,103,196,28,28,248,22,72,195,249,22,4,22,159,12,196,11,12,250, 249,22,63,248,22,168,12,23,199,1,9,87,95,28,28,248,22,185,6,194,10,
22,168,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115, 248,22,133,6,194,12,250,22,168,8,2,14,6,21,21,98,121,116,101,32,115,
197,250,2,49,197,195,28,248,22,133,6,197,248,22,144,7,197,196,32,52,89, 116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,72,
162,8,36,38,56,2,19,222,33,55,32,53,89,162,8,36,37,53,70,102,111, 195,249,22,4,22,159,12,196,11,12,250,22,168,8,2,14,6,13,13,108,105,
117,110,100,45,101,120,101,99,222,33,54,28,192,91,159,37,11,90,161,37,34, 115,116,32,111,102,32,112,97,116,104,115,197,250,2,49,197,195,28,248,22,133,
11,248,22,180,12,198,27,28,197,27,248,22,185,12,200,28,249,22,140,8,194, 6,197,248,22,144,7,197,196,32,52,89,162,8,44,38,56,2,19,222,33,55,
201,11,28,248,22,181,12,193,250,2,53,200,201,249,22,177,12,199,197,250,2, 32,53,89,162,8,44,37,53,70,102,111,117,110,100,45,101,120,101,99,222,33,
53,200,201,195,11,28,192,192,27,28,248,22,159,12,195,27,249,22,177,12,197, 54,28,23,193,2,91,159,37,11,90,161,37,34,11,248,22,180,12,23,199,2,
200,28,28,248,22,172,12,193,10,248,22,171,12,193,192,11,11,28,192,192,28, 87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,185,12,23,201,2,
198,11,27,248,22,185,12,201,28,249,22,140,8,194,202,11,28,248,22,181,12, 28,249,22,140,8,23,195,2,23,202,2,11,28,248,22,181,12,23,194,2,250,
193,250,2,53,201,202,249,22,177,12,200,197,250,2,53,201,202,195,194,28,248, 2,53,23,201,2,23,202,2,249,22,177,12,23,200,2,23,198,1,250,2,53,
22,71,196,11,27,248,22,184,12,248,22,64,198,27,249,22,177,12,195,196,28, 23,201,2,23,202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,
248,22,171,12,193,250,2,53,198,199,195,27,248,22,65,199,28,248,22,71,193, 28,248,22,159,12,23,196,2,27,249,22,177,12,23,198,2,23,201,2,28,28,
11,27,248,22,184,12,248,22,64,195,27,249,22,177,12,195,199,28,248,22,171, 248,22,172,12,193,10,248,22,171,12,193,192,11,11,28,23,193,2,192,87,94,
12,193,250,2,53,201,202,195,27,248,22,65,196,28,248,22,71,193,11,27,248, 23,193,1,28,23,199,2,11,27,248,22,185,12,23,202,2,28,249,22,140,8,
22,184,12,248,22,64,195,27,249,22,177,12,195,202,28,248,22,171,12,193,250, 23,195,2,23,203,1,11,28,248,22,181,12,23,194,2,250,2,53,23,202,1,
2,53,204,205,195,251,2,52,204,205,206,248,22,65,199,87,95,28,27,248,22, 23,203,1,249,22,177,12,23,201,1,23,198,1,250,2,53,201,202,195,194,28,
159,12,195,28,192,192,28,248,22,133,6,195,27,248,22,181,12,196,28,192,192, 248,22,71,23,197,2,11,27,248,22,184,12,248,22,64,23,199,2,27,249,22,
248,22,182,12,196,11,12,250,22,168,8,2,15,6,25,25,112,97,116,104,32, 177,12,23,196,1,23,197,2,28,248,22,171,12,23,194,2,250,2,53,198,199,
111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196, 195,87,94,23,193,1,27,248,22,65,23,200,1,28,248,22,71,23,194,2,11,
28,28,194,28,27,248,22,159,12,196,28,192,192,28,248,22,133,6,196,27,248, 27,248,22,184,12,248,22,64,23,196,2,27,249,22,177,12,23,196,1,23,200,
22,181,12,197,28,192,192,248,22,182,12,197,11,248,22,181,12,195,11,10,12, 2,28,248,22,171,12,23,194,2,250,2,53,201,202,195,87,94,23,193,1,27,
250,22,168,8,2,15,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105, 248,22,65,23,197,1,28,248,22,71,23,194,2,11,27,248,22,184,12,248,22,
118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,197,28,28,248, 64,195,27,249,22,177,12,23,196,1,202,28,248,22,171,12,193,250,2,53,204,
22,181,12,194,91,159,37,11,90,161,37,34,11,248,22,180,12,197,249,22,138, 205,195,251,2,52,204,205,206,248,22,65,199,87,95,28,27,248,22,159,12,23,
8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,150,7,6,4,4,80, 196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,133,6,23,196,2,27,
65,84,72,251,2,52,198,199,200,28,196,27,249,80,158,42,46,199,9,28,249, 248,22,181,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,182,12,
22,138,8,247,22,152,7,2,21,249,22,63,248,22,168,12,5,1,46,194,192, 23,197,2,11,12,250,22,168,8,2,15,6,25,25,112,97,116,104,32,111,114,
9,27,248,22,184,12,195,28,248,22,171,12,193,250,2,53,198,199,195,11,250, 32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,
80,158,37,47,196,197,11,250,80,158,37,47,196,11,11,87,94,249,22,189,5, 28,28,23,195,2,28,27,248,22,159,12,23,197,2,28,23,193,2,192,87,94,
247,22,166,4,195,248,22,140,5,249,22,151,3,34,249,22,135,3,197,198,27, 23,193,1,28,248,22,133,6,23,197,2,27,248,22,181,12,23,198,2,28,23,
248,22,134,13,2,20,27,249,80,158,38,47,195,11,27,27,248,22,154,3,198, 193,2,192,87,94,23,193,1,248,22,182,12,23,198,2,11,248,22,181,12,23,
28,192,192,34,27,27,248,22,154,3,200,28,192,192,34,27,249,22,183,4,197, 196,2,11,10,12,250,22,168,8,2,15,6,29,29,35,102,32,111,114,32,114,
89,162,34,34,46,9,224,4,3,33,59,27,248,22,170,4,194,87,94,248,22, 101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,
134,4,21,94,2,17,2,29,248,80,159,41,53,35,193,159,34,20,102,159,34, 103,23,198,2,28,28,248,22,181,12,23,195,2,91,159,37,11,90,161,37,34,
16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,67,35,37, 11,248,22,180,12,23,198,2,249,22,138,8,194,68,114,101,108,97,116,105,118,
117,116,105,108,115,2,1,11,10,10,10,10,10,41,80,158,34,34,20,102,159, 101,11,27,248,22,150,7,6,4,4,80,65,84,72,251,2,52,23,199,1,23,
37,16,17,30,2,1,2,2,193,30,2,1,2,3,193,30,2,1,2,4,193, 200,1,23,201,1,28,23,197,2,27,249,80,158,42,46,23,200,1,9,28,249,
30,2,1,2,5,193,30,2,1,2,6,193,30,2,1,2,7,193,30,2,1, 22,138,8,247,22,152,7,2,21,249,22,63,248,22,168,12,5,1,46,23,195,
2,8,193,30,2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,11,193, 1,192,9,27,248,22,184,12,23,196,1,28,248,22,171,12,193,250,2,53,198,
30,2,1,2,12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,2,1, 199,195,11,250,80,158,37,47,196,197,11,250,80,158,37,47,196,11,11,87,94,
2,15,193,30,2,1,2,16,193,30,2,18,1,20,112,97,114,97,109,101,116, 249,22,189,5,247,22,166,4,195,248,22,140,5,249,22,151,3,34,249,22,135,
101,114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,18,1,23,101,120, 3,197,198,27,248,22,134,13,2,20,27,249,80,158,38,47,23,196,1,11,27,
116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, 27,248,22,154,3,23,199,1,28,192,192,34,27,27,248,22,154,3,23,201,1,
3,16,0,11,11,16,4,2,6,2,5,2,3,2,9,38,11,11,11,16,0, 28,192,192,34,27,249,22,183,4,23,198,1,83,158,38,20,97,95,89,162,42,
16,0,16,0,34,34,11,11,16,0,16,0,16,0,34,34,11,16,11,9,9, 34,46,9,224,4,3,33,59,23,196,1,23,197,1,27,248,22,170,4,23,195,
9,9,9,9,9,9,9,9,9,16,11,2,8,2,7,2,16,2,15,2,13, 1,87,94,248,22,134,4,21,94,2,17,2,29,248,80,159,41,53,35,193,159,
2,12,2,4,2,11,2,14,2,10,2,2,16,11,11,11,11,11,11,11,11, 34,20,103,159,34,16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,
11,11,11,11,16,11,2,8,2,7,2,16,2,15,2,13,2,12,2,4,2, 100,137,67,35,37,117,116,105,108,115,2,1,11,10,10,41,80,158,34,34,20,
11,2,14,2,10,2,2,45,45,16,0,16,18,83,158,34,16,2,89,162,34, 103,159,37,16,17,30,2,1,2,2,193,30,2,1,2,3,193,30,2,1,2,
35,47,2,19,223,0,33,30,80,159,34,53,35,83,158,34,16,2,89,162,34, 4,193,30,2,1,2,5,193,30,2,1,2,6,193,30,2,1,2,7,193,30,
35,54,2,19,223,0,33,31,80,159,34,52,35,83,158,34,16,2,89,162,8, 2,1,2,8,193,30,2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,
36,35,43,9,223,0,33,32,80,159,34,51,35,83,158,34,16,2,32,0,89, 11,193,30,2,1,2,12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,
162,34,35,43,2,2,222,33,33,80,159,34,34,35,83,158,34,16,2,249,22, 2,1,2,15,193,30,2,1,2,16,193,30,2,18,1,20,112,97,114,97,109,
135,6,7,92,7,92,80,159,34,35,35,83,158,34,16,2,89,162,34,35,52, 101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,18,1,23,
2,4,223,0,33,34,80,159,34,36,35,83,158,34,16,2,32,0,89,162,34, 101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,
36,48,2,5,222,33,35,80,159,34,37,35,83,158,34,16,2,32,0,89,162, 111,110,3,16,0,11,11,16,4,2,6,2,5,2,3,2,9,38,11,37,34,
34,37,49,2,6,222,33,37,80,159,34,38,35,83,158,34,16,2,89,162,8, 11,16,11,9,9,9,9,9,9,9,9,9,9,9,16,11,2,8,2,7,2,
37,36,46,2,7,223,0,33,39,80,159,34,39,35,83,158,34,16,2,32,0, 16,2,15,2,13,2,12,2,4,2,11,2,14,2,10,2,2,16,11,11,11,
89,162,34,38,50,2,8,222,33,42,80,159,34,40,35,83,158,34,16,2,32, 11,11,11,11,11,11,11,11,11,16,11,2,8,2,7,2,16,2,15,2,13,
0,89,162,34,37,48,2,9,222,33,43,80,159,34,41,35,83,158,34,16,2, 2,12,2,4,2,11,2,14,2,10,2,2,45,45,35,11,11,16,0,16,0,
32,0,89,162,34,36,51,2,10,222,33,44,80,159,34,42,35,83,158,34,16, 16,0,34,34,11,11,11,16,0,16,0,16,0,34,34,16,0,16,18,83,158,
2,32,0,89,162,34,36,52,2,11,222,33,45,80,159,34,43,35,83,158,34, 34,16,2,89,162,42,35,47,2,19,223,0,33,30,80,159,34,53,35,83,158,
16,2,32,0,89,162,34,35,42,2,12,222,33,46,80,159,34,44,35,83,158, 34,16,2,89,162,42,35,54,2,19,223,0,33,31,80,159,34,52,35,83,158,
34,16,2,83,158,37,20,96,95,2,13,89,162,34,34,41,9,223,0,33,47, 34,16,2,89,162,8,44,35,43,9,223,0,33,32,80,159,34,51,35,83,158,
89,162,34,35,51,9,223,0,33,48,80,159,34,45,35,83,158,34,16,2,27, 34,16,2,32,0,89,162,42,35,43,2,2,222,33,33,80,159,34,34,35,83,
248,22,141,13,248,22,144,7,27,28,249,22,138,8,247,22,152,7,2,21,6, 158,34,16,2,249,22,135,6,7,92,7,92,80,159,34,35,35,83,158,34,16,
1,1,59,6,1,1,58,250,22,181,6,6,14,14,40,91,94,126,97,93,42, 2,89,162,42,35,52,2,4,223,0,33,34,80,159,34,36,35,83,158,34,16,
41,126,97,40,46,42,41,195,195,89,162,34,36,46,2,14,223,0,33,51,80, 2,32,0,89,162,42,36,48,2,5,222,33,35,80,159,34,37,35,83,158,34,
159,34,46,35,83,158,34,16,2,83,158,37,20,96,96,2,15,89,162,8,36, 16,2,32,0,89,162,42,37,49,2,6,222,33,37,80,159,34,38,35,83,158,
37,52,9,223,0,33,56,89,162,34,36,45,9,223,0,33,57,89,162,34,35, 34,16,2,89,162,8,45,36,46,2,7,223,0,33,39,80,159,34,39,35,83,
44,9,223,0,33,58,80,159,34,47,35,83,158,34,16,2,89,162,34,36,49, 158,34,16,2,32,0,89,162,42,38,50,2,8,222,33,42,80,159,34,40,35,
2,16,223,0,33,60,80,159,34,48,35,94,29,94,2,17,2,29,11,29,94, 83,158,34,16,2,32,0,89,162,42,37,48,2,9,222,33,43,80,159,34,41,
2,17,69,35,37,109,105,110,45,115,116,120,11,9,9,0}; 35,83,158,34,16,2,32,0,89,162,42,36,51,2,10,222,33,44,80,159,34,
EVAL_ONE_SIZED_STR((char *)expr, 4194); 42,35,83,158,34,16,2,32,0,89,162,42,36,52,2,11,222,33,45,80,159,
34,43,35,83,158,34,16,2,32,0,89,162,42,35,42,2,12,222,33,46,80,
159,34,44,35,83,158,34,16,2,83,158,37,20,96,95,2,13,89,162,42,34,
41,9,223,0,33,47,89,162,42,35,51,9,223,0,33,48,80,159,34,45,35,
83,158,34,16,2,27,248,22,141,13,248,22,144,7,27,28,249,22,138,8,247,
22,152,7,2,21,6,1,1,59,6,1,1,58,250,22,181,6,6,14,14,40,
91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,89,162,
42,36,46,2,14,223,0,33,51,80,159,34,46,35,83,158,34,16,2,83,158,
37,20,96,96,2,15,89,162,8,44,37,52,9,223,0,33,56,89,162,42,36,
45,9,223,0,33,57,89,162,42,35,44,9,223,0,33,58,80,159,34,47,35,
83,158,34,16,2,89,162,42,36,49,2,16,223,0,33,60,80,159,34,48,35,
94,29,94,2,17,2,29,11,29,94,2,17,69,35,37,109,105,110,45,115,116,
120,11,9,9,9,34,0};
EVAL_ONE_SIZED_STR((char *)expr, 5004);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,7,0,0,0,1,0,0,6,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,51,8,0,0,0,1,0,0,6,0,
19,0,34,0,48,0,62,0,76,0,0,0,253,0,0,0,65,113,117,111,116, 19,0,34,0,48,0,62,0,76,0,108,0,0,0,240,0,0,0,65,113,117,
101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, 111,116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,
110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, 35,37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,
11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35, 109,122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,
37,107,101,114,110,101,108,11,159,34,20,102,159,34,16,1,20,24,65,98,101, 68,35,37,107,101,114,110,101,108,11,97,10,34,11,97,159,2,2,34,34,159,
103,105,110,16,0,83,158,40,20,99,134,69,35,37,98,117,105,108,116,105,110, 2,3,34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34,34,16,0,
29,11,11,10,10,18,94,11,97,10,34,11,97,159,2,2,34,34,159,2,3, 159,34,20,103,159,34,16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,
34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34,34,16,0,18,94, 20,100,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10,18,96,11,
11,95,35,11,16,0,10,18,94,11,95,8,240,48,117,0,0,11,16,0,34, 41,41,41,34,80,158,34,34,20,103,159,34,16,0,16,0,11,11,16,0,34,
80,158,34,34,20,102,159,34,16,0,16,0,11,11,16,0,34,11,11,11,16, 11,37,34,11,11,16,0,16,0,16,0,34,34,35,11,11,16,0,16,0,16,
0,16,0,16,0,34,34,11,11,16,0,16,0,16,0,34,34,11,11,16,0, 0,34,34,11,11,11,16,0,16,0,16,0,34,34,16,0,16,0,98,2,6,
16,0,16,0,34,34,16,0,16,0,98,2,6,2,5,29,94,2,1,69,35, 2,5,29,94,2,1,69,35,37,102,111,114,101,105,103,110,11,2,4,2,3,
37,102,111,114,101,105,103,110,11,2,4,2,3,2,2,9,9,0}; 2,2,9,9,9,34,0};
EVAL_ONE_SIZED_STR((char *)expr, 290); EVAL_ONE_SIZED_STR((char *)expr, 279);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,49,52,0,0,0,1,0,0,3,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,51,52,0,0,0,1,0,0,3,0,
14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184, 14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184,
0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1, 0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1,
74,1,82,1,163,1,199,1,216,1,245,1,17,2,47,2,57,2,87,2,97, 74,1,82,1,185,1,230,1,253,1,32,2,67,2,101,2,111,2,145,2,155,
2,104,2,178,3,190,3,209,3,33,4,45,4,173,4,185,4,30,5,36,5, 2,162,2,65,4,77,4,96,4,215,4,227,4,131,5,145,5,6,6,12,6,
50,5,77,5,148,5,150,5,203,5,93,10,151,10,183,10,0,0,118,13,0, 26,6,53,6,138,6,140,6,201,6,118,12,176,12,208,12,0,0,146,15,0,
0,29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97, 0,29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,
117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100, 117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,
65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,29,94, 65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,29,94,
@ -342,154 +380,179 @@
97,107,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100, 97,107,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100,
117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98,
67,105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47, 67,105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47,
35,195,10,27,28,194,28,249,22,138,8,196,80,158,37,45,80,158,35,46,27, 35,195,10,27,28,23,195,2,28,249,22,138,8,23,197,2,80,158,37,45,87,
248,22,149,4,196,28,248,22,159,12,193,91,159,37,11,90,161,37,34,11,248, 94,23,195,1,80,158,35,46,27,248,22,149,4,23,197,2,28,248,22,159,12,
22,180,12,196,87,95,83,160,36,11,80,158,39,45,198,83,160,36,11,80,158, 23,194,2,91,159,37,11,90,161,37,34,11,248,22,180,12,23,197,1,87,95,
39,46,192,192,11,11,28,192,192,27,247,22,185,5,28,192,192,247,22,135,13, 83,160,36,11,80,158,39,45,198,83,160,36,11,80,158,39,46,192,192,11,11,
20,14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38,22, 28,23,193,2,192,87,94,23,193,1,27,247,22,185,5,28,192,192,247,22,135,
185,5,28,248,22,159,12,197,196,247,22,135,13,247,194,250,22,177,12,196,198, 13,20,14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38,
249,80,158,41,37,197,5,3,46,122,111,252,22,177,12,198,200,6,6,6,110, 22,185,5,28,248,22,159,12,23,198,2,23,197,1,87,94,23,197,1,247,22,
97,116,105,118,101,247,22,153,7,249,80,158,43,37,199,80,158,43,34,27,193, 135,13,247,194,250,22,177,12,23,197,1,23,199,1,249,80,158,41,37,23,198,
27,250,22,130,13,196,11,32,0,89,162,8,36,34,39,9,222,11,28,192,249, 1,5,3,46,122,111,252,22,177,12,23,199,1,23,201,1,6,6,6,110,97,
22,63,195,194,11,27,248,194,195,27,250,22,130,13,196,11,32,0,89,162,8, 116,105,118,101,247,22,153,7,249,80,158,43,37,23,200,1,80,158,43,34,87,
36,34,39,9,222,11,28,192,249,22,63,195,194,11,249,247,22,140,13,248,22, 94,23,194,1,27,23,194,1,27,250,22,130,13,196,11,32,0,89,162,8,44,
64,195,195,27,248,194,195,27,250,22,130,13,196,11,32,0,89,162,8,36,34, 34,39,9,222,11,28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,
39,9,222,11,28,192,249,22,63,195,194,11,249,247,22,183,5,248,22,64,195, 27,250,22,130,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249,
195,249,247,22,183,5,194,195,87,94,28,248,80,158,35,36,194,12,250,22,168, 22,63,195,194,11,249,247,22,140,13,248,22,64,195,195,27,248,23,195,1,23,
8,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25, 196,1,27,250,22,130,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,
25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115, 192,249,22,63,195,194,11,249,247,22,183,5,248,22,64,195,195,249,247,22,183,
116,114,105,110,103,196,91,159,40,11,90,161,35,34,11,28,248,22,183,12,200, 5,194,195,87,94,28,248,80,158,35,36,23,195,2,12,250,22,168,8,77,108,
199,27,247,22,185,5,28,192,249,22,184,12,202,194,200,90,161,37,35,11,248, 111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,
22,180,12,193,90,161,35,38,11,28,249,22,138,8,195,68,114,101,108,97,116, 116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,
105,118,101,2,17,193,90,161,35,39,11,247,22,137,13,27,89,162,34,35,48, 110,103,23,197,2,91,159,40,11,90,161,35,34,11,28,248,22,183,12,23,201,
62,122,111,225,7,5,3,33,27,27,89,162,34,35,50,9,225,8,6,4,33, 2,23,200,1,27,247,22,185,5,28,23,193,2,249,22,184,12,23,203,1,23,
28,27,249,22,5,89,162,34,35,46,9,223,5,33,29,202,27,28,194,27,249, 195,1,200,90,161,37,35,11,248,22,180,12,23,194,2,87,94,23,196,1,90,
22,5,89,162,34,35,46,9,223,5,33,30,204,27,28,195,11,193,28,192,192, 161,35,38,11,28,249,22,138,8,23,196,2,68,114,101,108,97,116,105,118,101,
28,193,28,195,28,249,22,147,3,248,22,65,196,248,22,65,198,193,11,11,11, 87,94,23,194,1,2,17,23,194,1,90,161,35,39,11,247,22,137,13,27,89,
11,28,192,249,80,159,46,53,35,202,89,162,34,34,44,9,224,14,2,33,31, 162,42,35,48,62,122,111,225,7,5,3,33,27,27,83,158,38,20,97,94,89,
27,28,196,27,249,22,5,89,162,34,35,46,9,223,7,33,32,205,27,28,196, 162,42,35,50,9,225,8,6,4,33,28,23,197,1,27,249,22,5,89,162,42,
11,193,28,192,192,28,193,28,196,28,249,22,147,3,248,22,65,196,248,22,65, 35,46,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5,83,158,
199,193,11,11,11,11,28,192,249,80,159,47,53,35,203,89,162,34,34,44,9, 38,20,97,94,89,162,42,35,46,9,223,5,33,30,23,198,1,23,205,2,27,
224,15,2,33,33,249,80,159,47,53,35,203,89,162,34,34,43,9,224,15,7, 28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22,147,3,248,
33,34,32,36,89,162,34,35,53,2,19,222,33,38,0,17,35,114,120,34,94, 22,65,196,248,22,65,23,199,2,193,11,11,11,87,94,23,195,1,11,28,23,
40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,145,13,2,37,195,28, 193,2,249,80,159,46,53,35,202,89,162,42,34,44,9,224,14,2,33,31,87,
192,249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,145,13,2,37,195, 94,23,193,1,27,28,23,197,2,27,249,22,5,83,158,38,20,97,94,89,162,
28,192,249,22,63,248,22,88,195,27,248,22,97,196,27,249,22,145,13,2,37, 42,35,46,9,223,7,33,32,23,200,1,23,206,1,27,28,196,11,193,28,192,
195,28,192,249,22,63,248,22,88,195,248,2,36,248,22,97,196,248,22,73,194, 192,28,193,28,196,28,249,22,147,3,248,22,65,196,248,22,65,199,193,11,11,
248,22,73,194,248,22,73,194,32,39,89,162,34,35,53,2,19,222,33,40,28, 11,11,28,192,249,80,159,47,53,35,203,89,162,42,34,44,9,224,15,2,33,
248,22,71,248,22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161, 33,249,80,159,47,53,35,203,89,162,42,34,43,9,224,15,7,33,34,32,36,
36,34,11,27,248,22,65,196,28,248,22,71,248,22,65,194,249,22,7,9,248, 89,162,42,35,53,2,19,222,33,38,0,17,35,114,120,34,94,40,46,42,63,
22,64,195,91,159,36,11,90,161,36,34,11,27,248,22,65,196,28,248,22,71, 41,47,40,46,42,41,36,34,27,249,22,145,13,2,37,23,196,2,28,23,193,
248,22,65,194,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36,34,11, 2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197,
248,2,39,248,22,65,196,249,22,7,249,22,63,248,22,64,199,196,195,249,22, 1,27,249,22,145,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,
7,249,22,63,248,22,64,199,196,195,249,22,7,249,22,63,248,22,64,199,196, 22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27,249,22,145,13,2,
195,27,248,2,36,194,28,194,192,248,2,39,193,87,95,28,248,22,147,4,195, 37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196,
12,250,22,168,8,2,20,6,20,20,114,101,115,111,108,118,101,100,45,109,111, 2,248,2,36,248,22,97,23,197,1,248,22,73,194,248,22,73,194,248,22,73,
100,117,108,101,45,112,97,116,104,197,28,207,248,208,195,12,27,27,250,22,126, 194,32,39,89,162,42,35,53,2,19,222,33,40,28,248,22,71,248,22,65,23,
80,158,40,41,248,22,163,13,247,22,147,11,11,28,192,192,27,247,22,120,87, 195,2,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36,34,11,27,248,
94,250,22,125,80,158,41,41,248,22,163,13,247,22,147,11,195,192,250,22,125, 22,65,23,197,2,28,248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,
195,198,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,167,8, 64,23,196,1,91,159,36,11,90,161,36,34,11,27,248,22,65,23,197,2,28,
11,196,195,248,22,165,8,194,28,249,22,139,6,194,6,1,1,46,2,17,28, 248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,64,23,196,1,91,159,
249,22,139,6,194,6,2,2,46,46,62,117,112,192,28,249,22,140,8,248,22, 36,11,90,161,36,34,11,248,2,39,248,22,65,23,197,2,249,22,7,249,22,
65,199,196,28,249,22,138,8,248,22,64,199,195,251,22,165,8,2,20,6,26, 63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249,22,63,248,22,
26,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32, 64,23,200,1,23,197,1,23,196,1,249,22,7,249,22,63,248,22,64,23,200,
126,101,58,32,126,101,199,249,22,2,22,65,248,22,78,249,22,63,205,201,12, 1,23,197,1,195,27,248,2,36,23,195,1,28,194,192,248,2,39,193,87,95,
12,247,192,20,14,159,80,158,38,43,249,22,63,247,22,147,11,196,20,14,159, 28,248,22,147,4,195,12,250,22,168,8,2,20,6,20,20,114,101,115,111,108,
80,158,38,38,250,80,158,41,39,249,22,27,11,80,158,43,38,22,131,4,195, 118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,28,24,193,2,248,
249,247,22,184,5,197,248,22,52,248,22,163,12,197,87,94,28,28,248,22,159, 24,194,1,195,87,94,23,193,1,12,27,27,250,22,126,80,158,40,41,248,22,
12,196,10,248,22,152,4,196,12,28,197,250,22,167,8,11,6,15,15,98,97, 163,13,247,22,147,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,120,
100,32,109,111,100,117,108,101,32,112,97,116,104,200,250,22,168,8,2,20,6, 87,94,250,22,125,80,158,41,41,248,22,163,13,247,22,147,11,195,192,250,22,
19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104, 125,195,198,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,167,
198,28,28,248,22,61,196,249,22,138,8,248,22,64,198,2,4,11,248,22,148, 8,11,196,195,248,22,165,8,194,28,249,22,139,6,194,6,1,1,46,2,17,
4,248,22,88,197,28,28,248,22,61,196,249,22,138,8,248,22,64,198,66,112, 28,249,22,139,6,194,6,2,2,46,46,62,117,112,192,28,249,22,140,8,248,
108,97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,38,250,80,158, 22,65,23,200,2,23,197,1,28,249,22,138,8,248,22,64,23,200,2,23,196,
39,39,249,22,27,11,80,158,41,38,22,147,11,196,90,161,35,34,10,249,22, 1,251,22,165,8,2,20,6,26,26,99,121,99,108,101,32,105,110,32,108,111,
132,4,21,94,2,21,6,18,18,112,108,97,110,101,116,47,114,101,115,111,108, 97,100,105,110,103,32,97,116,32,126,101,58,32,126,101,23,200,1,249,22,2,
118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101, 22,65,248,22,78,249,22,63,23,206,1,23,202,1,12,12,247,192,20,14,159,
45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,251,211,199,200,201,202, 80,158,38,43,249,22,63,247,22,147,11,23,197,1,20,14,159,80,158,38,38,
27,89,162,34,35,44,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111, 250,80,158,41,39,249,22,27,11,80,158,43,38,22,131,4,23,196,1,249,247,
110,45,101,114,114,223,6,33,44,27,28,248,22,51,198,27,250,22,126,80,158, 22,184,5,23,198,1,248,22,52,248,22,163,12,23,198,1,87,94,28,28,248,
42,42,249,22,63,203,247,22,136,13,11,28,192,192,91,159,36,11,90,161,36, 22,159,12,23,197,2,10,248,22,152,4,23,197,2,12,28,23,198,2,250,22,
34,11,249,80,159,43,47,35,248,22,54,203,11,27,251,80,158,46,49,2,20, 167,8,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,
201,28,248,22,71,198,198,248,22,64,198,28,248,22,71,198,9,248,22,65,198, 23,201,2,250,22,168,8,2,20,6,19,19,109,111,100,117,108,101,45,112,97,
249,22,177,12,194,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,249, 116,104,32,111,114,32,112,97,116,104,23,199,2,28,28,248,22,61,23,197,2,
22,156,6,198,6,3,3,46,115,115,28,248,22,133,6,198,27,248,80,159,40, 249,22,138,8,248,22,64,23,199,2,2,4,11,248,22,148,4,248,22,88,197,
54,35,200,27,250,22,126,80,158,43,42,249,22,63,204,198,11,28,192,192,91, 28,28,248,22,61,23,197,2,249,22,138,8,248,22,64,23,199,2,66,112,108,
159,36,11,90,161,36,34,11,249,80,159,44,47,35,203,11,250,22,1,22,177, 97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,38,250,80,158,39,
12,198,249,22,77,249,22,2,32,0,89,162,8,36,35,42,9,222,33,45,199, 39,249,22,27,11,80,158,41,38,22,147,11,23,197,1,90,161,35,34,10,249,
248,22,73,199,28,248,22,159,12,198,28,248,22,182,12,198,197,248,22,73,6, 22,132,4,21,94,2,21,6,18,18,112,108,97,110,101,116,47,114,101,115,111,
26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98, 108,118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117,108,
115,111,108,117,116,101,41,28,249,22,138,8,248,22,64,200,2,21,27,250,22, 101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,251,211,199,200,201,
126,80,158,42,42,249,22,63,203,247,22,136,13,11,28,192,192,91,159,37,11, 202,87,94,23,193,1,27,89,162,42,35,44,79,115,104,111,119,45,99,111,108,
90,161,36,34,11,249,80,159,44,47,35,248,22,88,204,11,90,161,35,36,11, 108,101,99,116,105,111,110,45,101,114,114,223,6,33,44,27,28,248,22,51,23,
28,248,22,71,248,22,90,203,28,248,22,71,193,249,22,147,13,0,8,35,114, 199,2,27,250,22,126,80,158,42,42,249,22,63,23,204,2,247,22,136,13,11,
120,34,91,46,93,34,195,11,10,27,27,28,196,249,22,77,28,248,22,71,248, 28,23,193,2,192,87,94,23,193,1,91,159,36,11,90,161,36,34,11,249,80,
22,90,23,15,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77,249,22, 159,43,47,35,248,22,54,23,204,2,11,27,251,80,158,46,49,2,20,23,202,
2,80,159,50,55,35,248,22,90,23,18,196,28,248,22,71,195,248,22,73,196, 1,28,248,22,71,23,199,2,23,199,2,248,22,64,23,199,2,28,248,22,71,
194,251,80,158,48,49,2,20,203,248,22,64,197,248,22,65,197,249,22,177,12, 23,199,2,9,248,22,65,23,199,2,249,22,177,12,23,195,1,28,248,22,71,
194,28,197,196,28,248,22,71,196,6,7,7,109,97,105,110,46,115,115,28,249, 23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,249,22,156,
22,147,13,0,8,35,114,120,34,91,46,93,34,198,196,249,22,156,6,198,6, 6,23,199,1,6,3,3,46,115,115,28,248,22,133,6,23,199,2,87,94,23,
3,3,46,115,115,28,249,22,138,8,248,22,64,200,64,102,105,108,101,249,22, 194,1,27,248,80,159,40,54,35,23,201,2,27,250,22,126,80,158,43,42,249,
184,12,248,22,88,200,248,80,159,41,54,35,201,12,87,94,28,28,248,22,159, 22,63,23,205,2,23,199,2,11,28,23,193,2,192,87,94,23,193,1,91,159,
12,193,10,248,22,155,7,193,12,28,199,250,22,167,8,67,114,101,113,117,105, 36,11,90,161,36,34,11,249,80,159,44,47,35,23,204,2,11,250,22,1,22,
114,101,249,22,181,6,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112, 177,12,23,199,1,249,22,77,249,22,2,32,0,89,162,8,44,35,42,9,222,
97,116,104,126,97,28,197,248,22,64,198,6,0,0,202,250,22,168,8,2,20, 33,45,23,200,1,248,22,73,23,200,1,28,248,22,159,12,23,199,2,87,94,
249,22,181,6,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28, 23,194,1,28,248,22,182,12,23,199,2,23,198,2,248,22,73,6,26,26,32,
197,248,22,64,198,6,0,0,200,27,28,248,22,155,7,194,249,22,160,7,195, 40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,115,111,108,
34,249,22,186,12,248,22,187,12,196,11,27,28,248,22,155,7,195,249,22,160, 117,116,101,41,28,249,22,138,8,248,22,64,23,201,2,2,21,27,250,22,126,
7,196,35,248,80,158,41,50,194,91,159,37,11,90,161,37,34,11,28,248,22, 80,158,42,42,249,22,63,23,204,2,247,22,136,13,11,28,23,193,2,192,87,
155,7,198,250,22,7,2,22,249,22,160,7,202,36,2,22,248,22,180,12,197, 94,23,193,1,91,159,37,11,90,161,36,34,11,249,80,159,44,47,35,248,22,
27,28,248,22,155,7,199,249,22,160,7,200,37,249,80,158,46,51,196,5,0, 88,23,205,2,11,90,161,35,36,11,28,248,22,71,248,22,90,23,204,2,28,
27,28,248,22,155,7,200,249,22,160,7,201,38,248,22,148,4,199,27,27,250, 248,22,71,23,194,2,249,22,147,13,0,8,35,114,120,34,91,46,93,34,23,
22,126,80,158,50,41,248,22,163,13,247,22,147,11,11,28,192,192,27,247,22, 196,2,11,10,27,27,28,23,197,2,249,22,77,28,248,22,71,248,22,90,23,
120,87,94,250,22,125,80,158,51,41,248,22,163,13,247,22,147,11,195,192,87, 208,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77,249,22,2,80,
95,28,23,16,27,250,22,126,196,197,11,28,192,12,87,95,27,27,28,248,22, 159,50,55,35,248,22,90,23,211,2,23,197,2,28,248,22,71,23,196,2,248,
17,80,158,50,44,80,158,49,44,247,22,19,250,22,25,248,22,23,196,80,158, 22,73,23,197,2,23,195,2,251,80,158,48,49,2,20,23,204,1,248,22,64,
52,43,195,27,247,22,147,11,249,22,3,89,162,34,35,53,9,226,12,11,2, 23,198,2,248,22,65,23,198,1,249,22,177,12,23,195,1,28,23,198,1,87,
3,33,46,195,248,28,248,22,17,80,158,49,44,32,0,89,162,34,35,40,9, 94,23,196,1,23,197,1,28,248,22,71,23,197,1,87,94,23,197,1,6,7,
222,33,47,80,159,48,56,35,89,162,34,34,49,9,227,14,9,8,4,3,33, 7,109,97,105,110,46,115,115,28,249,22,147,13,0,8,35,114,120,34,91,46,
48,250,22,125,196,197,10,12,28,28,248,22,155,7,201,11,27,248,22,133,6, 93,34,23,199,2,23,197,1,249,22,156,6,23,199,1,6,3,3,46,115,115,
23,15,28,192,192,28,248,22,61,23,15,249,22,138,8,248,22,64,23,17,2, 28,249,22,138,8,248,22,64,23,201,2,64,102,105,108,101,249,22,184,12,248,
21,11,250,22,125,80,158,49,42,28,248,22,133,6,23,17,249,22,63,23,18, 22,88,23,201,2,248,80,159,41,54,35,23,202,2,12,87,94,28,28,248,22,
248,80,159,52,54,35,23,20,249,22,63,23,18,247,22,136,13,252,22,157,7, 159,12,23,194,2,10,248,22,155,7,23,194,2,87,94,23,200,1,12,28,23,
23,15,206,204,202,201,12,193,91,159,36,10,90,161,35,34,10,11,90,161,35, 200,2,250,22,167,8,67,114,101,113,117,105,114,101,249,22,181,6,6,17,17,
35,10,83,158,37,20,96,96,2,20,89,162,34,35,49,9,224,2,0,33,42, 98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,
89,162,34,37,47,9,223,1,33,43,89,162,34,38,8,30,9,225,2,3,0, 248,22,64,23,199,2,6,0,0,23,203,1,87,94,23,200,1,250,22,168,8,
33,49,208,87,95,248,22,130,4,248,80,158,36,48,247,22,147,11,248,22,184, 2,20,249,22,181,6,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,
5,80,158,35,35,248,22,133,12,80,159,35,40,35,159,34,20,102,159,34,16, 97,28,23,198,2,248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,
1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99,134,66,35,37,98, 155,7,23,195,2,249,22,160,7,23,196,2,34,249,22,186,12,248,22,187,12,
111,111,116,2,1,11,10,10,10,10,10,36,80,158,34,34,20,102,159,38,16, 23,197,2,11,27,28,248,22,155,7,23,196,2,249,22,160,7,23,197,2,35,
19,30,2,1,2,2,193,30,2,1,2,3,193,30,2,5,72,112,97,116,104, 248,80,158,41,50,23,195,2,91,159,37,11,90,161,37,34,11,28,248,22,155,
45,115,116,114,105,110,103,63,10,30,2,5,75,112,97,116,104,45,97,100,100, 7,23,199,2,250,22,7,2,22,249,22,160,7,23,203,2,36,2,22,248,22,
45,115,117,102,102,105,120,7,30,2,6,1,20,112,97,114,97,109,101,116,101, 180,12,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,155,7,23,200,
114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,6,1,23,101,120,116, 2,249,22,160,7,23,201,2,37,249,80,158,46,51,23,197,2,5,0,27,28,
101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3, 248,22,155,7,23,201,2,249,22,160,7,23,202,2,38,248,22,148,4,23,200,
30,2,1,2,7,193,30,2,1,2,8,193,30,2,1,2,9,193,30,2,1, 2,27,27,250,22,126,80,158,50,41,248,22,163,13,247,22,147,11,11,28,23,
2,10,193,30,2,1,2,11,193,30,2,1,2,12,193,30,2,1,2,13,193, 193,2,192,87,94,23,193,1,27,247,22,120,87,94,250,22,125,80,158,51,41,
30,2,1,2,14,193,30,2,1,2,15,193,30,2,5,69,45,102,105,110,100, 248,22,163,13,247,22,147,11,195,192,87,95,28,23,209,1,27,250,22,126,23,
45,99,111,108,0,30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45, 197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,158,50,44,
112,97,116,104,6,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101, 80,158,49,44,247,22,19,250,22,25,248,22,23,23,197,2,80,158,52,43,23,
45,115,117,102,102,105,120,9,30,2,1,2,16,193,16,0,11,11,16,11,2, 196,1,27,247,22,147,11,249,22,3,83,158,38,20,97,94,89,162,42,35,53,
10,2,11,2,8,2,9,2,12,2,13,2,3,2,7,2,2,2,15,2,14, 9,226,12,11,2,3,33,46,23,195,1,23,196,1,248,28,248,22,17,80,158,
45,11,11,11,16,0,16,0,16,0,34,34,11,11,16,0,16,0,16,0,34, 49,44,32,0,89,162,42,35,40,9,222,33,47,80,159,48,56,35,89,162,42,
34,11,16,1,9,16,1,2,16,16,1,11,16,1,2,16,35,35,16,0,16, 34,49,9,227,14,9,8,4,3,33,48,250,22,125,23,197,1,197,10,12,28,
16,83,158,34,16,2,89,162,34,35,43,9,223,0,33,23,80,159,34,56,35, 28,248,22,155,7,23,202,1,11,27,248,22,133,6,23,208,2,28,192,192,28,
83,158,34,16,2,89,162,8,36,35,43,9,223,0,33,24,80,159,34,55,35, 248,22,61,23,208,2,249,22,138,8,248,22,64,23,210,2,2,21,11,250,22,
83,158,34,16,2,89,162,34,35,47,67,103,101,116,45,100,105,114,223,0,33, 125,80,158,49,42,28,248,22,133,6,23,210,2,249,22,63,23,211,1,248,80,
25,80,159,34,54,35,83,158,34,16,2,89,162,34,36,47,68,119,105,116,104, 159,52,54,35,23,213,1,87,94,23,210,1,249,22,63,23,211,1,247,22,136,
45,100,105,114,223,0,33,26,80,159,34,53,35,83,158,34,16,2,248,22,152, 13,252,22,157,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,91,
7,69,115,111,45,115,117,102,102,105,120,80,159,34,34,35,83,158,34,16,2, 159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158,37,20,96,96,2,
89,162,34,36,58,2,3,223,0,33,35,80,159,34,35,35,83,158,34,16,2, 20,89,162,42,35,49,9,224,2,0,33,42,89,162,42,37,47,9,223,1,33,
32,0,89,162,8,36,35,40,2,7,222,192,80,159,34,40,35,83,158,34,16, 43,89,162,42,38,8,30,9,225,2,3,0,33,49,208,87,95,248,22,130,4,
2,248,22,120,2,18,80,159,34,41,35,83,158,34,16,2,249,22,120,2,18, 248,80,158,36,48,247,22,147,11,248,22,184,5,80,158,35,35,248,22,133,12,
65,101,113,117,97,108,80,159,34,42,35,83,158,34,16,2,247,22,59,80,159, 80,159,35,40,35,159,34,20,103,159,34,16,1,20,24,65,98,101,103,105,110,
34,43,35,83,158,34,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111, 16,0,83,158,40,20,100,137,66,35,37,98,111,111,116,2,1,11,10,10,36,
97,100,105,110,103,80,159,34,44,35,83,158,34,16,2,11,80,158,34,45,83, 80,158,34,34,20,103,159,38,16,19,30,2,1,2,2,193,30,2,1,2,3,
158,34,16,2,11,80,158,34,46,83,158,34,16,2,32,0,89,162,34,36,43, 193,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,10,30,2,5,
2,14,222,33,41,80,159,34,47,35,83,158,34,16,2,89,162,8,36,35,43, 75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7,30,2,6,1,
2,15,223,0,33,50,80,159,34,48,35,83,158,34,16,2,89,162,34,34,42, 20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,
2,16,223,0,33,51,80,159,34,52,35,95,29,94,2,4,68,35,37,107,101, 4,30,2,6,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,
114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2, 114,105,122,97,116,105,111,110,3,30,2,1,2,7,193,30,2,1,2,8,193,
5,9,9,0}; 30,2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,11,193,30,2,1,
EVAL_ONE_SIZED_STR((char *)expr, 3573); 2,12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,2,1,2,15,193,
30,2,5,69,45,102,105,110,100,45,99,111,108,0,30,2,5,76,110,111,114,
109,97,108,45,99,97,115,101,45,112,97,116,104,6,30,2,5,79,112,97,116,
104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,9,30,2,1,2,
16,193,16,0,11,11,16,11,2,10,2,11,2,8,2,9,2,12,2,13,2,
3,2,7,2,2,2,15,2,14,45,11,37,34,11,16,1,9,16,1,2,16,
16,1,11,16,1,2,16,35,35,35,11,11,16,0,16,0,16,0,34,34,11,
11,11,16,0,16,0,16,0,34,34,16,0,16,16,83,158,34,16,2,89,162,
42,35,43,9,223,0,33,23,80,159,34,56,35,83,158,34,16,2,89,162,8,
44,35,43,9,223,0,33,24,80,159,34,55,35,83,158,34,16,2,89,162,42,
35,47,67,103,101,116,45,100,105,114,223,0,33,25,80,159,34,54,35,83,158,
34,16,2,89,162,42,36,47,68,119,105,116,104,45,100,105,114,223,0,33,26,
80,159,34,53,35,83,158,34,16,2,248,22,152,7,69,115,111,45,115,117,102,
102,105,120,80,159,34,34,35,83,158,34,16,2,89,162,42,36,58,2,3,223,
0,33,35,80,159,34,35,35,83,158,34,16,2,32,0,89,162,8,44,35,40,
2,7,222,192,80,159,34,40,35,83,158,34,16,2,248,22,120,2,18,80,159,
34,41,35,83,158,34,16,2,249,22,120,2,18,65,101,113,117,97,108,80,159,
34,42,35,83,158,34,16,2,247,22,59,80,159,34,43,35,83,158,34,16,2,
248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,34,
44,35,83,158,34,16,2,11,80,158,34,45,83,158,34,16,2,11,80,158,34,
46,83,158,34,16,2,32,0,89,162,42,36,43,2,14,222,33,41,80,159,34,
47,35,83,158,34,16,2,89,162,8,44,35,43,2,15,223,0,33,50,80,159,
34,48,35,83,158,34,16,2,89,162,42,34,42,2,16,223,0,33,51,80,159,
34,52,35,95,29,94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,
4,69,35,37,109,105,110,45,115,116,120,11,2,5,9,9,9,34,0};
EVAL_ONE_SIZED_STR((char *)expr, 4113);
} }

View File

@ -79,10 +79,12 @@ static Scheme_Object *namespace_module_registry(int, Scheme_Object *[]);
static Scheme_Object *variable_module_path(int, Scheme_Object *[]); static Scheme_Object *variable_module_path(int, Scheme_Object *[]);
static Scheme_Object *variable_namespace(int, Scheme_Object *[]); static Scheme_Object *variable_namespace(int, Scheme_Object *[]);
static Scheme_Object *variable_top_level_namespace(int, Scheme_Object *[]); static Scheme_Object *variable_top_level_namespace(int, Scheme_Object *[]);
static Scheme_Object *variable_phase(int, Scheme_Object *[]);
static Scheme_Object *now_transforming(int argc, Scheme_Object *argv[]); static Scheme_Object *now_transforming(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_exp_time_value(int argc, Scheme_Object *argv[]); static Scheme_Object *local_exp_time_value(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_exp_time_name(int argc, Scheme_Object *argv[]); static Scheme_Object *local_exp_time_name(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_context(int argc, Scheme_Object *argv[]); static Scheme_Object *local_context(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_phase_level(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_make_intdef_context(int argc, Scheme_Object *argv[]); static Scheme_Object *local_make_intdef_context(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_introduce(int argc, Scheme_Object *argv[]); static Scheme_Object *local_introduce(int argc, Scheme_Object *argv[]);
static Scheme_Object *local_module_introduce(int argc, Scheme_Object *argv[]); static Scheme_Object *local_module_introduce(int argc, Scheme_Object *argv[]);
@ -530,7 +532,11 @@ static void make_init_env(void)
"variable-reference->top-level-namespace", "variable-reference->top-level-namespace",
1, 1), 1, 1),
env); env);
scheme_add_global_constant("variable-reference->phase",
scheme_make_prim_w_arity(variable_phase,
"variable-reference->phase",
1, 1),
env);
scheme_add_global_constant("syntax-transforming?", scheme_add_global_constant("syntax-transforming?",
scheme_make_prim_w_arity(now_transforming, scheme_make_prim_w_arity(now_transforming,
@ -552,6 +558,11 @@ static void make_init_env(void)
"syntax-local-context", "syntax-local-context",
0, 0), 0, 0),
env); env);
scheme_add_global_constant("syntax-local-phase-level",
scheme_make_prim_w_arity(local_phase_level,
"syntax-local-phase-level",
0, 0),
env);
scheme_add_global_constant("syntax-local-make-definition-context", scheme_add_global_constant("syntax-local-make-definition-context",
scheme_make_prim_w_arity(local_make_intdef_context, scheme_make_prim_w_arity(local_make_intdef_context,
"syntax-local-make-definition-context", "syntax-local-make-definition-context",
@ -591,7 +602,7 @@ static void make_init_env(void)
scheme_add_global_constant("syntax-local-module-required-identifiers", scheme_add_global_constant("syntax-local-module-required-identifiers",
scheme_make_prim_w_arity(local_module_imports, scheme_make_prim_w_arity(local_module_imports,
"syntax-local-module-required-identifiers", "syntax-local-module-required-identifiers",
4, 4), 2, 2),
env); env);
scheme_add_global_constant("syntax-local-transforming-module-provides?", scheme_add_global_constant("syntax-local-transforming-module-provides?",
scheme_make_prim_w_arity(local_module_expanding_provides, scheme_make_prim_w_arity(local_module_expanding_provides,
@ -709,20 +720,14 @@ static void skip_certain_things(Scheme_Object *o, Scheme_Close_Custodian_Client
/* namespace constructors */ /* namespace constructors */
/*========================================================================*/ /*========================================================================*/
static void create_env_marked_names(Scheme_Env *e) void scheme_prepare_env_renames(Scheme_Env *env, int kind)
{ {
Scheme_Hash_Table *mn; if (!env->rename_set) {
Scheme_Object *rn; Scheme_Object *rns;
/* Set up a rename table, in case an identifier with a let-binding rns = scheme_make_module_rename_set(kind, NULL);
renaming ends up in a definition position: */ env->rename_set = rns;
}
mn = scheme_make_hash_table(SCHEME_hash_ptr);
scheme_hash_set(mn, scheme_false, scheme_null);
e->marked_names = mn;
rn = scheme_make_module_rename(e->phase, mzMOD_RENAME_TOPLEVEL, mn);
e->rename = rn;
} }
Scheme_Env *scheme_make_empty_env(void) Scheme_Env *scheme_make_empty_env(void)
@ -730,7 +735,6 @@ Scheme_Env *scheme_make_empty_env(void)
Scheme_Env *e; Scheme_Env *e;
e = make_env(NULL, 0, 7); e = make_env(NULL, 0, 7);
create_env_marked_names(e);
return e; return e;
} }
@ -843,8 +847,11 @@ void scheme_prepare_exp_env(Scheme_Env *env)
env->exp_env = eenv; env->exp_env = eenv;
eenv->template_env = env; eenv->template_env = env;
if (!env->module && !env->phase) scheme_prepare_env_renames(env, mzMOD_RENAME_TOPLEVEL);
create_env_marked_names(eenv); eenv->rename_set = env->rename_set;
if (env->disallow_unbound)
eenv->disallow_unbound = 1;
} }
} }
@ -875,26 +882,19 @@ void scheme_prepare_template_env(Scheme_Env *env)
} }
eenv->modchain = modchain; eenv->modchain = modchain;
scheme_prepare_env_renames(env, mzMOD_RENAME_TOPLEVEL);
eenv->rename_set = env->rename_set;
env->template_env = eenv; env->template_env = eenv;
eenv->exp_env = env; eenv->exp_env = env;
if (env->disallow_unbound)
eenv->disallow_unbound = 1;
} }
} }
void scheme_prepare_label_env(Scheme_Env *env) void scheme_prepare_label_env(Scheme_Env *env)
{ {
if (!env->label_env) {
/* Used only for its marked_names table */
Scheme_Env *lenv;
lenv = make_env(NULL, 1, 7);
lenv->phase = MZ_LABEL_PHASE;
lenv->mod_phase = MZ_LABEL_PHASE;
env->label_env = lenv;
lenv->module = env->module;
lenv->module_registry = env->module_registry;
lenv->export_registry = env->export_registry;
lenv->insp = env->insp;
lenv->modchain = env->modchain;
}
} }
Scheme_Env *scheme_clone_module_env(Scheme_Env *menv, Scheme_Env *ns, Scheme_Object *modchain) Scheme_Env *scheme_clone_module_env(Scheme_Env *menv, Scheme_Env *ns, Scheme_Object *modchain)
@ -1115,22 +1115,31 @@ scheme_add_global_keyword_symbol(Scheme_Object *name, Scheme_Object *obj,
void scheme_shadow(Scheme_Env *env, Scheme_Object *n, int stxtoo) void scheme_shadow(Scheme_Env *env, Scheme_Object *n, int stxtoo)
{ {
if (env->rename) { Scheme_Object *rn;
scheme_remove_module_rename(env->rename, n);
if (env->module) { if (env->rename_set) {
scheme_extend_module_rename(env->rename, rn = scheme_get_module_rename_from_set(env->rename_set,
env->module->self_modidx, scheme_make_integer(env->phase),
n, n, 0);
env->module->self_modidx, if (rn) {
n, scheme_remove_module_rename(rn, n);
env->mod_phase, if (env->module) {
-1, scheme_extend_module_rename(rn,
0); env->module->self_modidx,
n, n,
env->module->self_modidx,
n,
env->mod_phase,
NULL,
NULL,
0);
}
} }
} } else
rn = NULL;
if (stxtoo) { if (stxtoo) {
if (!env->module || env->rename) { if (!env->module || rn) {
if (!env->shadowed_syntax) { if (!env->shadowed_syntax) {
Scheme_Hash_Table *ht; Scheme_Hash_Table *ht;
ht = scheme_make_hash_table(SCHEME_hash_ptr); ht = scheme_make_hash_table(SCHEME_hash_ptr);
@ -1732,7 +1741,7 @@ Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modid
return val; return val;
} }
Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Object *bdg, int is_def) Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Object *bdg, int is_def, Scheme_Object *phase)
/* The `env' argument can actually be a hash table. */ /* The `env' argument can actually be a hash table. */
{ {
Scheme_Object *marks = NULL, *sym, *map, *l, *a, *amarks, *m, *best_match, *cm, *abdg; Scheme_Object *marks = NULL, *sym, *map, *l, *a, *amarks, *m, *best_match, *cm, *abdg;
@ -1745,9 +1754,11 @@ Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Objec
marked_names = (Scheme_Hash_Table *)env; marked_names = (Scheme_Hash_Table *)env;
else { else {
/* If there's no table and we're not defining, bail out fast */ /* If there's no table and we're not defining, bail out fast */
if (!is_def && !env->marked_names) if (!is_def && !env->rename_set)
return sym; return sym;
marked_names = env->marked_names; marked_names = scheme_get_module_rename_marked_names(env->rename_set,
phase ? phase : scheme_make_integer(env->phase),
0);
} }
if (is_def) { if (is_def) {
@ -1762,8 +1773,10 @@ Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Objec
} }
if (!marked_names) { if (!marked_names) {
marked_names = scheme_make_hash_table(SCHEME_hash_ptr); scheme_prepare_env_renames(env, mzMOD_RENAME_TOPLEVEL);
env->marked_names = marked_names; marked_names = scheme_get_module_rename_marked_names(env->rename_set,
phase ? phase : scheme_make_integer(env->phase),
1);
} }
map = scheme_hash_get(marked_names, sym); map = scheme_hash_get(marked_names, sym);
@ -1865,7 +1878,7 @@ Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Objec
existing rename. */ existing rename. */
if (!SCHEME_HASHTP((Scheme_Object *)env) && env->module && (is_def != 2)) { if (!SCHEME_HASHTP((Scheme_Object *)env) && env->module && (is_def != 2)) {
Scheme_Object *mod, *nm = id; Scheme_Object *mod, *nm = id;
mod = scheme_stx_module_name(&nm, env->phase, NULL, NULL, NULL, NULL); mod = scheme_stx_module_name(&nm, scheme_make_integer(env->phase), NULL, NULL, NULL, NULL, NULL);
if (mod /* must refer to env->module, otherwise there would if (mod /* must refer to env->module, otherwise there would
have been an error before getting here */ have been an error before getting here */
&& NOT_SAME_OBJ(nm, sym)) && NOT_SAME_OBJ(nm, sym))
@ -2331,9 +2344,10 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
Scheme_Object **_lexical_binding_id) Scheme_Object **_lexical_binding_id)
{ {
Scheme_Comp_Env *frame; Scheme_Comp_Env *frame;
int j = 0, p = 0, modpos, skip_stops = 0, mod_defn_phase, module_self_reference = 0; int j = 0, p = 0, modpos, skip_stops = 0, module_self_reference = 0;
Scheme_Bucket *b; Scheme_Bucket *b;
Scheme_Object *val, *modidx, *modname, *src_find_id, *find_global_id; Scheme_Object *val, *modidx, *modname, *src_find_id, *find_global_id, *mod_defn_phase;
Scheme_Object *find_id_sym = NULL;
Scheme_Env *genv; Scheme_Env *genv;
long phase; long phase;
@ -2372,16 +2386,20 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
uid = scheme_env_frame_uid(frame); uid = scheme_env_frame_uid(frame);
if (!find_id_sym
&& (frame->flags & SCHEME_CAPTURE_WITHOUT_RENAME))
find_id_sym = scheme_stx_get_module_eq_sym(find_id, scheme_make_integer(phase));
for (i = frame->num_bindings; i--; ) { for (i = frame->num_bindings; i--; ) {
if (frame->values[i]) { if (frame->values[i]) {
if (frame->uids) if (frame->uids)
uid = frame->uids[i]; uid = frame->uids[i];
if (SAME_OBJ(SCHEME_STX_VAL(find_id), SCHEME_STX_VAL(frame->values[i])) if (SAME_OBJ(SCHEME_STX_VAL(find_id), SCHEME_STX_VAL(frame->values[i]))
&& (scheme_stx_env_bound_eq(find_id, frame->values[i], uid, phase) && (scheme_stx_env_bound_eq(find_id, frame->values[i], uid, scheme_make_integer(phase))
|| ((frame->flags & SCHEME_CAPTURE_WITHOUT_RENAME) || ((frame->flags & SCHEME_CAPTURE_WITHOUT_RENAME)
&& scheme_stx_module_eq(find_id, frame->values[i], phase)) && scheme_stx_module_eq2(find_id, frame->values[i], scheme_make_integer(phase), find_id_sym))
|| ((frame->flags & SCHEME_CAPTURE_LIFTED) || ((frame->flags & SCHEME_CAPTURE_LIFTED)
&& scheme_stx_bound_eq(find_id, frame->values[i], phase)))) { && scheme_stx_bound_eq(find_id, frame->values[i], scheme_make_integer(phase))))) {
/* Found a lambda-, let-, etc. bound variable: */ /* Found a lambda-, let-, etc. bound variable: */
/* First, check certs (don't bind with fewer certs): */ /* First, check certs (don't bind with fewer certs): */
if (!(flags & SCHEME_NO_CERT_CHECKS) if (!(flags & SCHEME_NO_CERT_CHECKS)
@ -2414,12 +2432,14 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
for (i = COMPILE_DATA(frame)->num_const; i--; ) { for (i = COMPILE_DATA(frame)->num_const; i--; ) {
int issame; int issame;
if (frame->flags & SCHEME_CAPTURE_WITHOUT_RENAME) if (frame->flags & SCHEME_CAPTURE_WITHOUT_RENAME)
issame = scheme_stx_module_eq(find_id, COMPILE_DATA(frame)->const_names[i], phase); issame = scheme_stx_module_eq2(find_id, COMPILE_DATA(frame)->const_names[i],
else { scheme_make_integer(phase), find_id_sym);
else {
if (COMPILE_DATA(frame)->const_uids) uid = COMPILE_DATA(frame)->const_uids[i]; if (COMPILE_DATA(frame)->const_uids) uid = COMPILE_DATA(frame)->const_uids[i];
issame = (SAME_OBJ(SCHEME_STX_VAL(find_id), issame = (SAME_OBJ(SCHEME_STX_VAL(find_id),
SCHEME_STX_VAL(COMPILE_DATA(frame)->const_names[i])) SCHEME_STX_VAL(COMPILE_DATA(frame)->const_names[i]))
&& scheme_stx_env_bound_eq(find_id, COMPILE_DATA(frame)->const_names[i], uid, phase)); && scheme_stx_env_bound_eq(find_id, COMPILE_DATA(frame)->const_names[i], uid,
scheme_make_integer(phase)));
} }
if (issame) { if (issame) {
@ -2466,7 +2486,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
} }
src_find_id = find_id; src_find_id = find_id;
modidx = scheme_stx_module_name(&find_id, phase, NULL, NULL, &mod_defn_phase, NULL); modidx = scheme_stx_module_name(&find_id, scheme_make_integer(phase), NULL, NULL, &mod_defn_phase, NULL, NULL);
/* Used out of context? */ /* Used out of context? */
if (SAME_OBJ(modidx, scheme_undefined)) { if (SAME_OBJ(modidx, scheme_undefined)) {
@ -2488,7 +2508,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
and references to top-level definitions: */ and references to top-level definitions: */
module_self_reference = 1; module_self_reference = 1;
} else { } else {
genv = scheme_module_access(modname, env->genv, mod_defn_phase); genv = scheme_module_access(modname, env->genv, SCHEME_INT_VAL(mod_defn_phase));
if (!genv) { if (!genv) {
if (env->genv->phase) { if (env->genv->phase) {
@ -2496,14 +2516,14 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
execution. Force all laziness at the prior level execution. Force all laziness at the prior level
and try again. */ and try again. */
scheme_module_force_lazy(env->genv, 1); scheme_module_force_lazy(env->genv, 1);
genv = scheme_module_access(modname, env->genv, mod_defn_phase); genv = scheme_module_access(modname, env->genv, SCHEME_INT_VAL(mod_defn_phase));
} }
if (!genv) { if (!genv) {
scheme_wrong_syntax("require", NULL, src_find_id, scheme_wrong_syntax("require", NULL, src_find_id,
"namespace mismatch; reference (phase %d) to a module" "namespace mismatch; reference (phase %d) to a module"
" %D that is not available (phase %d)", " %D that is not available (phase %d)",
env->genv->phase, modname, mod_defn_phase); env->genv->phase, modname, SCHEME_INT_VAL(mod_defn_phase));
return NULL; return NULL;
} }
} }
@ -2512,7 +2532,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
genv = env->genv; genv = env->genv;
modname = NULL; modname = NULL;
if (genv->module && !genv->rename) { if (genv->module && genv->disallow_unbound) {
/* Free variable. Maybe don't continue. */ /* Free variable. Maybe don't continue. */
if (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) { if (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) {
scheme_wrong_syntax(((flags & SCHEME_SETTING) scheme_wrong_syntax(((flags & SCHEME_SETTING)
@ -2530,7 +2550,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
*_menv = genv; *_menv = genv;
if (!modname && SCHEME_STXP(find_id)) if (!modname && SCHEME_STXP(find_id))
find_global_id = scheme_tl_id_sym(env->genv, find_id, NULL, 0); find_global_id = scheme_tl_id_sym(env->genv, find_id, NULL, 0, NULL);
else else
find_global_id = find_id; find_global_id = find_id;
@ -2576,7 +2596,8 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
return NULL; return NULL;
} }
if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) && (genv->module && !genv->rename)) { if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING))
&& (genv->module && genv->disallow_unbound)) {
/* Check for set! of unbound variable: */ /* Check for set! of unbound variable: */
if (!scheme_lookup_in_table(genv->toplevel, (const char *)find_global_id)) { if (!scheme_lookup_in_table(genv->toplevel, (const char *)find_global_id)) {
scheme_wrong_syntax(((flags & SCHEME_SETTING) scheme_wrong_syntax(((flags & SCHEME_SETTING)
@ -2610,7 +2631,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
/* Create a module variable reference, so that idx is preserved: */ /* Create a module variable reference, so that idx is preserved: */
return scheme_hash_module_variable(env->genv, modidx, find_id, return scheme_hash_module_variable(env->genv, modidx, find_id,
genv->module->insp, genv->module->insp,
modpos, mod_defn_phase); modpos, SCHEME_INT_VAL(mod_defn_phase));
} }
if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) && genv->module) { if (!modname && (flags & (SCHEME_SETTING | SCHEME_REFERENCING)) && genv->module) {
@ -2693,7 +2714,7 @@ void scheme_dup_symbol_check(DupCheckRecord *r, const char *where,
if (r->count <= 5) { if (r->count <= 5) {
for (i = 0; i < r->count; i++) { for (i = 0; i < r->count; i++) {
if (scheme_stx_bound_eq(symbol, r->syms[i], r->phase)) if (scheme_stx_bound_eq(symbol, r->syms[i], scheme_make_integer(r->phase)))
scheme_wrong_syntax(where, symbol, form, scheme_wrong_syntax(where, symbol, form,
"duplicate %s name", what); "duplicate %s name", what);
} }
@ -2729,7 +2750,7 @@ int scheme_check_context(Scheme_Env *env, Scheme_Object *name, Scheme_Object *ok
if (mod && SCHEME_TRUEP(mod) && NOT_SAME_OBJ(ok_modidx, mod)) { if (mod && SCHEME_TRUEP(mod) && NOT_SAME_OBJ(ok_modidx, mod)) {
return 1; return 1;
} else { } else {
mod = scheme_stx_module_name(&id, env->phase, NULL, NULL, NULL, NULL); mod = scheme_stx_module_name(&id, scheme_make_integer(env->phase), NULL, NULL, NULL, NULL, NULL);
if (SAME_OBJ(mod, scheme_undefined)) if (SAME_OBJ(mod, scheme_undefined))
return 1; return 1;
} }
@ -3614,10 +3635,8 @@ namespace_identifier(int argc, Scheme_Object *argv[])
obj = scheme_datum_to_syntax(obj, scheme_false, scheme_false, 1, 0); obj = scheme_datum_to_syntax(obj, scheme_false, scheme_false, 1, 0);
/* Renamings: */ /* Renamings: */
if (genv->rename) if (genv->rename_set)
obj = scheme_add_rename(obj, genv->rename); obj = scheme_add_rename(obj, genv->rename_set);
if (genv->exp_env && genv->exp_env->rename)
obj = scheme_add_rename(obj, genv->exp_env->rename);
return obj; return obj;
} }
@ -3648,7 +3667,9 @@ namespace_variable_value(int argc, Scheme_Object *argv[])
else { else {
Scheme_Full_Comp_Env inlined_e; Scheme_Full_Comp_Env inlined_e;
id = scheme_make_renamed_stx(argv[0], genv->rename); scheme_prepare_env_renames(genv, mzMOD_RENAME_TOPLEVEL);
id = scheme_make_renamed_stx(argv[0], genv->rename_set);
inlined_e.base.num_bindings = 0; inlined_e.base.num_bindings = 0;
inlined_e.base.next = NULL; inlined_e.base.next = NULL;
@ -3774,8 +3795,8 @@ namespace_mapped_symbols(int argc, Scheme_Object *argv[])
} }
} }
if (env->rename) if (env->rename_set)
scheme_list_module_rename(env->rename, mapped); scheme_list_module_rename(env->rename_set, mapped);
l = scheme_null; l = scheme_null;
for (i = mapped->size; i--; ) { for (i = mapped->size; i--; ) {
@ -3816,7 +3837,9 @@ static Scheme_Object *do_variable_namespace(const char *who, int tl, int argc, S
0, argc, argv); 0, argc, argv);
ph = env->phase; ph = env->phase;
if (tl) { if (tl == 2) {
return scheme_make_integer(ph);
} else if (tl) {
while (ph--) { while (ph--) {
env = env->template_env; env = env->template_env;
} }
@ -3846,6 +3869,11 @@ static Scheme_Object *variable_top_level_namespace(int argc, Scheme_Object *argv
return do_variable_namespace("variable-reference->top-level-namespace", 1, argc, argv); return do_variable_namespace("variable-reference->top-level-namespace", 1, argc, argv);
} }
static Scheme_Object *variable_phase(int argc, Scheme_Object *argv[])
{
return do_variable_namespace("variable-reference->phase", 2, argc, argv);
}
static Scheme_Object *variable_module_path(int argc, Scheme_Object *argv[]) static Scheme_Object *variable_module_path(int argc, Scheme_Object *argv[])
{ {
Scheme_Object *v; Scheme_Object *v;
@ -4016,6 +4044,19 @@ local_context(int argc, Scheme_Object *argv[])
return scheme_intern_symbol("expression"); return scheme_intern_symbol("expression");
} }
static Scheme_Object *
local_phase_level(int argc, Scheme_Object *argv[])
{
Scheme_Thread *p = scheme_current_thread;
int phase;
phase = (p->current_local_env
? p->current_local_env->genv->phase
: 0);
return scheme_make_integer(phase);
}
static Scheme_Object * static Scheme_Object *
local_make_intdef_context(int argc, Scheme_Object *argv[]) local_make_intdef_context(int argc, Scheme_Object *argv[])
{ {
@ -4079,22 +4120,9 @@ local_module_introduce(int argc, Scheme_Object *argv[])
v = scheme_stx_to_rename(env->genv->module->rn_stx); v = scheme_stx_to_rename(env->genv->module->rn_stx);
s = scheme_add_rename(s, v); s = scheme_add_rename(s, v);
} }
if (env->genv->module->et_rn_stx && !SAME_OBJ(scheme_true, env->genv->module->et_rn_stx)) {
v = scheme_stx_to_rename(env->genv->module->et_rn_stx);
s = scheme_add_rename(s, v);
}
if (env->genv->module->dt_rn_stx && !SAME_OBJ(scheme_true, env->genv->module->dt_rn_stx)) {
v = scheme_stx_to_rename(env->genv->module->dt_rn_stx);
s = scheme_add_rename(s, v);
}
} else { } else {
if (env->genv->rename) if (env->genv->rename_set)
s = scheme_add_rename(s, env->genv->rename); s = scheme_add_rename(s, env->genv->rename_set);
if (env->genv->et_rename)
s = scheme_add_rename(s, env->genv->et_rename);
if (env->genv->dt_rename) {
s = scheme_add_rename(s, env->genv->dt_rename);
}
} }
} }
@ -4326,12 +4354,16 @@ local_module_imports(int argc, Scheme_Object *argv[])
if (SCHEME_TRUEP(argv[0]) && !scheme_is_module_path(argv[0])) if (SCHEME_TRUEP(argv[0]) && !scheme_is_module_path(argv[0]))
scheme_wrong_type("syntax-local-module-required-identifiers", "module-path or #f", 0, argc, argv); scheme_wrong_type("syntax-local-module-required-identifiers", "module-path or #f", 0, argc, argv);
if (!SCHEME_FALSEP(argv[1])
&& !SAME_OBJ(scheme_true, argv[1])
&& !SCHEME_INTP(argv[1])
&& !SCHEME_BIGNUMP(argv[1]))
scheme_wrong_type("syntax-local-module-required-identifiers", "exact integer, #f, or #t", 1, argc, argv);
return scheme_module_imported_list(scheme_current_thread->current_local_env->genv, return scheme_module_imported_list(scheme_current_thread->current_local_env->genv,
scheme_current_thread->current_local_bindings, scheme_current_thread->current_local_bindings,
argv[0], argv[0],
SCHEME_TRUEP(argv[1]), argv[1]);
SCHEME_TRUEP(argv[2]),
SCHEME_TRUEP(argv[3]));
} }
static Scheme_Object * static Scheme_Object *

View File

@ -1553,7 +1553,7 @@ static void do_wrong_syntax(const char *where,
if (scheme_current_thread->current_local_env) if (scheme_current_thread->current_local_env)
phase = scheme_current_thread->current_local_env->genv->phase; phase = scheme_current_thread->current_local_env->genv->phase;
else phase = 0; else phase = 0;
scheme_stx_module_name(&first, phase, &mod, &nomwho, NULL, NULL); scheme_stx_module_name(&first, scheme_make_integer(phase), &mod, &nomwho, NULL, NULL, NULL);
} }
} }
} else { } else {

View File

@ -4606,13 +4606,13 @@ static Scheme_Object *call_compile_handler(Scheme_Object *form, int immediate_ev
static Scheme_Object *add_renames_unless_module(Scheme_Object *form, Scheme_Env *genv) static Scheme_Object *add_renames_unless_module(Scheme_Object *form, Scheme_Env *genv)
{ {
if (genv->rename) { if (genv->rename_set) {
if (SCHEME_STX_PAIRP(form)) { if (SCHEME_STX_PAIRP(form)) {
Scheme_Object *a, *d; Scheme_Object *a, *d;
a = SCHEME_STX_CAR(form); a = SCHEME_STX_CAR(form);
if (SCHEME_STX_SYMBOLP(a)) { if (SCHEME_STX_SYMBOLP(a)) {
a = scheme_add_rename(a, genv->rename); a = scheme_add_rename(a, genv->rename_set);
if (scheme_stx_module_eq(a, scheme_module_stx, 0)) { if (scheme_stx_module_eq(a, scheme_module_stx, 0)) {
/* Don't add renames to the whole module; let the /* Don't add renames to the whole module; let the
module's language take over. */ module's language take over. */
@ -4625,14 +4625,8 @@ static Scheme_Object *add_renames_unless_module(Scheme_Object *form, Scheme_Env
} }
} }
if (genv->rename) if (genv->rename_set)
form = scheme_add_rename(form, genv->rename); form = scheme_add_rename(form, genv->rename_set);
if (genv->exp_env && genv->exp_env->rename)
form = scheme_add_rename(form, genv->exp_env->rename);
if (genv->template_env && genv->template_env->rename)
form = scheme_add_rename(form, genv->template_env->rename);
if (genv->dt_rename)
form = scheme_add_rename(form, genv->dt_rename);
return form; return form;
} }
@ -5343,7 +5337,7 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
/* If form is a marked name, then force #%top binding. /* If form is a marked name, then force #%top binding.
This is so temporaries can be used as defined ids. */ This is so temporaries can be used as defined ids. */
Scheme_Object *nm; Scheme_Object *nm;
nm = scheme_tl_id_sym(env->genv, form, NULL, 0); nm = scheme_tl_id_sym(env->genv, form, NULL, 0, NULL);
if (!SAME_OBJ(nm, SCHEME_STX_VAL(form))) { if (!SAME_OBJ(nm, SCHEME_STX_VAL(form))) {
stx = scheme_datum_to_syntax(top_symbol, scheme_false, scheme_sys_wraps(env), 0, 0); stx = scheme_datum_to_syntax(top_symbol, scheme_false, scheme_sys_wraps(env), 0, 0);
@ -5738,11 +5732,11 @@ static Scheme_Object *check_top(const char *when, Scheme_Object *form, Scheme_Co
Scheme_Object *modidx, *symbol = c, *tl_id; Scheme_Object *modidx, *symbol = c, *tl_id;
int bad; int bad;
tl_id = scheme_tl_id_sym(env->genv, symbol, NULL, 0); tl_id = scheme_tl_id_sym(env->genv, symbol, NULL, 0, NULL);
if (NOT_SAME_OBJ(tl_id, SCHEME_STX_SYM(symbol))) { if (NOT_SAME_OBJ(tl_id, SCHEME_STX_SYM(symbol))) {
/* Since the module has a rename for this id, it's certainly defined. */ /* Since the module has a rename for this id, it's certainly defined. */
} else { } else {
modidx = scheme_stx_module_name(&symbol, env->genv->phase, NULL, NULL, NULL, NULL); modidx = scheme_stx_module_name(&symbol, scheme_make_integer(env->genv->phase), NULL, NULL, NULL, NULL, NULL);
if (modidx) { if (modidx) {
/* If it's an access path, resolve it: */ /* If it's an access path, resolve it: */
if (env->genv->module if (env->genv->module
@ -5753,7 +5747,7 @@ static Scheme_Object *check_top(const char *when, Scheme_Object *form, Scheme_Co
} else } else
bad = 1; bad = 1;
if (!env->genv->rename) { if (env->genv->disallow_unbound) {
if (bad || !scheme_lookup_in_table(env->genv->toplevel, (const char *)SCHEME_STX_SYM(c))) { if (bad || !scheme_lookup_in_table(env->genv->toplevel, (const char *)SCHEME_STX_SYM(c))) {
scheme_wrong_syntax(when, NULL, c, scheme_wrong_syntax(when, NULL, c,
(env->genv->phase (env->genv->phase
@ -5774,7 +5768,7 @@ top_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec,
c = check_top(scheme_compile_stx_string, form, env); c = check_top(scheme_compile_stx_string, form, env);
c = scheme_tl_id_sym(env->genv, c, NULL, 0); c = scheme_tl_id_sym(env->genv, c, NULL, 0, NULL);
if (env->genv->module && !rec[drec].resolve_module_ids) { if (env->genv->module && !rec[drec].resolve_module_ids) {
/* Self-reference in a module; need to remember the modidx. Don't /* Self-reference in a module; need to remember the modidx. Don't
@ -8779,7 +8773,7 @@ scheme_make_lifted_defn(Scheme_Object *sys_wraps, Scheme_Object **_id, Scheme_Ob
Scheme_Object *l; Scheme_Object *l;
/* Registers marked id: */ /* Registers marked id: */
scheme_tl_id_sym(env->genv, *_id, scheme_false, 2); scheme_tl_id_sym(env->genv, *_id, scheme_false, 2, NULL);
l = icons(scheme_datum_to_syntax(define_values_symbol, scheme_false, sys_wraps, 0, 0), l = icons(scheme_datum_to_syntax(define_values_symbol, scheme_false, sys_wraps, 0, 0),
icons(scheme_make_pair(*_id, scheme_null), icons(scheme_make_pair(*_id, scheme_null),

View File

@ -2570,73 +2570,73 @@ scheme_apply_macro(Scheme_Object *name, Scheme_Env *menv,
Scheme_Object *certs; Scheme_Object *certs;
certs = rec[drec].certs; certs = rec[drec].certs;
if (SAME_TYPE(SCHEME_TYPE(rator), scheme_id_macro_type)) { if (SAME_TYPE(SCHEME_TYPE(rator), scheme_id_macro_type)) {
Scheme_Object *mark; Scheme_Object *mark;
rator = SCHEME_PTR1_VAL(rator); rator = SCHEME_PTR1_VAL(rator);
/* rator is now an identifier */ /* rator is now an identifier */
/* and it's introduced by this expression: */ /* and it's introduced by this expression: */
mark = scheme_new_mark(); mark = scheme_new_mark();
rator = scheme_add_remove_mark(rator, mark); rator = scheme_add_remove_mark(rator, mark);
if (for_set) { if (for_set) {
Scheme_Object *tail, *setkw; Scheme_Object *tail, *setkw;
tail = SCHEME_STX_CDR(code); tail = SCHEME_STX_CDR(code);
setkw = SCHEME_STX_CAR(code); setkw = SCHEME_STX_CAR(code);
tail = SCHEME_STX_CDR(tail); tail = SCHEME_STX_CDR(tail);
code = scheme_make_pair(setkw, scheme_make_pair(rator, tail)); code = scheme_make_pair(setkw, scheme_make_pair(rator, tail));
code = scheme_datum_to_syntax(code, orig_code, orig_code, 0, 0); code = scheme_datum_to_syntax(code, orig_code, orig_code, 0, 0);
} else if (SCHEME_SYMBOLP(SCHEME_STX_VAL(code))) } else if (SCHEME_SYMBOLP(SCHEME_STX_VAL(code)))
code = rator; code = rator;
else { else {
code = SCHEME_STX_CDR(code); code = SCHEME_STX_CDR(code);
code = scheme_make_pair(rator, code); code = scheme_make_pair(rator, code);
code = scheme_datum_to_syntax(code, orig_code, scheme_sys_wraps(env), 0, 0); code = scheme_datum_to_syntax(code, orig_code, scheme_sys_wraps(env), 0, 0);
} }
code = cert_with_specials(code, mark, menv, orig_code, orig_code, env, env->genv->phase, 0, 0); code = cert_with_specials(code, mark, menv, orig_code, orig_code, env, env->genv->phase, 0, 0);
code = scheme_stx_track(code, orig_code, name); code = scheme_stx_track(code, orig_code, name);
return code; return code;
} else { } else {
Scheme_Object *mark, *rands_vec[1]; Scheme_Object *mark, *rands_vec[1];
certs = scheme_stx_extract_certs(code, certs); certs = scheme_stx_extract_certs(code, certs);
if (SAME_TYPE(SCHEME_TYPE(rator), scheme_set_macro_type)) if (SAME_TYPE(SCHEME_TYPE(rator), scheme_set_macro_type))
rator = SCHEME_PTR_VAL(rator); rator = SCHEME_PTR_VAL(rator);
mark = scheme_new_mark(); mark = scheme_new_mark();
code = scheme_add_remove_mark(code, mark); code = scheme_add_remove_mark(code, mark);
SCHEME_EXPAND_OBSERVE_MACRO_PRE_X(rec[drec].observer, code); SCHEME_EXPAND_OBSERVE_MACRO_PRE_X(rec[drec].observer, code);
scheme_on_next_top(env, mark, boundname, certs, scheme_on_next_top(env, mark, boundname, certs,
menv, menv ? menv->link_midx : env->genv->link_midx); menv, menv ? menv->link_midx : env->genv->link_midx);
rands_vec[0] = code; rands_vec[0] = code;
code = scheme_apply(rator, 1, rands_vec); code = scheme_apply(rator, 1, rands_vec);
SCHEME_EXPAND_OBSERVE_MACRO_POST_X(rec[drec].observer, code); SCHEME_EXPAND_OBSERVE_MACRO_POST_X(rec[drec].observer, code);
if (!SCHEME_STXP(code)) { if (!SCHEME_STXP(code)) {
scheme_raise_exn(MZEXN_FAIL_CONTRACT, scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"%S: return value from syntax expander was not syntax: %V", "%S: return value from syntax expander was not syntax: %V",
SCHEME_STX_SYM(name), SCHEME_STX_SYM(name),
code); code);
} }
code = scheme_add_remove_mark(code, mark); code = scheme_add_remove_mark(code, mark);
code = cert_with_specials(code, mark, menv, orig_code, orig_code, env, env->genv->phase, 0, 0); code = cert_with_specials(code, mark, menv, orig_code, orig_code, env, env->genv->phase, 0, 0);
code = scheme_stx_track(code, orig_code, name); code = scheme_stx_track(code, orig_code, name);
return code; return code;
} }
} }
/*========================================================================*/ /*========================================================================*/

View File

@ -166,6 +166,8 @@ static Scheme_Object *do_hash(Scheme_Hash_Table *table, Scheme_Object *key, int
_h2 = NULL; _h2 = NULL;
} else } else
_h2 = &h2; _h2 = &h2;
if ((long)table->make_hash_indices < 0x100)
*(long *)0x0 = 1; /* REMOVEME */
table->make_hash_indices((void *)key, (long *)&h, (long *)_h2); table->make_hash_indices((void *)key, (long *)&h, (long *)_h2);
h = h & mask; h = h & mask;
if (_h2) { if (_h2) {

File diff suppressed because it is too large Load Diff

View File

@ -2054,15 +2054,11 @@ static int namespace_val_MARK(void *p) {
gcMARK(e->export_registry); gcMARK(e->export_registry);
gcMARK(e->insp); gcMARK(e->insp);
gcMARK(e->rename); gcMARK(e->rename_set);
gcMARK(e->et_rename);
gcMARK(e->tt_rename);
gcMARK(e->dt_rename);
gcMARK(e->syntax); gcMARK(e->syntax);
gcMARK(e->exp_env); gcMARK(e->exp_env);
gcMARK(e->template_env); gcMARK(e->template_env);
gcMARK(e->label_env);
gcMARK(e->shadowed_syntax); gcMARK(e->shadowed_syntax);
@ -2071,13 +2067,13 @@ static int namespace_val_MARK(void *p) {
gcMARK(e->et_require_names); gcMARK(e->et_require_names);
gcMARK(e->tt_require_names); gcMARK(e->tt_require_names);
gcMARK(e->dt_require_names); gcMARK(e->dt_require_names);
gcMARK(e->other_require_names);
gcMARK(e->toplevel); gcMARK(e->toplevel);
gcMARK(e->modchain); gcMARK(e->modchain);
gcMARK(e->modvars); gcMARK(e->modvars);
gcMARK(e->marked_names);
return return
gcBYTES_TO_WORDS(sizeof(Scheme_Env)); gcBYTES_TO_WORDS(sizeof(Scheme_Env));
@ -2091,15 +2087,11 @@ static int namespace_val_FIXUP(void *p) {
gcFIXUP(e->export_registry); gcFIXUP(e->export_registry);
gcFIXUP(e->insp); gcFIXUP(e->insp);
gcFIXUP(e->rename); gcFIXUP(e->rename_set);
gcFIXUP(e->et_rename);
gcFIXUP(e->tt_rename);
gcFIXUP(e->dt_rename);
gcFIXUP(e->syntax); gcFIXUP(e->syntax);
gcFIXUP(e->exp_env); gcFIXUP(e->exp_env);
gcFIXUP(e->template_env); gcFIXUP(e->template_env);
gcFIXUP(e->label_env);
gcFIXUP(e->shadowed_syntax); gcFIXUP(e->shadowed_syntax);
@ -2108,13 +2100,13 @@ static int namespace_val_FIXUP(void *p) {
gcFIXUP(e->et_require_names); gcFIXUP(e->et_require_names);
gcFIXUP(e->tt_require_names); gcFIXUP(e->tt_require_names);
gcFIXUP(e->dt_require_names); gcFIXUP(e->dt_require_names);
gcFIXUP(e->other_require_names);
gcFIXUP(e->toplevel); gcFIXUP(e->toplevel);
gcFIXUP(e->modchain); gcFIXUP(e->modchain);
gcFIXUP(e->modvars); gcFIXUP(e->modvars);
gcFIXUP(e->marked_names);
return return
gcBYTES_TO_WORDS(sizeof(Scheme_Env)); gcBYTES_TO_WORDS(sizeof(Scheme_Env));
@ -2324,6 +2316,7 @@ static int module_val_MARK(void *p) {
gcMARK(m->requires); gcMARK(m->requires);
gcMARK(m->tt_requires); gcMARK(m->tt_requires);
gcMARK(m->dt_requires); gcMARK(m->dt_requires);
gcMARK(m->other_requires);
gcMARK(m->body); gcMARK(m->body);
gcMARK(m->et_body); gcMARK(m->et_body);
@ -2351,9 +2344,6 @@ static int module_val_MARK(void *p) {
gcMARK(m->dummy); gcMARK(m->dummy);
gcMARK(m->rn_stx); gcMARK(m->rn_stx);
gcMARK(m->et_rn_stx);
gcMARK(m->tt_rn_stx);
gcMARK(m->dt_rn_stx);
gcMARK(m->primitive); gcMARK(m->primitive);
return return
@ -2368,6 +2358,7 @@ static int module_val_FIXUP(void *p) {
gcFIXUP(m->requires); gcFIXUP(m->requires);
gcFIXUP(m->tt_requires); gcFIXUP(m->tt_requires);
gcFIXUP(m->dt_requires); gcFIXUP(m->dt_requires);
gcFIXUP(m->other_requires);
gcFIXUP(m->body); gcFIXUP(m->body);
gcFIXUP(m->et_body); gcFIXUP(m->et_body);
@ -2395,9 +2386,6 @@ static int module_val_FIXUP(void *p) {
gcFIXUP(m->dummy); gcFIXUP(m->dummy);
gcFIXUP(m->rn_stx); gcFIXUP(m->rn_stx);
gcFIXUP(m->et_rn_stx);
gcFIXUP(m->tt_rn_stx);
gcFIXUP(m->dt_rn_stx);
gcFIXUP(m->primitive); gcFIXUP(m->primitive);
return return
@ -2416,6 +2404,8 @@ static int module_phase_exports_val_SIZE(void *p) {
static int module_phase_exports_val_MARK(void *p) { static int module_phase_exports_val_MARK(void *p) {
Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p; Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p;
gcMARK(m->phase_index);
gcMARK(m->src_modidx); gcMARK(m->src_modidx);
gcMARK(m->provides); gcMARK(m->provides);
@ -2436,6 +2426,8 @@ static int module_phase_exports_val_MARK(void *p) {
static int module_phase_exports_val_FIXUP(void *p) { static int module_phase_exports_val_FIXUP(void *p) {
Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p; Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p;
gcFIXUP(m->phase_index);
gcFIXUP(m->src_modidx); gcFIXUP(m->src_modidx);
gcFIXUP(m->provides); gcFIXUP(m->provides);
@ -2468,6 +2460,7 @@ static int module_exports_val_MARK(void *p) {
gcMARK(m->rt); gcMARK(m->rt);
gcMARK(m->et); gcMARK(m->et);
gcMARK(m->dt); gcMARK(m->dt);
gcMARK(m->other_phases);
gcMARK(m->src_modidx); gcMARK(m->src_modidx);
return return
@ -2480,6 +2473,7 @@ static int module_exports_val_FIXUP(void *p) {
gcFIXUP(m->rt); gcFIXUP(m->rt);
gcFIXUP(m->et); gcFIXUP(m->et);
gcFIXUP(m->dt); gcFIXUP(m->dt);
gcFIXUP(m->other_phases);
gcFIXUP(m->src_modidx); gcFIXUP(m->src_modidx);
return return
@ -4842,6 +4836,7 @@ static int mark_rename_table_SIZE(void *p) {
static int mark_rename_table_MARK(void *p) { static int mark_rename_table_MARK(void *p) {
Module_Renames *rn = (Module_Renames *)p; Module_Renames *rn = (Module_Renames *)p;
gcMARK(rn->phase);
gcMARK(rn->ht); gcMARK(rn->ht);
gcMARK(rn->nomarshal_ht); gcMARK(rn->nomarshal_ht);
gcMARK(rn->unmarshal_info); gcMARK(rn->unmarshal_info);
@ -4854,6 +4849,7 @@ static int mark_rename_table_MARK(void *p) {
static int mark_rename_table_FIXUP(void *p) { static int mark_rename_table_FIXUP(void *p) {
Module_Renames *rn = (Module_Renames *)p; Module_Renames *rn = (Module_Renames *)p;
gcFIXUP(rn->phase);
gcFIXUP(rn->ht); gcFIXUP(rn->ht);
gcFIXUP(rn->nomarshal_ht); gcFIXUP(rn->nomarshal_ht);
gcFIXUP(rn->unmarshal_info); gcFIXUP(rn->unmarshal_info);
@ -4868,6 +4864,35 @@ static int mark_rename_table_FIXUP(void *p) {
#define mark_rename_table_IS_CONST_SIZE 1 #define mark_rename_table_IS_CONST_SIZE 1
static int mark_rename_table_set_SIZE(void *p) {
return
gcBYTES_TO_WORDS(sizeof(Module_Renames_Set));
}
static int mark_rename_table_set_MARK(void *p) {
Module_Renames_Set *rns = (Module_Renames_Set *)p;
gcMARK(rns->et);
gcMARK(rns->rt);
gcMARK(rns->other_phases);
gcMARK(rns->share_marked_names);
return
gcBYTES_TO_WORDS(sizeof(Module_Renames_Set));
}
static int mark_rename_table_set_FIXUP(void *p) {
Module_Renames_Set *rns = (Module_Renames_Set *)p;
gcFIXUP(rns->et);
gcFIXUP(rns->rt);
gcFIXUP(rns->other_phases);
gcFIXUP(rns->share_marked_names);
return
gcBYTES_TO_WORDS(sizeof(Module_Renames_Set));
}
#define mark_rename_table_set_IS_ATOMIC 0
#define mark_rename_table_set_IS_CONST_SIZE 1
static int mark_srcloc_SIZE(void *p) { static int mark_srcloc_SIZE(void *p) {
return return
gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Srcloc)); gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Srcloc));

View File

@ -814,15 +814,11 @@ namespace_val {
gcMARK(e->export_registry); gcMARK(e->export_registry);
gcMARK(e->insp); gcMARK(e->insp);
gcMARK(e->rename); gcMARK(e->rename_set);
gcMARK(e->et_rename);
gcMARK(e->tt_rename);
gcMARK(e->dt_rename);
gcMARK(e->syntax); gcMARK(e->syntax);
gcMARK(e->exp_env); gcMARK(e->exp_env);
gcMARK(e->template_env); gcMARK(e->template_env);
gcMARK(e->label_env);
gcMARK(e->shadowed_syntax); gcMARK(e->shadowed_syntax);
@ -831,13 +827,13 @@ namespace_val {
gcMARK(e->et_require_names); gcMARK(e->et_require_names);
gcMARK(e->tt_require_names); gcMARK(e->tt_require_names);
gcMARK(e->dt_require_names); gcMARK(e->dt_require_names);
gcMARK(e->other_require_names);
gcMARK(e->toplevel); gcMARK(e->toplevel);
gcMARK(e->modchain); gcMARK(e->modchain);
gcMARK(e->modvars); gcMARK(e->modvars);
gcMARK(e->marked_names);
size: size:
gcBYTES_TO_WORDS(sizeof(Scheme_Env)); gcBYTES_TO_WORDS(sizeof(Scheme_Env));
@ -921,6 +917,7 @@ module_val {
gcMARK(m->requires); gcMARK(m->requires);
gcMARK(m->tt_requires); gcMARK(m->tt_requires);
gcMARK(m->dt_requires); gcMARK(m->dt_requires);
gcMARK(m->other_requires);
gcMARK(m->body); gcMARK(m->body);
gcMARK(m->et_body); gcMARK(m->et_body);
@ -948,9 +945,6 @@ module_val {
gcMARK(m->dummy); gcMARK(m->dummy);
gcMARK(m->rn_stx); gcMARK(m->rn_stx);
gcMARK(m->et_rn_stx);
gcMARK(m->tt_rn_stx);
gcMARK(m->dt_rn_stx);
gcMARK(m->primitive); gcMARK(m->primitive);
size: size:
@ -961,6 +955,8 @@ module_phase_exports_val {
mark: mark:
Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p; Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p;
gcMARK(m->phase_index);
gcMARK(m->src_modidx); gcMARK(m->src_modidx);
gcMARK(m->provides); gcMARK(m->provides);
@ -985,6 +981,7 @@ module_exports_val {
gcMARK(m->rt); gcMARK(m->rt);
gcMARK(m->et); gcMARK(m->et);
gcMARK(m->dt); gcMARK(m->dt);
gcMARK(m->other_phases);
gcMARK(m->src_modidx); gcMARK(m->src_modidx);
size: size:
@ -1974,6 +1971,7 @@ START stxobj;
mark_rename_table { mark_rename_table {
mark: mark:
Module_Renames *rn = (Module_Renames *)p; Module_Renames *rn = (Module_Renames *)p;
gcMARK(rn->phase);
gcMARK(rn->ht); gcMARK(rn->ht);
gcMARK(rn->nomarshal_ht); gcMARK(rn->nomarshal_ht);
gcMARK(rn->unmarshal_info); gcMARK(rn->unmarshal_info);
@ -1984,6 +1982,17 @@ mark_rename_table {
gcBYTES_TO_WORDS(sizeof(Module_Renames)); gcBYTES_TO_WORDS(sizeof(Module_Renames));
} }
mark_rename_table_set {
mark:
Module_Renames_Set *rns = (Module_Renames_Set *)p;
gcMARK(rns->et);
gcMARK(rns->rt);
gcMARK(rns->other_phases);
gcMARK(rns->share_marked_names);
size:
gcBYTES_TO_WORDS(sizeof(Module_Renames_Set));
}
mark_srcloc { mark_srcloc {
mark: mark:
Scheme_Stx_Srcloc *s = (Scheme_Stx_Srcloc *)p; Scheme_Stx_Srcloc *s = (Scheme_Stx_Srcloc *)p;

View File

@ -4460,12 +4460,8 @@ static Scheme_Object *do_load_handler(void *data)
/* ... end special support for module loading ... */ /* ... end special support for module loading ... */
genv = scheme_get_env(config); genv = scheme_get_env(config);
if (genv->rename) if (genv->rename_set)
obj = scheme_add_rename(obj, genv->rename); obj = scheme_add_rename(obj, genv->rename_set);
if (genv->exp_env && genv->exp_env->rename)
obj = scheme_add_rename(obj, genv->exp_env->rename);
if (genv->template_env && genv->template_env->rename)
obj = scheme_add_rename(obj, genv->template_env->rename);
last_val = _scheme_apply_multi_with_prompt(scheme_get_param(config, MZCONFIG_EVAL_HANDLER), last_val = _scheme_apply_multi_with_prompt(scheme_get_param(config, MZCONFIG_EVAL_HANDLER),
1, &obj); 1, &obj);

View File

@ -1,3 +1,4 @@
#lang scheme/base
(define filename "stypes.h") (define filename "stypes.h")

View File

@ -13,7 +13,7 @@
#define USE_COMPILED_STARTUP 1 #define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 893 #define EXPECTED_PRIM_COUNT 895
#ifdef MZSCHEME_SOMETHING_OMITTED #ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP # undef USE_COMPILED_STARTUP

View File

@ -591,7 +591,7 @@ typedef struct Scheme_Stx {
Scheme_Stx_Srcloc *srcloc; Scheme_Stx_Srcloc *srcloc;
Scheme_Object *wraps; Scheme_Object *wraps;
union { union {
long lazy_prefix; /* # of initial items in wraps to propagate */ long lazy_prefix; /* # of insitial items in wraps to propagate */
Scheme_Object *modinfo_cache; Scheme_Object *modinfo_cache;
} u; } u;
Scheme_Object *certs; /* cert chain or pair of cert chains */ Scheme_Object *certs; /* cert chain or pair of cert chains */
@ -658,14 +658,27 @@ Scheme_Object *scheme_stx_remove_extra_marks(Scheme_Object *o, Scheme_Object *re
struct Scheme_Module_Phase_Exports; /* forward declaration */ struct Scheme_Module_Phase_Exports; /* forward declaration */
Scheme_Object *scheme_make_module_rename(long phase, int kind, Scheme_Hash_Table *mns); Scheme_Object *scheme_make_module_rename_set(int kind, Scheme_Object *share_marked_names);
void scheme_add_module_rename_to_set(Scheme_Object *set, Scheme_Object *rn);
Scheme_Object *scheme_get_module_rename_from_set(Scheme_Object *set, Scheme_Object *phase, int create);
Scheme_Hash_Table *scheme_get_module_rename_marked_names(Scheme_Object *set, Scheme_Object *phase, int create);
void scheme_append_rename_set_to_env(Scheme_Object *rns, Scheme_Env *env);
void scheme_seal_module_rename(Scheme_Object *rn);
void scheme_seal_module_rename_set(Scheme_Object *rns);
Scheme_Object *scheme_make_module_rename(Scheme_Object *phase, int kind, Scheme_Hash_Table *mns);
void scheme_extend_module_rename(Scheme_Object *rn, Scheme_Object *modname, void scheme_extend_module_rename(Scheme_Object *rn, Scheme_Object *modname,
Scheme_Object *locname, Scheme_Object *exname, Scheme_Object *locname, Scheme_Object *exname,
Scheme_Object *nominal_src, Scheme_Object *nominal_ex, Scheme_Object *nominal_src, Scheme_Object *nominal_ex,
int mod_phase, int src_phase_index, int drop_for_marshal); int mod_phase, Scheme_Object *src_phase_index,
Scheme_Object *nom_export_phase, int drop_for_marshal);
void scheme_extend_module_rename_with_shared(Scheme_Object *rn, Scheme_Object *modidx, void scheme_extend_module_rename_with_shared(Scheme_Object *rn, Scheme_Object *modidx,
struct Scheme_Module_Phase_Exports *pt, int k, struct Scheme_Module_Phase_Exports *pt,
int src_phase_index, Scheme_Object *unmarshal_phase_index,
Scheme_Object *src_phase_index,
int save_unmarshal); int save_unmarshal);
void scheme_extend_module_rename_with_kernel(Scheme_Object *rn, Scheme_Object *nominal_src); void scheme_extend_module_rename_with_kernel(Scheme_Object *rn, Scheme_Object *nominal_src);
void scheme_save_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info); void scheme_save_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info);
@ -681,21 +694,26 @@ void scheme_list_module_rename(Scheme_Object *src, Scheme_Hash_Table *ht);
Scheme_Object *scheme_rename_to_stx(Scheme_Object *rn); Scheme_Object *scheme_rename_to_stx(Scheme_Object *rn);
Scheme_Object *scheme_stx_to_rename(Scheme_Object *stx); Scheme_Object *scheme_stx_to_rename(Scheme_Object *stx);
Scheme_Object *scheme_stx_shift_rename(Scheme_Object *mrn, Scheme_Object *old_midx, Scheme_Object *new_midx); Scheme_Object *scheme_stx_shift_rename(Scheme_Object *mrn, Scheme_Object *old_midx, Scheme_Object *new_midx);
Scheme_Object *scheme_stx_shift_rename_set(Scheme_Object *mrns, Scheme_Object *old_midx, Scheme_Object *new_midx);
Scheme_Hash_Table *scheme_module_rename_marked_names(Scheme_Object *rn); Scheme_Hash_Table *scheme_module_rename_marked_names(Scheme_Object *rn);
Scheme_Object *scheme_stx_content(Scheme_Object *o); Scheme_Object *scheme_stx_content(Scheme_Object *o);
Scheme_Object *scheme_flatten_syntax_list(Scheme_Object *lst, int *islist); Scheme_Object *scheme_flatten_syntax_list(Scheme_Object *lst, int *islist);
int scheme_stx_module_eq(Scheme_Object *a, Scheme_Object *b, long phase); int scheme_stx_module_eq(Scheme_Object *a, Scheme_Object *b, long phase);
Scheme_Object *scheme_stx_module_name(Scheme_Object **name, long phase, int scheme_stx_module_eq2(Scheme_Object *a, Scheme_Object *b, Scheme_Object *phase, Scheme_Object *asym);
Scheme_Object *scheme_stx_get_module_eq_sym(Scheme_Object *a, Scheme_Object *phase);
Scheme_Object *scheme_stx_module_name(Scheme_Object **name, Scheme_Object *phase,
Scheme_Object **nominal_modidx, Scheme_Object **nominal_modidx,
Scheme_Object **nominal_name, Scheme_Object **nominal_name,
int *mod_phase, int *src_phase_index); Scheme_Object **mod_phase,
Scheme_Object *scheme_stx_moduleless_env(Scheme_Object *a, long phase); Scheme_Object **src_phase_index,
Scheme_Object **nominal_src_phase);
Scheme_Object *scheme_stx_moduleless_env(Scheme_Object *a, Scheme_Object *phase);
int scheme_stx_parallel_is_used(Scheme_Object *sym, Scheme_Object *stx); int scheme_stx_parallel_is_used(Scheme_Object *sym, Scheme_Object *stx);
int scheme_stx_bound_eq(Scheme_Object *a, Scheme_Object *b, long phase); int scheme_stx_bound_eq(Scheme_Object *a, Scheme_Object *b, Scheme_Object *phase);
int scheme_stx_env_bound_eq(Scheme_Object *a, Scheme_Object *b, Scheme_Object *uid, long phase); int scheme_stx_env_bound_eq(Scheme_Object *a, Scheme_Object *b, Scheme_Object *uid, Scheme_Object *phase);
Scheme_Object *scheme_stx_source_module(Scheme_Object *stx, int resolve); Scheme_Object *scheme_stx_source_module(Scheme_Object *stx, int resolve);
@ -2225,6 +2243,7 @@ Scheme_Env *scheme_make_empty_env(void);
void scheme_prepare_exp_env(Scheme_Env *env); void scheme_prepare_exp_env(Scheme_Env *env);
void scheme_prepare_template_env(Scheme_Env *env); void scheme_prepare_template_env(Scheme_Env *env);
void scheme_prepare_label_env(Scheme_Env *env); void scheme_prepare_label_env(Scheme_Env *env);
void scheme_prepare_env_renames(Scheme_Env *env, int kind);
int scheme_used_app_only(Scheme_Comp_Env *env, int which); int scheme_used_app_only(Scheme_Comp_Env *env, int which);
int scheme_used_ever(Scheme_Comp_Env *env, int which); int scheme_used_ever(Scheme_Comp_Env *env, int which);
@ -2346,6 +2365,8 @@ void scheme_unmarshal_wrap_set(Scheme_Unmarshal_Tables *ut,
struct Scheme_Env { struct Scheme_Env {
Scheme_Object so; /* scheme_namespace_type */ Scheme_Object so; /* scheme_namespace_type */
char disallow_unbound, rename_set_ready;
struct Scheme_Module *module; /* NULL => top-level */ struct Scheme_Module *module; /* NULL => top-level */
Scheme_Hash_Table *module_registry; /* symbol -> module ; loaded modules, Scheme_Hash_Table *module_registry; /* symbol -> module ; loaded modules,
@ -2354,17 +2375,11 @@ struct Scheme_Env {
Scheme_Object *insp; /* instantiation-time inspector, for granting Scheme_Object *insp; /* instantiation-time inspector, for granting
protected access and certificates */ protected access and certificates */
/* For compilation, per-declaration: */ Scheme_Object *rename_set;
/* First two are passed from module to module-begin: */
Scheme_Object *rename; /* module rename record */
Scheme_Object *et_rename; /* exp-time rename record */
Scheme_Object *tt_rename; /* template-time rename record */
Scheme_Object *dt_rename; /* template-time rename record */
Scheme_Bucket_Table *syntax; Scheme_Bucket_Table *syntax;
struct Scheme_Env *exp_env; struct Scheme_Env *exp_env;
struct Scheme_Env *template_env; struct Scheme_Env *template_env;
struct Scheme_Env *label_env; /* just for renamings */
Scheme_Hash_Table *shadowed_syntax; /* top level only */ Scheme_Hash_Table *shadowed_syntax; /* top level only */
@ -2372,6 +2387,7 @@ struct Scheme_Env {
long phase, mod_phase; long phase, mod_phase;
Scheme_Object *link_midx; Scheme_Object *link_midx;
Scheme_Object *require_names, *et_require_names, *tt_require_names, *dt_require_names; /* resolved */ Scheme_Object *require_names, *et_require_names, *tt_require_names, *dt_require_names; /* resolved */
Scheme_Hash_Table *other_require_names;
char running, et_running, tt_running, lazy_syntax, attached, ran, et_ran; char running, et_running, tt_running, lazy_syntax, attached, ran, et_ran;
Scheme_Bucket_Table *toplevel; Scheme_Bucket_Table *toplevel;
@ -2383,8 +2399,6 @@ struct Scheme_Env {
Scheme_Hash_Table *modvars; /* for scheme_module_variable_type hashing */ Scheme_Hash_Table *modvars; /* for scheme_module_variable_type hashing */
Scheme_Hash_Table *marked_names; /* for mapping marked ids to uninterned symbols */
int id_counter; int id_counter;
}; };
@ -2405,6 +2419,7 @@ typedef struct Scheme_Module
Scheme_Object *requires; /* list of symbol-or-module-path-index */ Scheme_Object *requires; /* list of symbol-or-module-path-index */
Scheme_Object *tt_requires; /* list of symbol-or-module-path-index */ Scheme_Object *tt_requires; /* list of symbol-or-module-path-index */
Scheme_Object *dt_requires; /* list of symbol-or-module-path-index */ Scheme_Object *dt_requires; /* list of symbol-or-module-path-index */
Scheme_Hash_Table *other_requires; /* phase to list of symbol-or-module-path-index */
Scheme_Invoke_Proc prim_body; Scheme_Invoke_Proc prim_body;
Scheme_Invoke_Proc prim_et_body; Scheme_Invoke_Proc prim_et_body;
@ -2442,21 +2457,21 @@ typedef struct Scheme_Module
Scheme_Env *primitive; Scheme_Env *primitive;
Scheme_Object *rn_stx, *et_rn_stx, *tt_rn_stx, *dt_rn_stx; Scheme_Object *rn_stx;
} Scheme_Module; } Scheme_Module;
typedef struct Scheme_Module_Phase_Exports typedef struct Scheme_Module_Phase_Exports
{ {
MZTAG_IF_REQUIRED Scheme_Object so;
int phase_index; Scheme_Object *phase_index;
Scheme_Object *src_modidx; /* same as in enclosing Scheme_Module_Exports */ Scheme_Object *src_modidx; /* same as in enclosing Scheme_Module_Exports */
Scheme_Object **provides; /* symbols (extenal names) */ Scheme_Object **provides; /* symbols (extenal names) */
Scheme_Object **provide_srcs; /* module access paths, #f for self */ Scheme_Object **provide_srcs; /* module access paths, #f for self */
Scheme_Object **provide_src_names; /* symbols (original internal names) */ Scheme_Object **provide_src_names; /* symbols (original internal names) */
Scheme_Object **provide_nominal_srcs; /* import source if re-exported; NULL or array of lists */ Scheme_Object **provide_nominal_srcs; /* import source if re-exported; NULL or array of lists */
char *provide_src_phases; /* NULL, or src phase for for-syntax import */ char *provide_src_phases; /* NULL, or src phase for for-syntax import */
int num_provides; int num_provides;
int num_var_provides; /* non-syntax listed first in provides */ int num_var_provides; /* non-syntax listed first in provides */
@ -2476,7 +2491,10 @@ typedef struct Scheme_Module_Exports
unmarshal syntax-object context. */ unmarshal syntax-object context. */
MZTAG_IF_REQUIRED MZTAG_IF_REQUIRED
/* Most common phases: */
Scheme_Module_Phase_Exports *rt, *et, *dt; Scheme_Module_Phase_Exports *rt, *et, *dt;
/* All others: */
Scheme_Hash_Table *other_phases;
Scheme_Object *src_modidx; /* the one used in marshalled syntax */ Scheme_Object *src_modidx; /* the one used in marshalled syntax */
} Scheme_Module_Exports; } Scheme_Module_Exports;
@ -2504,7 +2522,7 @@ void scheme_add_global_keyword_symbol(Scheme_Object *name, Scheme_Object *v, Sch
void scheme_add_global_constant(const char *name, Scheme_Object *v, Scheme_Env *env); void scheme_add_global_constant(const char *name, Scheme_Object *v, Scheme_Env *env);
void scheme_add_global_constant_symbol(Scheme_Object *name, Scheme_Object *v, Scheme_Env *env); void scheme_add_global_constant_symbol(Scheme_Object *name, Scheme_Object *v, Scheme_Env *env);
Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Object *bdg, int is_def); Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Object *bdg, int is_def, Scheme_Object *phase);
int scheme_tl_id_is_sym_used(Scheme_Hash_Table *marked_names, Scheme_Object *sym); int scheme_tl_id_is_sym_used(Scheme_Hash_Table *marked_names, Scheme_Object *sym);
Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env); Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env);
@ -2552,8 +2570,8 @@ void scheme_clear_modidx_cache(void);
void scheme_clear_shift_cache(void); void scheme_clear_shift_cache(void);
void scheme_clear_prompt_cache(void); void scheme_clear_prompt_cache(void);
Scheme_Object *scheme_module_imported_list(Scheme_Env *genv, Scheme_Object *binings, Scheme_Object *modpath, Scheme_Object *scheme_module_imported_list(Scheme_Env *genv, Scheme_Object *bindings, Scheme_Object *modpath,
int include_run, int include_exp, int include_lbl); Scheme_Object *mode);
Scheme_Object *scheme_module_exported_list(Scheme_Object *modpath, Scheme_Env *genv); Scheme_Object *scheme_module_exported_list(Scheme_Object *modpath, Scheme_Env *genv);
void scheme_run_module(Scheme_Env *menv, int set_ns); void scheme_run_module(Scheme_Env *menv, int set_ns);

View File

@ -13,12 +13,12 @@
consistently.) consistently.)
*/ */
#define MZSCHEME_VERSION "3.99.0.12" #define MZSCHEME_VERSION "3.99.0.13"
#define MZSCHEME_VERSION_X 3 #define MZSCHEME_VERSION_X 3
#define MZSCHEME_VERSION_Y 99 #define MZSCHEME_VERSION_Y 99
#define MZSCHEME_VERSION_Z 0 #define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 12 #define MZSCHEME_VERSION_W 13
#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)

File diff suppressed because it is too large Load Diff

View File

@ -114,129 +114,130 @@ enum {
scheme_case_lambda_sequence_type, /* 96 */ scheme_case_lambda_sequence_type, /* 96 */
scheme_begin0_sequence_type, /* 97 */ scheme_begin0_sequence_type, /* 97 */
scheme_rename_table_type, /* 98 */ scheme_rename_table_type, /* 98 */
scheme_module_type, /* 99 */ scheme_rename_table_set_type, /* 99 */
scheme_svector_type, /* 100 */ scheme_module_type, /* 100 */
scheme_lazy_macro_type, /* 101 */ scheme_svector_type, /* 101 */
scheme_resolve_prefix_type, /* 102 */ scheme_lazy_macro_type, /* 102 */
scheme_security_guard_type, /* 103 */ scheme_resolve_prefix_type, /* 103 */
scheme_indent_type, /* 104 */ scheme_security_guard_type, /* 104 */
scheme_udp_type, /* 105 */ scheme_indent_type, /* 105 */
scheme_udp_evt_type, /* 106 */ scheme_udp_type, /* 106 */
scheme_tcp_accept_evt_type, /* 107 */ scheme_udp_evt_type, /* 107 */
scheme_id_macro_type, /* 108 */ scheme_tcp_accept_evt_type, /* 108 */
scheme_evt_set_type, /* 109 */ scheme_id_macro_type, /* 109 */
scheme_wrap_evt_type, /* 110 */ scheme_evt_set_type, /* 110 */
scheme_handle_evt_type, /* 111 */ scheme_wrap_evt_type, /* 111 */
scheme_nack_guard_evt_type, /* 112 */ scheme_handle_evt_type, /* 112 */
scheme_semaphore_repost_type, /* 113 */ scheme_nack_guard_evt_type, /* 113 */
scheme_channel_type, /* 114 */ scheme_semaphore_repost_type, /* 114 */
scheme_channel_put_type, /* 115 */ scheme_channel_type, /* 115 */
scheme_thread_resume_type, /* 116 */ scheme_channel_put_type, /* 116 */
scheme_thread_suspend_type, /* 117 */ scheme_thread_resume_type, /* 117 */
scheme_thread_dead_type, /* 118 */ scheme_thread_suspend_type, /* 118 */
scheme_poll_evt_type, /* 119 */ scheme_thread_dead_type, /* 119 */
scheme_nack_evt_type, /* 120 */ scheme_poll_evt_type, /* 120 */
scheme_module_registry_type, /* 121 */ scheme_nack_evt_type, /* 121 */
scheme_thread_set_type, /* 122 */ scheme_module_registry_type, /* 122 */
scheme_string_converter_type, /* 123 */ scheme_thread_set_type, /* 123 */
scheme_alarm_type, /* 124 */ scheme_string_converter_type, /* 124 */
scheme_thread_cell_type, /* 125 */ scheme_alarm_type, /* 125 */
scheme_channel_syncer_type, /* 126 */ scheme_thread_cell_type, /* 126 */
scheme_special_comment_type, /* 127 */ scheme_channel_syncer_type, /* 127 */
scheme_write_evt_type, /* 128 */ scheme_special_comment_type, /* 128 */
scheme_always_evt_type, /* 129 */ scheme_write_evt_type, /* 129 */
scheme_never_evt_type, /* 130 */ scheme_always_evt_type, /* 130 */
scheme_progress_evt_type, /* 131 */ scheme_never_evt_type, /* 131 */
scheme_certifications_type, /* 132 */ scheme_progress_evt_type, /* 132 */
scheme_already_comp_type, /* 133 */ scheme_certifications_type, /* 133 */
scheme_readtable_type, /* 134 */ scheme_already_comp_type, /* 134 */
scheme_intdef_context_type, /* 135 */ scheme_readtable_type, /* 135 */
scheme_lexical_rib_type, /* 136 */ scheme_intdef_context_type, /* 136 */
scheme_thread_cell_values_type, /* 137 */ scheme_lexical_rib_type, /* 137 */
scheme_global_ref_type, /* 138 */ scheme_thread_cell_values_type, /* 138 */
scheme_cont_mark_chain_type, /* 139 */ scheme_global_ref_type, /* 139 */
scheme_raw_pair_type, /* 140 */ scheme_cont_mark_chain_type, /* 140 */
scheme_prompt_type, /* 141 */ scheme_raw_pair_type, /* 141 */
scheme_prompt_tag_type, /* 142 */ scheme_prompt_type, /* 142 */
scheme_expanded_syntax_type, /* 143 */ scheme_prompt_tag_type, /* 143 */
scheme_delay_syntax_type, /* 144 */ scheme_expanded_syntax_type, /* 144 */
scheme_cust_box_type, /* 145 */ scheme_delay_syntax_type, /* 145 */
scheme_resolved_module_path_type, /* 146 */ scheme_cust_box_type, /* 146 */
scheme_resolved_module_path_type, /* 147 */
scheme_module_phase_exports_type, /* 148 */
#ifdef MZTAG_REQUIRED #ifdef MZTAG_REQUIRED
_scheme_last_normal_type_, /* 147 */ _scheme_last_normal_type_, /* 149 */
scheme_rt_weak_array, /* 148 */ scheme_rt_weak_array, /* 150 */
scheme_rt_comp_env, /* 149 */ scheme_rt_comp_env, /* 151 */
scheme_rt_constant_binding, /* 150 */ scheme_rt_constant_binding, /* 152 */
scheme_rt_resolve_info, /* 151 */ scheme_rt_resolve_info, /* 153 */
scheme_rt_optimize_info, /* 152 */ scheme_rt_optimize_info, /* 154 */
scheme_rt_compile_info, /* 153 */ scheme_rt_compile_info, /* 155 */
scheme_rt_cont_mark, /* 154 */ scheme_rt_cont_mark, /* 156 */
scheme_rt_saved_stack, /* 155 */ scheme_rt_saved_stack, /* 157 */
scheme_rt_reply_item, /* 156 */ scheme_rt_reply_item, /* 158 */
scheme_rt_closure_info, /* 157 */ scheme_rt_closure_info, /* 159 */
scheme_rt_overflow, /* 158 */ scheme_rt_overflow, /* 160 */
scheme_rt_overflow_jmp, /* 159 */ scheme_rt_overflow_jmp, /* 161 */
scheme_rt_meta_cont, /* 160 */ scheme_rt_meta_cont, /* 162 */
scheme_rt_dyn_wind_cell, /* 161 */ scheme_rt_dyn_wind_cell, /* 163 */
scheme_rt_dyn_wind_info, /* 162 */ scheme_rt_dyn_wind_info, /* 164 */
scheme_rt_dyn_wind, /* 163 */ scheme_rt_dyn_wind, /* 165 */
scheme_rt_dup_check, /* 164 */ scheme_rt_dup_check, /* 166 */
scheme_rt_thread_memory, /* 165 */ scheme_rt_thread_memory, /* 167 */
scheme_rt_input_file, /* 166 */ scheme_rt_input_file, /* 168 */
scheme_rt_input_fd, /* 167 */ scheme_rt_input_fd, /* 169 */
scheme_rt_oskit_console_input, /* 168 */ scheme_rt_oskit_console_input, /* 170 */
scheme_rt_tested_input_file, /* 169 */ scheme_rt_tested_input_file, /* 171 */
scheme_rt_tested_output_file, /* 170 */ scheme_rt_tested_output_file, /* 172 */
scheme_rt_indexed_string, /* 171 */ scheme_rt_indexed_string, /* 173 */
scheme_rt_output_file, /* 172 */ scheme_rt_output_file, /* 174 */
scheme_rt_load_handler_data, /* 173 */ scheme_rt_load_handler_data, /* 175 */
scheme_rt_pipe, /* 174 */ scheme_rt_pipe, /* 176 */
scheme_rt_beos_process, /* 175 */ scheme_rt_beos_process, /* 177 */
scheme_rt_system_child, /* 176 */ scheme_rt_system_child, /* 178 */
scheme_rt_tcp, /* 177 */ scheme_rt_tcp, /* 179 */
scheme_rt_write_data, /* 178 */ scheme_rt_write_data, /* 180 */
scheme_rt_tcp_select_info, /* 179 */ scheme_rt_tcp_select_info, /* 181 */
scheme_rt_namespace_option, /* 180 */ scheme_rt_namespace_option, /* 182 */
scheme_rt_param_data, /* 181 */ scheme_rt_param_data, /* 183 */
scheme_rt_will, /* 182 */ scheme_rt_will, /* 184 */
scheme_rt_will_registration, /* 183 */ scheme_rt_will_registration, /* 185 */
scheme_rt_struct_proc_info, /* 184 */ scheme_rt_struct_proc_info, /* 186 */
scheme_rt_linker_name, /* 185 */ scheme_rt_linker_name, /* 187 */
scheme_rt_param_map, /* 186 */ scheme_rt_param_map, /* 188 */
scheme_rt_finalization, /* 187 */ scheme_rt_finalization, /* 189 */
scheme_rt_finalizations, /* 188 */ scheme_rt_finalizations, /* 190 */
scheme_rt_cpp_object, /* 189 */ scheme_rt_cpp_object, /* 191 */
scheme_rt_cpp_array_object, /* 190 */ scheme_rt_cpp_array_object, /* 192 */
scheme_rt_stack_object, /* 191 */ scheme_rt_stack_object, /* 193 */
scheme_rt_preallocated_object, /* 192 */ scheme_rt_preallocated_object, /* 194 */
scheme_thread_hop_type, /* 193 */ scheme_thread_hop_type, /* 195 */
scheme_rt_srcloc, /* 194 */ scheme_rt_srcloc, /* 196 */
scheme_rt_evt, /* 195 */ scheme_rt_evt, /* 197 */
scheme_rt_syncing, /* 196 */ scheme_rt_syncing, /* 198 */
scheme_rt_comp_prefix, /* 197 */ scheme_rt_comp_prefix, /* 199 */
scheme_rt_user_input, /* 198 */ scheme_rt_user_input, /* 200 */
scheme_rt_user_output, /* 199 */ scheme_rt_user_output, /* 201 */
scheme_rt_compact_port, /* 200 */ scheme_rt_compact_port, /* 202 */
scheme_rt_read_special_dw, /* 201 */ scheme_rt_read_special_dw, /* 203 */
scheme_rt_regwork, /* 202 */ scheme_rt_regwork, /* 204 */
scheme_rt_buf_holder, /* 203 */ scheme_rt_buf_holder, /* 205 */
scheme_rt_parameterization, /* 204 */ scheme_rt_parameterization, /* 206 */
scheme_rt_print_params, /* 205 */ scheme_rt_print_params, /* 207 */
scheme_rt_read_params, /* 206 */ scheme_rt_read_params, /* 208 */
scheme_rt_native_code, /* 207 */ scheme_rt_native_code, /* 209 */
scheme_rt_native_code_plus_case, /* 208 */ scheme_rt_native_code_plus_case, /* 210 */
scheme_rt_jitter_data, /* 209 */ scheme_rt_jitter_data, /* 211 */
scheme_rt_module_exports, /* 210 */ scheme_rt_module_exports, /* 212 */
scheme_rt_module_phase_exports, /* 211 */ scheme_rt_delay_load_info, /* 213 */
scheme_rt_delay_load_info, /* 212 */ scheme_rt_marshal_info, /* 214 */
scheme_rt_marshal_info, /* 213 */ scheme_rt_unmarshal_info, /* 215 */
scheme_rt_unmarshal_info, /* 214 */ scheme_rt_runstack, /* 216 */
scheme_rt_runstack, /* 215 */ scheme_rt_sfs_info, /* 217 */
scheme_rt_sfs_info, /* 216 */ scheme_rt_validate_clearing, /* 218 */
scheme_rt_validate_clearing, /* 217 */
#endif #endif
_scheme_last_type_ _scheme_last_type_

View File

@ -1102,7 +1102,7 @@ defn_targets_syntax (Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_In
Scheme_Object *name, *pr, *bucket; Scheme_Object *name, *pr, *bucket;
name = SCHEME_STX_CAR(var); name = SCHEME_STX_CAR(var);
name = scheme_tl_id_sym(env->genv, name, NULL, 2); name = scheme_tl_id_sym(env->genv, name, NULL, 2, NULL);
if (rec[drec].resolve_module_ids || !env->genv->module) { if (rec[drec].resolve_module_ids || !env->genv->module) {
bucket = (Scheme_Object *)scheme_global_bucket(name, env->genv); bucket = (Scheme_Object *)scheme_global_bucket(name, env->genv);
@ -4025,7 +4025,7 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname,
for (j = pre_k; j < k; j++) { for (j = pre_k; j < k; j++) {
for (m = j + 1; m < k; m++) { for (m = j + 1; m < k; m++) {
if (scheme_stx_bound_eq(names[m], names[j], env->genv->phase)) if (scheme_stx_bound_eq(names[m], names[j], scheme_make_integer(env->genv->phase)))
scheme_wrong_syntax(NULL, NULL, form, scheme_wrong_syntax(NULL, NULL, form,
"multiple bindings of `%S' in the same clause", "multiple bindings of `%S' in the same clause",
SCHEME_STX_SYM(names[m])); SCHEME_STX_SYM(names[m]));
@ -5285,7 +5285,7 @@ static Scheme_Object *stx_val(Scheme_Object *name, Scheme_Object *_env)
{ {
Scheme_Env *env = (Scheme_Env *)_env; Scheme_Env *env = (Scheme_Env *)_env;
return scheme_tl_id_sym(env, name, NULL, 2); return scheme_tl_id_sym(env, name, NULL, 2, NULL);
} }
static Scheme_Object * static Scheme_Object *

View File

@ -579,7 +579,7 @@ void scheme_register_traversers(void)
GC_REG_TRAV(scheme_expanded_syntax_type, twoptr_obj); GC_REG_TRAV(scheme_expanded_syntax_type, twoptr_obj);
GC_REG_TRAV(scheme_module_type, module_val); GC_REG_TRAV(scheme_module_type, module_val);
GC_REG_TRAV(scheme_rt_module_exports, module_exports_val); GC_REG_TRAV(scheme_rt_module_exports, module_exports_val);
GC_REG_TRAV(scheme_rt_module_phase_exports, module_phase_exports_val); GC_REG_TRAV(scheme_module_phase_exports_type, module_phase_exports_val);
GC_REG_TRAV(scheme_module_index_type, modidx_val); GC_REG_TRAV(scheme_module_index_type, modidx_val);
GC_REG_TRAV(scheme_security_guard_type, guard_val); GC_REG_TRAV(scheme_security_guard_type, guard_val);