diff --git a/collects/compiler/zo-marshal.rkt b/collects/compiler/zo-marshal.rkt index 91380a3e51..ced39b755c 100644 --- a/collects/compiler/zo-marshal.rkt +++ b/collects/compiler/zo-marshal.rkt @@ -149,21 +149,29 @@ ;; ---------------------------------------- (define toplevel-type-num 0) -(define syntax-type-num 3) -(define sequence-type-num 7) -(define unclosed-procedure-type-num 9) -(define let-value-type-num 10) -(define let-void-type-num 11) -(define letrec-type-num 12) -(define wcm-type-num 14) -(define quote-syntax-type-num 15) -(define variable-type-num 24) -(define top-type-num 89) -(define case-lambda-sequence-type-num 99) -(define begin0-sequence-type-num 100) -(define module-type-num 103) -(define prefix-type-num 105) -(define free-id-info-type-num 154) +(define sequence-type-num 6) +(define unclosed-procedure-type-num 8) +(define let-value-type-num 9) +(define let-void-type-num 10) +(define letrec-type-num 11) +(define wcm-type-num 13) +(define quote-syntax-type-num 14) +(define define-values-type-num 15) +(define define-syntaxes-type-num 16) +(define define-for-syntax-type-num 17) +(define set-bang-type-num 18) +(define boxenv-type-num 19) +(define begin0-sequence-type-num 20) +(define splice-sequence-type-num 21) +(define require-form-type-num 22) +(define varref-form-type-num 23) +(define apply-values-type-num 24) +(define case-lambda-sequence-type-num 25) +(define module-type-num 26) +(define variable-type-num 34) +(define top-type-num 99) +(define prefix-type-num 112) +(define free-id-info-type-num 161) (define-syntax define-enum (syntax-rules () @@ -212,21 +220,6 @@ CPT_PREFAB CPT_LET_ONE_UNUSED) -(define-enum - 0 - DEFINE_VALUES_EXPD - DEFINE_SYNTAX_EXPD - SET_EXPD - CASE_LAMBDA_EXPD - BEGIN0_EXPD - BOXENV_EXPD - MODULE_EXPD - REQUIRE_EXPD - DEFINE_FOR_SYNTAX_EXPD - REF_EXPD - APPVALS_EXPD - SPLICE_EXPD) - (define CPT_SMALL_NUMBER_START 36) (define CPT_SMALL_NUMBER_END 60) @@ -271,10 +264,6 @@ #f #f)) -(define-struct case-seq (name lams)) -(define-struct (seq0 seq) ()) - - (define (encode-module-bindings module-bindings) (define encode-nominal-path (match-lambda @@ -440,9 +429,6 @@ (out-byte #xF0 out) (out-bytes (int->bytes n) out)])) -(define (out-syntax key val out) - (out-marshaled syntax-type-num (list* key val) out)) - (define (out-marshaled type-num val out) (if (type-num . < . (- CPT_SMALL_MARSHALLED_END CPT_SMALL_MARSHALLED_START)) (out-byte (+ CPT_SMALL_MARSHALLED_START type-num) out) @@ -541,34 +527,34 @@ [(? mod?) (out-module v out)] [(struct def-values (ids rhs)) - (out-syntax DEFINE_VALUES_EXPD - (list->vector (cons (protect-quote rhs) ids)) - out)] + (out-marshaled define-values-type-num + (list->vector (cons (protect-quote rhs) ids)) + out)] [(struct def-syntaxes (ids rhs prefix max-let-depth)) - (out-syntax DEFINE_SYNTAX_EXPD - (list->vector (list* (protect-quote rhs) - prefix - max-let-depth - *dummy* - ids)) - out)] + (out-marshaled define-syntaxes-type-num + (list->vector (list* (protect-quote rhs) + prefix + max-let-depth + *dummy* + ids)) + out)] [(struct def-for-syntax (ids rhs prefix max-let-depth)) - (out-syntax DEFINE_FOR_SYNTAX_EXPD - (list->vector (list* (protect-quote rhs) - prefix - max-let-depth - *dummy* - ids)) - out)] - [(struct seq0 (forms)) + (out-marshaled define-for-syntax-type-num + (list->vector (list* (protect-quote rhs) + prefix + max-let-depth + *dummy* + ids)) + out)] + [(struct beg0 (forms)) (out-marshaled begin0-sequence-type-num (map protect-quote forms) out)] [(struct seq (forms)) (out-marshaled sequence-type-num (map protect-quote forms) out)] [(struct splice (forms)) - (out-syntax SPLICE_EXPD (make-seq forms) out)] + (out-marshaled splice-sequence-type-num forms out)] [(struct req (reqs dummy)) (error "cannot handle top-level `require', yet") - (out-syntax REQUIRE_EXPD (cons dummy reqs) out)] + (out-marshaled require-form-type-num (cons dummy reqs) out)] [(struct toplevel (depth pos const? ready?)) (out-marshaled toplevel-type-num (cons @@ -589,9 +575,9 @@ (out-byte CPT_REFERENCE out) (out-number id out)] [(struct assign (id rhs undef-ok?)) - (out-syntax SET_EXPD - (cons undef-ok? (cons id rhs)) - out)] + (out-marshaled set-bang-type-num + (cons undef-ok? (cons id rhs)) + out)] [(struct localref (unbox? offset clear? other-clears? flonum?)) (if (and (not clear?) (not other-clears?) (not flonum?) (offset . < . (- CPT_SMALL_LOCAL_END CPT_SMALL_LOCAL_START))) @@ -617,19 +603,6 @@ [(? lam?) (out-lam v out)] [(struct case-lam (name lams)) - (let ([seq (make-case-seq name lams)]) - ;; XXX: This seems like an optimization, which should probably happen somewhere else - ;; If all closures are empty, generate a case sequence directly - (if (andmap (lambda (lam) - (or (closure? lam) - (and (lam? lam) - (equal? (lam-closure-map lam) #())))) - lams) - (out-anything seq out) - (out-syntax CASE_LAMBDA_EXPD - seq - out)))] - [(struct case-seq (name lams)) (out-marshaled case-lambda-sequence-type-num (cons (or name null) lams) @@ -666,11 +639,11 @@ (protect-quote body)) out)] [(struct boxenv (pos body)) - (out-syntax BOXENV_EXPD - (cons - pos - (protect-quote body)) - out)] + (out-marshaled boxenv-type-num + (cons + pos + (protect-quote body)) + out)] [(struct branch (test then else)) (out-byte CPT_BRANCH out) (out-anything (protect-quote test) out) @@ -687,14 +660,10 @@ (out-anything (protect-quote e) out)) (cons rator rands)))] [(struct apply-values (proc args-expr)) - (out-syntax APPVALS_EXPD - (cons (protect-quote proc) - (protect-quote args-expr)) - out)] - [(struct beg0 (exprs)) - (out-syntax BEGIN0_EXPD - (make-seq0 exprs) - out)] + (out-marshaled apply-values-type-num + (cons (protect-quote proc) + (protect-quote args-expr)) + out)] [(struct with-cont-mark (key val body)) (out-marshaled wcm-type-num (list* @@ -703,9 +672,9 @@ (protect-quote body)) out)] [(struct varref (expr)) - (out-syntax REF_EXPD - expr - out)] + (out-marshaled varref-form-type-num + expr + out)] [(protected-symref v) (out-anything ((out-shared-index out) v #:error? #t) out)] [(and (? symbol?) (not (? symbol-interned?))) @@ -823,10 +792,6 @@ (let-values ([(name base) (module-path-index-split v)]) (out-anything name out) (out-anything base out))] - [(module-decl content) - (out-marshaled module-type-num - content - out)] [(stx encoded) (out-byte CPT_STX out) (out-anything encoded out)] @@ -866,99 +831,96 @@ (out-bytes bstr out)] [else (error 'out-anything "~s" (current-type-trace))]))))) -(define-struct module-decl (content)) - (define (out-module mod-form out) (match mod-form [(struct mod (name srcname self-modidx prefix provides requires body syntax-body unexported max-let-depth dummy lang-info internal-context)) - (out-syntax MODULE_EXPD - (let* ([lookup-req (lambda (phase) - (let ([a (assq phase requires)]) - (if a - (cdr a) - null)))] - [other-requires (filter (lambda (l) - (not (memq (car l) '(#f -1 0 1)))) - requires)] - [extract-protects - (lambda (phase) - (let ([a (assq phase provides)]) - (and a - (let ([p (map provided-protected? (append (cadr a) - (caddr a)))]) - (if (ormap values p) - (list->vector p) - #f)))))] - [list->vector/#f (lambda (default l) - (if (andmap (lambda (x) (equal? x default)) l) - #f - (list->vector l)))] - [l - (let loop ([l other-requires]) - (match l - [(list) - empty] - [(list-rest (cons phase reqs) rst) - (list* phase reqs (loop rst))]))] - [l (cons (length other-requires) l)] - [l (cons (lookup-req #f) l)] ; dt-requires - [l (cons (lookup-req -1) l)] ; tt-requires - [l (cons (lookup-req 1) l)] ; et-requires - [l (cons (lookup-req 0) l)] ; requires - [l (cons (list->vector body) l)] - [l (cons (list->vector - (for/list ([i (in-list syntax-body)]) - (define (maybe-one l) ;; a single symbol is ok - (if (and (pair? l) (null? (cdr l))) - (car l) - l)) - (match i - [(struct def-syntaxes (ids rhs prefix max-let-depth)) - (vector (maybe-one ids) rhs max-let-depth prefix #f)] - [(struct def-for-syntax (ids rhs prefix max-let-depth)) - (vector (maybe-one ids) rhs max-let-depth prefix #t)]))) - l)] - [l (append (apply - append - (map (lambda (l) - (let ([phase (car l)] - [all (append (cadr l) (caddr l))]) - (list phase - (list->vector/#f #f (map provided-insp all)) - (list->vector/#f 0 (map (lambda (p) (= 1 (provided-src-phase p))) - all)) - (list->vector/#f #f (map (lambda (p) - (if (eq? (provided-nom-src p) - (provided-src p)) - #f ; #f means "same as src" - (provided-nom-src p))) - all)) - (list->vector (map provided-src-name all)) - (list->vector (map provided-src all)) - (list->vector (map provided-name all)) - (length (cadr l)) - (length all)))) - provides)) - l)] - [l (cons (length provides) l)] ; number of provide sets - [l (cons (extract-protects 0) l)] ; protects - [l (cons (extract-protects 1) l)] ; et protects - [l (list* (list->vector (car unexported)) (length (car unexported)) l)] ; indirect-provides - [l (list* (list->vector (cadr unexported)) (length (cadr unexported)) l)] ; indirect-syntax-provides - [l (list* (list->vector (caddr unexported)) (length (caddr unexported)) l)] ; indirect-et-provides - [l (cons prefix l)] - [l (cons dummy l)] - [l (cons max-let-depth l)] - [l (cons internal-context l)] ; module->namespace syntax - [l (list* #f #f l)] ; obsolete `functional?' info - [l (cons lang-info l)] ; lang-info - [l (cons self-modidx l)] - [l (cons srcname l)] - [l (cons name l)]) - (make-module-decl l)) - out)])) - + (let* ([lookup-req (lambda (phase) + (let ([a (assq phase requires)]) + (if a + (cdr a) + null)))] + [other-requires (filter (lambda (l) + (not (memq (car l) '(#f -1 0 1)))) + requires)] + [extract-protects + (lambda (phase) + (let ([a (assq phase provides)]) + (and a + (let ([p (map provided-protected? (append (cadr a) + (caddr a)))]) + (if (ormap values p) + (list->vector p) + #f)))))] + [list->vector/#f (lambda (default l) + (if (andmap (lambda (x) (equal? x default)) l) + #f + (list->vector l)))] + [l + (let loop ([l other-requires]) + (match l + [(list) + empty] + [(list-rest (cons phase reqs) rst) + (list* phase reqs (loop rst))]))] + [l (cons (length other-requires) l)] + [l (cons (lookup-req #f) l)] ; dt-requires + [l (cons (lookup-req -1) l)] ; tt-requires + [l (cons (lookup-req 1) l)] ; et-requires + [l (cons (lookup-req 0) l)] ; requires + [l (cons (list->vector body) l)] + [l (cons (list->vector + (for/list ([i (in-list syntax-body)]) + (define (maybe-one l) ;; a single symbol is ok + (if (and (pair? l) (null? (cdr l))) + (car l) + l)) + (match i + [(struct def-syntaxes (ids rhs prefix max-let-depth)) + (vector (maybe-one ids) rhs max-let-depth prefix #f)] + [(struct def-for-syntax (ids rhs prefix max-let-depth)) + (vector (maybe-one ids) rhs max-let-depth prefix #t)]))) + l)] + [l (append (apply + append + (map (lambda (l) + (let ([phase (car l)] + [all (append (cadr l) (caddr l))]) + (list phase + (list->vector/#f #f (map provided-insp all)) + (list->vector/#f 0 (map (lambda (p) (= 1 (provided-src-phase p))) + all)) + (list->vector/#f #f (map (lambda (p) + (if (eq? (provided-nom-src p) + (provided-src p)) + #f ; #f means "same as src" + (provided-nom-src p))) + all)) + (list->vector (map provided-src-name all)) + (list->vector (map provided-src all)) + (list->vector (map provided-name all)) + (length (cadr l)) + (length all)))) + provides)) + l)] + [l (cons (length provides) l)] ; number of provide sets + [l (cons (extract-protects 0) l)] ; protects + [l (cons (extract-protects 1) l)] ; et protects + [l (list* (list->vector (car unexported)) (length (car unexported)) l)] ; indirect-provides + [l (list* (list->vector (cadr unexported)) (length (cadr unexported)) l)] ; indirect-syntax-provides + [l (list* (list->vector (caddr unexported)) (length (caddr unexported)) l)] ; indirect-et-provides + [l (cons prefix l)] + [l (cons dummy l)] + [l (cons max-let-depth l)] + [l (cons internal-context l)] ; module->namespace syntax + [l (list* #f #f l)] ; obsolete `functional?' info + [l (cons lang-info l)] ; lang-info + [l (cons self-modidx l)] + [l (cons srcname l)] + [l (cons name l)]) + (out-marshaled module-type-num + l + out))])) (define (lookup-encoded-wrapped w out) (hash-ref! (out-encoded-wraps out) w diff --git a/collects/compiler/zo-parse.rkt b/collects/compiler/zo-parse.rkt index 7f8770ee44..a0f156aeac 100644 --- a/collects/compiler/zo-parse.rkt +++ b/collects/compiler/zo-parse.rkt @@ -200,9 +200,7 @@ (make-case-lam (car v) (cdr v))) (define (read-begin0 v) - (match v - [(struct seq (exprs)) - (make-beg0 exprs)])) + (make-beg0 v)) (define (read-boxenv v) (make-boxenv (car v) (cdr v))) @@ -213,7 +211,7 @@ (define (read-apply-values v) (make-apply-values (car v) (cdr v))) (define (read-splice v) - (make-splice (seq-forms v))) + (make-splice v)) (define (in-list* l n) (make-do-sequence @@ -303,51 +301,39 @@ ;; ---------------------------------------- ;; Unmarshal dispatch for various types -(define (read-more-syntax v) - (let ([id (car v)] - [v (cdr v)]) - ;; This is the ..._EXPD mapping from "schpriv.h": - (case id - [(0) (read-define-values v)] - [(1) (read-define-syntax v)] - [(2) (read-set! v)] - [(3) v] ; a case-lam already - [(4) (read-begin0 v)] - [(5) (read-boxenv v)] - [(6) (read-module-wrap v)] - [(7) (read-require v)] - [(8) (read-define-for-syntax v)] - [(9) (read-#%variable-ref v)] - [(10) (read-apply-values v)] - [(11) (read-splice v)] - [else (error 'read-mode-unsyntax "unknown id: ~e" id)]))) - ;; Type mappings from "stypes.h": (define (int->type i) (case i [(0) 'toplevel-type] - [(3) 'syntax-type] - [(7) 'sequence-type] - [(9) 'unclosed-procedure-type] - [(10) 'let-value-type] - [(11) 'let-void-type] - [(12) 'letrec-type] - [(14) 'with-cont-mark-type] - [(15) 'quote-syntax-type] - [(24) 'variable-type] - [(25) 'module-variable-type] - [(99) 'case-lambda-sequence-type] - [(100) 'begin0-sequence-type] - [(103) 'module-type] - [(105) 'resolve-prefix-type] - [(154) 'free-id-info-type] + [(6) 'sequence-type] + [(8) 'unclosed-procedure-type] + [(9) 'let-value-type] + [(10) 'let-void-type] + [(11) 'letrec-type] + [(13) 'with-cont-mark-type] + [(14) 'quote-syntax-type] + [(15) 'define-values-type] + [(16) 'define-syntaxes-type] + [(17) 'define-for-syntax-type] + [(18) 'set-bang-type] + [(19) 'boxenv-type] + [(20) 'begin0-sequence-type] + [(21) 'splice-sequence-type] + [(22) 'require-form-type] + [(23) 'varref-form-type] + [(24) 'apply-values-type] + [(25) 'case-lambda-sequence-type] + [(26) 'module-type] + [(34) 'variable-type] + [(35) 'module-variable-type] + [(112) 'resolve-prefix-type] + [(161) 'free-id-info-type] [else (error 'int->type "unknown type: ~e" i)])) (define type-readers (make-immutable-hash (list (cons 'toplevel-type read-toplevel) - (cons 'syntax-type read-more-syntax) (cons 'sequence-type read-sequence) (cons 'unclosed-procedure-type read-unclosed-procedure) (cons 'let-value-type read-let-value) @@ -359,10 +345,19 @@ (cons 'module-variable-type do-not-read-variable) (cons 'compilation-top-type read-compilation-top) (cons 'case-lambda-sequence-type read-case-lambda) - (cons 'begin0-sequence-type read-sequence) + (cons 'begin0-sequence-type read-begin0) (cons 'module-type read-module) (cons 'resolve-prefix-type read-resolve-prefix) - (cons 'free-id-info-type read-free-id-info)))) + (cons 'free-id-info-type read-free-id-info) + (cons 'define-values-type read-define-values) + (cons 'define-syntaxes-type read-define-syntax) + (cons 'define-for-syntax-type read-define-for-syntax) + (cons 'set-bang-type read-set!) + (cons 'boxenv-type read-boxenv) + (cons 'require-form-type read-require) + (cons 'varref-form-type read-#%variable-ref) + (cons 'apply-values-type read-apply-values) + (cons 'sequence-splice-type read-splice)))) (define (get-reader type) (hash-ref type-readers type diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 8d06c3db18..8349c0f7e0 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,59 +1,59 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,52,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,53,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,13,0,22, -0,27,0,32,0,39,0,46,0,51,0,55,0,59,0,66,0,79,0,82,0, +0,29,0,33,0,40,0,44,0,49,0,52,0,57,0,70,0,75,0,82,0, 88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,0,165, 0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,144,1, 177,1,236,1,46,2,124,2,190,2,195,2,215,2,108,3,128,3,180,3,246, -3,131,4,17,5,69,5,92,5,171,5,0,0,122,7,0,0,69,35,37,109, -105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,108,101, -116,42,64,99,111,110,100,66,100,101,102,105,110,101,66,108,101,116,114,101,99, -64,119,104,101,110,63,108,101,116,63,97,110,100,66,117,110,108,101,115,115,72, -112,97,114,97,109,101,116,101,114,105,122,101,62,111,114,65,113,117,111,116,101, +3,131,4,17,5,69,5,92,5,171,5,0,0,119,7,0,0,69,35,37,109, +105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,66,108,101, +116,114,101,99,63,108,101,116,66,100,101,102,105,110,101,63,97,110,100,64,108, +101,116,42,62,111,114,64,119,104,101,110,72,112,97,114,97,109,101,116,101,114, +105,122,101,64,99,111,110,100,66,117,110,108,101,115,115,65,113,117,111,116,101, 29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35,37, 112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,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,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,115,97,36,11,8,240,235,83,0,0,95,159, -2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,4,2,2,2, -11,2,2,2,5,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10, -2,2,2,6,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,235,83, +2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,5,2,2,2, +6,2,2,2,7,2,2,2,9,2,2,2,8,2,2,2,4,2,2,2,10, +2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,235,83, 0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2,2, -3,96,38,11,8,240,235,83,0,0,16,0,96,11,11,8,240,235,83,0,0, +3,96,11,11,8,240,235,83,0,0,16,0,96,38,11,8,240,235,83,0,0, 16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,114,101, 8,32,8,31,8,30,8,29,8,28,93,8,224,242,83,0,0,95,9,8,224, 242,83,0,0,2,2,27,248,22,155,4,195,249,22,148,4,80,158,39,36,251, 22,83,2,17,248,22,98,199,12,249,22,73,2,18,248,22,100,201,27,248,22, 155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,17,248,22,98,199,249, 22,73,2,18,248,22,100,201,12,27,248,22,75,248,22,155,4,196,28,248,22, -81,193,20,15,159,37,36,37,28,248,22,81,248,22,75,194,248,22,74,193,249, -22,148,4,80,158,39,36,251,22,83,2,17,248,22,74,199,249,22,73,2,10, +81,193,20,14,159,37,36,37,28,248,22,81,248,22,75,194,248,22,74,193,249, +22,148,4,80,158,39,36,251,22,83,2,17,248,22,74,199,249,22,73,2,7, 248,22,75,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28,16, 4,11,11,2,19,3,1,8,101,110,118,49,51,55,49,57,16,4,11,11,2, 20,3,1,8,101,110,118,49,51,55,50,48,93,8,224,243,83,0,0,95,9, 8,224,243,83,0,0,2,2,27,248,22,75,248,22,155,4,196,28,248,22,81, -193,20,15,159,37,36,37,28,248,22,81,248,22,75,194,248,22,74,193,249,22, +193,20,14,159,37,36,37,28,248,22,81,248,22,75,194,248,22,74,193,249,22, 148,4,80,158,39,36,250,22,83,2,21,248,22,83,249,22,83,248,22,83,2, -22,248,22,74,201,251,22,83,2,17,2,22,2,22,249,22,73,2,13,248,22, +22,248,22,74,201,251,22,83,2,17,2,22,2,22,249,22,73,2,9,248,22, 75,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,11,11, 2,19,3,1,8,101,110,118,49,51,55,50,50,16,4,11,11,2,20,3,1, 8,101,110,118,49,51,55,50,51,93,8,224,244,83,0,0,95,9,8,224,244, 83,0,0,2,2,248,22,155,4,193,27,248,22,155,4,194,249,22,73,248,22, 83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,1,249, 22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23,198,2, -27,249,22,2,32,0,89,163,8,36,37,43,11,9,222,33,40,248,22,155,4, +27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,155,4, 248,22,98,23,200,2,250,22,83,2,23,248,22,83,249,22,83,248,22,83,248, 22,74,23,204,2,250,22,84,2,24,249,22,2,22,74,23,204,2,248,22,100, 23,206,2,249,22,73,248,22,74,23,202,1,249,22,2,22,98,23,200,1,250, -22,84,2,21,249,22,2,32,0,89,163,8,36,37,47,11,9,222,33,41,248, +22,84,2,21,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,41,248, 22,155,4,248,22,74,201,248,22,75,198,27,248,22,155,4,194,249,22,73,248, 22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,1, -249,22,148,4,80,158,39,36,250,22,84,2,23,249,22,2,32,0,89,163,8, +249,22,148,4,80,158,39,36,250,22,84,2,23,249,22,2,32,0,88,163,8, 36,37,47,11,9,222,33,43,248,22,155,4,248,22,74,201,248,22,75,198,27, 248,22,75,248,22,155,4,196,27,248,22,155,4,248,22,74,195,249,22,148,4, 80,158,40,36,28,248,22,81,195,250,22,84,2,21,9,248,22,75,199,250,22, -83,2,9,248,22,83,248,22,74,199,250,22,84,2,4,248,22,75,201,248,22, +83,2,5,248,22,83,248,22,74,199,250,22,84,2,8,248,22,75,201,248,22, 75,202,27,248,22,75,248,22,155,4,23,197,1,27,249,22,1,22,87,249,22, 2,22,155,4,248,22,155,4,248,22,74,199,249,22,148,4,80,158,40,36,251, 22,83,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110, @@ -61,13 +61,13 @@ 114,97,109,101,116,101,114,105,122,97,116,105,111,110,21,95,1,27,99,111,110, 116,105,110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105, 114,115,116,11,2,25,201,250,22,84,2,21,9,248,22,75,203,27,248,22,75, -248,22,155,4,196,28,248,22,81,193,20,15,159,37,36,37,249,22,148,4,80, +248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,249,22,148,4,80, 158,39,36,27,248,22,155,4,248,22,74,197,28,249,22,135,9,62,61,62,248, 22,149,4,248,22,98,196,250,22,83,2,21,248,22,83,249,22,83,21,93,2, -26,248,22,74,199,250,22,84,2,5,249,22,83,2,26,249,22,83,248,22,107, +26,248,22,74,199,250,22,84,2,12,249,22,83,2,26,249,22,83,248,22,107, 203,2,26,248,22,75,202,251,22,83,2,17,28,249,22,135,9,248,22,149,4, 248,22,74,200,64,101,108,115,101,10,248,22,74,197,250,22,84,2,21,9,248, -22,75,200,249,22,73,2,5,248,22,75,202,100,8,32,8,31,8,30,8,29, +22,75,200,249,22,73,2,12,248,22,75,202,100,8,32,8,31,8,30,8,29, 8,28,16,4,11,11,2,19,3,1,8,101,110,118,49,51,55,52,53,16,4, 11,11,2,20,3,1,8,101,110,118,49,51,55,52,54,93,8,224,245,83,0, 0,18,16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,245,83,0, @@ -75,32 +75,32 @@ 248,22,58,248,22,149,4,248,22,74,197,250,22,83,2,27,248,22,83,248,22, 74,199,248,22,98,198,27,248,22,149,4,248,22,74,197,250,22,83,2,27,248, 22,83,248,22,74,197,250,22,84,2,24,248,22,75,199,248,22,75,202,159,36, -20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,2,2, -11,11,11,10,36,80,158,36,36,20,105,159,36,16,0,16,0,16,1,2,3, -37,16,0,36,16,0,36,11,11,39,36,11,11,11,16,10,2,4,2,5,2, -6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,16,10,11,11,11,11, -11,11,11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2, -10,2,11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36, -11,11,11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159, -36,36,36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,11,89,163, -8,36,37,53,37,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0, -11,16,5,2,8,89,163,8,36,37,53,37,9,223,0,33,35,36,20,105,159, -36,16,1,2,3,16,0,11,16,5,2,10,89,163,8,36,37,53,37,9,223, -0,33,36,36,20,105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13, -89,163,8,36,37,56,37,9,223,0,33,38,36,20,105,159,36,16,1,2,3, -16,1,33,39,11,16,5,2,9,89,163,8,36,37,58,37,9,223,0,33,42, -36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,7,89,163,8,36,37, -53,37,9,223,0,33,44,36,20,105,159,36,16,1,2,3,16,0,11,16,5, -2,4,89,163,8,36,37,54,37,9,223,0,33,45,36,20,105,159,36,16,1, -2,3,16,0,11,16,5,2,12,89,163,8,36,37,55,37,9,223,0,33,46, -36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,5,89,163,8,36,37, -58,37,9,223,0,33,47,36,20,105,159,36,16,1,2,3,16,1,33,49,11, -16,5,2,6,89,163,8,36,37,54,37,9,223,0,33,50,36,20,105,159,36, -16,1,2,3,16,0,11,16,0,94,2,15,2,16,93,2,15,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2057); +20,112,159,36,16,1,11,16,0,20,26,145,2,1,2,1,2,2,11,11,11, +10,36,80,158,36,36,20,112,159,36,16,0,16,0,16,1,2,3,37,16,0, +36,16,0,36,11,11,39,36,11,11,11,16,10,2,4,2,5,2,6,2,7, +2,8,2,9,2,10,2,11,2,12,2,13,16,10,11,11,11,11,11,11,11, +11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, +2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11, +11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,14,159,36,36,36, +36,20,112,159,36,16,0,16,1,33,33,10,16,5,2,13,88,163,8,36,37, +53,37,9,223,0,33,34,36,20,112,159,36,16,1,2,3,16,0,11,16,5, +2,10,88,163,8,36,37,53,37,9,223,0,33,35,36,20,112,159,36,16,1, +2,3,16,0,11,16,5,2,7,88,163,8,36,37,53,37,9,223,0,33,36, +36,20,112,159,36,16,1,2,3,16,1,33,37,11,16,5,2,9,88,163,8, +36,37,56,37,9,223,0,33,38,36,20,112,159,36,16,1,2,3,16,1,33, +39,11,16,5,2,5,88,163,8,36,37,58,37,9,223,0,33,42,36,20,112, +159,36,16,1,2,3,16,0,11,16,5,2,4,88,163,8,36,37,53,37,9, +223,0,33,44,36,20,112,159,36,16,1,2,3,16,0,11,16,5,2,8,88, +163,8,36,37,54,37,9,223,0,33,45,36,20,112,159,36,16,1,2,3,16, +0,11,16,5,2,11,88,163,8,36,37,55,37,9,223,0,33,46,36,20,112, +159,36,16,1,2,3,16,0,11,16,5,2,12,88,163,8,36,37,58,37,9, +223,0,33,47,36,20,112,159,36,16,1,2,3,16,1,33,49,11,16,5,2, +6,88,163,8,36,37,54,37,9,223,0,33,50,36,20,112,159,36,16,1,2, +3,16,0,11,16,0,94,2,15,2,16,93,2,15,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2054); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,52,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,53,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,82,0,0,0,1,0,0,8,0,21,0,26, 0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200,0, 231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1,143, @@ -109,7 +109,7 @@ 6,33,7,119,7,219,7,47,8,61,8,194,8,168,9,252,9,10,10,31,11, 235,11,249,11,141,16,156,17,45,18,30,19,12,20,19,20,98,20,179,20,6, 21,21,21,31,21,164,25,161,30,184,30,201,30,149,32,252,32,10,33,170,33, -107,35,116,35,125,35,151,35,26,36,0,0,166,39,0,0,67,35,37,117,116, +107,35,116,35,125,35,151,35,23,36,0,0,134,39,0,0,67,35,37,117,116, 105,108,115,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,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111, @@ -139,14 +139,14 @@ 102,105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,6, 11,11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97, 100,100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,72,99, -111,108,108,101,99,116,115,45,100,105,114,5,0,5,0,27,20,14,159,80,159, +111,108,108,101,99,116,115,45,100,105,114,5,0,5,0,27,20,13,159,80,159, 37,52,38,250,80,159,40,53,38,249,22,27,11,80,159,42,52,38,22,178,13, -10,248,22,185,5,23,196,2,28,248,22,184,6,23,194,2,12,87,94,248,22, -143,9,23,194,1,27,20,14,159,80,159,38,52,38,250,80,159,41,53,38,249, +10,248,22,185,5,23,196,2,28,248,22,184,6,23,194,2,12,86,94,248,22, +143,9,23,194,1,27,20,13,159,80,159,38,52,38,250,80,159,41,53,38,249, 22,27,11,80,159,43,52,38,22,178,13,10,248,22,185,5,23,197,2,28,248, -22,184,6,23,194,2,12,87,94,248,22,143,9,23,194,1,27,20,14,159,80, +22,184,6,23,194,2,12,86,94,248,22,143,9,23,194,1,27,20,13,159,80, 159,39,52,38,250,80,159,42,53,38,249,22,27,11,80,159,44,52,38,22,178, -13,10,248,22,185,5,23,198,2,28,248,22,184,6,23,194,2,12,87,94,248, +13,10,248,22,185,5,23,198,2,28,248,22,184,6,23,194,2,12,86,94,248, 22,143,9,23,194,1,248,80,159,40,57,37,197,28,248,22,81,23,195,2,9, 27,248,22,74,23,196,2,27,28,248,22,164,14,23,195,2,23,194,1,28,248, 22,163,14,23,195,2,249,22,165,14,23,196,1,250,80,158,43,50,248,22,180, @@ -157,8 +157,8 @@ 249,22,165,14,23,196,1,250,80,158,48,50,248,22,180,14,2,21,11,10,250, 80,158,46,50,248,22,180,14,2,21,23,197,1,10,28,23,193,2,249,22,73, 248,22,167,14,249,22,165,14,23,198,1,247,22,181,14,248,80,159,46,56,37, -248,22,75,23,199,1,87,94,23,193,1,248,80,159,44,56,37,248,22,75,23, -197,1,87,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2, +248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,56,37,248,22,75,23, +197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2, 9,27,248,22,74,23,195,2,27,28,248,22,164,14,23,195,2,23,194,1,28, 248,22,163,14,23,195,2,249,22,165,14,23,196,1,250,80,158,46,50,248,22, 180,14,2,21,11,10,250,80,158,44,50,248,22,180,14,2,21,23,197,1,10, @@ -175,8 +175,8 @@ 21,11,10,250,80,158,41,50,248,22,180,14,2,21,23,197,1,10,28,23,193, 2,249,22,73,248,22,167,14,249,22,165,14,23,198,1,247,22,181,14,248,80, 159,41,54,37,248,22,75,23,200,1,248,80,159,39,54,37,248,22,75,197,27, -248,22,140,14,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,189, -6,23,195,2,27,248,22,162,14,195,28,192,192,248,22,163,14,195,11,87,94, +248,22,140,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,189, +6,23,195,2,27,248,22,162,14,195,28,192,192,248,22,163,14,195,11,86,94, 28,28,248,22,141,14,23,195,2,10,28,248,22,140,14,23,195,2,10,28,248, 22,189,6,23,195,2,28,248,22,162,14,23,195,2,10,248,22,163,14,23,195, 2,11,12,250,22,171,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99, @@ -192,49 +192,49 @@ 47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23, 199,1,250,22,139,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92, 92,93,42,41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,22, -28,248,22,189,6,194,248,22,148,14,194,193,87,94,28,28,248,22,140,14,23, +28,248,22,189,6,194,248,22,148,14,194,193,86,94,28,28,248,22,140,14,23, 195,2,10,28,248,22,189,6,23,195,2,28,248,22,162,14,23,195,2,10,248, 22,163,14,23,195,2,11,12,250,22,171,9,23,196,2,2,23,23,197,2,28, 248,22,162,14,23,195,2,12,248,22,154,12,249,22,160,11,248,22,154,7,250, -22,173,7,2,24,23,200,1,23,201,1,247,22,23,87,94,28,28,248,22,140, +22,173,7,2,24,23,200,1,23,201,1,247,22,23,86,94,28,28,248,22,140, 14,23,195,2,10,28,248,22,189,6,23,195,2,28,248,22,162,14,23,195,2, 10,248,22,163,14,23,195,2,11,12,250,22,171,9,23,196,2,2,23,23,197, 2,28,248,22,162,14,23,195,2,12,248,22,154,12,249,22,160,11,248,22,154, -7,250,22,173,7,2,24,23,200,1,23,201,1,247,22,23,87,94,87,94,28, +7,250,22,173,7,2,24,23,200,1,23,201,1,247,22,23,86,94,86,94,28, 28,248,22,140,14,23,195,2,10,28,248,22,189,6,23,195,2,28,248,22,162, 14,23,195,2,10,248,22,163,14,23,195,2,11,12,250,22,171,9,195,2,23, 23,197,2,28,248,22,162,14,23,195,2,12,248,22,154,12,249,22,160,11,248, -22,154,7,250,22,173,7,2,24,199,23,201,1,247,22,23,249,22,3,89,163, -8,36,37,50,11,9,223,2,33,47,196,87,94,28,28,248,22,140,14,23,194, +22,154,7,250,22,173,7,2,24,199,23,201,1,247,22,23,249,22,3,88,163, +8,36,37,50,11,9,223,2,33,47,196,86,94,28,28,248,22,140,14,23,194, 2,10,28,248,22,189,6,23,194,2,28,248,22,162,14,23,194,2,10,248,22, 163,14,23,194,2,11,12,250,22,171,9,2,7,2,23,23,196,2,28,248,22, 162,14,23,194,2,12,248,22,154,12,249,22,160,11,248,22,154,7,250,22,173, -7,2,24,2,7,23,200,1,247,22,23,32,50,89,163,8,36,41,56,11,2, -26,222,33,51,28,248,22,81,23,197,2,87,94,23,196,1,28,23,197,2,196, -87,94,23,197,1,248,22,154,12,249,22,129,12,251,22,173,7,2,25,2,7, -28,248,22,81,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,158,14, +7,2,24,2,7,23,200,1,247,22,23,32,50,88,163,8,36,41,56,11,2, +26,222,33,51,28,248,22,81,23,197,2,86,94,23,196,1,28,23,197,2,196, +86,94,23,197,1,248,22,154,12,249,22,129,12,251,22,173,7,2,25,2,7, +28,248,22,81,23,203,2,86,94,23,202,1,23,201,1,250,22,1,22,158,14, 23,204,1,23,205,1,23,200,1,247,22,23,27,249,22,158,14,248,22,74,23, 200,2,23,197,2,28,248,22,153,14,23,194,2,27,250,22,1,22,158,14,23, 197,1,199,28,248,22,153,14,193,192,252,2,50,199,200,201,248,22,75,203,203, -252,2,50,198,199,200,248,22,75,202,202,87,94,87,94,87,94,28,28,248,22, +252,2,50,198,199,200,248,22,75,202,202,86,94,86,94,86,94,28,28,248,22, 140,14,23,194,2,10,28,248,22,189,6,23,194,2,28,248,22,162,14,23,194, 2,10,248,22,163,14,23,194,2,11,12,250,22,171,9,2,7,2,23,23,196, 2,28,248,22,162,14,23,194,2,12,248,22,154,12,249,22,160,11,248,22,154, -7,250,22,173,7,2,24,2,7,23,200,2,247,22,23,249,22,3,32,0,89, +7,250,22,173,7,2,24,2,7,23,200,2,247,22,23,249,22,3,32,0,88, 163,8,36,37,49,11,9,222,33,49,23,196,2,27,247,22,182,14,28,248,22, 81,23,194,2,248,22,154,12,249,22,129,12,251,22,173,7,2,25,2,7,28, -248,22,81,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,158,14,23, +248,22,81,23,203,2,86,94,23,202,1,23,201,1,250,22,1,22,158,14,23, 204,1,23,205,1,23,200,1,247,22,23,27,249,22,158,14,248,22,74,23,197, 2,23,197,2,28,248,22,153,14,23,194,2,27,250,22,1,22,158,14,23,197, 1,199,28,248,22,153,14,193,192,252,2,50,199,200,201,248,22,75,200,11,252, -2,50,198,199,200,248,22,75,199,11,87,94,28,28,248,22,140,14,23,194,2, +2,50,198,199,200,248,22,75,199,11,86,94,28,28,248,22,140,14,23,194,2, 10,28,248,22,189,6,23,194,2,28,248,22,162,14,23,194,2,10,248,22,163, 14,23,194,2,11,12,250,22,171,9,2,9,2,23,23,196,2,28,248,22,162, 14,23,194,2,12,248,22,154,12,249,22,160,11,248,22,154,7,250,22,173,7, -2,24,2,9,23,200,1,247,22,23,32,54,89,163,8,36,42,59,11,2,26, -222,33,55,28,248,22,81,23,198,2,87,95,23,197,1,23,194,1,28,23,198, -2,197,87,94,23,198,1,248,22,154,12,249,22,129,12,251,22,173,7,2,25, -2,9,28,248,22,81,23,204,2,87,94,23,203,1,23,202,1,250,22,1,22, +2,24,2,9,23,200,1,247,22,23,32,54,88,163,8,36,42,59,11,2,26, +222,33,55,28,248,22,81,23,198,2,86,95,23,197,1,23,194,1,28,23,198, +2,197,86,94,23,198,1,248,22,154,12,249,22,129,12,251,22,173,7,2,25, +2,9,28,248,22,81,23,204,2,86,94,23,203,1,23,202,1,250,22,1,22, 158,14,23,205,1,23,206,1,23,200,1,247,22,23,27,249,22,158,14,248,22, 74,23,201,2,23,198,2,28,248,22,153,14,23,194,2,27,250,22,1,22,158, 14,23,197,1,23,201,2,28,248,22,153,14,23,194,2,28,23,196,2,28,28, @@ -242,22 +242,22 @@ 14,197,196,27,248,22,128,7,23,195,2,27,28,249,22,188,3,23,196,2,40, 28,249,22,131,7,2,27,249,22,147,7,23,199,2,249,22,176,3,23,200,2, 40,249,22,148,7,250,22,147,7,23,200,1,36,249,22,176,3,23,201,1,40, -2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,152,14,249, +2,28,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,152,14,249, 22,158,14,198,23,196,1,11,192,253,2,54,200,201,202,203,248,22,75,205,28, 205,205,198,192,253,2,54,200,201,202,203,248,22,75,205,205,253,2,54,199,200, -201,202,248,22,75,204,204,87,95,87,94,28,28,248,22,140,14,193,10,28,248, +201,202,248,22,75,204,204,86,95,86,94,28,28,248,22,140,14,193,10,28,248, 22,189,6,193,28,248,22,162,14,193,10,248,22,163,14,193,11,12,250,22,171, 9,2,9,2,23,195,28,248,22,162,14,193,12,248,22,154,12,249,22,160,11, -248,22,154,7,250,22,173,7,2,24,2,9,199,247,22,23,87,94,87,94,28, +248,22,154,7,250,22,173,7,2,24,2,9,199,247,22,23,86,94,86,94,28, 28,248,22,140,14,23,195,2,10,28,248,22,189,6,23,195,2,28,248,22,162, 14,23,195,2,10,248,22,163,14,23,195,2,11,12,250,22,171,9,2,9,2, 23,23,197,2,28,248,22,162,14,23,195,2,12,248,22,154,12,249,22,160,11, 248,22,154,7,250,22,173,7,2,24,2,9,23,201,2,247,22,23,249,22,3, -32,0,89,163,8,36,37,49,11,9,222,33,53,23,197,2,249,22,158,14,27, +32,0,88,163,8,36,37,49,11,9,222,33,53,23,197,2,249,22,158,14,27, 247,22,182,14,253,2,54,23,199,2,201,23,203,1,23,204,1,23,199,1,11, -194,32,57,89,163,36,44,8,29,11,2,26,222,33,58,28,248,22,81,23,200, -2,87,95,23,199,1,23,198,1,28,23,200,2,199,87,94,23,200,1,248,23, -196,1,251,22,173,7,2,25,23,199,1,28,248,22,81,23,203,2,87,94,23, +194,32,57,88,163,36,44,8,29,11,2,26,222,33,58,28,248,22,81,23,200, +2,86,95,23,199,1,23,198,1,28,23,200,2,199,86,94,23,200,1,248,23, +196,1,251,22,173,7,2,25,23,199,1,28,248,22,81,23,203,2,86,94,23, 202,1,23,201,1,250,22,1,22,158,14,23,204,1,23,205,1,23,198,1,27, 249,22,158,14,248,22,74,23,203,2,23,199,2,28,248,22,153,14,23,194,2, 27,250,22,1,22,158,14,23,197,1,23,202,2,28,248,22,153,14,23,194,2, @@ -265,12 +265,12 @@ 27,28,248,22,140,14,23,202,2,248,22,144,14,23,202,2,23,201,2,27,248, 22,128,7,23,195,2,27,28,249,22,188,3,23,196,2,40,28,249,22,131,7, 2,27,249,22,147,7,23,199,2,249,22,176,3,23,200,2,40,249,22,148,7, -250,22,147,7,23,200,1,36,249,22,176,3,23,201,1,40,2,28,87,95,23, +250,22,147,7,23,200,1,36,249,22,176,3,23,201,1,40,2,28,86,95,23, 195,1,23,194,1,11,11,28,23,193,2,248,22,152,14,249,22,158,14,23,199, -2,23,196,1,11,192,27,248,22,75,23,203,1,27,28,23,204,2,87,94,23, -195,1,23,204,1,87,94,23,204,1,23,195,1,28,248,22,81,23,195,2,87, -95,23,202,1,23,194,1,28,23,193,2,192,87,94,23,193,1,248,23,200,1, -251,22,173,7,2,25,23,203,1,28,248,22,81,23,207,2,87,94,23,206,1, +2,23,196,1,11,192,27,248,22,75,23,203,1,27,28,23,204,2,86,94,23, +195,1,23,204,1,86,94,23,204,1,23,195,1,28,248,22,81,23,195,2,86, +95,23,202,1,23,194,1,28,23,193,2,192,86,94,23,193,1,248,23,200,1, +251,22,173,7,2,25,23,203,1,28,248,22,81,23,207,2,86,94,23,206,1, 23,205,1,250,22,1,22,158,14,23,208,1,23,209,1,23,202,1,27,249,22, 158,14,248,22,74,23,198,2,23,203,2,28,248,22,153,14,23,194,2,27,250, 22,1,22,158,14,23,197,1,23,206,2,28,248,22,153,14,23,194,2,28,23, @@ -278,28 +278,28 @@ 205,248,22,144,14,205,204,27,248,22,128,7,23,195,2,27,28,249,22,188,3, 23,196,2,40,28,249,22,131,7,2,27,249,22,147,7,23,199,2,249,22,176, 3,23,200,2,40,249,22,148,7,250,22,147,7,23,200,1,36,249,22,176,3, -23,201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248, +23,201,1,40,2,28,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248, 22,152,14,249,22,158,14,198,23,196,1,11,192,26,8,2,57,206,23,15,23, 16,23,17,23,18,23,19,248,22,75,204,28,202,202,200,192,26,8,2,57,206, 23,15,23,16,23,17,23,18,23,19,248,22,75,204,202,26,8,2,57,205,206, 23,15,23,16,23,17,23,18,248,22,75,203,201,192,27,248,22,75,23,203,1, -28,248,22,81,23,194,2,87,95,23,201,1,23,193,1,28,23,203,2,202,87, +28,248,22,81,23,194,2,86,95,23,201,1,23,193,1,28,23,203,2,202,86, 94,23,203,1,248,23,199,1,251,22,173,7,2,25,23,202,1,28,248,22,81, -23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,158,14,23,207,1,23, +23,206,2,86,94,23,205,1,23,204,1,250,22,1,22,158,14,23,207,1,23, 208,1,23,201,1,27,249,22,158,14,248,22,74,23,197,2,23,202,2,28,248, 22,153,14,23,194,2,27,250,22,1,22,158,14,23,197,1,23,205,2,28,248, 22,153,14,23,194,2,28,23,203,2,28,28,248,22,152,14,249,22,158,14,195, 205,10,27,28,248,22,140,14,204,248,22,144,14,204,203,27,248,22,128,7,23, 195,2,27,28,249,22,188,3,23,196,2,40,28,249,22,131,7,2,27,249,22, 147,7,23,199,2,249,22,176,3,23,200,2,40,249,22,148,7,250,22,147,7, -23,200,1,36,249,22,176,3,23,201,1,40,2,28,87,95,23,195,1,23,194, +23,200,1,36,249,22,176,3,23,201,1,40,2,28,86,95,23,195,1,23,194, 1,11,11,28,23,193,2,248,22,152,14,249,22,158,14,198,23,196,1,11,192, 26,8,2,57,205,206,23,15,23,16,23,17,23,18,248,22,75,203,28,23,20, 23,20,200,192,26,8,2,57,205,206,23,15,23,16,23,17,23,18,248,22,75, 203,23,20,26,8,2,57,204,205,206,23,15,23,16,23,17,248,22,75,202,23, -19,87,94,23,193,1,27,248,22,75,23,202,1,28,248,22,81,23,194,2,87, -95,23,200,1,23,193,1,28,23,202,2,201,87,94,23,202,1,248,23,198,1, -251,22,173,7,2,25,23,201,1,28,248,22,81,23,205,2,87,94,23,204,1, +19,86,94,23,193,1,27,248,22,75,23,202,1,28,248,22,81,23,194,2,86, +95,23,200,1,23,193,1,28,23,202,2,201,86,94,23,202,1,248,23,198,1, +251,22,173,7,2,25,23,201,1,28,248,22,81,23,205,2,86,94,23,204,1, 23,203,1,250,22,1,22,158,14,23,206,1,23,207,1,23,200,1,27,249,22, 158,14,248,22,74,23,197,2,23,201,2,28,248,22,153,14,23,194,2,27,250, 22,1,22,158,14,23,197,1,23,204,2,28,248,22,153,14,23,194,2,28,23, @@ -307,53 +307,53 @@ 203,248,22,144,14,203,202,27,248,22,128,7,23,195,2,27,28,249,22,188,3, 23,196,2,40,28,249,22,131,7,2,27,249,22,147,7,23,199,2,249,22,176, 3,23,200,2,40,249,22,148,7,250,22,147,7,23,200,1,36,249,22,176,3, -23,201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248, +23,201,1,40,2,28,86,95,23,195,1,23,194,1,11,11,28,23,193,2,248, 22,152,14,249,22,158,14,198,23,196,1,11,192,26,8,2,57,204,205,206,23, 15,23,16,23,17,248,22,75,203,28,23,19,23,19,200,192,26,8,2,57,204, 205,206,23,15,23,16,23,17,248,22,75,203,23,19,26,8,2,57,203,204,205, 206,23,15,23,16,248,22,75,202,23,18,27,247,22,182,14,28,248,22,81,23, -194,2,87,94,23,198,1,248,23,196,1,251,22,173,7,2,25,23,199,1,28, -248,22,81,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,158,14,23, +194,2,86,94,23,198,1,248,23,196,1,251,22,173,7,2,25,23,199,1,28, +248,22,81,23,203,2,86,94,23,202,1,23,201,1,250,22,1,22,158,14,23, 204,1,23,205,1,23,198,1,27,249,22,158,14,248,22,74,23,197,2,23,199, 2,28,248,22,153,14,23,194,2,27,250,22,1,22,158,14,23,197,1,23,202, 2,28,248,22,153,14,23,194,2,28,23,200,2,28,28,248,22,152,14,249,22, 158,14,195,202,10,27,28,248,22,140,14,201,248,22,144,14,201,200,27,248,22, 128,7,23,195,2,27,28,249,22,188,3,23,196,2,40,28,249,22,131,7,2, 27,249,22,147,7,23,199,2,249,22,176,3,23,200,2,40,249,22,148,7,250, -22,147,7,23,200,1,36,249,22,176,3,23,201,1,40,2,28,87,95,23,195, +22,147,7,23,200,1,36,249,22,176,3,23,201,1,40,2,28,86,95,23,195, 1,23,194,1,11,11,28,23,193,2,248,22,152,14,249,22,158,14,198,23,196, 1,11,192,26,8,2,57,202,203,204,205,206,23,15,248,22,75,203,200,192,26, 8,2,57,202,203,204,205,206,23,15,248,22,75,203,11,26,8,2,57,201,202, -203,204,205,206,248,22,75,202,11,87,95,28,28,248,22,141,14,23,194,2,10, +203,204,205,206,248,22,75,202,11,86,95,28,28,248,22,141,14,23,194,2,10, 28,248,22,140,14,23,194,2,10,28,248,22,189,6,23,194,2,28,248,22,162, 14,23,194,2,10,248,22,163,14,23,194,2,11,12,252,22,171,9,23,200,2, 2,29,36,23,198,2,23,199,2,28,28,248,22,189,6,23,195,2,10,248,22, -178,7,23,195,2,87,94,23,194,1,12,252,22,171,9,23,200,2,2,30,37, -23,198,2,23,199,1,91,159,39,11,90,161,39,36,11,248,22,161,14,23,197, -2,87,94,23,195,1,87,94,28,192,12,250,22,172,9,23,201,1,2,31,23, -199,1,249,22,7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248, +178,7,23,195,2,86,94,23,194,1,12,252,22,171,9,23,200,2,2,30,37, +23,198,2,23,199,1,90,159,39,11,89,161,39,36,11,248,22,161,14,23,197, +2,86,94,23,195,1,86,94,28,192,12,250,22,172,9,23,201,1,2,31,23, +199,1,249,22,7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248, 22,141,14,23,196,2,10,28,248,22,140,14,23,196,2,10,28,248,22,189,6, 23,196,2,28,248,22,162,14,23,196,2,10,248,22,163,14,23,196,2,11,12, 252,22,171,9,2,11,2,29,36,23,200,2,23,201,2,28,28,248,22,189,6, 23,197,2,10,248,22,178,7,23,197,2,12,252,22,171,9,2,11,2,30,37, -23,200,2,23,201,2,91,159,39,11,90,161,39,36,11,248,22,161,14,23,199, -2,87,94,23,195,1,87,94,28,192,12,250,22,172,9,2,11,2,31,23,201, +23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248,22,161,14,23,199, +2,86,94,23,195,1,86,94,28,192,12,250,22,172,9,2,11,2,31,23,201, 2,249,22,7,194,195,27,249,22,150,14,250,22,138,15,0,20,35,114,120,35, 34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,146,14,23, 201,1,28,248,22,189,6,23,203,2,249,22,140,8,23,204,1,8,63,23,202, -1,28,248,22,141,14,23,199,2,248,22,142,14,23,199,1,87,94,23,198,1, -247,22,143,14,28,248,22,140,14,194,249,22,158,14,195,194,192,91,159,38,11, -90,161,38,36,11,87,95,28,28,248,22,141,14,23,196,2,10,28,248,22,140, +1,28,248,22,141,14,23,199,2,248,22,142,14,23,199,1,86,94,23,198,1, +247,22,143,14,28,248,22,140,14,194,249,22,158,14,195,194,192,90,159,38,11, +89,161,38,36,11,86,95,28,28,248,22,141,14,23,196,2,10,28,248,22,140, 14,23,196,2,10,28,248,22,189,6,23,196,2,28,248,22,162,14,23,196,2, 10,248,22,163,14,23,196,2,11,12,252,22,171,9,2,12,2,29,36,23,200, 2,23,201,2,28,28,248,22,189,6,23,197,2,10,248,22,178,7,23,197,2, -12,252,22,171,9,2,12,2,30,37,23,200,2,23,201,2,91,159,39,11,90, -161,39,36,11,248,22,161,14,23,199,2,87,94,23,195,1,87,94,28,192,12, +12,252,22,171,9,2,12,2,30,37,23,200,2,23,201,2,90,159,39,11,89, +161,39,36,11,248,22,161,14,23,199,2,86,94,23,195,1,86,94,28,192,12, 250,22,172,9,2,12,2,31,23,201,2,249,22,7,194,195,27,249,22,150,14, 249,22,190,7,250,22,139,15,0,9,35,114,120,35,34,91,46,93,34,248,22, 146,14,23,203,1,6,1,1,95,28,248,22,189,6,23,202,2,249,22,140,8, 23,203,1,8,63,23,201,1,28,248,22,141,14,23,199,2,248,22,142,14,23, -199,1,87,94,23,198,1,247,22,143,14,28,248,22,140,14,194,249,22,158,14, +199,1,86,94,23,198,1,247,22,143,14,28,248,22,140,14,194,249,22,158,14, 195,194,192,249,247,22,154,5,194,11,27,247,22,184,14,249,80,158,39,49,28, 23,195,2,27,248,22,145,8,2,32,28,192,192,2,33,2,34,27,28,23,196, 1,250,22,158,14,248,22,180,14,2,35,247,22,143,8,2,36,11,27,248,80, @@ -366,161 +366,161 @@ 2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,158,14,248,22,180, 14,2,35,247,22,143,8,2,36,11,27,248,80,159,42,56,37,250,22,87,23, 203,1,248,22,83,248,22,180,14,2,37,23,204,1,28,193,249,22,73,195,194, -192,32,67,89,163,8,36,39,8,45,11,2,20,222,33,69,0,8,35,114,120, -35,34,92,34,34,27,249,22,191,14,23,197,2,23,198,2,28,23,193,2,87, +192,32,67,88,163,8,36,39,8,45,11,2,20,222,33,69,0,8,35,114,120, +35,34,92,34,34,27,249,22,191,14,23,197,2,23,198,2,28,23,193,2,86, 94,23,196,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, -22,191,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22, +22,191,14,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22, 98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,191,14,23,205,2,23, -196,2,28,23,193,2,87,94,23,194,1,27,248,22,98,23,195,2,27,27,248, -22,107,23,197,1,27,249,22,191,14,23,209,2,23,196,2,28,23,193,2,87, +196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248, +22,107,23,197,1,27,249,22,191,14,23,209,2,23,196,2,28,23,193,2,86, 94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, -22,191,14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22, +22,191,14,23,213,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22, 98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,191,14,23,217,2,23, -196,2,28,23,193,2,87,94,23,194,1,27,248,22,98,23,195,2,27,27,248, -22,107,23,197,1,27,249,22,191,14,23,221,2,23,196,2,28,23,193,2,87, +196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248, +22,107,23,197,1,27,249,22,191,14,23,221,2,23,196,2,28,23,193,2,86, 94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, -22,191,14,23,224,33,0,0,0,2,23,196,2,28,23,193,2,87,94,23,194, +22,191,14,23,224,33,0,0,0,2,23,196,2,28,23,193,2,86,94,23,194, 1,27,248,22,98,23,195,2,27,250,2,67,23,224,35,0,0,0,2,23,224, 36,0,0,0,1,248,22,107,23,199,1,28,249,22,186,7,23,196,2,2,38, 249,22,87,23,224,34,0,0,0,2,194,249,22,73,248,22,149,14,28,249,22, 135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197, -1,194,87,95,23,223,1,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +1,194,86,95,23,223,1,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,224,32,0,0,0,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,222,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,220,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,218,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,216,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,214,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,212,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,210,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,208,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,206,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,204,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, 9,28,249,22,186,7,23,196,2,2,38,249,22,87,23,202,2,194,249,22,73, 248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68, -23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196, +23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,200,2,9,249,22,73,248,22,149,14,28,249,22,135, 9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1, -9,28,249,22,186,7,23,196,2,2,38,249,22,87,197,194,87,94,23,196,1, +9,28,249,22,186,7,23,196,2,2,38,249,22,87,197,194,86,94,23,196,1, 249,22,73,248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139, -15,2,68,23,200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186, -7,23,198,2,2,38,249,22,87,195,9,87,94,23,194,1,249,22,73,248,22, +15,2,68,23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186, +7,23,198,2,2,38,249,22,87,195,9,86,94,23,194,1,249,22,73,248,22, 149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,202, -1,2,39,23,199,1,9,87,95,28,28,248,22,178,7,23,195,2,10,248,22, +1,2,39,23,199,1,9,86,95,28,28,248,22,178,7,23,195,2,10,248,22, 189,6,23,195,2,12,250,22,171,9,2,15,6,21,21,98,121,116,101,32,115, 116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,23,197,2,28,28,248, 22,82,23,196,2,249,22,4,22,140,14,23,197,2,11,12,250,22,171,9,2, 15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,23,198,2,27, 28,248,22,189,6,23,196,2,248,22,139,8,23,196,1,23,195,1,27,249,22, -191,14,23,197,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,98, +191,14,23,197,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 23,195,2,27,27,248,22,107,23,197,1,27,249,22,191,14,23,201,2,23,196, -2,28,23,193,2,87,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, -107,23,197,1,27,249,22,191,14,23,205,2,23,196,2,28,23,193,2,87,94, +2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, +107,23,197,1,27,249,22,191,14,23,205,2,23,196,2,28,23,193,2,86,94, 23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22, -191,14,23,209,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,98, +191,14,23,209,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 23,195,2,27,27,248,22,107,23,197,1,27,249,22,191,14,23,213,2,23,196, -2,28,23,193,2,87,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, -107,23,197,1,27,249,22,191,14,23,217,2,23,196,2,28,23,193,2,87,94, +2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, +107,23,197,1,27,249,22,191,14,23,217,2,23,196,2,28,23,193,2,86,94, 23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22, -191,14,23,221,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,98, +191,14,23,221,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 23,195,2,27,27,248,22,107,23,197,1,27,249,22,191,14,23,224,33,0,0, -0,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,98,23,195,2, +0,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2, 27,250,2,67,23,224,38,0,0,0,2,23,224,36,0,0,0,1,248,22,107, 23,199,1,28,249,22,186,7,23,196,2,2,38,249,22,87,23,224,37,0,0, 0,2,194,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147,8,2,22, -250,22,139,15,2,68,23,200,1,2,39,23,197,1,194,87,95,23,223,1,23, +250,22,139,15,2,68,23,200,1,2,39,23,197,1,194,86,95,23,223,1,23, 193,1,28,249,22,186,7,23,196,2,2,38,249,22,87,23,224,35,0,0,0, 2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147,8,2,22,250, 22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,186,7,23,196, 2,2,38,249,22,87,23,224,33,0,0,0,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,223,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 186,7,23,196,2,2,38,249,22,87,23,221,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,219,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 186,7,23,196,2,2,38,249,22,87,23,217,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,215,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 186,7,23,196,2,2,38,249,22,87,23,213,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,211,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 186,7,23,196,2,2,38,249,22,87,23,209,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,207,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 186,7,23,196,2,2,38,249,22,87,23,205,2,194,249,22,73,248,22,149,14, 28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2, -39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, +39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2,2,38,249, 22,87,23,203,2,9,249,22,73,248,22,149,14,28,249,22,135,9,247,22,147, 8,2,22,250,22,139,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, -186,7,23,196,2,2,38,249,22,87,200,194,87,94,23,199,1,249,22,73,248, +186,7,23,196,2,2,38,249,22,87,200,194,86,94,23,199,1,249,22,73,248, 22,149,14,28,249,22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23, -200,1,2,39,23,197,1,194,87,94,23,193,1,28,249,22,186,7,23,196,2, -2,38,249,22,87,198,9,87,94,23,197,1,249,22,73,248,22,149,14,28,249, +200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,186,7,23,196,2, +2,38,249,22,87,198,9,86,94,23,197,1,249,22,73,248,22,149,14,28,249, 22,135,9,247,22,147,8,2,22,250,22,139,15,2,68,23,200,1,2,39,23, -197,1,9,32,71,89,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120, -101,99,222,33,74,32,72,89,163,8,36,40,58,11,64,110,101,120,116,222,33, +197,1,9,32,71,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120, +101,99,222,33,74,32,72,88,163,8,36,40,58,11,64,110,101,120,116,222,33, 73,27,248,22,166,14,23,196,2,28,249,22,137,9,23,195,2,23,197,1,11, 28,248,22,162,14,23,194,2,27,249,22,158,14,23,197,1,23,196,1,28,23, -197,2,91,159,39,11,90,161,39,36,11,248,22,161,14,23,197,2,87,95,23, +197,2,90,159,39,11,89,161,39,36,11,248,22,161,14,23,197,2,86,95,23, 195,1,23,194,1,27,28,23,202,2,27,248,22,166,14,23,199,2,28,249,22, 137,9,23,195,2,23,200,2,11,28,248,22,162,14,23,194,2,250,2,71,23, 205,2,23,206,2,249,22,158,14,23,200,2,23,198,1,250,2,71,23,205,2, -23,206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22, +23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, 140,14,23,196,2,27,249,22,158,14,23,198,2,23,205,2,28,28,248,22,153, -14,193,10,248,22,152,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1, +14,193,10,248,22,152,14,193,192,11,11,28,23,193,2,192,86,94,23,193,1, 28,23,203,2,11,27,248,22,166,14,23,200,2,28,249,22,137,9,23,195,2, 23,201,1,11,28,248,22,162,14,23,194,2,250,2,71,23,206,1,23,207,1, -249,22,158,14,23,201,1,23,198,1,250,2,71,205,206,195,192,87,94,23,194, -1,28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,161,14,23,197,2, -87,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,166,14,23,199,2, +249,22,158,14,23,201,1,23,198,1,250,2,71,205,206,195,192,86,94,23,194, +1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,161,14,23,197,2, +86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,166,14,23,199,2, 28,249,22,137,9,23,195,2,23,200,2,11,28,248,22,162,14,23,194,2,250, 2,71,23,204,2,23,205,2,249,22,158,14,23,200,2,23,198,1,250,2,71, -23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27, +23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, 28,248,22,140,14,23,196,2,27,249,22,158,14,23,198,2,23,204,2,28,28, -248,22,153,14,193,10,248,22,152,14,193,192,11,11,28,23,193,2,192,87,94, +248,22,153,14,193,10,248,22,152,14,193,192,11,11,28,23,193,2,192,86,94, 23,193,1,28,23,202,2,11,27,248,22,166,14,23,200,2,28,249,22,137,9, 23,195,2,23,201,1,11,28,248,22,162,14,23,194,2,250,2,71,23,205,1, 23,206,1,249,22,158,14,23,201,1,23,198,1,250,2,71,204,205,195,192,28, -23,193,2,91,159,39,11,90,161,39,36,11,248,22,161,14,23,199,2,87,95, +23,193,2,90,159,39,11,89,161,39,36,11,248,22,161,14,23,199,2,86,95, 23,195,1,23,194,1,27,28,23,198,2,251,2,72,23,198,2,23,203,2,23, -201,2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,140, +201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,140, 14,195,27,249,22,158,14,197,200,28,28,248,22,153,14,193,10,248,22,152,14, -193,192,11,11,28,192,192,28,198,11,251,2,72,198,203,201,202,194,32,75,89, +193,192,11,11,28,192,192,28,198,11,251,2,72,198,203,201,202,194,32,75,88, 163,8,36,40,58,11,2,20,222,33,76,28,248,22,81,23,197,2,11,27,248, 22,165,14,248,22,74,23,199,2,27,249,22,158,14,23,196,1,23,197,2,28, -248,22,152,14,23,194,2,250,2,71,198,199,195,87,94,23,193,1,27,248,22, +248,22,152,14,23,194,2,250,2,71,198,199,195,86,94,23,193,1,27,248,22, 75,23,200,1,28,248,22,81,23,194,2,11,27,248,22,165,14,248,22,74,23, 196,2,27,249,22,158,14,23,196,1,23,200,2,28,248,22,152,14,23,194,2, -250,2,71,201,202,195,87,94,23,193,1,27,248,22,75,23,197,1,28,248,22, +250,2,71,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22, 81,23,194,2,11,27,248,22,165,14,248,22,74,195,27,249,22,158,14,23,196, 1,202,28,248,22,152,14,193,250,2,71,204,205,195,251,2,75,204,205,206,248, -22,75,199,87,95,28,28,248,22,140,14,23,195,2,10,28,248,22,189,6,23, +22,75,199,86,95,28,28,248,22,140,14,23,195,2,10,28,248,22,189,6,23, 195,2,28,248,22,162,14,23,195,2,10,248,22,163,14,23,195,2,11,12,250, 22,171,9,2,16,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110, 103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28, @@ -528,78 +528,76 @@ 14,23,196,2,10,248,22,163,14,23,196,2,11,248,22,162,14,23,196,2,11, 10,12,250,22,171,9,2,16,6,29,29,35,102,32,111,114,32,114,101,108,97, 116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198, -2,28,28,248,22,162,14,23,195,2,91,159,39,11,90,161,39,36,11,248,22, +2,28,28,248,22,162,14,23,195,2,90,159,39,11,89,161,39,36,11,248,22, 161,14,23,198,2,249,22,135,9,194,68,114,101,108,97,116,105,118,101,11,27, 248,22,145,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,41, 49,38,23,197,1,9,28,249,22,135,9,247,22,147,8,2,22,249,22,73,248, -22,149,14,5,1,46,194,192,87,94,23,194,1,9,28,248,22,81,23,194,2, +22,149,14,5,1,46,194,192,86,94,23,194,1,9,28,248,22,81,23,194,2, 11,27,248,22,165,14,248,22,74,23,196,2,27,249,22,158,14,23,196,1,23, -200,2,28,248,22,152,14,23,194,2,250,2,71,201,202,195,87,94,23,193,1, +200,2,28,248,22,152,14,23,194,2,250,2,71,201,202,195,86,94,23,193,1, 27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,165,14,248, 22,74,23,196,2,27,249,22,158,14,23,196,1,23,203,2,28,248,22,152,14, -23,194,2,250,2,71,204,205,195,87,94,23,193,1,27,248,22,75,23,197,1, +23,194,2,250,2,71,204,205,195,86,94,23,193,1,27,248,22,75,23,197,1, 28,248,22,81,23,194,2,11,27,248,22,165,14,248,22,74,195,27,249,22,158, 14,23,196,1,205,28,248,22,152,14,193,250,2,71,23,15,23,16,195,251,2, 75,23,15,23,16,23,17,248,22,75,199,27,248,22,165,14,23,196,1,28,248, 22,152,14,193,250,2,71,198,199,195,11,250,80,159,39,50,37,196,197,11,250, -80,159,39,50,37,196,11,11,87,94,249,22,178,6,247,22,150,5,195,248,22, -140,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,197,2,87,95,23, -196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,180,14,2,21,27, +80,159,39,50,37,196,11,11,86,94,249,22,178,6,247,22,150,5,195,248,22, +140,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,197,2,86,95,23, +196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,180,14,2,21,27, 250,80,159,42,50,37,23,197,1,11,11,27,248,22,131,4,23,199,1,27,28, -23,194,2,23,194,1,87,94,23,194,1,36,27,248,22,131,4,23,202,1,27, -28,23,194,2,23,194,1,87,94,23,194,1,36,249,22,181,5,23,199,1,83, -158,40,20,100,95,89,163,8,36,36,48,11,9,224,4,2,33,80,23,195,1, -23,197,1,27,248,22,166,5,23,195,1,248,80,159,39,57,37,193,159,36,20, -105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11,11, -11,11,11,10,43,80,158,36,36,20,105,159,40,16,18,2,2,2,3,2,4, -2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2, -15,2,16,2,17,30,2,19,1,20,112,97,114,97,109,101,116,101,114,105,122, -97,116,105,111,110,45,107,101,121,5,30,2,19,1,23,101,120,116,101,110,100, -45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,16,0,16, -0,36,16,0,36,16,4,2,6,2,5,2,3,2,10,40,11,11,39,36,11, -11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,2,4,2, -12,2,15,2,11,2,2,16,12,11,11,11,11,11,11,11,11,11,11,11,11, -16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2, -15,2,11,2,2,48,48,37,11,11,11,16,0,16,0,16,0,36,36,11,11, -11,11,16,0,16,0,16,0,36,36,16,0,16,20,83,158,36,16,2,89,163, -8,36,37,51,8,240,0,0,35,0,2,20,223,0,33,40,80,159,36,57,37, -83,158,36,16,2,89,163,8,36,37,56,8,240,0,64,16,0,2,20,223,0, -33,41,80,159,36,56,37,83,158,36,16,2,89,163,8,36,37,51,8,240,0, -64,8,0,2,20,223,0,33,42,80,159,36,55,37,83,158,36,16,2,89,163, -8,36,37,51,8,240,0,64,4,0,2,20,223,0,33,43,80,159,36,54,37, -83,158,36,16,2,32,0,89,163,36,37,45,11,2,2,222,33,44,80,159,36, -36,37,83,158,36,16,2,249,22,191,6,7,92,7,92,80,159,36,37,37,83, -158,36,16,2,89,163,36,37,54,38,2,4,223,0,33,45,80,159,36,38,37, -83,158,36,16,2,32,0,89,163,8,36,38,50,11,2,5,222,33,46,80,159, -36,39,37,83,158,36,16,2,32,0,89,163,8,36,39,51,11,2,6,222,33, -48,80,159,36,40,37,83,158,36,16,2,32,0,89,163,8,45,38,54,11,2, -7,222,33,52,80,159,36,41,37,83,158,36,16,2,32,0,89,163,45,39,53, -11,2,9,222,33,56,80,159,36,43,37,83,158,36,16,2,32,0,89,163,36, -41,59,11,2,8,222,33,59,80,159,36,42,37,83,158,36,16,2,32,0,89, -163,36,39,50,11,2,10,222,33,60,80,159,36,44,37,83,158,36,16,2,32, -0,89,163,36,38,53,11,2,11,222,33,61,80,159,36,45,37,83,158,36,16, -2,32,0,89,163,36,38,54,11,2,12,222,33,62,80,159,36,46,37,83,158, -36,16,2,32,0,89,163,36,37,44,11,2,13,222,33,63,80,159,36,47,37, -83,158,36,16,2,83,158,39,20,99,96,2,14,89,163,36,36,53,8,240,0, -32,4,0,9,223,0,33,64,89,163,36,37,54,8,240,0,32,8,0,9,223, -0,33,65,89,163,36,38,55,8,240,0,32,16,0,9,223,0,33,66,80,159, -36,48,37,83,158,36,16,2,27,248,22,187,14,248,22,139,8,27,28,249,22, -135,9,247,22,147,8,2,22,6,1,1,59,6,1,1,58,250,22,173,7,6, -14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196, -1,89,163,8,36,38,8,46,11,2,15,223,0,33,70,80,159,36,49,37,83, -158,36,16,2,83,158,39,20,99,96,2,16,89,163,8,36,39,8,24,8,128, -128,9,223,0,33,77,89,163,8,36,38,47,8,240,0,64,0,0,9,223,0, -33,78,89,163,8,36,37,46,8,240,0,64,0,0,9,223,0,33,79,80,159, -36,50,37,83,158,36,16,2,89,163,8,36,39,54,8,240,0,64,32,0,2, -17,223,0,33,81,80,159,36,51,37,94,29,94,2,18,68,35,37,107,101,114, -110,101,108,11,29,94,2,18,69,35,37,109,105,110,45,115,116,120,11,9,9, -9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 10355); +23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,131,4,23,202,1,27, +28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,181,5,23,199,1,20, +20,95,88,163,8,36,36,48,11,9,224,4,2,33,80,23,195,1,23,197,1, +27,248,22,166,5,23,195,1,248,80,159,39,57,37,193,159,36,20,112,159,36, +16,1,11,16,0,20,26,145,2,1,2,1,29,11,11,11,11,11,10,43,80, +158,36,36,20,112,159,40,16,18,2,2,2,3,2,4,2,5,2,6,2,7, +2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,30, +2,19,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45, +107,101,121,5,30,2,19,1,23,101,120,116,101,110,100,45,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,3,16,0,16,0,36,16,0,36,16, +4,2,6,2,5,2,3,2,10,40,11,11,39,36,11,11,11,16,12,2,9, +2,7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2, +2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,9,2,7, +2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2,2,48, +48,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0, +16,0,36,36,16,0,16,20,20,15,16,2,88,163,8,36,37,51,8,240,0, +0,35,0,2,20,223,0,33,40,80,159,36,57,37,20,15,16,2,88,163,8, +36,37,56,8,240,0,64,16,0,2,20,223,0,33,41,80,159,36,56,37,20, +15,16,2,88,163,8,36,37,51,8,240,0,64,8,0,2,20,223,0,33,42, +80,159,36,55,37,20,15,16,2,88,163,8,36,37,51,8,240,0,64,4,0, +2,20,223,0,33,43,80,159,36,54,37,20,15,16,2,32,0,88,163,36,37, +45,11,2,2,222,33,44,80,159,36,36,37,20,15,16,2,249,22,191,6,7, +92,7,92,80,159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,223, +0,33,45,80,159,36,38,37,20,15,16,2,32,0,88,163,8,36,38,50,11, +2,5,222,33,46,80,159,36,39,37,20,15,16,2,32,0,88,163,8,36,39, +51,11,2,6,222,33,48,80,159,36,40,37,20,15,16,2,32,0,88,163,8, +45,38,54,11,2,7,222,33,52,80,159,36,41,37,20,15,16,2,32,0,88, +163,45,39,53,11,2,9,222,33,56,80,159,36,43,37,20,15,16,2,32,0, +88,163,36,41,59,11,2,8,222,33,59,80,159,36,42,37,20,15,16,2,32, +0,88,163,36,39,50,11,2,10,222,33,60,80,159,36,44,37,20,15,16,2, +32,0,88,163,36,38,53,11,2,11,222,33,61,80,159,36,45,37,20,15,16, +2,32,0,88,163,36,38,54,11,2,12,222,33,62,80,159,36,46,37,20,15, +16,2,32,0,88,163,36,37,44,11,2,13,222,33,63,80,159,36,47,37,20, +15,16,2,20,25,96,2,14,88,163,36,36,53,8,240,0,32,4,0,9,223, +0,33,64,88,163,36,37,54,8,240,0,32,8,0,9,223,0,33,65,88,163, +36,38,55,8,240,0,32,16,0,9,223,0,33,66,80,159,36,48,37,20,15, +16,2,27,248,22,187,14,248,22,139,8,27,28,249,22,135,9,247,22,147,8, +2,22,6,1,1,59,6,1,1,58,250,22,173,7,6,14,14,40,91,94,126, +97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,88,163,8,36,38, +8,46,11,2,15,223,0,33,70,80,159,36,49,37,20,15,16,2,20,25,96, +2,16,88,163,8,36,39,8,24,8,128,128,9,223,0,33,77,88,163,8,36, +38,47,8,240,0,64,0,0,9,223,0,33,78,88,163,8,36,37,46,8,240, +0,64,0,0,9,223,0,33,79,80,159,36,50,37,20,15,16,2,88,163,8, +36,39,54,8,240,0,64,32,0,2,17,223,0,33,81,80,159,36,51,37,94, +29,94,2,18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37, +109,105,110,45,115,116,120,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 10323); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,52,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,53,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,57, -0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,186,1, +0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,181,1, 0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116, 114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108, 76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,77,84,72,45, @@ -608,31 +606,30 @@ 108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116,33,79,84,72,45, 112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110,1,20,84,72,45, 112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117,116,249,80,158,38, -39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,37,159,36,20,105, -159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11,11,11, -11,11,10,45,80,158,36,36,20,105,159,36,16,7,2,2,2,3,2,4,2, -5,2,6,2,7,2,8,16,0,16,0,36,16,0,36,16,2,2,5,2,6, -38,11,11,39,36,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16, -5,11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37, -11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0,16,0, -36,36,16,0,16,2,83,158,36,16,6,253,22,168,10,2,3,11,38,36,11, -248,22,83,249,22,73,22,159,10,89,163,36,37,45,44,9,223,9,33,9,80, -159,36,36,37,80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159, -36,40,37,83,158,36,16,3,249,22,7,89,163,36,37,45,44,9,223,2,33, -10,89,163,36,37,45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42, -37,93,29,94,65,113,117,111,116,101,68,35,37,107,101,114,110,101,108,11,9, -9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 507); +39,195,36,249,80,158,38,39,195,36,249,80,158,38,39,195,37,159,36,20,112, +159,36,16,1,11,16,0,20,26,145,2,1,2,1,29,11,11,11,11,11,10, +45,80,158,36,36,20,112,159,36,16,7,2,2,2,3,2,4,2,5,2,6, +2,7,2,8,16,0,16,0,36,16,0,36,16,2,2,5,2,6,38,11,11, +39,36,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5,11,11, +11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,11,11,11, +16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0,16,0,36,36,16, +0,16,2,20,15,16,6,253,22,168,10,2,3,11,38,36,11,248,22,83,249, +22,73,22,159,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, +80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20, +15,16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37, +45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65, +113,117,111,116,101,68,35,37,107,101,114,110,101,108,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,52,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,53,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,60,0,0,0,1,0,0,7,0,18,0,45, 0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200,0, 212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1,70, 1,79,1,84,1,88,1,96,1,105,1,113,1,174,1,21,2,42,2,63,2, -93,2,123,2,181,2,239,2,32,3,81,3,21,9,40,9,54,9,212,9,226, -9,156,11,250,13,117,14,123,14,137,14,164,14,184,14,244,14,75,15,77,15, -146,15,161,21,213,21,236,21,0,0,13,25,0,0,66,35,37,98,111,111,116, +93,2,123,2,181,2,239,2,32,3,81,3,15,9,34,9,48,9,206,9,220, +9,150,11,244,13,111,14,117,14,131,14,158,14,178,14,238,14,69,15,71,15, +140,15,152,21,187,21,210,21,0,0,219,24,0,0,66,35,37,98,111,111,116, 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,65,113,117,111, 116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,68,35,37,112,97,114, @@ -650,301 +647,298 @@ 64,98,111,111,116,64,115,101,97,108,64,115,97,109,101,5,3,46,122,111,5, 3,46,122,111,6,6,6,110,97,116,105,118,101,64,108,111,111,112,63,108,105, 98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,46,38,249,80,159, -38,49,37,195,10,91,159,39,11,90,161,39,36,11,248,22,161,14,197,87,95, +38,49,37,195,10,90,159,39,11,89,161,39,36,11,248,22,161,14,197,86,95, 23,195,1,23,193,1,28,249,22,191,14,0,11,35,114,120,34,91,46,93,115, 115,36,34,248,22,145,14,23,197,1,249,80,159,41,53,38,198,5,4,46,114, -107,116,196,27,28,23,195,2,28,249,22,135,9,23,197,2,80,158,39,47,87, +107,116,196,27,28,23,195,2,28,249,22,135,9,23,197,2,80,158,39,47,86, 94,23,195,1,80,158,37,48,27,248,22,133,5,23,197,2,28,248,22,140,14, -23,194,2,91,159,39,11,90,161,39,36,11,248,22,161,14,23,197,1,87,95, -83,160,38,11,80,158,41,47,198,83,160,38,11,80,158,41,48,192,192,11,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,155,5,28,192,192,247,22,181, +23,194,2,90,159,39,11,89,161,39,36,11,248,22,161,14,23,197,1,86,95, +20,18,159,11,80,158,41,47,198,20,18,159,11,80,158,41,48,192,192,11,11, +28,23,193,2,192,86,94,23,193,1,27,247,22,155,5,28,192,192,247,22,181, 14,250,22,158,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198,1,2, 23,250,22,158,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198,1,2, 24,252,22,158,14,23,199,1,23,201,1,2,25,247,22,148,8,249,80,159,45, 39,38,23,200,1,80,159,45,36,38,252,22,158,14,23,199,1,23,201,1,2, 25,247,22,148,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38,27,252, 22,158,14,23,200,1,23,202,1,2,25,247,22,148,8,249,80,159,46,39,38, -23,201,1,80,159,46,36,38,27,250,22,175,14,196,11,32,0,89,163,8,36, +23,201,1,80,159,46,36,38,27,250,22,175,14,196,11,32,0,88,163,8,36, 36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,252,22,158,14,23,200, 1,23,202,1,2,25,247,22,148,8,249,80,159,46,39,38,23,201,1,80,159, -46,36,38,27,250,22,175,14,196,11,32,0,89,163,8,36,36,41,11,9,222, +46,36,38,27,250,22,175,14,196,11,32,0,88,163,8,36,36,41,11,9,222, 11,28,192,249,22,73,195,194,11,27,250,22,158,14,23,198,1,23,200,1,249, -80,159,44,39,38,23,199,1,2,23,27,250,22,175,14,196,11,32,0,89,163, +80,159,44,39,38,23,199,1,2,23,27,250,22,175,14,196,11,32,0,88,163, 8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,158,14, 23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,175, -14,196,11,32,0,89,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195, -194,11,87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,171,9,77,108, +14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195, +194,11,86,94,28,248,80,159,37,38,38,23,195,2,12,250,22,171,9,77,108, 111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97, 116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105, -110,103,23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,164,14,23,205, +110,103,23,197,2,90,159,46,11,89,161,37,36,11,28,248,22,164,14,23,205, 2,23,204,2,27,247,22,155,5,28,23,193,2,249,22,165,14,23,207,2,23, -195,1,23,205,2,90,161,39,37,11,248,22,161,14,23,205,1,87,94,23,196, -1,90,161,38,40,11,28,23,205,2,27,248,22,145,14,23,197,2,27,248,22, +195,1,23,205,2,89,161,39,37,11,248,22,161,14,23,205,1,86,94,23,196, +1,89,161,38,40,11,28,23,205,2,27,248,22,145,14,23,197,2,27,248,22, 183,7,23,195,2,28,28,249,22,188,3,23,195,2,40,249,22,186,7,5,4, 46,114,107,116,249,22,189,7,23,198,2,249,22,176,3,23,199,2,40,11,249, 22,7,23,199,2,248,22,149,14,249,22,190,7,250,22,189,7,23,202,1,36, 249,22,176,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249, -22,7,23,197,2,11,90,161,37,42,11,28,249,22,135,9,23,199,2,23,197, -2,23,193,2,249,22,158,14,23,196,2,23,199,2,90,161,37,43,11,28,23, -198,2,28,249,22,135,9,23,200,2,23,197,1,23,193,1,87,94,23,193,1, -249,22,158,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11, -28,249,22,135,9,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194, -1,2,22,23,194,1,90,161,37,45,11,247,22,183,14,27,250,22,175,14,23, -203,2,11,32,0,89,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, -22,73,23,203,2,23,196,1,87,94,23,194,1,11,27,28,23,203,2,28,23, -194,2,11,27,250,22,175,14,23,207,2,11,32,0,89,163,8,36,36,41,11, +22,7,23,197,2,11,89,161,37,42,11,28,249,22,135,9,23,199,2,23,197, +2,23,193,2,249,22,158,14,23,196,2,23,199,2,89,161,37,43,11,28,23, +198,2,28,249,22,135,9,23,200,2,23,197,1,23,193,1,86,94,23,193,1, +249,22,158,14,23,196,2,23,200,2,86,94,23,195,1,11,89,161,37,44,11, +28,249,22,135,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94,23,194, +1,2,22,23,194,1,89,161,37,45,11,247,22,183,14,27,250,22,175,14,23, +203,2,11,32,0,88,163,8,36,36,41,11,9,222,11,27,28,23,194,2,249, +22,73,23,203,2,23,196,1,86,94,23,194,1,11,27,28,23,203,2,28,23, +194,2,11,27,250,22,175,14,23,207,2,11,32,0,88,163,8,36,36,41,11, 9,222,11,28,192,249,22,73,23,206,2,194,11,11,27,28,23,195,2,23,195, -2,23,194,2,27,89,163,36,37,50,44,62,122,111,225,15,13,9,33,33,27, -89,163,36,37,50,44,66,97,108,116,45,122,111,225,16,14,11,33,34,27,89, -163,36,37,52,45,9,225,17,15,11,33,35,27,89,163,36,37,52,45,9,225, +2,23,194,2,27,88,163,36,37,50,44,62,122,111,225,15,13,9,33,33,27, +88,163,36,37,50,44,66,97,108,116,45,122,111,225,16,14,11,33,34,27,88, +163,36,37,52,45,9,225,17,15,11,33,35,27,88,163,36,37,52,45,9,225, 18,16,13,33,36,27,28,23,200,2,23,200,2,248,22,133,9,23,200,2,27, -28,23,208,2,28,23,200,2,87,94,23,201,1,23,200,2,248,22,133,9,23, -202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,89,163,8,36,37, +28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22,133,9,23, +202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,8,36,37, 53,45,9,225,24,22,18,33,37,23,216,2,27,28,23,202,2,11,193,28,192, 192,28,193,28,23,202,2,28,249,22,188,3,248,22,75,196,248,22,75,23,205, -2,193,11,11,11,11,87,94,23,197,1,11,28,23,193,2,87,105,23,213,1, +2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,105,23,213,1, 23,211,1,23,210,1,23,209,1,23,208,1,23,201,1,23,200,1,23,199,1, -23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159,57,40,38,250, +23,198,1,23,196,1,23,195,1,23,194,1,20,13,159,80,159,57,40,38,250, 80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,38,22,176,4,11,20, -14,159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8, -26,40,38,22,155,5,28,248,22,140,14,23,216,2,23,215,1,87,94,23,215, -1,247,22,181,14,249,247,22,186,14,248,22,74,195,23,25,87,94,23,193,1, -27,28,23,195,2,28,23,197,1,27,249,22,5,89,163,8,36,37,53,45,9, +13,159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8, +26,40,38,22,155,5,28,248,22,140,14,23,216,2,23,215,1,86,94,23,215, +1,247,22,181,14,249,247,22,186,14,248,22,74,195,23,25,86,94,23,193,1, +27,28,23,195,2,28,23,197,1,27,249,22,5,88,163,8,36,37,53,45,9, 225,25,23,20,33,38,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193, -28,203,28,249,22,188,3,248,22,75,196,248,22,75,206,193,11,11,11,11,87, -94,23,197,1,11,28,23,193,2,87,102,23,214,1,23,211,1,23,210,1,23, -209,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159,80, +28,203,28,249,22,188,3,248,22,75,196,248,22,75,206,193,11,11,11,11,86, +94,23,197,1,11,28,23,193,2,86,102,23,214,1,23,211,1,23,210,1,23, +209,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,13,159,80, 159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, -22,176,4,23,215,1,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38, +22,176,4,23,215,1,20,13,159,80,159,58,40,38,250,80,159,8,25,41,38, 249,22,27,11,80,159,8,27,40,38,22,155,5,28,248,22,140,14,23,217,2, -23,216,1,87,94,23,216,1,247,22,181,14,249,247,22,186,14,248,22,74,195, -23,26,87,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,83, -158,40,20,100,94,89,163,8,36,37,51,44,9,225,26,24,20,33,39,23,213, -1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28, -249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11,11,87,94,23, -210,1,11,87,94,23,201,1,11,28,23,193,2,87,101,23,215,1,23,213,1, -23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159, -80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40, -38,22,176,4,11,20,14,159,80,159,59,40,38,250,80,159,8,26,41,38,249, -22,27,11,80,159,8,28,40,38,22,155,5,28,248,22,140,14,23,218,2,23, -217,1,87,94,23,217,1,247,22,181,14,249,247,22,153,5,248,22,74,195,23, -27,87,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,83,158, -40,20,100,94,89,163,8,36,37,51,44,9,225,27,25,22,33,40,23,215,1, -23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,188, -3,248,22,75,196,248,22,75,23,15,193,11,11,11,87,95,23,216,1,23,212, -1,11,87,94,23,201,1,11,28,23,193,2,87,95,23,213,1,23,198,1,20, -14,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,159, -8,29,40,38,22,176,4,23,217,1,20,14,159,80,159,8,24,40,38,250,80, -159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,155,5,28,248,22, -140,14,23,219,2,23,218,1,87,94,23,218,1,247,22,181,14,249,247,22,153, -5,248,22,74,195,23,28,87,94,23,193,1,27,28,23,199,2,87,94,23,215, -1,23,214,1,87,94,23,214,1,23,215,1,20,14,159,80,159,8,25,40,38, -250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,176,4,28, -23,30,28,23,202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,25, -40,38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,155, -5,28,248,22,140,14,23,220,2,23,219,1,87,94,23,219,1,247,22,181,14, -249,247,22,153,5,194,23,29,0,17,35,114,120,34,94,40,46,42,63,41,47, -40,46,42,41,36,34,32,43,89,163,8,36,37,59,11,2,26,222,33,44,27, -249,22,191,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,73, -248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,191,14,2,42,23, -196,2,28,23,193,2,87,94,23,194,1,249,22,73,248,22,98,23,196,2,27, -248,22,107,23,197,1,27,249,22,191,14,2,42,23,196,2,28,23,193,2,87, -94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27, -249,22,191,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,73, -248,22,98,23,196,2,248,2,43,248,22,107,23,197,1,248,22,83,194,248,22, -83,194,248,22,83,194,248,22,83,194,32,45,89,163,36,37,8,40,11,2,26, -222,33,46,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195, -27,248,22,75,194,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22,75, -23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161,38,36,11,27, -248,22,75,198,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74, -195,27,248,22,75,194,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22, -75,23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161,38,36,11, -27,248,22,75,198,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22, -74,195,27,248,22,75,194,91,159,38,11,90,161,38,36,11,28,248,22,81,248, -22,75,23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161,38,36, -11,27,248,22,75,198,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248, -22,74,195,27,248,22,75,194,91,159,38,11,90,161,38,36,11,28,248,22,81, -248,22,75,23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161,38, -36,11,27,248,22,75,198,28,248,22,81,248,22,75,23,195,2,249,22,7,9, -248,22,74,195,27,248,22,75,194,91,159,38,11,90,161,38,36,11,28,248,22, -81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161, -38,36,11,248,2,45,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196, +23,216,1,86,94,23,216,1,247,22,181,14,249,247,22,186,14,248,22,74,195, +23,26,86,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5,20, +20,94,88,163,8,36,37,51,44,9,225,26,24,20,33,39,23,213,1,23,218, +2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,249,22,188, +3,248,22,75,196,248,22,75,23,207,2,193,11,11,11,86,94,23,210,1,11, +86,94,23,201,1,11,28,23,193,2,86,101,23,215,1,23,213,1,23,212,1, +23,211,1,23,202,1,23,200,1,23,197,1,23,196,1,20,13,159,80,159,59, +40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40,38,22,176, +4,11,20,13,159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11, +80,159,8,28,40,38,22,155,5,28,248,22,140,14,23,218,2,23,217,1,86, +94,23,217,1,247,22,181,14,249,247,22,153,5,248,22,74,195,23,27,86,94, +23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,94,88,163, +8,36,37,51,44,9,225,27,25,22,33,40,23,215,1,23,219,1,27,28,23, +205,2,11,193,28,192,192,28,193,28,204,28,249,22,188,3,248,22,75,196,248, +22,75,23,15,193,11,11,11,86,95,23,216,1,23,212,1,11,86,94,23,201, +1,11,28,23,193,2,86,95,23,213,1,23,198,1,20,13,159,80,159,8,24, +40,38,250,80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,176, +4,23,217,1,20,13,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249, +22,27,11,80,159,8,29,40,38,22,155,5,28,248,22,140,14,23,219,2,23, +218,1,86,94,23,218,1,247,22,181,14,249,247,22,153,5,248,22,74,195,23, +28,86,94,23,193,1,27,28,23,199,2,86,94,23,215,1,23,214,1,86,94, +23,214,1,23,215,1,20,13,159,80,159,8,25,40,38,250,80,159,8,28,41, +38,249,22,27,11,80,159,8,30,40,38,22,176,4,28,23,30,28,23,202,1, +11,195,86,94,23,202,1,11,20,13,159,80,159,8,25,40,38,250,80,159,8, +28,41,38,249,22,27,11,80,159,8,30,40,38,22,155,5,28,248,22,140,14, +23,220,2,23,219,1,86,94,23,219,1,247,22,181,14,249,247,22,153,5,194, +23,29,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34, +32,43,88,163,8,36,37,59,11,2,26,222,33,44,27,249,22,191,14,2,42, +23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2, +27,248,22,107,23,197,1,27,249,22,191,14,2,42,23,196,2,28,23,193,2, +86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1, +27,249,22,191,14,2,42,23,196,2,28,23,193,2,86,94,23,194,1,249,22, +73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,191,14,2,42, +23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2, +248,2,43,248,22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194, +248,22,83,194,32,45,88,163,36,37,8,40,11,2,26,222,33,46,28,248,22, +81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90, +159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7, +9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248, +22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194, +90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22, +7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28, +248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75, +194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249, +22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198, +28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22, +75,194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2, +249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75, +198,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248, +22,75,194,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197, +2,249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,45, +248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22, +73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22, +7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196, 195,249,22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22, 74,201,196,195,249,22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22, -73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,196,195,249,22, -7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,196, -195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22, -74,200,196,195,27,27,249,22,191,14,2,42,23,197,2,28,23,193,2,87,94, -23,195,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249, -22,191,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,73,248, -22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,191,14,2,42,23,196, -2,28,23,193,2,87,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248, -22,107,23,197,1,27,249,22,191,14,2,42,23,196,2,28,23,193,2,87,94, -23,194,1,249,22,73,248,22,98,23,196,2,248,2,43,248,22,107,23,197,1, -248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,195,28,23,195,1,192, -28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22, -75,194,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22,75,23,197,2, -249,22,7,9,248,22,74,197,27,248,22,75,196,91,159,38,11,90,161,38,36, -11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248, -22,75,196,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22,75,23,197, -2,249,22,7,9,248,22,74,197,27,248,22,75,196,91,159,38,11,90,161,38, -36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27, -248,22,75,196,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22,75,23, -197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,91,159,38,11,90,161, -38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197, -27,248,22,75,196,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22,75, -23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,91,159,38,11,90, -161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74, -197,27,248,22,75,196,91,159,38,11,90,161,38,36,11,28,248,22,81,248,22, -75,23,197,2,249,22,7,9,248,22,74,197,91,159,38,11,90,161,38,36,11, -248,2,45,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195,249,22, -7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196, -195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22, +73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,196,195,27,27, +249,22,191,14,2,42,23,197,2,28,23,193,2,86,94,23,195,1,249,22,73, +248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,191,14,2,42,23, +196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27, +248,22,107,23,197,1,27,249,22,191,14,2,42,23,196,2,28,23,193,2,86, +94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27, +249,22,191,14,2,42,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73, +248,22,98,23,196,2,248,2,43,248,22,107,23,197,1,248,22,83,194,248,22, +83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,22, +75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11, +89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22, +74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248, +22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38, +11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248, +22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81, +248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159, +38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9, +248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22, +81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90, +159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7, +9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248, +22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196, +90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22, +7,9,248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,45,248,22,75, +198,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22, 74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22, 73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22, -7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,200,196, -195,87,95,28,248,22,131,5,195,12,250,22,171,9,2,18,6,20,20,114,101, -115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,28,24, -193,2,248,24,194,1,195,87,94,23,193,1,12,27,250,22,153,2,80,159,41, -43,38,248,22,152,15,247,22,182,12,11,27,28,23,194,2,193,87,94,23,194, -1,27,247,22,133,2,87,94,250,22,151,2,80,159,43,43,38,248,22,152,15, -247,22,182,12,195,192,250,22,151,2,195,199,66,97,116,116,97,99,104,251,211, -197,198,199,10,28,192,250,22,170,9,11,196,195,248,22,168,9,194,28,249,22, -131,7,194,6,1,1,46,2,22,28,249,22,131,7,194,6,2,2,46,46,62, -117,112,192,32,52,89,163,8,36,37,50,11,67,115,115,45,62,114,107,116,222, -33,53,27,248,22,128,7,194,28,249,22,188,3,194,39,28,249,22,131,7,6, -3,3,46,115,115,249,22,147,7,197,249,22,176,3,198,39,249,22,148,7,250, -22,147,7,198,36,249,22,176,3,199,39,6,4,4,46,114,107,116,193,193,28, -249,22,137,9,248,22,75,23,200,2,23,197,1,28,249,22,135,9,248,22,74, -23,200,2,23,196,1,251,22,168,9,2,18,6,28,28,99,121,99,108,101,32, -105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32,126,46, -115,23,200,1,249,22,2,22,75,248,22,88,249,22,73,23,206,1,23,202,1, -12,12,247,192,20,14,159,80,159,40,45,38,249,22,73,248,22,152,15,247,22, -182,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41,38,249,22, -27,11,80,159,45,40,38,22,175,4,23,196,1,249,247,22,154,5,23,198,1, -248,22,61,248,22,144,14,23,198,1,87,94,28,28,248,22,140,14,23,196,2, -10,248,22,139,5,23,196,2,12,28,23,197,2,250,22,170,9,11,6,15,15, -98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,171, -9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32, -112,97,116,104,23,198,2,28,28,248,22,71,23,196,2,249,22,135,9,248,22, -74,23,198,2,2,4,11,248,22,132,5,248,22,98,196,28,28,248,22,71,23, -196,2,249,22,135,9,248,22,74,23,198,2,66,112,108,97,110,101,116,11,87, -94,28,207,12,20,14,159,80,159,37,52,38,80,158,37,50,90,161,37,36,10, -249,22,177,4,21,94,2,27,6,19,19,112,108,97,110,101,116,47,114,101,115, -111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111,100, -117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,252,212,199, -200,201,202,80,158,42,50,87,94,23,193,1,27,89,163,8,36,37,46,11,79, -115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,5, -33,50,27,28,248,22,58,23,198,2,27,250,22,153,2,80,159,43,44,38,249, -22,73,23,203,2,247,22,182,14,11,28,23,193,2,192,87,94,23,193,1,91, -159,38,11,90,161,38,36,11,249,80,159,44,49,37,248,22,64,23,203,2,11, -27,28,248,22,81,23,195,2,6,8,8,109,97,105,110,46,114,107,116,249,22, -148,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159,49,54,38,2,18, -23,204,1,28,248,22,81,23,201,2,23,201,1,87,94,23,201,1,248,22,74, -23,201,2,28,248,22,81,23,201,2,87,94,23,200,1,9,248,22,75,23,201, -1,23,199,2,249,22,158,14,23,195,1,23,196,1,28,248,22,189,6,23,198, -2,87,94,23,194,1,27,248,80,159,41,59,37,23,200,2,27,250,22,153,2, -80,159,44,44,38,249,22,73,23,204,2,23,199,2,11,28,23,193,2,192,87, -94,23,193,1,91,159,38,11,90,161,38,36,11,249,80,159,45,49,37,23,203, -2,11,250,22,1,22,158,14,23,199,1,249,22,87,249,22,2,32,0,89,163, -8,36,37,44,11,9,222,33,51,23,200,1,248,22,83,248,2,52,23,201,1, -28,248,22,140,14,23,198,2,87,94,23,194,1,28,248,22,163,14,23,198,2, -248,80,159,40,8,24,37,248,22,167,14,23,199,2,248,22,83,6,26,26,32, -40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98,115,111,108, -117,116,101,41,28,249,22,135,9,248,22,74,23,200,2,2,27,27,250,22,153, -2,80,159,43,44,38,249,22,73,23,203,2,247,22,182,14,11,28,23,193,2, -192,87,94,23,193,1,91,159,39,11,90,161,38,36,11,249,80,159,45,49,37, -248,22,98,23,204,2,11,90,161,37,38,11,28,248,22,81,248,22,100,23,203, -2,28,248,22,81,23,194,2,249,22,131,15,0,8,35,114,120,34,91,46,93, -34,23,196,2,11,10,27,28,23,196,2,248,2,52,23,196,2,28,248,22,81, -23,195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,131,15,0,8, -35,114,120,34,91,46,93,34,23,197,2,248,2,52,23,196,2,249,22,148,7, -23,197,2,6,4,4,46,114,107,116,27,28,23,197,1,87,94,23,196,1,249, -22,87,28,248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108,105, -98,249,22,1,22,87,249,22,2,80,159,51,8,25,37,248,22,100,23,210,2, -23,197,1,28,248,22,81,23,196,2,87,94,23,195,1,248,22,83,23,197,1, -87,94,23,196,1,23,195,1,27,252,80,159,51,54,38,2,18,23,206,1,248, -22,74,23,200,2,248,22,75,23,200,1,23,200,2,249,22,158,14,23,195,1, -23,197,1,28,249,22,135,9,248,22,74,23,200,2,64,102,105,108,101,248,80, -159,40,8,24,37,248,22,167,14,249,22,165,14,248,22,169,14,248,22,98,23, -203,2,248,80,159,44,59,37,23,203,2,12,87,94,28,28,248,22,140,14,23, -194,2,10,248,22,150,8,23,194,2,87,94,23,199,1,12,28,23,199,2,250, -22,170,9,67,114,101,113,117,105,114,101,249,22,173,7,6,17,17,98,97,100, -32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74, -23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,171,9,2,18,249, -22,173,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, -198,2,248,22,74,23,199,2,6,0,0,23,200,2,27,28,248,22,150,8,23, -195,2,249,22,155,8,23,196,2,36,249,22,167,14,248,22,168,14,23,197,2, -11,27,28,248,22,150,8,23,196,2,249,22,155,8,23,197,2,37,248,80,159, -42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28,248,22,150,8,23, -199,2,250,22,7,2,28,249,22,155,8,23,203,2,38,2,28,248,22,161,14, -23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,150,8,23,200,2,249, -22,155,8,23,201,2,39,249,80,159,47,53,38,23,197,2,5,0,27,28,248, -22,150,8,23,201,2,249,22,155,8,23,202,2,40,248,22,132,5,23,200,2, -27,27,250,22,153,2,80,159,51,43,38,248,22,152,15,247,22,182,12,11,28, -23,193,2,192,87,94,23,193,1,27,247,22,133,2,87,94,250,22,151,2,80, -159,52,43,38,248,22,152,15,247,22,182,12,195,192,87,95,28,23,208,1,27, -250,22,153,2,23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22, -17,80,159,51,46,38,80,159,50,46,38,247,22,19,250,22,25,248,22,23,23, -197,2,80,159,53,45,38,23,196,1,27,248,22,152,15,247,22,182,12,249,22, -3,83,158,40,20,100,94,89,163,8,36,37,55,11,9,226,12,11,2,3,33, -54,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38,32,0,89,163, -36,37,42,11,9,222,33,55,80,159,49,8,26,37,89,163,36,36,51,8,176, -8,9,227,13,9,8,4,3,33,56,250,22,151,2,23,197,1,197,10,12,28, -28,248,22,150,8,23,202,1,11,28,248,22,189,6,23,206,2,10,28,248,22, -58,23,206,2,10,28,248,22,71,23,206,2,249,22,135,9,248,22,74,23,208, -2,2,27,11,250,22,151,2,80,159,50,44,38,28,248,22,189,6,23,209,2, -249,22,73,23,210,1,248,80,159,53,59,37,23,212,1,87,94,23,209,1,249, -22,73,23,210,1,247,22,182,14,252,22,152,8,23,208,1,23,207,1,23,205, -1,23,203,1,201,12,193,87,96,83,160,38,11,80,158,36,50,248,80,159,37, -58,38,249,22,27,11,80,159,39,52,38,248,22,174,4,80,159,37,51,38,248, -22,154,5,80,159,37,37,37,248,22,173,13,80,159,37,42,37,83,160,38,11, -80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52,38,159,36, -20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11, -11,11,11,11,10,38,80,158,36,36,20,105,159,40,16,23,2,2,2,3,30, -2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5,75,112, -97,116,104,45,97,100,100,45,115,117,102,102,105,120,8,30,2,7,2,8,5, -30,2,7,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, -105,122,97,116,105,111,110,3,2,9,2,10,2,11,2,12,2,13,2,14,2, -15,2,16,2,17,2,18,30,2,19,2,8,5,30,2,5,79,112,97,116,104, -45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102, -105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109, -97,108,45,99,97,115,101,45,112,97,116,104,7,2,20,2,21,30,2,19,74, -114,101,112,97,114,97,109,101,116,101,114,105,122,101,6,16,0,16,0,36,16, -0,36,16,11,2,12,2,13,2,10,2,11,2,14,2,15,2,3,2,9,2, -2,2,16,2,18,47,11,11,39,36,11,11,11,16,3,2,20,2,17,2,21, -16,3,11,11,11,16,3,2,20,2,17,2,21,39,39,37,11,11,11,16,0, -16,0,16,0,36,36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16, -18,83,158,36,16,2,89,163,36,37,45,8,128,16,9,223,0,33,29,80,159, -36,8,26,37,83,158,36,16,2,89,163,8,36,37,45,8,128,128,9,223,0, -33,30,80,159,36,8,25,37,83,158,36,16,2,89,163,36,37,49,8,240,0, -0,2,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33,31,80, -159,36,8,24,37,83,158,36,16,2,89,163,36,37,49,8,128,96,67,103,101, -116,45,100,105,114,223,0,33,32,80,159,36,59,37,83,158,36,16,2,248,22, -147,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,83,158,36,16, -2,89,163,36,38,8,38,8,61,2,3,223,0,33,41,80,159,36,37,37,83, -158,36,16,2,32,0,89,163,8,36,37,42,11,2,9,222,192,80,159,36,42, -37,83,158,36,16,2,247,22,136,2,80,159,36,43,37,83,158,36,16,2,247, -22,135,2,80,159,36,44,37,83,158,36,16,2,247,22,69,80,159,36,45,37, -83,158,36,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105, -110,103,80,159,36,46,37,83,158,36,16,2,11,80,158,36,47,83,158,36,16, -2,11,80,158,36,48,83,158,36,16,2,32,0,89,163,36,38,8,42,11,2, -16,222,33,47,80,159,36,49,37,83,158,36,16,2,11,80,158,36,50,83,158, -36,16,2,91,159,38,10,90,161,37,36,10,11,90,161,37,37,10,83,158,39, -20,99,96,2,18,89,163,8,36,37,51,8,128,2,9,224,2,0,33,48,89, -163,36,39,49,11,9,223,1,33,49,89,163,36,40,8,29,8,240,176,103,143, -7,9,224,2,0,33,57,208,80,159,36,51,37,83,158,36,16,2,89,163,36, -36,45,8,240,66,192,65,0,2,20,223,0,33,58,80,159,36,56,37,83,158, -36,16,2,89,163,8,36,36,45,8,240,0,64,65,0,2,21,223,0,33,59, -80,159,36,57,37,96,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,2,19,9,9,9, -36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6574); +7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196, +195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22, +74,202,196,195,249,22,7,249,22,73,248,22,74,200,196,195,86,95,28,248,22, +131,5,195,12,250,22,171,9,2,18,6,20,20,114,101,115,111,108,118,101,100, +45,109,111,100,117,108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1, +195,86,94,23,193,1,12,27,250,22,153,2,80,159,41,43,38,248,22,152,15, +247,22,182,12,11,27,28,23,194,2,193,86,94,23,194,1,27,247,22,133,2, +86,94,250,22,151,2,80,159,43,43,38,248,22,152,15,247,22,182,12,195,192, +250,22,151,2,195,199,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192, +250,22,170,9,11,196,195,248,22,168,9,194,28,249,22,131,7,194,6,1,1, +46,2,22,28,249,22,131,7,194,6,2,2,46,46,62,117,112,192,32,52,88, +163,8,36,37,50,11,67,115,115,45,62,114,107,116,222,33,53,27,248,22,128, +7,194,28,249,22,188,3,194,39,28,249,22,131,7,6,3,3,46,115,115,249, +22,147,7,197,249,22,176,3,198,39,249,22,148,7,250,22,147,7,198,36,249, +22,176,3,199,39,6,4,4,46,114,107,116,193,193,28,249,22,137,9,248,22, +75,23,200,2,23,197,1,28,249,22,135,9,248,22,74,23,200,2,23,196,1, +251,22,168,9,2,18,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97, +100,105,110,103,32,97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22, +2,22,75,248,22,88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13, +159,80,159,40,45,38,249,22,73,248,22,152,15,247,22,182,12,23,197,1,20, +13,159,80,159,40,40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40, +38,22,175,4,23,196,1,249,247,22,154,5,23,198,1,248,22,61,248,22,144, +14,23,198,1,86,94,28,28,248,22,140,14,23,196,2,10,248,22,139,5,23, +196,2,12,28,23,197,2,250,22,170,9,11,6,15,15,98,97,100,32,109,111, +100,117,108,101,32,112,97,116,104,23,200,2,250,22,171,9,2,18,6,19,19, +109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,198, +2,28,28,248,22,71,23,196,2,249,22,135,9,248,22,74,23,198,2,2,4, +11,248,22,132,5,248,22,98,196,28,28,248,22,71,23,196,2,249,22,135,9, +248,22,74,23,198,2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13, +159,80,159,37,52,38,80,158,37,50,89,161,37,36,10,249,22,177,4,21,94, +2,27,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46, +114,107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97, +109,101,45,114,101,115,111,108,118,101,114,12,252,212,199,200,201,202,80,158,42, +50,86,94,23,193,1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99, +111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,50,27,28,248,22, +58,23,198,2,27,250,22,153,2,80,159,43,44,38,249,22,73,23,203,2,247, +22,182,14,11,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38, +36,11,249,80,159,44,49,37,248,22,64,23,203,2,11,27,28,248,22,81,23, +195,2,6,8,8,109,97,105,110,46,114,107,116,249,22,148,7,23,197,2,6, +4,4,46,114,107,116,27,252,80,159,49,54,38,2,18,23,204,1,28,248,22, +81,23,201,2,23,201,1,86,94,23,201,1,248,22,74,23,201,2,28,248,22, +81,23,201,2,86,94,23,200,1,9,248,22,75,23,201,1,23,199,2,249,22, +158,14,23,195,1,23,196,1,28,248,22,189,6,23,198,2,86,94,23,194,1, +27,248,80,159,41,59,37,23,200,2,27,250,22,153,2,80,159,44,44,38,249, +22,73,23,204,2,23,199,2,11,28,23,193,2,192,86,94,23,193,1,90,159, +38,11,89,161,38,36,11,249,80,159,45,49,37,23,203,2,11,250,22,1,22, +158,14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,37,44,11,9, +222,33,51,23,200,1,248,22,83,248,2,52,23,201,1,28,248,22,140,14,23, +198,2,86,94,23,194,1,28,248,22,163,14,23,198,2,248,80,159,40,8,24, +37,248,22,167,14,23,199,2,248,22,83,6,26,26,32,40,97,32,112,97,116, +104,32,109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249, +22,135,9,248,22,74,23,200,2,2,27,27,250,22,153,2,80,159,43,44,38, +249,22,73,23,203,2,247,22,182,14,11,28,23,193,2,192,86,94,23,193,1, +90,159,39,11,89,161,38,36,11,249,80,159,45,49,37,248,22,98,23,204,2, +11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2,28,248,22,81,23, +194,2,249,22,131,15,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10, +27,28,23,196,2,248,2,52,23,196,2,28,248,22,81,23,195,2,6,8,8, +109,97,105,110,46,114,107,116,28,249,22,131,15,0,8,35,114,120,34,91,46, +93,34,23,197,2,248,2,52,23,196,2,249,22,148,7,23,197,2,6,4,4, +46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22,87,28,248,22,81, +248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,87, +249,22,2,80,159,51,8,25,37,248,22,100,23,210,2,23,197,1,28,248,22, +81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,94,23,196,1,23, +195,1,27,252,80,159,51,54,38,2,18,23,206,1,248,22,74,23,200,2,248, +22,75,23,200,1,23,200,2,249,22,158,14,23,195,1,23,197,1,28,249,22, +135,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159,40,8,24,37,248, +22,167,14,249,22,165,14,248,22,169,14,248,22,98,23,203,2,248,80,159,44, +59,37,23,203,2,12,86,94,28,28,248,22,140,14,23,194,2,10,248,22,150, +8,23,194,2,86,94,23,199,1,12,28,23,199,2,250,22,170,9,67,114,101, +113,117,105,114,101,249,22,173,7,6,17,17,98,97,100,32,109,111,100,117,108, +101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,6,0,0, +23,202,1,86,94,23,199,1,250,22,171,9,2,18,249,22,173,7,6,13,13, +109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23, +199,2,6,0,0,23,200,2,27,28,248,22,150,8,23,195,2,249,22,155,8, +23,196,2,36,249,22,167,14,248,22,168,14,23,197,2,11,27,28,248,22,150, +8,23,196,2,249,22,155,8,23,197,2,37,248,80,159,42,55,38,23,195,2, +90,159,39,11,89,161,39,36,11,28,248,22,150,8,23,199,2,250,22,7,2, +28,249,22,155,8,23,203,2,38,2,28,248,22,161,14,23,198,2,86,95,23, +195,1,23,193,1,27,28,248,22,150,8,23,200,2,249,22,155,8,23,201,2, +39,249,80,159,47,53,38,23,197,2,5,0,27,28,248,22,150,8,23,201,2, +249,22,155,8,23,202,2,40,248,22,132,5,23,200,2,27,27,250,22,153,2, +80,159,51,43,38,248,22,152,15,247,22,182,12,11,28,23,193,2,192,86,94, +23,193,1,27,247,22,133,2,86,94,250,22,151,2,80,159,52,43,38,248,22, +152,15,247,22,182,12,195,192,86,95,28,23,208,1,27,250,22,153,2,23,197, +2,197,11,28,23,193,1,12,86,95,27,27,28,248,22,17,80,159,51,46,38, +80,159,50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,45, +38,23,196,1,27,248,22,152,15,247,22,182,12,249,22,3,20,20,94,88,163, +8,36,37,55,11,9,226,12,11,2,3,33,54,23,195,1,23,196,1,248,28, +248,22,17,80,159,50,46,38,32,0,88,163,36,37,42,11,9,222,33,55,80, +159,49,8,26,37,88,163,36,36,51,8,176,8,9,227,13,9,8,4,3,33, +56,250,22,151,2,23,197,1,197,10,12,28,28,248,22,150,8,23,202,1,11, +28,248,22,189,6,23,206,2,10,28,248,22,58,23,206,2,10,28,248,22,71, +23,206,2,249,22,135,9,248,22,74,23,208,2,2,27,11,250,22,151,2,80, +159,50,44,38,28,248,22,189,6,23,209,2,249,22,73,23,210,1,248,80,159, +53,59,37,23,212,1,86,94,23,209,1,249,22,73,23,210,1,247,22,182,14, +252,22,152,8,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,86,96, +247,80,159,36,57,37,248,22,174,4,80,159,37,51,38,248,22,154,5,80,159, +37,37,37,248,22,173,13,80,159,37,42,37,20,18,159,11,80,158,36,50,248, +80,159,37,58,38,249,22,27,11,80,159,39,52,38,159,36,20,112,159,36,16, +1,11,16,0,20,26,145,2,1,2,1,29,11,11,11,11,11,10,38,80,158, +36,36,20,112,159,40,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45, +115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,100,45, +115,117,102,102,105,120,8,30,2,7,2,8,5,30,2,7,1,23,101,120,116, +101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3, +2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,30, +2,19,2,8,5,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101, +45,115,117,102,102,105,120,10,30,2,5,73,102,105,110,100,45,99,111,108,45, +102,105,108,101,3,30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45, +112,97,116,104,7,2,20,2,21,30,2,19,74,114,101,112,97,114,97,109,101, +116,101,114,105,122,101,6,16,0,16,0,36,16,0,36,16,11,2,12,2,13, +2,10,2,11,2,14,2,15,2,3,2,9,2,2,2,16,2,18,47,11,11, +39,36,11,11,11,16,3,2,20,2,17,2,21,16,3,11,11,11,16,3,2, +20,2,17,2,21,39,39,37,11,11,11,16,0,16,0,16,0,36,36,11,11, +11,11,16,0,16,0,16,0,36,36,16,0,16,18,20,15,16,2,88,163,36, +37,45,8,128,16,9,223,0,33,29,80,159,36,8,26,37,20,15,16,2,88, +163,8,36,37,45,8,128,128,9,223,0,33,30,80,159,36,8,25,37,20,15, +16,2,88,163,36,37,49,8,240,0,0,2,0,72,112,97,116,104,45,115,115, +45,62,114,107,116,223,0,33,31,80,159,36,8,24,37,20,15,16,2,88,163, +36,37,49,8,128,96,67,103,101,116,45,100,105,114,223,0,33,32,80,159,36, +59,37,20,15,16,2,248,22,147,8,69,115,111,45,115,117,102,102,105,120,80, +159,36,36,37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33, +41,80,159,36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9, +222,192,80,159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20, +15,16,2,247,22,135,2,80,159,36,44,37,20,15,16,2,247,22,69,80,159, +36,45,37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97, +100,105,110,103,80,159,36,46,37,20,15,16,2,11,80,158,36,47,20,15,16, +2,11,80,158,36,48,20,15,16,2,32,0,88,163,36,38,8,42,11,2,16, +222,33,47,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2, +90,159,38,10,89,161,37,36,10,11,89,161,37,37,10,20,25,96,2,18,88, +163,8,36,37,51,8,128,2,9,224,2,0,33,48,88,163,36,39,49,11,9, +223,1,33,49,88,163,36,40,8,29,8,240,176,103,143,7,9,224,2,0,33, +57,208,80,159,36,51,37,20,15,16,2,88,163,36,36,43,8,240,66,128,32, +0,2,20,223,0,33,58,80,159,36,56,37,20,15,16,2,88,163,8,36,36, +45,8,240,0,64,65,0,2,21,223,0,33,59,80,159,36,57,37,96,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,2,19,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6524); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,52,0,0,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,49,46,53,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,29, -0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,103,1,0,0, +0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,100,1,0,0, 69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67, 35,37,117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111,114, 107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74, @@ -953,15 +947,14 @@ 94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,87,85,0, 0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36, 36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36, -16,0,159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1, -2,1,29,11,11,11,11,11,18,96,11,46,46,46,36,80,158,36,36,20,105, -159,36,16,0,16,0,16,0,36,16,0,36,16,0,36,11,11,39,36,11,11, -11,16,0,16,0,16,0,36,36,37,11,11,11,16,0,16,0,16,0,36,36, -11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,0,104,2,9,2,8, -29,94,2,2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35, -37,117,110,115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117, -109,11,2,7,2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108, -97,99,101,11,29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9, -9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 422); +16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,145,2,1,2,1,29, +11,11,11,11,11,18,96,11,46,46,46,36,80,158,36,36,20,112,159,36,16, +0,16,0,16,0,36,16,0,36,16,0,36,11,11,39,36,11,11,11,16,0, +16,0,16,0,36,36,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11, +11,16,0,16,0,16,0,36,36,16,0,16,0,104,2,9,2,8,29,94,2, +2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35,37,117,110, +115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117,109,11,2, +7,2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108,97,99,101, +11,29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 419); } diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 364c066096..7ed1612f26 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -3744,8 +3744,7 @@ static Scheme_Object *do_optimize_info_lookup(Optimize_Info *info, int pos, int break; else *closure_offset = delta; - } else if (SAME_TYPE(SCHEME_TYPE(n), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(n) == CASE_LAMBDA_EXPD)) { + } else if (SAME_TYPE(SCHEME_TYPE(n), scheme_case_lambda_sequence_type)) { if (!closure_offset) break; else diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index 6190ebce05..a7a72288aa 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -111,7 +111,8 @@ The fourth pass, "sfs", performs another liveness analysis on stack slows and inserts operations to clear stack slots as necessary to make execution safe for space. In particular, dead slots need to be - cleared before a non-tail call into arbitrary Scheme code. + cleared before a non-tail call into arbitrary Scheme code. This pass + can mutate the result of the "resolve" pass. Just-in-time compilation: @@ -239,12 +240,11 @@ static Scheme_Object *read_application(Scheme_Object *obj); static Scheme_Object *write_sequence(Scheme_Object *obj); static Scheme_Object *read_sequence(Scheme_Object *obj); static Scheme_Object *read_sequence_save_first(Scheme_Object *obj); +static Scheme_Object *read_sequence_splice(Scheme_Object *obj); static Scheme_Object *write_branch(Scheme_Object *obj); static Scheme_Object *read_branch(Scheme_Object *obj); static Scheme_Object *write_with_cont_mark(Scheme_Object *obj); static Scheme_Object *read_with_cont_mark(Scheme_Object *obj); -static Scheme_Object *write_syntax(Scheme_Object *obj); -static Scheme_Object *read_syntax(Scheme_Object *obj); static Scheme_Object *write_quote_syntax(Scheme_Object *obj); static Scheme_Object *read_quote_syntax(Scheme_Object *obj); @@ -366,10 +366,10 @@ scheme_init_eval (Scheme_Env *env) scheme_install_type_reader(scheme_with_cont_mark_type, read_with_cont_mark); scheme_install_type_writer(scheme_quote_syntax_type, write_quote_syntax); scheme_install_type_reader(scheme_quote_syntax_type, read_quote_syntax); - scheme_install_type_writer(scheme_syntax_type, write_syntax); - scheme_install_type_reader(scheme_syntax_type, read_syntax); scheme_install_type_writer(scheme_begin0_sequence_type, write_sequence); scheme_install_type_reader(scheme_begin0_sequence_type, read_sequence_save_first); + scheme_install_type_writer(scheme_splice_sequence_type, write_sequence); + scheme_install_type_reader(scheme_splice_sequence_type, read_sequence_splice); GLOBAL_PRIM_W_ARITY2("eval", eval, 1, 2, 0, -1, env); GLOBAL_PRIM_W_ARITY2("eval-syntax", eval_stx, 1, 2, 0, -1, env); @@ -787,7 +787,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, && (SCHEME_LOCAL_POS(o) > deeper_than)) || (vtype == scheme_unclosed_procedure_type) || (vtype == scheme_compiled_unclosed_procedure_type) - || ((vtype == scheme_compiled_syntax_type) && (SCHEME_PINT_VAL(o) == CASE_LAMBDA_EXPD)) + || (vtype == scheme_case_lambda_sequence_type) || (vtype == scheme_case_lambda_sequence_type) || (vtype == scheme_quote_syntax_type) || (vtype == scheme_compiled_quote_syntax_type)) { @@ -817,8 +817,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved, } } - if ((vtype == scheme_syntax_type) - && (SCHEME_PINT_VAL(o) == CASE_LAMBDA_EXPD)) { + if (vtype == scheme_case_lambda_sequence_type) { note_match(1, vals, warn_info); return 1; } @@ -1804,7 +1803,7 @@ static Scheme_Object *look_for_letv_change(Scheme_Sequence *s) Scheme_Sequence *naya; naya = malloc_sequence(nsize); - naya->so.type = scheme_sequence_type; + naya->so.type = s->so.type; naya->count = nsize; nv = (Scheme_Object *)naya; @@ -1817,7 +1816,7 @@ static Scheme_Object *look_for_letv_change(Scheme_Sequence *s) if (esize > 1) { Scheme_Sequence *e; e = malloc_sequence(esize); - e->so.type = scheme_sequence_type; + e->so.type = s->so.type; e->count = esize; for (i = 0; i < esize; i++) { @@ -1852,30 +1851,6 @@ static Scheme_Object *resolve_sequence(Scheme_Object *o, Resolve_Info *info) return look_for_letv_change(s); } -Scheme_Object *scheme_make_syntax_resolved(int idx, Scheme_Object *data) -{ - Scheme_Object *v; - - v = scheme_alloc_object(); - v->type = scheme_syntax_type; - SCHEME_PINT_VAL(v) = idx; - SCHEME_IPTR_VAL(v) = (void *)data; - - return v; -} - -Scheme_Object *scheme_make_syntax_compiled(int idx, Scheme_Object *data) -{ - Scheme_Object *v; - - v = scheme_alloc_object(); - v->type = scheme_compiled_syntax_type; - SCHEME_PINT_VAL(v) = idx; - SCHEME_IPTR_VAL(v) = (void *)data; - - return v; -} - static Scheme_Object *link_module_variable(Scheme_Object *modidx, Scheme_Object *varname, int check_access, Scheme_Object *insp, @@ -2073,13 +2048,6 @@ Scheme_Object *scheme_resolve_expr(Scheme_Object *expr, Resolve_Info *info) : 0)); } } - case scheme_compiled_syntax_type: - { - Scheme_Syntax_Resolver f; - - f = scheme_syntax_resolvers[SCHEME_PINT_VAL(expr)]; - return f((Scheme_Object *)SCHEME_IPTR_VAL(expr), info); - } case scheme_application_type: return resolve_application(expr, info, 0); case scheme_application2_type: @@ -2087,6 +2055,8 @@ Scheme_Object *scheme_resolve_expr(Scheme_Object *expr, Resolve_Info *info) case scheme_application3_type: return resolve_application3(expr, info, 0); case scheme_sequence_type: + case scheme_begin0_sequence_type: + case scheme_splice_sequence_type: return resolve_sequence(expr, info); case scheme_branch_type: return resolve_branch(expr, info); @@ -2120,6 +2090,26 @@ Scheme_Object *scheme_resolve_expr(Scheme_Object *expr, Resolve_Info *info) case scheme_module_variable_type: scheme_signal_error("got top-level in wrong place"); return 0; + case scheme_define_values_type: + return scheme_define_values_resolve(expr, info); + case scheme_define_syntaxes_type: + return scheme_define_syntaxes_resolve(expr, info); + case scheme_define_for_syntax_type: + return scheme_define_for_syntaxes_resolve(expr, info); + case scheme_set_bang_type: + return scheme_set_resolve(expr, info); + case scheme_require_form_type: + return scheme_top_level_require_resolve(expr, info); + case scheme_varref_form_type: + return scheme_ref_resolve(expr, info); + case scheme_apply_values_type: + return scheme_apply_values_resolve(expr, info); + case scheme_case_lambda_sequence_type: + return scheme_case_lambda_resolve(expr, info); + case scheme_module_type: + return scheme_module_expr_resolve(expr, info); + case scheme_boxenv_type: + scheme_signal_error("internal error: no boxenv resolve"); default: return expr; } @@ -2210,10 +2200,6 @@ Scheme_Object *scheme_uncompile_expr(Scheme_Object *expr, Resolve_Prefix *prefix sprintf(buf, "@!%d", SCHEME_LOCAL_POS(expr)); return scheme_intern_symbol(buf); } - case scheme_compiled_syntax_type: - { - return scheme_void; - } case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)expr; @@ -2395,22 +2381,18 @@ static int estimate_expr_size(Scheme_Object *expr, int sz, int fuel) sz += 1; break; } - case scheme_compiled_syntax_type: + case scheme_case_lambda_sequence_type: { - if (SCHEME_PINT_VAL(expr) == CASE_LAMBDA_EXPD) { - int max_sz = sz + 1, a_sz; - Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(expr); - int i; - for (i = cl->count; i--; ) { - a_sz = estimate_expr_size(cl->array[i], sz, fuel); - if (a_sz > max_sz) max_sz = a_sz; - } - sz = max_sz; - } else { - sz += 1; /* FIXME */ + int max_sz = sz + 1, a_sz; + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)expr; + int i; + for (i = cl->count; i--; ) { + a_sz = estimate_expr_size(cl->array[i], sz, fuel); + if (a_sz > max_sz) max_sz = a_sz; } - break; + sz = max_sz; } + break; case scheme_application2_type: { Scheme_App2_Rec *app = (Scheme_App2_Rec *)expr; @@ -2490,6 +2472,7 @@ static int estimate_expr_size(Scheme_Object *expr, int sz, int fuel) } case scheme_compiled_toplevel_type: case scheme_compiled_quote_syntax_type: + /* FIXME: other syntax types not covered */ default: sz += 1; break; @@ -2686,10 +2669,8 @@ Scheme_Object *optimize_for_inline(Optimize_Info *info, Scheme_Object *le, int a } } - if (le - && SAME_TYPE(SCHEME_TYPE(le), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(le) == CASE_LAMBDA_EXPD)) { - Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(le); + if (le && SAME_TYPE(SCHEME_TYPE(le), scheme_case_lambda_sequence_type)) { + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)le; Scheme_Object *cp; int i, count; @@ -3656,10 +3637,8 @@ static Scheme_Object *lookup_constant_proc(Optimize_Info *info, Scheme_Object *r } } - if (c - && (SAME_TYPE(scheme_compiled_unclosed_procedure_type, SCHEME_TYPE(c)) - || (SAME_TYPE(scheme_compiled_syntax_type, SCHEME_TYPE(c)) - && (SCHEME_PINT_VAL(c) == CASE_LAMBDA_EXPD)))) + if (c && (SAME_TYPE(scheme_compiled_unclosed_procedure_type, SCHEME_TYPE(c)) + || SAME_TYPE(scheme_case_lambda_sequence_type, SCHEME_TYPE(c)))) return c; return NULL; @@ -3930,7 +3909,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz cnt = 1; cl = NULL; } else { - cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(proc); + cl = (Scheme_Case_Lambda *)proc; cnt = cl->count; } @@ -4119,7 +4098,14 @@ Scheme_Object *scheme_optimize_apply_values(Scheme_Object *f, Scheme_Object *e, return (Scheme_Object *)app2; } - return scheme_make_syntax_compiled(APPVALS_EXPD, cons(f, e)); + { + Scheme_Object *av; + av = scheme_alloc_object(); + av->type = scheme_apply_values_type; + SCHEME_PTR1_VAL(av) = f; + SCHEME_PTR2_VAL(av) = e; + return av; + } } static Scheme_Object *optimize_sequence(Scheme_Object *o, Optimize_Info *info, int context) @@ -4164,7 +4150,7 @@ static Scheme_Object *optimize_sequence(Scheme_Object *o, Optimize_Info *info, i int j = 0; s2 = malloc_sequence(s->count - drop); - s2->so.type = scheme_sequence_type; + s2->so.type = s->so.type; s2->count = s->count - drop; for (i = 0; i < s->count; i++) { @@ -4451,13 +4437,6 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in return expr; } - case scheme_compiled_syntax_type: - { - Scheme_Syntax_Optimizer f; - - f = scheme_syntax_optimizers[SCHEME_PINT_VAL(expr)]; - return f((Scheme_Object *)SCHEME_IPTR_VAL(expr), info, context); - } case scheme_application_type: return optimize_application(expr, info, context); case scheme_application2_type: @@ -4465,6 +4444,7 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in case scheme_application3_type: return optimize_application3(expr, info, context); case scheme_sequence_type: + case scheme_splice_sequence_type: return optimize_sequence(expr, info, context); case scheme_branch_type: return optimize_branch(expr, info, context); @@ -4525,6 +4505,26 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in case scheme_module_variable_type: scheme_signal_error("got top-level in wrong place"); return 0; + case scheme_define_values_type: + return scheme_define_values_optimize(expr, info, context); + case scheme_varref_form_type: + return scheme_ref_optimize(expr, info, context); + case scheme_set_bang_type: + return scheme_set_optimize(expr, info, context); + case scheme_define_syntaxes_type: + return scheme_define_syntaxes_optimize(expr, info, context); + case scheme_define_for_syntax_type: + return scheme_define_for_syntaxes_optimize(expr, info, context); + case scheme_case_lambda_sequence_type: + return scheme_case_lambda_optimize(expr, info, context); + case scheme_begin0_sequence_type: + return scheme_begin0_optimize(expr, info, context); + case scheme_apply_values_type: + return scheme_apply_values_optimize(expr, info, context); + case scheme_require_form_type: + return scheme_top_level_require_optimize(expr, info, context); + case scheme_module_type: + return scheme_module_optimize(expr, info, context); default: info->size += 1; return expr; @@ -4552,14 +4552,6 @@ Scheme_Object *scheme_optimize_clone(int dup_ok, Scheme_Object *expr, Optimize_I } return expr; } - case scheme_compiled_syntax_type: - { - Scheme_Syntax_Cloner f; - - f = scheme_syntax_cloners[SCHEME_PINT_VAL(expr)]; - if (!f) return NULL; - return f(dup_ok, (Scheme_Object *)SCHEME_IPTR_VAL(expr), info, delta, closure_depth); - } case scheme_application2_type: { Scheme_App2_Rec *app = (Scheme_App2_Rec *)expr, *app2; @@ -4673,6 +4665,7 @@ Scheme_Object *scheme_optimize_clone(int dup_ok, Scheme_Object *expr, Optimize_I } case scheme_sequence_type: case scheme_begin0_sequence_type: + case scheme_splice_sequence_type: { Scheme_Sequence *seq = (Scheme_Sequence *)expr, *seq2; int i; @@ -4736,6 +4729,22 @@ Scheme_Object *scheme_optimize_clone(int dup_ok, Scheme_Object *expr, Optimize_I case scheme_compiled_toplevel_type: case scheme_compiled_quote_syntax_type: return expr; + case scheme_define_values_type: + case scheme_define_syntaxes_type: + case scheme_define_for_syntax_type: + case scheme_set_bang_type: + case scheme_boxenv_type: + return NULL; + case scheme_require_form_type: + return NULL; + case scheme_varref_form_type: + return NULL; + case scheme_apply_values_type: + return scheme_apply_values_clone(dup_ok, expr, info, delta, closure_depth); + case scheme_case_lambda_sequence_type: + return scheme_case_lambda_clone(dup_ok, expr, info, delta, closure_depth); + case scheme_module_type: + return NULL; default: if (t > _scheme_compiled_values_types_) { if (dup_ok || scheme_compiled_duplicate_ok(expr)) @@ -4766,18 +4775,6 @@ Scheme_Object *scheme_optimize_shift(Scheme_Object *expr, int delta, int after_d } return expr; } - case scheme_compiled_syntax_type: - { - Scheme_Syntax_Shifter f; - - f = scheme_syntax_shifters[SCHEME_PINT_VAL(expr)]; - - if (!f) { - scheme_signal_error("scheme_optimize_shift: no shift available for %d", SCHEME_PINT_VAL(expr)); - return NULL; - } - return f((Scheme_Object *)SCHEME_IPTR_VAL(expr), delta, after_depth); - } case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)expr; @@ -4845,6 +4842,7 @@ Scheme_Object *scheme_optimize_shift(Scheme_Object *expr, int delta, int after_d return (Scheme_Object *)head; } case scheme_sequence_type: + case scheme_splice_sequence_type: case scheme_begin0_sequence_type: { Scheme_Sequence *seq = (Scheme_Sequence *)expr; @@ -4892,6 +4890,22 @@ Scheme_Object *scheme_optimize_shift(Scheme_Object *expr, int delta, int after_d case scheme_compiled_toplevel_type: case scheme_compiled_quote_syntax_type: return expr; + case scheme_set_bang_type: + return scheme_set_shift(expr, delta, after_depth); + case scheme_varref_form_type: + return scheme_ref_shift(expr, delta, after_depth); + case scheme_apply_values_type: + return scheme_apply_values_shift(expr, delta, after_depth); + case scheme_case_lambda_sequence_type: + return scheme_case_lambda_shift(expr, delta, after_depth); + case scheme_boxenv_type: + case scheme_define_values_type: + case scheme_define_syntaxes_type: + case scheme_define_for_syntax_type: + case scheme_require_form_type: + case scheme_module_type: + scheme_signal_error("scheme_optimize_shift: no shift available for %d", SCHEME_TYPE(expr)); + return NULL; default: return expr; } @@ -5067,10 +5081,7 @@ Scheme_Object *scheme_sfs_add_clears(Scheme_Object *expr, Scheme_Object *clears, clears = SCHEME_CDR(clears); } - if (pre) - return (Scheme_Object *)s; - else - return scheme_make_syntax_resolved(BEGIN0_EXPD, (Scheme_Object *)s); + return (Scheme_Object *)s; } static void sfs_note_app(SFS_Info *info, Scheme_Object *rator) @@ -5589,12 +5600,11 @@ static Scheme_Object *sfs_letrec(Scheme_Object *o, SFS_Info *info) for (i = 0; i < count; i++) { v = scheme_sfs_expr(procs[i], info, i); - if (SAME_TYPE(SCHEME_TYPE(v), scheme_syntax_type) - && (SCHEME_PINT_VAL(v) == BEGIN0_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(v), scheme_begin0_sequence_type)) { /* Some clearing actions were added to the closure. Lift them out. */ int j; - Scheme_Sequence *cseq = (Scheme_Sequence *)SCHEME_IPTR_VAL(v); + Scheme_Sequence *cseq = (Scheme_Sequence *)v; for (j = 1; j < cseq->count; j++) { int pos; pos = SCHEME_LOCAL_POS(cseq->array[j]); @@ -5670,18 +5680,6 @@ Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *info, int closure_ } } break; - case scheme_syntax_type: - { - Scheme_Syntax_SFSer f; - Scheme_Object *orig, *naya; - - f = scheme_syntax_sfsers[SCHEME_PINT_VAL(expr)]; - orig = SCHEME_IPTR_VAL(expr); - naya = f(orig, info); - if (!SAME_OBJ(orig, naya)) - expr = naya; - } - break; case scheme_application_type: expr = sfs_application(expr, info); break; @@ -5692,6 +5690,7 @@ Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *info, int closure_ expr = sfs_application3(expr, info); break; case scheme_sequence_type: + case scheme_splice_sequence_type: expr = sfs_sequence(expr, info); break; case scheme_branch_type: @@ -5721,9 +5720,8 @@ Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *info, int closure_ if (ZERO_SIZED_CLOSUREP(c)) { Scheme_Object *code; code = scheme_sfs_closure((Scheme_Object *)c->code, info, closure_self_pos); - if (SAME_TYPE(SCHEME_TYPE(code), scheme_syntax_type) - && (SCHEME_PINT_VAL(code) == BEGIN0_EXPD)) { - Scheme_Sequence *seq = (Scheme_Sequence *)SCHEME_IPTR_VAL(code); + if (SAME_TYPE(SCHEME_TYPE(code), scheme_begin0_sequence_type)) { + Scheme_Sequence *seq = (Scheme_Sequence *)code; c->code = (Scheme_Closure_Data *)seq->array[0]; seq->array[0] = expr; expr = code; @@ -5745,6 +5743,39 @@ Scheme_Object *scheme_sfs_expr(Scheme_Object *expr, SFS_Info *info, int closure_ /* FIXME: maybe need to handle eagerly created closure */ } break; + case scheme_define_values_type: + expr = scheme_define_values_sfs(expr, info); + break; + case scheme_define_syntaxes_type: + expr = scheme_define_for_syntaxes_sfs(expr, info); + break; + case scheme_define_for_syntax_type: + expr = scheme_define_syntaxes_sfs(expr, info); + break; + case scheme_set_bang_type: + expr = scheme_set_sfs(expr, info); + break; + case scheme_boxenv_type: + expr = scheme_bangboxenv_sfs(expr, info); + break; + case scheme_begin0_sequence_type: + expr = scheme_begin0_sfs(expr, info); + break; + case scheme_require_form_type: + expr = scheme_top_level_require_sfs(expr, info); + break; + case scheme_varref_form_type: + expr = scheme_ref_sfs(expr, info); + break; + case scheme_apply_values_type: + expr = scheme_apply_values_sfs(expr, info); + break; + case scheme_case_lambda_sequence_type: + expr = scheme_case_lambda_sfs(expr, info); + break; + case scheme_module_type: + expr = scheme_module_sfs(expr, info); + break; default: break; } @@ -6020,19 +6051,6 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr) Scheme_Type type = SCHEME_TYPE(expr); switch (type) { - case scheme_syntax_type: - { - Scheme_Syntax_Jitter f; - Scheme_Object *orig, *naya; - - f = scheme_syntax_jitters[SCHEME_PINT_VAL(expr)]; - orig = SCHEME_IPTR_VAL(expr); - naya = f(orig); - if (SAME_OBJ(orig, naya)) - return expr; - - return scheme_make_syntax_resolved(SCHEME_PINT_VAL(expr), naya); - } case scheme_application_type: return jit_application(expr); case scheme_application2_type: @@ -6040,6 +6058,7 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr) case scheme_application3_type: return jit_application3(expr); case scheme_sequence_type: + case scheme_splice_sequence_type: return jit_sequence(expr); case scheme_branch_type: return jit_branch(expr); @@ -6068,6 +6087,28 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr) { return scheme_unclose_case_lambda(expr, 1); } + case scheme_define_values_type: + return scheme_define_values_jit(expr); + case scheme_define_syntaxes_type: + return scheme_define_syntaxes_jit(expr); + case scheme_define_for_syntax_type: + return scheme_define_for_syntaxes_jit(expr); + case scheme_set_bang_type: + return scheme_set_jit(expr); + case scheme_boxenv_type: + return scheme_bangboxenv_jit(expr); + case scheme_begin0_sequence_type: + return scheme_begin0_jit(expr); + case scheme_require_form_type: + return scheme_top_level_require_jit(expr); + case scheme_varref_form_type: + return scheme_ref_jit(expr); + case scheme_apply_values_type: + return scheme_apply_values_jit(expr); + case scheme_case_lambda_sequence_type: + return scheme_case_lambda_jit(expr); + case scheme_module_type: + return scheme_module_jit(expr); default: return expr; } @@ -9783,15 +9824,6 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, EVAL_SFS_CLEAR(RUNSTACK, obj); goto returnv_never_multi; } - case scheme_syntax_type: - { - Scheme_Syntax_Executer f; - - UPDATE_THREAD_RSPTR(); - f = scheme_syntax_executers[SCHEME_PINT_VAL(obj)]; - v = f((Scheme_Object *)SCHEME_IPTR_VAL(obj)); - break; - } case scheme_application_type: { Scheme_App_Rec *app; @@ -10334,7 +10366,79 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, goto returnv_never_multi; } - + + case scheme_define_values_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_define_values_execute(obj); + break; + } + case scheme_define_syntaxes_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_define_syntaxes_execute(obj); + break; + } + case scheme_define_for_syntax_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_define_for_syntaxes_execute(obj); + break; + } + case scheme_set_bang_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_set_execute(obj); + break; + } + case scheme_boxenv_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_bangboxenv_execute(obj); + break; + } + case scheme_begin0_sequence_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_begin0_execute(obj); + break; + } + case scheme_splice_sequence_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_splice_execute(obj); + break; + } + case scheme_require_form_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_top_level_require_execute(obj); + break; + } + case scheme_varref_form_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_ref_execute(obj); + break; + } + case scheme_apply_values_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_apply_values_execute(obj); + break; + } + case scheme_case_lambda_sequence_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_case_lambda_execute(obj); + break; + } + case scheme_module_type: + { + UPDATE_THREAD_RSPTR(); + v = scheme_module_execute(obj, NULL); + break; + } default: v = obj; goto returnv_never_multi; @@ -11748,31 +11852,16 @@ Scheme_Object *scheme_eval_clone(Scheme_Object *expr) /* Clone as much as necessary of `expr' so that prefixes are cloned. Cloned prefixes, in turn, can be updated by linking to reduce the overhead of cross-module references. */ - if (SAME_TYPE(SCHEME_TYPE(expr), scheme_syntax_type)) { - int kind; - Scheme_Object *orig, *naya; - - kind = SCHEME_PINT_VAL(expr); - orig = SCHEME_IPTR_VAL(expr); - switch (kind) { - case MODULE_EXPD: - naya = scheme_module_eval_clone(orig); - break; - case DEFINE_SYNTAX_EXPD: - case DEFINE_FOR_SYNTAX_EXPD: - naya = scheme_syntaxes_eval_clone(orig); - break; - default: - naya = orig; - break; - } - - if (SAME_OBJ(orig, naya)) - return expr; - - return scheme_make_syntax_resolved(kind, naya); - } else + switch (SCHEME_TYPE(expr)) { + case scheme_module_type: + return scheme_module_eval_clone(expr); + break; + case scheme_define_syntaxes_type: + case scheme_define_for_syntax_type: + return scheme_syntaxes_eval_clone(expr); + default: return expr; + } } Resolve_Prefix *scheme_prefix_eval_clone(Resolve_Prefix *rp) @@ -12666,21 +12755,6 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, } } break; - case scheme_syntax_type: - { - Scheme_Syntax_Validater f; - int p = SCHEME_PINT_VAL(expr); - - no_flo(need_flonum, port); - - if ((p < 0) || (p >= _COUNT_EXPD_)) - scheme_ill_formed_code(port); - - f = scheme_syntax_validaters[p]; - f((Scheme_Object *)SCHEME_IPTR_VAL(expr), port, stack, tls, depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, result_ignored, vc, tailpos, procs); - } - break; case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)expr; @@ -12754,6 +12828,7 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, } break; case scheme_sequence_type: + case scheme_splice_sequence_type: { Scheme_Sequence *seq = (Scheme_Sequence *)expr; int cnt; @@ -12989,6 +13064,73 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr, goto top; } break; + + case scheme_define_values_type: + no_flo(need_flonum, port); + scheme_define_values_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_define_syntaxes_type: + no_flo(need_flonum, port); + scheme_define_syntaxes_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_define_for_syntax_type: + no_flo(need_flonum, port); + scheme_define_for_syntaxes_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_set_bang_type: + no_flo(need_flonum, port); + scheme_set_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_boxenv_type: + no_flo(need_flonum, port); + scheme_bangboxenv_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_begin0_sequence_type: + no_flo(need_flonum, port); + scheme_begin0_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_require_form_type: + no_flo(need_flonum, port); + scheme_top_level_require_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_varref_form_type: + no_flo(need_flonum, port); + scheme_ref_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_apply_values_type: + no_flo(need_flonum, port); + scheme_apply_values_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_case_lambda_sequence_type: + no_flo(need_flonum, port); + scheme_case_lambda_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; + case scheme_module_type: + no_flo(need_flonum, port); + scheme_module_validate(expr, port, stack, tls, depth, letlimit, delta, + num_toplevels, num_stxes, num_lifts, tl_use_map, + result_ignored, vc, tailpos, procs); + break; default: /* All values are definitely ok, except pre-closed closures. Such a closure can refer back to itself, so we use a flag @@ -13105,6 +13247,14 @@ static Scheme_Object *read_sequence_save_first(Scheme_Object *obj) return scheme_make_sequence_compilation(obj, -2); } +static Scheme_Object *read_sequence_splice(Scheme_Object *obj) +{ + obj = scheme_make_sequence_compilation(obj, 1); + if (SAME_TYPE(SCHEME_TYPE(obj), scheme_sequence_type)) + obj->type = scheme_splice_sequence_type; + return obj; +} + static Scheme_Object *write_branch(Scheme_Object *obj) { scheme_signal_error("branch writer shouldn't be used"); @@ -13143,118 +13293,6 @@ static Scheme_Object *read_with_cont_mark(Scheme_Object *obj) return (Scheme_Object *)wcm; } -static Scheme_Object *write_syntax(Scheme_Object *obj) -{ - Scheme_Object *idx, *rest, *l; - int protect_after, c; - - c = SCHEME_PINT_VAL(obj); - idx = scheme_make_integer(c); - protect_after = scheme_syntax_protect_afters[c]; - - if (c == BEGIN0_EXPD) { - Scheme_Object *v; - v = SCHEME_PTR_VAL(obj); - switch (SCHEME_TYPE(v)) { - case scheme_sequence_type: - case scheme_begin0_sequence_type: - break; - default: - break; - } - } - - l = rest = (Scheme_Object *)SCHEME_IPTR_VAL(obj); - if (protect_after == -2) { - /* -2 => protect first element of vector */ - if (SCHEME_VECTORP(l)) { - l = scheme_protect_quote(SCHEME_VEC_ELS(rest)[0]); - if (!SAME_OBJ(l, SCHEME_VEC_ELS(rest)[0])) { - Scheme_Object *vec; - intptr_t i, len; - len = SCHEME_VEC_SIZE(rest); - vec = scheme_make_vector(len, NULL); - SCHEME_VEC_ELS(vec)[0] = l; - for (i = 1; i < len; i++) { - SCHEME_VEC_ELS(vec)[i] = SCHEME_VEC_ELS(rest)[i]; - } - rest = vec; - } - } else { - scheme_signal_error("expected a vector for syntax"); - } - } else { - for (c = 0; SCHEME_PAIRP(l) && (c < protect_after); c++) { - l = SCHEME_CDR(l); - } - if (!SCHEME_NULLP(l) && (c == protect_after)) { - Scheme_Object *new_l; - - new_l = scheme_protect_quote(l); - - if (new_l != l) { - Scheme_Object *first = NULL, *last = NULL; - - while (rest != l) { - Scheme_Object *p; - - p = scheme_make_pair(SCHEME_CAR(rest), scheme_null); - if (last) - SCHEME_CDR(last) = p; - else - first = p; - last = p; - - rest = SCHEME_CDR(rest); - } - - if (last) - SCHEME_CDR(last) = new_l; - else - first = new_l; - - rest = first; - } - } - } - - return cons(idx, rest); -} - -static Scheme_Object *read_syntax(Scheme_Object *obj) -{ - Scheme_Object *idx; - Scheme_Object *first = NULL, *last = NULL; - int limit; - - if (!SCHEME_PAIRP(obj) || !SCHEME_INTP(SCHEME_CAR(obj))) - return NULL; /* bad .zo */ - - idx = SCHEME_CAR(obj); - - /* Copy obj, up to number of cons cells before a "protected" value: */ - limit = scheme_syntax_protect_afters[SCHEME_INT_VAL(idx)]; - obj = SCHEME_CDR(obj); - while (SCHEME_PAIRP(obj) && (limit > 0)) { - Scheme_Object *p; - p = scheme_make_pair(SCHEME_CAR(obj), scheme_null); - if (last) - SCHEME_CDR(last) = p; - else - first = p; - last = p; - obj = SCHEME_CDR(obj); - limit--; - } - - if (last) - SCHEME_CDR(last) = obj; - else - first = obj; - - return scheme_make_syntax_resolved(SCHEME_INT_VAL(idx), first); -} - static Scheme_Object *write_quote_syntax(Scheme_Object *obj) { Scheme_Quote_Syntax *qs = (Scheme_Quote_Syntax *)obj; diff --git a/src/racket/src/fun.c b/src/racket/src/fun.c index f8ff26653b..78f9e68169 100644 --- a/src/racket/src/fun.c +++ b/src/racket/src/fun.c @@ -1789,9 +1789,11 @@ scheme_resolve_closure_compilation(Scheme_Object *_data, Resolve_Info *info, int j = i + closure_size + convert_size; Scheme_Object *bcode; - bcode = scheme_make_syntax_resolved(BOXENV_EXPD, - scheme_make_pair(scheme_make_integer(j), - data->code)); + bcode = scheme_alloc_object(); + bcode->type = scheme_boxenv_type; + SCHEME_PTR1_VAL(bcode) = scheme_make_integer(j); + SCHEME_PTR2_VAL(bcode) = data->code; + data->code = bcode; } } @@ -3585,8 +3587,8 @@ const char *scheme_get_proc_name(Scheme_Object *p, int *len, int for_error) name = ((Scheme_Closure_Data *)p)->name; } else if (type == scheme_closure_type) { name = SCHEME_COMPILED_CLOS_CODE(p)->name; - } else if (type == scheme_compiled_syntax_type) { - Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(p); + } else if (type == scheme_case_lambda_sequence_type) { + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)p; if (!cl->count) name = NULL; else diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index 0d467a5421..558f179c01 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -320,15 +320,8 @@ static int is_short(Scheme_Object *obj, int fuel) t = SCHEME_TYPE(obj); switch (t) { - case scheme_syntax_type: - { - int t; - t = SCHEME_PINT_VAL(obj); - if (t == CASE_LAMBDA_EXPD) - return fuel - 1; - else - return 0; - } + case scheme_case_lambda_sequence_type: + return fuel - 1; break; case scheme_application_type: { @@ -552,12 +545,8 @@ int scheme_is_simple(Scheme_Object *obj, int depth, int just_markless, mz_jit_st type = SCHEME_TYPE(obj); switch (type) { - case scheme_syntax_type: - { - int t; - t = SCHEME_PINT_VAL(obj); - return (t == CASE_LAMBDA_EXPD); - } + case scheme_case_lambda_sequence_type: + return 1; break; case scheme_branch_type: @@ -636,9 +625,6 @@ int scheme_is_non_gc(Scheme_Object *obj, int depth) type = SCHEME_TYPE(obj); switch (type) { - case scheme_syntax_type: - break; - case scheme_branch_type: if (depth) { Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)obj; @@ -711,8 +697,8 @@ static int is_a_procedure(Scheme_Object *v, mz_jit_state *jitter) if (SAME_TYPE(t, scheme_closure_type) || SAME_TYPE(t, scheme_unclosed_procedure_type)) return 1; - else if (SAME_TYPE(t, scheme_syntax_type)) { - return (SCHEME_PINT_VAL(v) == CASE_LAMBDA_EXPD); + else if (SAME_TYPE(t, scheme_case_lambda_sequence_type)) { + return 1; } else if (SAME_TYPE(t, scheme_local_type)) { int flags; return scheme_mz_is_closure(jitter, SCHEME_LOCAL_POS(v), -1, &flags); @@ -1889,420 +1875,410 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w END_JIT_DATA(3); return 1; } - case scheme_syntax_type: + case scheme_case_lambda_sequence_type: { - int pos; - pos = SCHEME_PINT_VAL(obj); - switch (pos) { - case CASE_LAMBDA_EXPD: - { - START_JIT_DATA(); - LOG_IT(("case-lambda\n")); - /* case-lambda */ - if (for_branch) - finish_branch_with_true(jitter, for_branch); - else - generate_case_closure(SCHEME_IPTR_VAL(obj), jitter, target); - END_JIT_DATA(5); - } - break; - case BEGIN0_EXPD: - { - Scheme_Sequence *seq; - GC_CAN_IGNORE jit_insn *ref, *ref2; - int i; - START_JIT_DATA(); + START_JIT_DATA(); + LOG_IT(("case-lambda\n")); + /* case-lambda */ + if (for_branch) + finish_branch_with_true(jitter, for_branch); + else + generate_case_closure(obj, jitter, target); + END_JIT_DATA(5); + return 1; + } + break; + case scheme_begin0_sequence_type: + { + Scheme_Sequence *seq; + GC_CAN_IGNORE jit_insn *ref, *ref2; + int i; + START_JIT_DATA(); - LOG_IT(("begin0\n")); + LOG_IT(("begin0\n")); - seq = (Scheme_Sequence *)SCHEME_IPTR_VAL(obj); + seq = (Scheme_Sequence *)obj; - /* Evaluate first expression, and for consistency with bytecode - evaluation, allow multiple values. */ - scheme_generate_non_tail(seq->array[0], jitter, 1, 1, 0); - CHECK_LIMIT(); + /* Evaluate first expression, and for consistency with bytecode + evaluation, allow multiple values. */ + scheme_generate_non_tail(seq->array[0], jitter, 1, 1, 0); + CHECK_LIMIT(); - /* Save value(s) */ - jit_movr_p(JIT_V1, JIT_R0); - mz_pushr_p(JIT_V1); - mz_pushr_p(JIT_V1); - mz_pushr_p(JIT_V1); - mz_rs_sync(); - __START_SHORT_JUMPS__(1); - ref = jit_bnei_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); - CHECK_LIMIT(); - /* Save away multiple values */ - mz_popr_p(JIT_V1); /* sync'd below... */ - mz_popr_p(JIT_V1); - mz_popr_p(JIT_V1); - mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); - CHECK_LIMIT(); - jit_ldxi_l(JIT_V1, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.count); - jit_lshi_l(JIT_V1, JIT_V1, 0x1); - jit_ori_l(JIT_V1, JIT_V1, 0x1); - mz_pushr_p(JIT_V1); /* sync'd below */ - jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.array); - mz_pushr_p(JIT_V1); /* sync'd below */ - CHECK_LIMIT(); - (void)jit_movi_p(JIT_R1, 0x0); - mz_pushr_p(JIT_R1); /* pushing 0 indicates that multi-array follows */ - /* If multi-value array is values buffer, zero out values buffer */ - jit_ldxi_p(JIT_R2, JIT_R0, &((Scheme_Thread *)0x0)->values_buffer); - mz_rs_sync(); - ref2 = jit_bner_p(jit_forward(), JIT_V1, JIT_R2); - jit_stxi_p(&((Scheme_Thread *)0x0)->values_buffer, JIT_R0, JIT_R1); - CHECK_LIMIT(); + /* Save value(s) */ + jit_movr_p(JIT_V1, JIT_R0); + mz_pushr_p(JIT_V1); + mz_pushr_p(JIT_V1); + mz_pushr_p(JIT_V1); + mz_rs_sync(); + __START_SHORT_JUMPS__(1); + ref = jit_bnei_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); + CHECK_LIMIT(); + /* Save away multiple values */ + mz_popr_p(JIT_V1); /* sync'd below... */ + mz_popr_p(JIT_V1); + mz_popr_p(JIT_V1); + mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); + CHECK_LIMIT(); + jit_ldxi_l(JIT_V1, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.count); + jit_lshi_l(JIT_V1, JIT_V1, 0x1); + jit_ori_l(JIT_V1, JIT_V1, 0x1); + mz_pushr_p(JIT_V1); /* sync'd below */ + jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.array); + mz_pushr_p(JIT_V1); /* sync'd below */ + CHECK_LIMIT(); + (void)jit_movi_p(JIT_R1, 0x0); + mz_pushr_p(JIT_R1); /* pushing 0 indicates that multi-array follows */ + /* If multi-value array is values buffer, zero out values buffer */ + jit_ldxi_p(JIT_R2, JIT_R0, &((Scheme_Thread *)0x0)->values_buffer); + mz_rs_sync(); + ref2 = jit_bner_p(jit_forward(), JIT_V1, JIT_R2); + jit_stxi_p(&((Scheme_Thread *)0x0)->values_buffer, JIT_R0, JIT_R1); + CHECK_LIMIT(); - /* evaluate remaining expressions */ - mz_patch_branch(ref); - mz_patch_branch(ref2); - __END_SHORT_JUMPS__(1); - for (i = 1; i < seq->count; i++) { - scheme_generate_non_tail(seq->array[i], jitter, 1, 1, 1); /* sync's below */ - CHECK_LIMIT(); - } - - /* Restore values, if necessary */ - mz_popr_p(JIT_R0); - mz_popr_p(JIT_R1); - mz_popr_p(JIT_R2); - mz_rs_sync(); - CHECK_LIMIT(); - __START_TINY_JUMPS__(1); - ref = jit_bnei_p(jit_forward(), JIT_R0, 0x0); - CHECK_LIMIT(); - mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); - jit_stxi_p(&((Scheme_Thread *)0x0)->ku.multiple.array, JIT_R0, JIT_R1); - jit_rshi_ul(JIT_R2, JIT_R2, 0x1); - jit_stxi_l(&((Scheme_Thread *)0x0)->ku.multiple.count, JIT_R0, JIT_R2); - (void)jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); - - mz_patch_branch(ref); - if (target != JIT_R0) - jit_movr_p(target, JIT_R0); - __END_TINY_JUMPS__(1); - - if (for_branch) finish_branch(jitter, target, for_branch); - - END_JIT_DATA(6); - } - break; - case SET_EXPD: - { - Scheme_Object *p, *v; - int pos, set_undef; - GC_CAN_IGNORE jit_insn *ref1, *ref2, *ref3 - START_JIT_DATA(); - - LOG_IT(("set!\n")); - - p = SCHEME_IPTR_VAL(obj); - v = SCHEME_CAR(p); - set_undef = SCHEME_TRUEP(v); - p = SCHEME_CDR(p); - v = SCHEME_CAR(p); - p = SCHEME_CDR(p); - - scheme_generate_non_tail(p, jitter, 0, 1, 0); - CHECK_LIMIT(); - mz_rs_sync(); - - /* Load global+stx array: */ - pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(v)); - jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); - /* Try already-renamed stx: */ - pos = SCHEME_TOPLEVEL_POS(v); - jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); - CHECK_LIMIT(); - - /* R0 has values, R2 has bucket */ - __START_SHORT_JUMPS__(1); - jit_ldxi_p(JIT_R1, JIT_R2, &((Scheme_Bucket *)0x0)->val); - ref1 = jit_beqi_p(jit_forward(), JIT_R1, NULL); - jit_ldxi_s(JIT_R1, JIT_R2, &((Scheme_Bucket_With_Flags *)0x0)->flags); - ref2 = jit_bmsi_i(jit_forward(), JIT_R1, GLOB_IS_IMMUTATED); - - /* Fast path: */ - jit_stxi_p(&((Scheme_Bucket *)0x0)->val, JIT_R2, JIT_R0); - ref3 = jit_jmpi(jit_forward()); - - /* slow path: */ - mz_patch_branch(ref1); - mz_patch_branch(ref2); - __END_SHORT_JUMPS__(1); - JIT_UPDATE_THREAD_RSPTR_FOR_BRANCH_IF_NEEDED(); - mz_prepare(3); - (void)jit_movi_i(JIT_R1, set_undef); - jit_pusharg_p(JIT_R1); - jit_pusharg_p(JIT_R0); - jit_pusharg_p(JIT_R2); - CHECK_LIMIT(); - (void)mz_finish_lwe(ts_call_set_global_bucket, ref1); - CHECK_LIMIT(); - - __START_SHORT_JUMPS__(1); - mz_patch_ucbranch(ref3); - __END_SHORT_JUMPS__(1); - - if (for_branch) - finish_branch_with_true(jitter, for_branch); - else { - if (!result_ignored) - (void)jit_movi_p(target, scheme_void); - } - END_JIT_DATA(7); - } - break; - case APPVALS_EXPD: - { - Scheme_Object *p, *v; - GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3, *ref5, *refloop; - START_JIT_DATA(); - - LOG_IT(("appvals\n")); - - p = SCHEME_IPTR_VAL(obj); - v = SCHEME_CAR(p); - p = SCHEME_CDR(p); - - scheme_generate_non_tail(v, jitter, 0, 1, 0); - CHECK_LIMIT(); - - /* If v is not known to produce a procedure, then check result: */ - if (!is_a_procedure(v, jitter)) { - mz_rs_sync(); - (void)jit_bmsi_l(sjc.bad_app_vals_target, JIT_R0, 0x1); - jit_ldxi_s(JIT_R1, JIT_R0, &((Scheme_Object *)0x0)->type); - (void)jit_blti_i(sjc.bad_app_vals_target, JIT_R1, scheme_prim_type); - (void)jit_bgti_i(sjc.bad_app_vals_target, JIT_R1, scheme_native_closure_type); - CHECK_LIMIT(); - } - - mz_pushr_p(JIT_R0); - scheme_generate_non_tail(p, jitter, 1, 1, 0); - CHECK_LIMIT(); - - mz_popr_p(JIT_V1); - /* Function is in V1, argument(s) in R0 */ - - mz_rs_sync(); - - __START_SHORT_JUMPS__(1); - ref = jit_beqi_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); - /* Single-value case: --------------- */ - /* We definitely have stack space for one argument, because we - just used it for the rator. */ - if (is_tail) { - mz_ld_runstack_base_alt(JIT_RUNSTACK); - jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK_BASE_OR_ALT(JIT_RUNSTACK), WORDS_TO_BYTES(1)); - } else { - jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); - } - CHECK_RUNSTACK_OVERFLOW(); - jit_str_p(JIT_RUNSTACK, JIT_R0); - jit_movi_l(JIT_R0, 1); - ref2 = jit_jmpi(jit_forward()); - CHECK_LIMIT(); - - /* Multiple-values case: ------------ */ - mz_patch_branch(ref); - /* Get new argc: */ - (void)mz_tl_ldi_p(JIT_R1, tl_scheme_current_thread); - jit_ldxi_l(JIT_R2, JIT_R1, &((Scheme_Thread *)0x0)->ku.multiple.count); - /* Enough room on runstack? */ - mz_tl_ldi_p(JIT_R0, tl_MZ_RUNSTACK_START); - if (is_tail) { - mz_ld_runstack_base_alt(JIT_R0); - jit_subr_ul(JIT_R0, JIT_RUNSTACK_BASE_OR_ALT(JIT_R0), JIT_R0); - } else { - jit_subr_ul(JIT_R0, JIT_RUNSTACK, JIT_R0); - } - CHECK_LIMIT(); - /* R0 is space left (in bytes), R2 is argc */ - jit_lshi_l(JIT_R2, JIT_R2, JIT_LOG_WORD_SIZE); - if (is_tail) { - int fpos, fstack; - fstack = scheme_mz_flostack_save(jitter, &fpos); - __END_SHORT_JUMPS__(1); - scheme_mz_flostack_restore(jitter, 0, 0, 1, 1); - (void)jit_bltr_ul(sjc.app_values_tail_slow_code, JIT_R0, JIT_R2); - __START_SHORT_JUMPS__(1); - scheme_mz_flostack_restore(jitter, fstack, fpos, 0, 1); - ref5 = 0; - } else { - GC_CAN_IGNORE jit_insn *refok; - refok = jit_bger_ul(jit_forward(), JIT_R0, JIT_R2); - __END_SHORT_JUMPS__(1); - if (multi_ok) { - (void)jit_calli(sjc.app_values_multi_slow_code); - } else { - (void)jit_calli(sjc.app_values_slow_code); - } - __START_SHORT_JUMPS__(1); - ref5 = jit_jmpi(jit_forward()); - mz_patch_branch(refok); - } - CHECK_LIMIT(); - if (is_tail) { - mz_ld_runstack_base_alt(JIT_RUNSTACK); - jit_subr_ul(JIT_RUNSTACK, JIT_RUNSTACK_BASE_OR_ALT(JIT_RUNSTACK), JIT_R2); - } else { - jit_subr_ul(JIT_RUNSTACK, JIT_RUNSTACK, JIT_R2); - } - CHECK_RUNSTACK_OVERFLOW(); - /* Copy args: */ - jit_ldxi_l(JIT_R1, JIT_R1, &((Scheme_Thread *)0x0)->ku.multiple.array); - refloop = _jit.x.pc; - ref3 = jit_blei_l(jit_forward(), JIT_R2, 0); - jit_subi_l(JIT_R2, JIT_R2, JIT_WORD_SIZE); - jit_ldxr_p(JIT_R0, JIT_R1, JIT_R2); - jit_stxr_p(JIT_R2, JIT_RUNSTACK, JIT_R0); - (void)jit_jmpi(refloop); - CHECK_LIMIT(); - mz_patch_branch(ref3); - (void)mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); - jit_ldxi_l(JIT_R0, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.count); - - /* Perform call --------------------- */ - /* Function is in V1, argc in R0, args on RUNSTACK */ - mz_patch_ucbranch(ref2); - __END_SHORT_JUMPS__(1); - - if (is_tail) { - if (!sjc.shared_tail_argc_code) { - sjc.shared_tail_argc_code = scheme_generate_shared_call(-1, jitter, 1, 1, 0, 0, 0); - } - mz_set_local_p(JIT_R0, JIT_LOCAL2); - (void)jit_jmpi(sjc.shared_tail_argc_code); - } else { - int mo = multi_ok ? 1 : 0; - void *code; - if (!sjc.shared_non_tail_argc_code[mo]) { - scheme_ensure_retry_available(jitter, multi_ok); - code = scheme_generate_shared_call(-2, jitter, multi_ok, 0, 0, 0, 0); - sjc.shared_non_tail_argc_code[mo] = code; - } - code = sjc.shared_non_tail_argc_code[mo]; - (void)jit_calli(code); - /* non-tail code pops args off runstack for us */ - jitter->need_set_rs = 1; - mz_patch_ucbranch(ref5); - if (target != JIT_R0) - jit_movr_p(target, JIT_R0); - } - CHECK_LIMIT(); - - if (for_branch) finish_branch(jitter, target, for_branch); - - END_JIT_DATA(81); - - if (is_tail) - return 2; - } - break; - case BOXENV_EXPD: - { - Scheme_Object *p, *v; - int pos; - START_JIT_DATA(); - - LOG_IT(("boxenv\n")); - - mz_rs_sync(); - JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); - - p = (Scheme_Object *)SCHEME_IPTR_VAL(obj); - v = SCHEME_CAR(p); - pos = mz_remap(SCHEME_INT_VAL(v)); - p = SCHEME_CDR(p); - -#ifdef CAN_INLINE_ALLOC - scheme_inline_alloc(jitter, sizeof(Scheme_Object*), -1, 0, 0, 0, 0); - CHECK_LIMIT(); - jit_addi_p(JIT_R0, JIT_V1, OBJHEAD_SIZE); - jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); - jit_str_p(JIT_R0, JIT_R2); -#else - jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); - mz_prepare(1); - jit_pusharg_p(JIT_R2); - { - GC_CAN_IGNORE jit_insn *refr; - (void)mz_finish_lwe(ts_scheme_make_envunbox, refr); - } - jit_retval(JIT_R0); -#endif - jit_stxi_p(WORDS_TO_BYTES(pos), JIT_RUNSTACK, JIT_R0); - CHECK_LIMIT(); - - scheme_generate(p, jitter, is_tail, wcm_may_replace, multi_ok, orig_target, for_branch); - - END_JIT_DATA(8); - } - break; - case REF_EXPD: - { - if (for_branch) - finish_branch_with_true(jitter, for_branch); - else { - Scheme_Object *dummy; - - mz_rs_sync(); - - obj = SCHEME_IPTR_VAL(obj); - dummy = SCHEME_PTR2_VAL(obj); - obj = SCHEME_PTR1_VAL(obj); - - /* Load global array: */ - pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj)); - jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); - /* Load bucket: */ - pos = SCHEME_TOPLEVEL_POS(obj); - jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); - CHECK_LIMIT(); - - /* Load dummy bucket: */ - pos = SCHEME_TOPLEVEL_POS(dummy); - jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); - CHECK_LIMIT(); - - JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); - mz_prepare(2); - jit_pusharg_p(JIT_R2); - jit_pusharg_p(JIT_R1); - { - GC_CAN_IGNORE jit_insn *refr; - (void)mz_finish_lwe(ts_make_global_ref, refr); - } - CHECK_LIMIT(); - jit_retval(target); - VALIDATE_RESULT(target); - } - } - break; - case SPLICE_EXPD: - { - scheme_signal_error("internal error: cannot JIT a top-level splice form"); - } - break; - default: - { - mz_rs_sync(); - JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); - obj = SCHEME_IPTR_VAL(obj); - (void)jit_patchable_movi_p(JIT_R2, obj); /* !! */ - CHECK_LIMIT(); - mz_prepare(1); - jit_pusharg_p(JIT_R2); - (void)mz_finish(scheme_syntax_executers[pos]); - CHECK_LIMIT(); - jit_retval(target); - VALIDATE_RESULT(target); - if (for_branch) finish_branch(jitter, target, for_branch); - } + /* evaluate remaining expressions */ + mz_patch_branch(ref); + mz_patch_branch(ref2); + __END_SHORT_JUMPS__(1); + for (i = 1; i < seq->count; i++) { + scheme_generate_non_tail(seq->array[i], jitter, 1, 1, 1); /* sync's below */ + CHECK_LIMIT(); } + + /* Restore values, if necessary */ + mz_popr_p(JIT_R0); + mz_popr_p(JIT_R1); + mz_popr_p(JIT_R2); + mz_rs_sync(); + CHECK_LIMIT(); + __START_TINY_JUMPS__(1); + ref = jit_bnei_p(jit_forward(), JIT_R0, 0x0); + CHECK_LIMIT(); + mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); + jit_stxi_p(&((Scheme_Thread *)0x0)->ku.multiple.array, JIT_R0, JIT_R1); + jit_rshi_ul(JIT_R2, JIT_R2, 0x1); + jit_stxi_l(&((Scheme_Thread *)0x0)->ku.multiple.count, JIT_R0, JIT_R2); + (void)jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); + + mz_patch_branch(ref); + if (target != JIT_R0) + jit_movr_p(target, JIT_R0); + __END_TINY_JUMPS__(1); + + if (for_branch) finish_branch(jitter, target, for_branch); + + END_JIT_DATA(6); + return 1; } + break; + case scheme_set_bang_type: + { + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)obj; + Scheme_Object *p, *v; + int pos, set_undef; + GC_CAN_IGNORE jit_insn *ref1, *ref2, *ref3; + + START_JIT_DATA(); + + LOG_IT(("set!\n")); + + p = sb->val; + v = sb->var; + set_undef = sb->set_undef; + + scheme_generate_non_tail(p, jitter, 0, 1, 0); + CHECK_LIMIT(); + mz_rs_sync(); + + /* Load global+stx array: */ + pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(v)); + jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); + /* Try already-renamed stx: */ + pos = SCHEME_TOPLEVEL_POS(v); + jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); + CHECK_LIMIT(); + + /* R0 has values, R2 has bucket */ + __START_SHORT_JUMPS__(1); + jit_ldxi_p(JIT_R1, JIT_R2, &((Scheme_Bucket *)0x0)->val); + ref1 = jit_beqi_p(jit_forward(), JIT_R1, NULL); + jit_ldxi_s(JIT_R1, JIT_R2, &((Scheme_Bucket_With_Flags *)0x0)->flags); + ref2 = jit_bmsi_i(jit_forward(), JIT_R1, GLOB_IS_IMMUTATED); + + /* Fast path: */ + jit_stxi_p(&((Scheme_Bucket *)0x0)->val, JIT_R2, JIT_R0); + ref3 = jit_jmpi(jit_forward()); + + /* slow path: */ + mz_patch_branch(ref1); + mz_patch_branch(ref2); + __END_SHORT_JUMPS__(1); + JIT_UPDATE_THREAD_RSPTR_FOR_BRANCH_IF_NEEDED(); + mz_prepare(3); + (void)jit_movi_i(JIT_R1, set_undef); + jit_pusharg_p(JIT_R1); + jit_pusharg_p(JIT_R0); + jit_pusharg_p(JIT_R2); + CHECK_LIMIT(); + (void)mz_finish_lwe(ts_call_set_global_bucket, ref1); + CHECK_LIMIT(); + + __START_SHORT_JUMPS__(1); + mz_patch_ucbranch(ref3); + __END_SHORT_JUMPS__(1); + + if (for_branch) + finish_branch_with_true(jitter, for_branch); + else { + if (!result_ignored) + (void)jit_movi_p(target, scheme_void); + } + END_JIT_DATA(7); + + return 1; + } + break; + case scheme_apply_values_type: + { + Scheme_Object *p, *v; + GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3, *ref5, *refloop; + START_JIT_DATA(); + + LOG_IT(("appvals\n")); + + v = SCHEME_PTR1_VAL(obj); + p = SCHEME_PTR2_VAL(obj); + + scheme_generate_non_tail(v, jitter, 0, 1, 0); + CHECK_LIMIT(); + + /* If v is not known to produce a procedure, then check result: */ + if (!is_a_procedure(v, jitter)) { + mz_rs_sync(); + (void)jit_bmsi_l(sjc.bad_app_vals_target, JIT_R0, 0x1); + jit_ldxi_s(JIT_R1, JIT_R0, &((Scheme_Object *)0x0)->type); + (void)jit_blti_i(sjc.bad_app_vals_target, JIT_R1, scheme_prim_type); + (void)jit_bgti_i(sjc.bad_app_vals_target, JIT_R1, scheme_native_closure_type); + CHECK_LIMIT(); + } + + mz_pushr_p(JIT_R0); + scheme_generate_non_tail(p, jitter, 1, 1, 0); + CHECK_LIMIT(); + + mz_popr_p(JIT_V1); + /* Function is in V1, argument(s) in R0 */ + + mz_rs_sync(); + + __START_SHORT_JUMPS__(1); + ref = jit_beqi_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); + /* Single-value case: --------------- */ + /* We definitely have stack space for one argument, because we + just used it for the rator. */ + if (is_tail) { + mz_ld_runstack_base_alt(JIT_RUNSTACK); + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK_BASE_OR_ALT(JIT_RUNSTACK), WORDS_TO_BYTES(1)); + } else { + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + } + CHECK_RUNSTACK_OVERFLOW(); + jit_str_p(JIT_RUNSTACK, JIT_R0); + jit_movi_l(JIT_R0, 1); + ref2 = jit_jmpi(jit_forward()); + CHECK_LIMIT(); + + /* Multiple-values case: ------------ */ + mz_patch_branch(ref); + /* Get new argc: */ + (void)mz_tl_ldi_p(JIT_R1, tl_scheme_current_thread); + jit_ldxi_l(JIT_R2, JIT_R1, &((Scheme_Thread *)0x0)->ku.multiple.count); + /* Enough room on runstack? */ + mz_tl_ldi_p(JIT_R0, tl_MZ_RUNSTACK_START); + if (is_tail) { + mz_ld_runstack_base_alt(JIT_R0); + jit_subr_ul(JIT_R0, JIT_RUNSTACK_BASE_OR_ALT(JIT_R0), JIT_R0); + } else { + jit_subr_ul(JIT_R0, JIT_RUNSTACK, JIT_R0); + } + CHECK_LIMIT(); + /* R0 is space left (in bytes), R2 is argc */ + jit_lshi_l(JIT_R2, JIT_R2, JIT_LOG_WORD_SIZE); + if (is_tail) { + int fpos, fstack; + fstack = scheme_mz_flostack_save(jitter, &fpos); + __END_SHORT_JUMPS__(1); + scheme_mz_flostack_restore(jitter, 0, 0, 1, 1); + (void)jit_bltr_ul(sjc.app_values_tail_slow_code, JIT_R0, JIT_R2); + __START_SHORT_JUMPS__(1); + scheme_mz_flostack_restore(jitter, fstack, fpos, 0, 1); + ref5 = 0; + } else { + GC_CAN_IGNORE jit_insn *refok; + refok = jit_bger_ul(jit_forward(), JIT_R0, JIT_R2); + __END_SHORT_JUMPS__(1); + if (multi_ok) { + (void)jit_calli(sjc.app_values_multi_slow_code); + } else { + (void)jit_calli(sjc.app_values_slow_code); + } + __START_SHORT_JUMPS__(1); + ref5 = jit_jmpi(jit_forward()); + mz_patch_branch(refok); + } + CHECK_LIMIT(); + if (is_tail) { + mz_ld_runstack_base_alt(JIT_RUNSTACK); + jit_subr_ul(JIT_RUNSTACK, JIT_RUNSTACK_BASE_OR_ALT(JIT_RUNSTACK), JIT_R2); + } else { + jit_subr_ul(JIT_RUNSTACK, JIT_RUNSTACK, JIT_R2); + } + CHECK_RUNSTACK_OVERFLOW(); + /* Copy args: */ + jit_ldxi_l(JIT_R1, JIT_R1, &((Scheme_Thread *)0x0)->ku.multiple.array); + refloop = _jit.x.pc; + ref3 = jit_blei_l(jit_forward(), JIT_R2, 0); + jit_subi_l(JIT_R2, JIT_R2, JIT_WORD_SIZE); + jit_ldxr_p(JIT_R0, JIT_R1, JIT_R2); + jit_stxr_p(JIT_R2, JIT_RUNSTACK, JIT_R0); + (void)jit_jmpi(refloop); + CHECK_LIMIT(); + mz_patch_branch(ref3); + (void)mz_tl_ldi_p(JIT_R0, tl_scheme_current_thread); + jit_ldxi_l(JIT_R0, JIT_R0, &((Scheme_Thread *)0x0)->ku.multiple.count); + + /* Perform call --------------------- */ + /* Function is in V1, argc in R0, args on RUNSTACK */ + mz_patch_ucbranch(ref2); + __END_SHORT_JUMPS__(1); + + if (is_tail) { + if (!sjc.shared_tail_argc_code) { + sjc.shared_tail_argc_code = scheme_generate_shared_call(-1, jitter, 1, 1, 0, 0, 0); + } + mz_set_local_p(JIT_R0, JIT_LOCAL2); + (void)jit_jmpi(sjc.shared_tail_argc_code); + } else { + int mo = multi_ok ? 1 : 0; + void *code; + if (!sjc.shared_non_tail_argc_code[mo]) { + scheme_ensure_retry_available(jitter, multi_ok); + code = scheme_generate_shared_call(-2, jitter, multi_ok, 0, 0, 0, 0); + sjc.shared_non_tail_argc_code[mo] = code; + } + code = sjc.shared_non_tail_argc_code[mo]; + (void)jit_calli(code); + /* non-tail code pops args off runstack for us */ + jitter->need_set_rs = 1; + mz_patch_ucbranch(ref5); + if (target != JIT_R0) + jit_movr_p(target, JIT_R0); + } + CHECK_LIMIT(); + + if (for_branch) finish_branch(jitter, target, for_branch); + + END_JIT_DATA(81); + + if (is_tail) + return 2; + return 1; + } + break; + case scheme_boxenv_type: + { + Scheme_Object *p, *v; + int pos; + START_JIT_DATA(); + + LOG_IT(("boxenv\n")); + + mz_rs_sync(); + JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); + + v = SCHEME_PTR1_VAL(obj); + pos = mz_remap(SCHEME_INT_VAL(v)); + p = SCHEME_PTR2_VAL(obj); + +#ifdef CAN_INLINE_ALLOC + scheme_inline_alloc(jitter, sizeof(Scheme_Object*), -1, 0, 0, 0, 0); + CHECK_LIMIT(); + jit_addi_p(JIT_R0, JIT_V1, OBJHEAD_SIZE); + jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); + jit_str_p(JIT_R0, JIT_R2); +#else + jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); + mz_prepare(1); + jit_pusharg_p(JIT_R2); + { + GC_CAN_IGNORE jit_insn *refr; + (void)mz_finish_lwe(ts_scheme_make_envunbox, refr); + } + jit_retval(JIT_R0); +#endif + jit_stxi_p(WORDS_TO_BYTES(pos), JIT_RUNSTACK, JIT_R0); + CHECK_LIMIT(); + + scheme_generate(p, jitter, is_tail, wcm_may_replace, multi_ok, orig_target, for_branch); + + END_JIT_DATA(8); + + return 1; + } + break; + case scheme_varref_form_type: + { + if (for_branch) + finish_branch_with_true(jitter, for_branch); + else { + Scheme_Object *dummy; + int pos; + + mz_rs_sync(); + + dummy = SCHEME_PTR2_VAL(obj); + obj = SCHEME_PTR1_VAL(obj); + + /* Load global array: */ + pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj)); + jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); + /* Load bucket: */ + pos = SCHEME_TOPLEVEL_POS(obj); + jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); + CHECK_LIMIT(); + + /* Load dummy bucket: */ + pos = SCHEME_TOPLEVEL_POS(dummy); + jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); + CHECK_LIMIT(); + + JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); + mz_prepare(2); + jit_pusharg_p(JIT_R2); + jit_pusharg_p(JIT_R1); + { + GC_CAN_IGNORE jit_insn *refr; + (void)mz_finish_lwe(ts_make_global_ref, refr); + } + CHECK_LIMIT(); + jit_retval(target); + VALIDATE_RESULT(target); + } + + return 1; + } + break; + case scheme_splice_sequence_type: + case scheme_define_values_type: + case scheme_define_syntaxes_type: + case scheme_define_for_syntax_type: + case scheme_require_form_type: + case scheme_module_type: + { + scheme_signal_error("internal error: cannot JIT a top-level form"); + return 0; + } + break; case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)obj; diff --git a/src/racket/src/module.c b/src/racket/src/module.c index 327169b068..2e6f399577 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -88,36 +88,10 @@ static Scheme_Object *require_expand(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object *provide_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); static Scheme_Object *provide_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); -static Scheme_Object *module_execute(Scheme_Object *data); -static Scheme_Object *top_level_require_execute(Scheme_Object *data); - -static Scheme_Object *module_jit(Scheme_Object *data); -static Scheme_Object *top_level_require_jit(Scheme_Object *data); - -static Scheme_Object *module_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *module_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *module_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *top_level_require_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *top_level_require_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *top_level_require_sfs(Scheme_Object *data, SFS_Info *info); - -static void module_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); - static Scheme_Object *write_module(Scheme_Object *obj); static Scheme_Object *read_module(Scheme_Object *obj); +static Scheme_Object *read_top_level_require(Scheme_Object *obj); +static Scheme_Object *write_top_level_require(Scheme_Object *obj); static Scheme_Module *module_load(Scheme_Object *modname, Scheme_Env *env, const char *who); @@ -303,17 +277,6 @@ static void qsort_provides(Scheme_Object **exs, Scheme_Object **exsns, Scheme_Ob void scheme_init_module(Scheme_Env *env) { - scheme_register_syntax(MODULE_EXPD, - module_optimize, - module_resolve, module_sfs, module_validate, - module_execute, module_jit, - NULL, NULL, -1); - scheme_register_syntax(REQUIRE_EXPD, - top_level_require_optimize, - top_level_require_resolve, top_level_require_sfs, top_level_require_validate, - top_level_require_execute, top_level_require_jit, - NULL, NULL, 2); - scheme_add_global_keyword("module", scheme_make_compiled_syntax(module_syntax, module_expand), @@ -386,6 +349,8 @@ void scheme_init_module(Scheme_Env *env) scheme_install_type_writer(scheme_module_type, write_module); scheme_install_type_reader(scheme_module_type, read_module); + scheme_install_type_writer(scheme_require_form_type, write_top_level_require); + scheme_install_type_reader(scheme_require_form_type, read_top_level_require); GLOBAL_PARAMETER("current-module-name-resolver", current_module_name_resolver, MZCONFIG_CURRENT_MODULE_RESOLVER, env); GLOBAL_PARAMETER("current-module-declare-name", current_module_name_prefix, MZCONFIG_CURRENT_MODULE_NAME, env); @@ -4690,17 +4655,10 @@ static int needs_prompt(Scheme_Object *e) case scheme_local_type: case scheme_local_unbox_type: return 0; - case scheme_syntax_type: - switch (SCHEME_PINT_VAL(e)) { - case CASE_LAMBDA_EXPD: - return 0; - case DEFINE_VALUES_EXPD: - e = (Scheme_Object *)SCHEME_IPTR_VAL(e); - e = SCHEME_VEC_ELS(e)[0]; - break; - default: - return 1; - } + case scheme_case_lambda_sequence_type: + return 0; + case scheme_define_values_type: + e = SCHEME_VEC_ELS(e)[0]; break; default: return 1; @@ -5015,9 +4973,8 @@ Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o) if (!c->prefix) /* => compiled module is in `code' field */ return (Scheme_Module *)c->code; - if (SAME_TYPE(SCHEME_TYPE(c->code), scheme_syntax_type) - && (SCHEME_PINT_VAL(c->code) == MODULE_EXPD)) { - return (Scheme_Module *)SCHEME_IPTR_VAL(c->code); + if (SAME_TYPE(SCHEME_TYPE(c->code), scheme_module_type)) { + return (Scheme_Module *)c->code; } } @@ -5387,11 +5344,6 @@ static Scheme_Object *do_module_execute(Scheme_Object *data, Scheme_Env *genv, i return scheme_void; } -static Scheme_Object *module_execute(Scheme_Object *data) -{ - return do_module_execute(data, NULL, 1); -} - Scheme_Object *scheme_module_execute(Scheme_Object *data, Scheme_Env *genv) { return do_module_execute(data, genv, 0); @@ -5507,7 +5459,7 @@ static Scheme_Object *do_module_clone(Scheme_Object *data, int jit) return (Scheme_Object *)m; } -static Scheme_Object *module_jit(Scheme_Object *data) +Scheme_Object *scheme_module_jit(Scheme_Object *data) { return do_module_clone(data, 1); } @@ -5517,7 +5469,7 @@ Scheme_Object *scheme_module_eval_clone(Scheme_Object *data) return do_module_clone(data, 0); } -static void module_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_module_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -5530,9 +5482,6 @@ static void module_validate(Scheme_Object *data, Mz_CPort *port, Resolve_Prefix *rp; Scheme_Object *e; - if (!SAME_TYPE(SCHEME_TYPE(data), scheme_module_type)) - scheme_ill_formed_code(port); - m = (Scheme_Module *)data; if (!SCHEME_MODNAMEP(m->modname)) @@ -5590,8 +5539,8 @@ static int set_code_closure_flags(Scheme_Object *clones, return flags; } -static Scheme_Object * -module_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_module_optimize(Scheme_Object *data, Optimize_Info *info, int context) { Scheme_Module *m = (Scheme_Module *)data; Scheme_Object *e, *vars, *old_context; @@ -5612,13 +5561,11 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) at the expense of later inlining. */ for (i_m = 0; i_m < cnt; i_m++) { e = SCHEME_VEC_ELS(m->body)[i_m]; - if (SAME_TYPE(SCHEME_TYPE(e), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(e) == DEFINE_VALUES_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(e), scheme_define_values_type)) { int n; - e = (Scheme_Object *)SCHEME_IPTR_VAL(e); - vars = SCHEME_CAR(e); - e = SCHEME_CDR(e); + vars = SCHEME_VEC_ELS(e)[0]; + e = SCHEME_VEC_ELS(e)[1]; n = scheme_list_length(vars); if (n == 1) { @@ -5654,11 +5601,10 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) is_proc_def = 0; if (OPT_DISCOURAGE_EARLY_INLINE && info->enforce_const) { - if (SAME_TYPE(SCHEME_TYPE(e), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(e) == DEFINE_VALUES_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(e), scheme_define_values_type)) { Scheme_Object *e2; - e2 = (Scheme_Object *)SCHEME_IPTR_VAL(e); - e2 = SCHEME_CDR(e2); + e2 = (Scheme_Object *)e; + e2 = SCHEME_VEC_ELS(e2)[1]; if (IS_COMPILED_PROC(e2)) is_proc_def = 1; } @@ -5682,14 +5628,11 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) /* If this expression/definition can't have any side effect (including raising an exception), then continue the group of simultaneous definitions: */ - if (SAME_TYPE(SCHEME_TYPE(e), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(e) == DEFINE_VALUES_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(e), scheme_define_values_type)) { int n, cnst = 0, sproc = 0; - e = (Scheme_Object *)SCHEME_IPTR_VAL(e); - - vars = SCHEME_CAR(e); - e = SCHEME_CDR(e); + vars = SCHEME_VEC_ELS(e)[0]; + e = SCHEME_VEC_ELS(e)[1]; n = scheme_list_length(vars); cont = scheme_omittable_expr(e, n, -1, 0, info, -1); @@ -5810,11 +5753,9 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) e = SCHEME_VEC_ELS(m->body)[start_simltaneous]; if (OPT_LIMIT_FUNCTION_RESIZE) { - if (SAME_TYPE(SCHEME_TYPE(e), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(e) == DEFINE_VALUES_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(e), scheme_define_values_type)) { Scheme_Object *sub_e; - sub_e = (Scheme_Object *)SCHEME_IPTR_VAL(e); - sub_e = SCHEME_CDR(sub_e); + sub_e = SCHEME_VEC_ELS(e)[1]; if (IS_COMPILED_PROC(sub_e)) old_sz = scheme_compiled_proc_body_size(sub_e); else @@ -5833,8 +5774,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) Scheme_Object *rpos; rpos = scheme_hash_get(re_consts, scheme_make_integer(start_simltaneous)); if (rpos) { - e = (Scheme_Object *)SCHEME_IPTR_VAL(e); - e = SCHEME_CDR(e); + e = SCHEME_VEC_ELS(e)[1]; if (!scheme_compiled_propagate_ok(e, info) && scheme_is_statically_proc(e, info)) { /* If we previously installed a procedure for inlining, @@ -5921,11 +5861,11 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context) /* Exp-time body was optimized during compilation */ - return scheme_make_syntax_compiled(MODULE_EXPD, data); + return data; } -static Scheme_Object * -module_resolve(Scheme_Object *data, Resolve_Info *old_rslv) +Scheme_Object * +scheme_module_expr_resolve(Scheme_Object *data, Resolve_Info *old_rslv) { Scheme_Module *m = (Scheme_Module *)data; Scheme_Object *b, *lift_vec; @@ -5967,11 +5907,11 @@ module_resolve(Scheme_Object *data, Resolve_Info *old_rslv) /* Exp-time body was resolved during compilation */ - return scheme_make_syntax_resolved(MODULE_EXPD, data); + return data; } -static Scheme_Object * -module_sfs(Scheme_Object *data, SFS_Info *old_info) +Scheme_Object * +scheme_module_sfs(Scheme_Object *data, SFS_Info *old_info) { Scheme_Module *m = (Scheme_Module *)data; Scheme_Object *e, *ex; @@ -5984,9 +5924,7 @@ module_sfs(Scheme_Object *data, SFS_Info *old_info) info = scheme_new_sfs_info(m->max_let_depth); info->for_mod = 1; - scheme_sfs(scheme_make_syntax_resolved(MODULE_EXPD, data), - info, - m->max_let_depth); + scheme_sfs(data, info, m->max_let_depth); return data; } @@ -6243,7 +6181,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, m->lang_info = pv; } - fm = scheme_make_syntax_compiled(MODULE_EXPD, (Scheme_Object *)m); + fm = (Scheme_Object *)m; } else { Scheme_Object *hints, *formname; @@ -9928,21 +9866,21 @@ do_require_execute(Scheme_Env *env, Scheme_Object *form) return scheme_void; } -static Scheme_Object * -top_level_require_execute(Scheme_Object *data) +Scheme_Object * +scheme_top_level_require_execute(Scheme_Object *data) { - do_require_execute(scheme_environment_from_dummy(SCHEME_CAR(data)), - SCHEME_CDR(data)); + do_require_execute(scheme_environment_from_dummy(SCHEME_PTR1_VAL(data)), + SCHEME_PTR2_VAL(data)); return scheme_void; } -static Scheme_Object * -top_level_require_jit(Scheme_Object *data) +Scheme_Object * +scheme_top_level_require_jit(Scheme_Object *data) { return data; } -static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_top_level_require_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -9952,24 +9890,26 @@ static void top_level_require_validate(Scheme_Object *data, Mz_CPort *port, { } -static Scheme_Object * -top_level_require_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_top_level_require_optimize(Scheme_Object *data, Optimize_Info *info, int context) { - return scheme_make_syntax_compiled(REQUIRE_EXPD, data); + return data; } -static Scheme_Object * -top_level_require_resolve(Scheme_Object *data, Resolve_Info *rslv) +Scheme_Object * +scheme_top_level_require_resolve(Scheme_Object *data, Resolve_Info *rslv) { - Scheme_Object *dummy = SCHEME_CAR(data); + Scheme_Object *dummy = SCHEME_PTR1_VAL(data); dummy = scheme_resolve_expr(dummy, rslv); - return scheme_make_syntax_resolved(REQUIRE_EXPD, cons(dummy, SCHEME_CDR(data))); + SCHEME_PTR1_VAL(data) = dummy; + + return data; } -static Scheme_Object * -top_level_require_sfs(Scheme_Object *data, SFS_Info *rslv) +Scheme_Object * +scheme_top_level_require_sfs(Scheme_Object *data, SFS_Info *rslv) { return data; } @@ -9978,7 +9918,7 @@ static Scheme_Object *do_require(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Expand_Info *rec, int drec) { Scheme_Hash_Table *ht; - Scheme_Object *rn_set, *dummy, *modidx; + Scheme_Object *rn_set, *dummy, *modidx, *data; Scheme_Env *genv; if (!scheme_is_toplevel(env)) @@ -10014,9 +9954,13 @@ static Scheme_Object *do_require(Scheme_Object *form, Scheme_Comp_Env *env, scheme_compile_rec_done_local(rec, drec); scheme_default_compile_rec(rec, drec); - return scheme_make_syntax_compiled(REQUIRE_EXPD, - cons(dummy, - form)); + + data = scheme_alloc_object(); + data->type = scheme_require_form_type; + SCHEME_PTR1_VAL(data) = dummy; + SCHEME_PTR2_VAL(data) = form; + + return data; } else return form; } @@ -10664,3 +10608,22 @@ static Scheme_Object *read_module(Scheme_Object *obj) return (Scheme_Object *)m; } + +Scheme_Object *write_top_level_require(Scheme_Object *o) +{ + return scheme_make_pair(SCHEME_PTR1_VAL(o), SCHEME_PTR2_VAL(o)); +} + +Scheme_Object *read_top_level_require(Scheme_Object *o) +{ + Scheme_Object *data; + + if (!SCHEME_PAIRP(o)) return NULL; + + data = scheme_alloc_object(); + data->type = scheme_require_form_type; + SCHEME_PTR1_VAL(data) = SCHEME_CAR(o); + SCHEME_PTR2_VAL(data) = SCHEME_CDR(o); + + return data; +} diff --git a/src/racket/src/mzmark.c b/src/racket/src/mzmark.c index 033d7bff04..af44dec8ad 100644 --- a/src/racket/src/mzmark.c +++ b/src/racket/src/mzmark.c @@ -656,6 +656,35 @@ static int let_header_FIXUP(void *p, struct NewGC *gc) { #define let_header_IS_CONST_SIZE 1 +static int set_bang_SIZE(void *p, struct NewGC *gc) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +} + +static int set_bang_MARK(void *p, struct NewGC *gc) { + Scheme_Set_Bang *b = (Scheme_Set_Bang *)p; + + gcMARK2(b->var, gc); + gcMARK2(b->val, gc); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +} + +static int set_bang_FIXUP(void *p, struct NewGC *gc) { + Scheme_Set_Bang *b = (Scheme_Set_Bang *)p; + + gcFIXUP2(b->var, gc); + gcFIXUP2(b->val, gc); + + return + gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +} + +#define set_bang_IS_ATOMIC 0 +#define set_bang_IS_CONST_SIZE 1 + + static int prim_proc_SIZE(void *p, struct NewGC *gc) { Scheme_Primitive_Proc *prim = (Scheme_Primitive_Proc *)p; diff --git a/src/racket/src/mzmarksrc.c b/src/racket/src/mzmarksrc.c index e8f7c82ea0..f64be238dd 100644 --- a/src/racket/src/mzmarksrc.c +++ b/src/racket/src/mzmarksrc.c @@ -243,6 +243,17 @@ let_header { gcBYTES_TO_WORDS(sizeof(Scheme_Let_Header)); } +set_bang { + mark: + Scheme_Set_Bang *b = (Scheme_Set_Bang *)p; + + gcMARK2(b->var, gc); + gcMARK2(b->val, gc); + + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +} + prim_proc { Scheme_Primitive_Proc *prim = (Scheme_Primitive_Proc *)p; diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 56f962112b..c7de50da11 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -2495,6 +2495,12 @@ Scheme_Object *scheme_sfs_add_clears(Scheme_Object *expr, Scheme_Object *clears, typedef struct Scheme_Object *(*Scheme_Syntax_SFSer)(Scheme_Object *data, SFS_Info *info); +typedef struct Scheme_Set_Bang { + Scheme_Object so; + int set_undef; + Scheme_Object *var, *val; +} Scheme_Set_Bang; + /* Resolving & linking */ #define DEFINE_VALUES_EXPD 0 #define DEFINE_SYNTAX_EXPD 1 @@ -2510,34 +2516,10 @@ typedef struct Scheme_Object *(*Scheme_Syntax_SFSer)(Scheme_Object *data, SFS_In #define SPLICE_EXPD 11 #define _COUNT_EXPD_ 12 -#define scheme_register_syntax(i, fo, fr, fs, fv, fe, fj, cl, sh, pa) \ - (scheme_syntax_optimizers[i] = fo, \ - scheme_syntax_resolvers[i] = fr, \ - scheme_syntax_executers[i] = fe, \ - scheme_syntax_sfsers[i] = fs, \ - scheme_syntax_validaters[i] = fv, \ - scheme_syntax_jitters[i] = fj, \ - scheme_syntax_cloners[i] = cl, \ - scheme_syntax_shifters[i] = sh, \ - scheme_syntax_protect_afters[i] = pa) -extern Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_]; -extern Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_]; -extern Scheme_Syntax_SFSer scheme_syntax_sfsers[_COUNT_EXPD_]; -extern Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_]; -extern Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_]; -extern Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_]; -extern Scheme_Syntax_Cloner scheme_syntax_cloners[_COUNT_EXPD_]; -extern Scheme_Syntax_Shifter scheme_syntax_shifters[_COUNT_EXPD_]; -extern int scheme_syntax_protect_afters[_COUNT_EXPD_]; - Scheme_Object *scheme_protect_quote(Scheme_Object *expr); -Scheme_Object *scheme_make_syntax_resolved(int idx, Scheme_Object *data); -Scheme_Object *scheme_make_syntax_compiled(int idx, Scheme_Object *data); - #define IS_COMPILED_PROC(vals_expr) (SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_compiled_unclosed_procedure_type) \ - || (SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_compiled_syntax_type) \ - && (SCHEME_PINT_VAL(vals_expr) == CASE_LAMBDA_EXPD))) + || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_case_lambda_sequence_type)) int scheme_compiled_proc_body_size(Scheme_Object *o); Scheme_Object *scheme_optimize_expr(Scheme_Object *, Optimize_Info *, int context); @@ -2954,6 +2936,153 @@ Scheme_Object *scheme_rename_transformer_id(Scheme_Object *o); int scheme_is_set_transformer(Scheme_Object *o); Scheme_Object *scheme_set_transformer_proc(Scheme_Object *o); +Scheme_Object *scheme_define_values_execute(Scheme_Object *data); +Scheme_Object *scheme_ref_execute(Scheme_Object *data); +Scheme_Object *scheme_set_execute(Scheme_Object *data); +Scheme_Object *scheme_define_syntaxes_execute(Scheme_Object *expr); +Scheme_Object *scheme_define_for_syntaxes_execute(Scheme_Object *expr); +Scheme_Object *scheme_case_lambda_execute(Scheme_Object *expr); +Scheme_Object *scheme_begin0_execute(Scheme_Object *data); +Scheme_Object *scheme_apply_values_execute(Scheme_Object *data); +Scheme_Object *scheme_splice_execute(Scheme_Object *data); +Scheme_Object *scheme_bangboxenv_execute(Scheme_Object *data); +Scheme_Object *scheme_top_level_require_execute(Scheme_Object *data); + +Scheme_Object *scheme_define_values_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_ref_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_set_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_define_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context); +Scheme_Object *scheme_define_for_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context); +Scheme_Object *scheme_case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context); +Scheme_Object *scheme_begin0_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_module_optimize(Scheme_Object *data, Optimize_Info *info, int context); +Scheme_Object *scheme_top_level_require_optimize(Scheme_Object *data, Optimize_Info *info, int context); + +Scheme_Object *scheme_begin0_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); +Scheme_Object *scheme_set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); +Scheme_Object *scheme_apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); +Scheme_Object *scheme_case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); + +Scheme_Object *scheme_begin0_shift(Scheme_Object *data, int delta, int after_depth); +Scheme_Object *scheme_set_shift(Scheme_Object *data, int delta, int after_depth); +Scheme_Object *scheme_ref_shift(Scheme_Object *data, int delta, int after_depth); +Scheme_Object *scheme_case_lambda_shift(Scheme_Object *data, int delta, int after_depth); +Scheme_Object *scheme_apply_values_shift(Scheme_Object *data, int delta, int after_depth); + +Scheme_Object *scheme_define_values_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_ref_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_set_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_define_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info); +Scheme_Object *scheme_define_for_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info); +Scheme_Object *scheme_case_lambda_resolve(Scheme_Object *expr, Resolve_Info *info); +Scheme_Object *scheme_begin0_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_apply_values_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_module_expr_resolve(Scheme_Object *data, Resolve_Info *info); +Scheme_Object *scheme_top_level_require_resolve(Scheme_Object *data, Resolve_Info *info); + +Scheme_Object *scheme_define_values_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_ref_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_set_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_define_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info); +Scheme_Object *scheme_define_for_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info); +Scheme_Object *scheme_case_lambda_sfs(Scheme_Object *expr, SFS_Info *info); +Scheme_Object *scheme_begin0_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_apply_values_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_bangboxenv_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_module_sfs(Scheme_Object *data, SFS_Info *info); +Scheme_Object *scheme_top_level_require_sfs(Scheme_Object *data, SFS_Info *info); + +void scheme_define_values_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_ref_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_set_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_case_lambda_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_begin0_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_apply_values_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_module_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); +void scheme_top_level_require_validate(Scheme_Object *data, Mz_CPort *port, + char *stack, Validate_TLS tls, + int depth, int letlimit, int delta, + int num_toplevels, int num_stxes, int num_lifts, + void *tl_use_map, int result_ignored, + struct Validate_Clearing *vc, int tailpos, + Scheme_Hash_Tree *procs); + +Scheme_Object *scheme_define_values_jit(Scheme_Object *data); +Scheme_Object *scheme_ref_jit(Scheme_Object *data); +Scheme_Object *scheme_set_jit(Scheme_Object *data); +Scheme_Object *scheme_define_syntaxes_jit(Scheme_Object *expr); +Scheme_Object *scheme_define_for_syntaxes_jit(Scheme_Object *expr); +Scheme_Object *scheme_case_lambda_jit(Scheme_Object *expr); +Scheme_Object *scheme_begin0_jit(Scheme_Object *data); +Scheme_Object *scheme_apply_values_jit(Scheme_Object *data); +Scheme_Object *scheme_bangboxenv_jit(Scheme_Object *data); +Scheme_Object *scheme_module_jit(Scheme_Object *data); +Scheme_Object *scheme_top_level_require_jit(Scheme_Object *data); + /*========================================================================*/ /* namespaces and modules */ /*========================================================================*/ diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index bc32e0bc5b..9e0b98f9a0 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.1.1.4" +#define MZSCHEME_VERSION "5.1.1.5" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 1 #define MZSCHEME_VERSION_Z 1 -#define MZSCHEME_VERSION_W 4 +#define MZSCHEME_VERSION_W 5 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/stypes.h b/src/racket/src/stypes.h index a6081bb578..eed08f8aea 100644 --- a/src/racket/src/stypes.h +++ b/src/racket/src/stypes.h @@ -5,262 +5,270 @@ enum { scheme_toplevel_type, /* 0 */ scheme_local_type, /* 1 */ scheme_local_unbox_type, /* 2 */ - scheme_syntax_type, /* 3 */ - scheme_application_type, /* 4 */ - scheme_application2_type, /* 5 */ - scheme_application3_type, /* 6 */ - scheme_sequence_type, /* 7 */ - scheme_branch_type, /* 8 */ - scheme_unclosed_procedure_type, /* 9 */ - scheme_let_value_type, /* 10 */ - scheme_let_void_type, /* 11 */ - scheme_letrec_type, /* 12 */ - scheme_let_one_type, /* 13 */ - scheme_with_cont_mark_type, /* 14 */ - scheme_quote_syntax_type, /* 15 */ + scheme_application_type, /* 3 */ + scheme_application2_type, /* 4 */ + scheme_application3_type, /* 5 */ + scheme_sequence_type, /* 6 */ + scheme_branch_type, /* 7 */ + scheme_unclosed_procedure_type, /* 8 */ + scheme_let_value_type, /* 9 */ + scheme_let_void_type, /* 10 */ + scheme_letrec_type, /* 11 */ + scheme_let_one_type, /* 12 */ + scheme_with_cont_mark_type, /* 13 */ + scheme_quote_syntax_type, /* 14 */ + + scheme_define_values_type, /* 15 */ + scheme_define_syntaxes_type, /* 16 */ + scheme_define_for_syntax_type, /* 17 */ + scheme_set_bang_type, /* 18 */ + scheme_boxenv_type, /* 19 */ + scheme_begin0_sequence_type, /* 20 */ + scheme_splice_sequence_type, /* 21 */ + scheme_require_form_type, /* 22 */ + scheme_varref_form_type, /* 23 */ + scheme_apply_values_type, /* 24 */ + scheme_case_lambda_sequence_type, /* 25 */ + scheme_module_type, /* 26 */ _scheme_values_types_, /* All following types are values */ /* intermediate compiled: */ - scheme_compiled_unclosed_procedure_type,/* 17 */ - scheme_compiled_let_value_type, /* 18 */ - scheme_compiled_let_void_type, /* 19 */ - scheme_compiled_syntax_type, /* 20 */ - scheme_compiled_toplevel_type, /* 21 */ - scheme_compiled_quote_syntax_type, /* 22 */ + scheme_compiled_unclosed_procedure_type,/* 28 */ + scheme_compiled_let_value_type, /* 29 */ + scheme_compiled_let_void_type, /* 30 */ + scheme_compiled_toplevel_type, /* 31 */ + scheme_compiled_quote_syntax_type, /* 32 */ scheme_quote_compilation_type, /* used while writing, only */ /* Registered in prefix table: */ - scheme_variable_type, /* 24 */ + scheme_variable_type, /* 34 */ scheme_module_variable_type, /* link replaces with scheme_variable_type */ - _scheme_compiled_values_types_, /* 26 */ + _scheme_compiled_values_types_, /* 36 */ /* procedure types */ - scheme_prim_type, /* 27 */ - scheme_closed_prim_type, /* 28 */ - scheme_closure_type, /* 29 */ - scheme_case_closure_type, /* 30 */ - scheme_cont_type, /* 31 */ - scheme_escaping_cont_type, /* 32 */ - scheme_proc_struct_type, /* 33 */ - scheme_native_closure_type, /* 34 */ - scheme_proc_chaperone_type, /* 35 */ + scheme_prim_type, /* 37 */ + scheme_closed_prim_type, /* 38 */ + scheme_closure_type, /* 39 */ + scheme_case_closure_type, /* 40 */ + scheme_cont_type, /* 41 */ + scheme_escaping_cont_type, /* 42 */ + scheme_proc_struct_type, /* 43 */ + scheme_native_closure_type, /* 44 */ + scheme_proc_chaperone_type, /* 45 */ - scheme_chaperone_type, /* 36 */ + scheme_chaperone_type, /* 46 */ /* structure type (plus one above for procs) */ - scheme_structure_type, /* 37 */ + scheme_structure_type, /* 47 */ /* basic types */ - scheme_char_type, /* 38 */ - scheme_integer_type, /* 39 */ - scheme_bignum_type, /* 40 */ - scheme_rational_type, /* 41 */ - scheme_float_type, /* 42 */ - scheme_double_type, /* 43 */ - scheme_complex_type, /* 44 */ - scheme_char_string_type, /* 45 */ - scheme_byte_string_type, /* 46 */ - scheme_unix_path_type, /* 47 */ - scheme_windows_path_type, /* 48 */ - scheme_symbol_type, /* 49 */ - scheme_keyword_type, /* 50 */ - scheme_null_type, /* 51 */ - scheme_pair_type, /* 52 */ - scheme_mutable_pair_type, /* 53 */ - scheme_vector_type, /* 54 */ - scheme_inspector_type, /* 55 */ - scheme_input_port_type, /* 56 */ - scheme_output_port_type, /* 57 */ - scheme_eof_type, /* 58 */ - scheme_true_type, /* 59 */ - scheme_false_type, /* 60 */ - scheme_void_type, /* 61 */ - scheme_syntax_compiler_type, /* 62 */ - scheme_macro_type, /* 63 */ - scheme_box_type, /* 64 */ - scheme_thread_type, /* 65 */ - scheme_stx_offset_type, /* 66 */ - scheme_cont_mark_set_type, /* 67 */ - scheme_sema_type, /* 68 */ - scheme_hash_table_type, /* 69 */ - scheme_hash_tree_type, /* 70 */ - scheme_cpointer_type, /* 71 */ - scheme_prefix_type, /* 72 */ - scheme_weak_box_type, /* 73 */ - scheme_ephemeron_type, /* 74 */ - scheme_struct_type_type, /* 75 */ - scheme_module_index_type, /* 76 */ - scheme_set_macro_type, /* 77 */ - scheme_listener_type, /* 78 */ - scheme_namespace_type, /* 79 */ - scheme_config_type, /* 80 */ - scheme_stx_type, /* 81 */ - scheme_will_executor_type, /* 82 */ - scheme_custodian_type, /* 83 */ - scheme_random_state_type, /* 84 */ - scheme_regexp_type, /* 85 */ - scheme_bucket_type, /* 86 */ - scheme_bucket_table_type, /* 87 */ - scheme_subprocess_type, /* 88 */ - scheme_compilation_top_type, /* 89 */ - scheme_wrap_chunk_type, /* 90 */ - scheme_eval_waiting_type, /* 91 */ - scheme_tail_call_waiting_type, /* 92 */ - scheme_undefined_type, /* 93 */ - scheme_struct_property_type, /* 94 */ - scheme_chaperone_property_type, /* 95 */ - scheme_multiple_values_type, /* 96 */ - scheme_placeholder_type, /* 97 */ - scheme_table_placeholder_type, /* 98 */ - scheme_case_lambda_sequence_type, /* 99 */ - scheme_begin0_sequence_type, /* 100 */ - scheme_rename_table_type, /* 101 */ - scheme_rename_table_set_type, /* 102 */ - scheme_module_type, /* 103 */ - scheme_svector_type, /* 104 */ - scheme_resolve_prefix_type, /* 105 */ - scheme_security_guard_type, /* 106 */ - scheme_indent_type, /* 107 */ - scheme_udp_type, /* 108 */ - scheme_udp_evt_type, /* 109 */ - scheme_tcp_accept_evt_type, /* 110 */ - scheme_id_macro_type, /* 111 */ - scheme_evt_set_type, /* 112 */ - scheme_wrap_evt_type, /* 113 */ - scheme_handle_evt_type, /* 114 */ - scheme_nack_guard_evt_type, /* 115 */ - scheme_semaphore_repost_type, /* 116 */ - scheme_channel_type, /* 117 */ - scheme_channel_put_type, /* 118 */ - scheme_thread_resume_type, /* 119 */ - scheme_thread_suspend_type, /* 120 */ - scheme_thread_dead_type, /* 121 */ - scheme_poll_evt_type, /* 122 */ - scheme_nack_evt_type, /* 123 */ - scheme_module_registry_type, /* 124 */ - scheme_thread_set_type, /* 125 */ - scheme_string_converter_type, /* 126 */ - scheme_alarm_type, /* 127 */ - scheme_thread_recv_evt_type, /* 128 */ - scheme_thread_cell_type, /* 129 */ - scheme_channel_syncer_type, /* 130 */ - scheme_special_comment_type, /* 131 */ - scheme_write_evt_type, /* 132 */ - scheme_always_evt_type, /* 133 */ - scheme_never_evt_type, /* 134 */ - scheme_progress_evt_type, /* 135 */ - scheme_certifications_type, /* 136 */ - scheme_already_comp_type, /* 137 */ - scheme_readtable_type, /* 138 */ - scheme_intdef_context_type, /* 139 */ - scheme_lexical_rib_type, /* 140 */ - scheme_thread_cell_values_type, /* 141 */ - scheme_global_ref_type, /* 142 */ - scheme_cont_mark_chain_type, /* 143 */ - scheme_raw_pair_type, /* 144 */ - scheme_prompt_type, /* 145 */ - scheme_prompt_tag_type, /* 146 */ - scheme_expanded_syntax_type, /* 147 */ - scheme_delay_syntax_type, /* 148 */ - scheme_cust_box_type, /* 149 */ - scheme_resolved_module_path_type, /* 150 */ - scheme_module_phase_exports_type, /* 151 */ - scheme_logger_type, /* 152 */ - scheme_log_reader_type, /* 153 */ - scheme_free_id_info_type, /* 154 */ - scheme_rib_delimiter_type, /* 155 */ - scheme_noninline_proc_type, /* 156 */ - scheme_prune_context_type, /* 157 */ - scheme_future_type, /* 158 */ - scheme_flvector_type, /* 159 */ - scheme_fxvector_type, /* 160 */ - scheme_place_type, /* 161 */ - scheme_place_async_channel_type, /* 162 */ - scheme_place_bi_channel_type, /* 163 */ - scheme_once_used_type, /* 164 */ - scheme_serialized_symbol_type, /* 165 */ - scheme_serialized_structure_type, /* 166 */ + scheme_char_type, /* 48 */ + scheme_integer_type, /* 49 */ + scheme_bignum_type, /* 50 */ + scheme_rational_type, /* 51 */ + scheme_float_type, /* 52 */ + scheme_double_type, /* 53 */ + scheme_complex_type, /* 54 */ + scheme_char_string_type, /* 55 */ + scheme_byte_string_type, /* 56 */ + scheme_unix_path_type, /* 57 */ + scheme_windows_path_type, /* 58 */ + scheme_symbol_type, /* 59 */ + scheme_keyword_type, /* 60 */ + scheme_null_type, /* 61 */ + scheme_pair_type, /* 62 */ + scheme_mutable_pair_type, /* 63 */ + scheme_vector_type, /* 64 */ + scheme_inspector_type, /* 65 */ + scheme_input_port_type, /* 66 */ + scheme_output_port_type, /* 67 */ + scheme_eof_type, /* 68 */ + scheme_true_type, /* 69 */ + scheme_false_type, /* 70 */ + scheme_void_type, /* 71 */ + scheme_syntax_compiler_type, /* 72 */ + scheme_macro_type, /* 73 */ + scheme_box_type, /* 74 */ + scheme_thread_type, /* 75 */ + scheme_stx_offset_type, /* 76 */ + scheme_cont_mark_set_type, /* 77 */ + scheme_sema_type, /* 78 */ + scheme_hash_table_type, /* 79 */ + scheme_hash_tree_type, /* 80 */ + scheme_cpointer_type, /* 81 */ + scheme_prefix_type, /* 82 */ + scheme_weak_box_type, /* 83 */ + scheme_ephemeron_type, /* 84 */ + scheme_struct_type_type, /* 85 */ + scheme_module_index_type, /* 86 */ + scheme_set_macro_type, /* 87 */ + scheme_listener_type, /* 88 */ + scheme_namespace_type, /* 89 */ + scheme_config_type, /* 90 */ + scheme_stx_type, /* 91 */ + scheme_will_executor_type, /* 92 */ + scheme_custodian_type, /* 93 */ + scheme_random_state_type, /* 94 */ + scheme_regexp_type, /* 95 */ + scheme_bucket_type, /* 96 */ + scheme_bucket_table_type, /* 97 */ + scheme_subprocess_type, /* 98 */ + scheme_compilation_top_type, /* 99 */ + scheme_wrap_chunk_type, /* 100 */ + scheme_eval_waiting_type, /* 101 */ + scheme_tail_call_waiting_type, /* 102 */ + scheme_undefined_type, /* 103 */ + scheme_struct_property_type, /* 104 */ + scheme_chaperone_property_type, /* 105 */ + scheme_multiple_values_type, /* 106 */ + scheme_placeholder_type, /* 107 */ + scheme_table_placeholder_type, /* 108 */ + scheme_rename_table_type, /* 109 */ + scheme_rename_table_set_type, /* 110 */ + scheme_svector_type, /* 111 */ + scheme_resolve_prefix_type, /* 112 */ + scheme_security_guard_type, /* 113 */ + scheme_indent_type, /* 114 */ + scheme_udp_type, /* 115 */ + scheme_udp_evt_type, /* 116 */ + scheme_tcp_accept_evt_type, /* 117 */ + scheme_id_macro_type, /* 118 */ + scheme_evt_set_type, /* 119 */ + scheme_wrap_evt_type, /* 120 */ + scheme_handle_evt_type, /* 121 */ + scheme_nack_guard_evt_type, /* 122 */ + scheme_semaphore_repost_type, /* 123 */ + scheme_channel_type, /* 124 */ + scheme_channel_put_type, /* 125 */ + scheme_thread_resume_type, /* 126 */ + scheme_thread_suspend_type, /* 127 */ + scheme_thread_dead_type, /* 128 */ + scheme_poll_evt_type, /* 129 */ + scheme_nack_evt_type, /* 130 */ + scheme_module_registry_type, /* 131 */ + scheme_thread_set_type, /* 132 */ + scheme_string_converter_type, /* 133 */ + scheme_alarm_type, /* 134 */ + scheme_thread_recv_evt_type, /* 135 */ + scheme_thread_cell_type, /* 136 */ + scheme_channel_syncer_type, /* 137 */ + scheme_special_comment_type, /* 138 */ + scheme_write_evt_type, /* 139 */ + scheme_always_evt_type, /* 140 */ + scheme_never_evt_type, /* 141 */ + scheme_progress_evt_type, /* 142 */ + scheme_certifications_type, /* 143 */ + scheme_already_comp_type, /* 144 */ + scheme_readtable_type, /* 145 */ + scheme_intdef_context_type, /* 146 */ + scheme_lexical_rib_type, /* 147 */ + scheme_thread_cell_values_type, /* 148 */ + scheme_global_ref_type, /* 149 */ + scheme_cont_mark_chain_type, /* 150 */ + scheme_raw_pair_type, /* 151 */ + scheme_prompt_type, /* 152 */ + scheme_prompt_tag_type, /* 153 */ + scheme_expanded_syntax_type, /* 154 */ + scheme_delay_syntax_type, /* 155 */ + scheme_cust_box_type, /* 156 */ + scheme_resolved_module_path_type, /* 157 */ + scheme_module_phase_exports_type, /* 158 */ + scheme_logger_type, /* 159 */ + scheme_log_reader_type, /* 160 */ + scheme_free_id_info_type, /* 161 */ + scheme_rib_delimiter_type, /* 162 */ + scheme_noninline_proc_type, /* 163 */ + scheme_prune_context_type, /* 164 */ + scheme_future_type, /* 165 */ + scheme_flvector_type, /* 166 */ + scheme_fxvector_type, /* 167 */ + scheme_place_type, /* 168 */ + scheme_place_async_channel_type, /* 169 */ + scheme_place_bi_channel_type, /* 170 */ + scheme_once_used_type, /* 171 */ + scheme_serialized_symbol_type, /* 172 */ + scheme_serialized_structure_type, /* 173 */ /* use scheme_currently_unused_type above, first */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 167 */ + _scheme_last_normal_type_, /* 174 */ - scheme_rt_weak_array, /* 168 */ + scheme_rt_weak_array, /* 175 */ scheme_rt_comp_env, /* 168*/ - scheme_rt_constant_binding, /* 170 */ - scheme_rt_resolve_info, /* 171 */ - scheme_rt_optimize_info, /* 172 */ - scheme_rt_compile_info, /* 173 */ - scheme_rt_cont_mark, /* 174 */ - scheme_rt_saved_stack, /* 175 */ - scheme_rt_reply_item, /* 176 */ - scheme_rt_closure_info, /* 177 */ - scheme_rt_overflow, /* 178 */ - scheme_rt_overflow_jmp, /* 179 */ - scheme_rt_meta_cont, /* 180 */ - scheme_rt_dyn_wind_cell, /* 181 */ - scheme_rt_dyn_wind_info, /* 182 */ - scheme_rt_dyn_wind, /* 183 */ - scheme_rt_dup_check, /* 184 */ - scheme_rt_thread_memory, /* 185 */ - scheme_rt_input_file, /* 186 */ - scheme_rt_input_fd, /* 187 */ - scheme_rt_oskit_console_input, /* 188 */ - scheme_rt_tested_input_file, /* 189 */ - scheme_rt_tested_output_file, /* 190 */ - scheme_rt_indexed_string, /* 191 */ - scheme_rt_output_file, /* 192 */ - scheme_rt_load_handler_data, /* 193 */ - scheme_rt_pipe, /* 194 */ - scheme_rt_beos_process, /* 195 */ - scheme_rt_system_child, /* 196 */ - scheme_rt_tcp, /* 197 */ - scheme_rt_write_data, /* 198 */ - scheme_rt_tcp_select_info, /* 199 */ - scheme_rt_param_data, /* 200 */ - scheme_rt_will, /* 201 */ - scheme_rt_struct_proc_info, /* 202 */ - scheme_rt_linker_name, /* 203 */ - scheme_rt_param_map, /* 204 */ - scheme_rt_finalization, /* 205 */ - scheme_rt_finalizations, /* 206 */ - scheme_rt_cpp_object, /* 207 */ - scheme_rt_cpp_array_object, /* 208 */ - scheme_rt_stack_object, /* 209 */ - scheme_rt_preallocated_object, /* 210 */ - scheme_thread_hop_type, /* 211 */ - scheme_rt_srcloc, /* 212 */ - scheme_rt_evt, /* 213 */ - scheme_rt_syncing, /* 214 */ - scheme_rt_comp_prefix, /* 215 */ - scheme_rt_user_input, /* 216 */ - scheme_rt_user_output, /* 217 */ - scheme_rt_compact_port, /* 218 */ - scheme_rt_read_special_dw, /* 219 */ - scheme_rt_regwork, /* 220 */ - scheme_rt_buf_holder, /* 221 */ - scheme_rt_parameterization, /* 222 */ - scheme_rt_print_params, /* 223 */ - scheme_rt_read_params, /* 224 */ - scheme_rt_native_code, /* 225 */ - scheme_rt_native_code_plus_case, /* 226 */ - scheme_rt_jitter_data, /* 227 */ - scheme_rt_module_exports, /* 228 */ - scheme_rt_delay_load_info, /* 229 */ - scheme_rt_marshal_info, /* 230 */ - scheme_rt_unmarshal_info, /* 231 */ - scheme_rt_runstack, /* 232 */ - scheme_rt_sfs_info, /* 233 */ - scheme_rt_validate_clearing, /* 234 */ - scheme_rt_rb_node, /* 235 */ - scheme_rt_lightweight_cont, /* 236 */ + scheme_rt_constant_binding, /* 177 */ + scheme_rt_resolve_info, /* 178 */ + scheme_rt_optimize_info, /* 179 */ + scheme_rt_compile_info, /* 180 */ + scheme_rt_cont_mark, /* 181 */ + scheme_rt_saved_stack, /* 182 */ + scheme_rt_reply_item, /* 183 */ + scheme_rt_closure_info, /* 184 */ + scheme_rt_overflow, /* 185 */ + scheme_rt_overflow_jmp, /* 186 */ + scheme_rt_meta_cont, /* 187 */ + scheme_rt_dyn_wind_cell, /* 188 */ + scheme_rt_dyn_wind_info, /* 189 */ + scheme_rt_dyn_wind, /* 190 */ + scheme_rt_dup_check, /* 191 */ + scheme_rt_thread_memory, /* 192 */ + scheme_rt_input_file, /* 193 */ + scheme_rt_input_fd, /* 194 */ + scheme_rt_oskit_console_input, /* 195 */ + scheme_rt_tested_input_file, /* 196 */ + scheme_rt_tested_output_file, /* 197 */ + scheme_rt_indexed_string, /* 198 */ + scheme_rt_output_file, /* 199 */ + scheme_rt_load_handler_data, /* 200 */ + scheme_rt_pipe, /* 201 */ + scheme_rt_beos_process, /* 202 */ + scheme_rt_system_child, /* 203 */ + scheme_rt_tcp, /* 204 */ + scheme_rt_write_data, /* 205 */ + scheme_rt_tcp_select_info, /* 206 */ + scheme_rt_param_data, /* 207 */ + scheme_rt_will, /* 208 */ + scheme_rt_struct_proc_info, /* 209 */ + scheme_rt_linker_name, /* 210 */ + scheme_rt_param_map, /* 211 */ + scheme_rt_finalization, /* 212 */ + scheme_rt_finalizations, /* 213 */ + scheme_rt_cpp_object, /* 214 */ + scheme_rt_cpp_array_object, /* 215 */ + scheme_rt_stack_object, /* 216 */ + scheme_rt_preallocated_object, /* 217 */ + scheme_thread_hop_type, /* 218 */ + scheme_rt_srcloc, /* 219 */ + scheme_rt_evt, /* 220 */ + scheme_rt_syncing, /* 221 */ + scheme_rt_comp_prefix, /* 222 */ + scheme_rt_user_input, /* 223 */ + scheme_rt_user_output, /* 224 */ + scheme_rt_compact_port, /* 225 */ + scheme_rt_read_special_dw, /* 226 */ + scheme_rt_regwork, /* 227 */ + scheme_rt_buf_holder, /* 228 */ + scheme_rt_parameterization, /* 229 */ + scheme_rt_print_params, /* 230 */ + scheme_rt_read_params, /* 231 */ + scheme_rt_native_code, /* 232 */ + scheme_rt_native_code_plus_case, /* 233 */ + scheme_rt_jitter_data, /* 234 */ + scheme_rt_module_exports, /* 235 */ + scheme_rt_delay_load_info, /* 236 */ + scheme_rt_marshal_info, /* 237 */ + scheme_rt_unmarshal_info, /* 238 */ + scheme_rt_runstack, /* 239 */ + scheme_rt_sfs_info, /* 240 */ + scheme_rt_validate_clearing, /* 241 */ + scheme_rt_rb_node, /* 242 */ + scheme_rt_lightweight_cont, /* 243 */ #endif - scheme_fsemaphore_type, /* 238 */ + scheme_fsemaphore_type, /* 244 */ _scheme_last_type_ }; diff --git a/src/racket/src/syntax.c b/src/racket/src/syntax.c index 53d879ea06..78d53a686c 100644 --- a/src/racket/src/syntax.c +++ b/src/racket/src/syntax.c @@ -42,16 +42,6 @@ READ_ONLY Scheme_Object *scheme_lambda_syntax; READ_ONLY Scheme_Object *scheme_compiled_void_code; READ_ONLY Scheme_Object scheme_undefined[1]; -READ_ONLY Scheme_Syntax_Optimizer scheme_syntax_optimizers[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Resolver scheme_syntax_resolvers[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_SFSer scheme_syntax_sfsers[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Validater scheme_syntax_validaters[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Executer scheme_syntax_executers[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Jitter scheme_syntax_jitters[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Cloner scheme_syntax_cloners[_COUNT_EXPD_]; -READ_ONLY Scheme_Syntax_Shifter scheme_syntax_shifters[_COUNT_EXPD_]; -READ_ONLY int scheme_syntax_protect_afters[_COUNT_EXPD_]; - /* symbols */ ROSYM static Scheme_Object *lambda_symbol; ROSYM static Scheme_Object *letrec_values_symbol; @@ -106,144 +96,6 @@ static Scheme_Object *define_for_syntaxes_expand(Scheme_Object *form, Scheme_Com static Scheme_Object *letrec_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); static Scheme_Object *letrec_syntaxes_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); -static Scheme_Object *define_values_execute(Scheme_Object *data); -static Scheme_Object *ref_execute(Scheme_Object *data); -static Scheme_Object *set_execute(Scheme_Object *data); -static Scheme_Object *define_syntaxes_execute(Scheme_Object *expr); -static Scheme_Object *define_for_syntaxes_execute(Scheme_Object *expr); -static Scheme_Object *case_lambda_execute(Scheme_Object *expr); -static Scheme_Object *begin0_execute(Scheme_Object *data); -static Scheme_Object *apply_values_execute(Scheme_Object *data); -static Scheme_Object *splice_execute(Scheme_Object *data); - -static Scheme_Object *bangboxenv_execute(Scheme_Object *data); - -static Scheme_Object *define_values_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *ref_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *set_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *define_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context); -static Scheme_Object *define_for_syntaxes_optimize(Scheme_Object *expr, Optimize_Info *info, int context); -static Scheme_Object *case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context); -static Scheme_Object *begin0_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context); -static Scheme_Object *splice_optimize(Scheme_Object *data, Optimize_Info *info, int context); - -static Scheme_Object *begin0_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); -static Scheme_Object *set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); -static Scheme_Object *apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); -static Scheme_Object *splice_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); -static Scheme_Object *case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth); - -static Scheme_Object *begin0_shift(Scheme_Object *data, int delta, int after_depth); -static Scheme_Object *set_shift(Scheme_Object *data, int delta, int after_depth); -static Scheme_Object *ref_shift(Scheme_Object *data, int delta, int after_depth); -static Scheme_Object *case_lambda_shift(Scheme_Object *data, int delta, int after_depth); -static Scheme_Object *apply_values_shift(Scheme_Object *data, int delta, int after_depth); -static Scheme_Object *splice_shift(Scheme_Object *data, int delta, int after_depth); - -static Scheme_Object *define_values_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *ref_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *set_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *define_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info); -static Scheme_Object *define_for_syntaxes_resolve(Scheme_Object *expr, Resolve_Info *info); -static Scheme_Object *case_lambda_resolve(Scheme_Object *expr, Resolve_Info *info); -static Scheme_Object *begin0_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *apply_values_resolve(Scheme_Object *data, Resolve_Info *info); -static Scheme_Object *splice_resolve(Scheme_Object *data, Resolve_Info *info); - -static Scheme_Object *define_values_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *ref_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *set_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *define_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info); -static Scheme_Object *define_for_syntaxes_sfs(Scheme_Object *expr, SFS_Info *info); -static Scheme_Object *case_lambda_sfs(Scheme_Object *expr, SFS_Info *info); -static Scheme_Object *begin0_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *apply_values_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *splice_sfs(Scheme_Object *data, SFS_Info *info); -static Scheme_Object *bangboxenv_sfs(Scheme_Object *data, SFS_Info *info); - -static void define_values_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void ref_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void set_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void begin0_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void splice_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); -static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs); - -static Scheme_Object *define_values_jit(Scheme_Object *data); -static Scheme_Object *ref_jit(Scheme_Object *data); -static Scheme_Object *set_jit(Scheme_Object *data); -static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr); -static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr); -static Scheme_Object *case_lambda_jit(Scheme_Object *expr); -static Scheme_Object *begin0_jit(Scheme_Object *data); -static Scheme_Object *apply_values_jit(Scheme_Object *data); -static Scheme_Object *splice_jit(Scheme_Object *data); -static Scheme_Object *bangboxenv_jit(Scheme_Object *data); - static Scheme_Object *expand_lam(int argc, Scheme_Object **argv); static Scheme_Object *write_let_value(Scheme_Object *obj); @@ -259,6 +111,21 @@ static Scheme_Object *read_top(Scheme_Object *obj); static Scheme_Object *write_case_lambda(Scheme_Object *obj); static Scheme_Object *read_case_lambda(Scheme_Object *obj); +static Scheme_Object *read_define_values(Scheme_Object *obj); +static Scheme_Object *write_define_values(Scheme_Object *obj); +static Scheme_Object *read_define_syntaxes(Scheme_Object *obj); +static Scheme_Object *write_define_syntaxes(Scheme_Object *obj); +static Scheme_Object *read_define_for_syntax(Scheme_Object *obj); +static Scheme_Object *write_define_for_syntax(Scheme_Object *obj); +static Scheme_Object *read_set_bang(Scheme_Object *obj); +static Scheme_Object *write_set_bang(Scheme_Object *obj); +static Scheme_Object *read_boxenv(Scheme_Object *obj); +static Scheme_Object *write_boxenv(Scheme_Object *obj); +static Scheme_Object *read_varref(Scheme_Object *obj); +static Scheme_Object *write_varref(Scheme_Object *obj); +static Scheme_Object *read_apply_values(Scheme_Object *obj); +static Scheme_Object *write_apply_values(Scheme_Object *obj); + #ifdef MZ_PRECISE_GC static void register_traversers(void); #endif @@ -305,59 +172,6 @@ scheme_init_syntax (Scheme_Env *env) disappeared_binding_symbol = scheme_intern_symbol("disappeared-binding"); - scheme_register_syntax(DEFINE_VALUES_EXPD, - define_values_optimize, - define_values_resolve, define_values_sfs, define_values_validate, - define_values_execute, define_values_jit, - NULL, NULL, -2); - scheme_register_syntax(SET_EXPD, - set_optimize, - set_resolve, set_sfs, set_validate, - set_execute, set_jit, - set_clone, set_shift, 2); - scheme_register_syntax(REF_EXPD, - ref_optimize, - ref_resolve, ref_sfs, ref_validate, - ref_execute, ref_jit, - NULL, ref_shift, 1); - scheme_register_syntax(DEFINE_SYNTAX_EXPD, - define_syntaxes_optimize, - define_syntaxes_resolve, define_syntaxes_sfs, define_syntaxes_validate, - define_syntaxes_execute, define_syntaxes_jit, - NULL, NULL, -2); - scheme_register_syntax(DEFINE_FOR_SYNTAX_EXPD, - define_for_syntaxes_optimize, - define_for_syntaxes_resolve, define_for_syntaxes_sfs, define_for_syntaxes_validate, - define_for_syntaxes_execute, define_for_syntaxes_jit, - NULL, NULL, -2); - scheme_register_syntax(CASE_LAMBDA_EXPD, - case_lambda_optimize, - case_lambda_resolve, case_lambda_sfs, case_lambda_validate, - case_lambda_execute, case_lambda_jit, - case_lambda_clone, case_lambda_shift, -1); - scheme_register_syntax(BEGIN0_EXPD, - begin0_optimize, - begin0_resolve, begin0_sfs, begin0_validate, - begin0_execute, begin0_jit, - begin0_clone, begin0_shift, -1); - - scheme_register_syntax(APPVALS_EXPD, - apply_values_optimize, - apply_values_resolve, apply_values_sfs, apply_values_validate, - apply_values_execute, apply_values_jit, - apply_values_clone, apply_values_shift, 1); - - scheme_register_syntax(SPLICE_EXPD, - splice_optimize, - splice_resolve, splice_sfs, splice_validate, - splice_execute, splice_jit, - splice_clone, splice_shift, 0); - - scheme_register_syntax(BOXENV_EXPD, - NULL, NULL, bangboxenv_sfs, bangboxenv_validate, - bangboxenv_execute, bangboxenv_jit, - NULL, NULL, 1); - scheme_install_type_writer(scheme_let_value_type, write_let_value); scheme_install_type_reader(scheme_let_value_type, read_let_value); scheme_install_type_writer(scheme_let_void_type, write_let_void); @@ -369,6 +183,21 @@ scheme_init_syntax (Scheme_Env *env) scheme_install_type_writer(scheme_case_lambda_sequence_type, write_case_lambda); scheme_install_type_reader(scheme_case_lambda_sequence_type, read_case_lambda); + scheme_install_type_writer(scheme_define_values_type, write_define_values); + scheme_install_type_reader(scheme_define_values_type, read_define_values); + scheme_install_type_writer(scheme_define_syntaxes_type, write_define_syntaxes); + scheme_install_type_reader(scheme_define_syntaxes_type, read_define_syntaxes); + scheme_install_type_writer(scheme_define_for_syntax_type, write_define_for_syntax); + scheme_install_type_reader(scheme_define_for_syntax_type, read_define_for_syntax); + scheme_install_type_writer(scheme_set_bang_type, write_set_bang); + scheme_install_type_reader(scheme_set_bang_type, read_set_bang); + scheme_install_type_writer(scheme_boxenv_type, write_boxenv); + scheme_install_type_reader(scheme_boxenv_type, read_boxenv); + scheme_install_type_writer(scheme_varref_form_type, write_varref); + scheme_install_type_reader(scheme_varref_form_type, read_varref); + scheme_install_type_writer(scheme_apply_values_type, write_apply_values); + scheme_install_type_reader(scheme_apply_values_type, read_apply_values); + scheme_install_type_writer(scheme_compilation_top_type, write_top); scheme_install_type_reader(scheme_compilation_top_type, read_top); @@ -811,8 +640,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro, int flags = GLOB_IS_IMMUTATED; if (SCHEME_PROCP(vals_expr) || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_unclosed_procedure_type) - || (SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_syntax_type) - && (SCHEME_PINT_VAL(vals_expr) == CASE_LAMBDA_EXPD))) + || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_case_lambda_sequence_type)) flags |= GLOB_IS_CONSISTENT; ((Scheme_Bucket_With_Flags *)b)->flags |= flags; } @@ -872,13 +700,13 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro, return NULL; } -static Scheme_Object * -define_values_execute(Scheme_Object *data) +Scheme_Object * +scheme_define_values_execute(Scheme_Object *data) { return define_execute_with_dynamic_state(data, 1, 0, NULL, NULL, NULL); } -static Scheme_Object *clone_vector(Scheme_Object *data, int skip) +static Scheme_Object *clone_vector(Scheme_Object *data, int skip, int set_type) { Scheme_Object *naya; int i, size; @@ -889,10 +717,13 @@ static Scheme_Object *clone_vector(Scheme_Object *data, int skip) SCHEME_VEC_ELS(naya)[i - skip] = SCHEME_VEC_ELS(data)[i]; } + if (set_type) + naya->type = data->type; + return naya; } -static Scheme_Object *define_values_jit(Scheme_Object *data) +Scheme_Object *scheme_define_values_jit(Scheme_Object *data) { Scheme_Object *orig = SCHEME_VEC_ELS(data)[0], *naya; @@ -906,13 +737,13 @@ static Scheme_Object *define_values_jit(Scheme_Object *data) return data; else { orig = naya; - naya = clone_vector(data, 0); + naya = clone_vector(data, 0, 1); SCHEME_VEC_ELS(naya)[0] = orig; return naya; } } -static void define_values_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_define_values_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -923,9 +754,6 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port, int i, size; Scheme_Object *val, *only_var; - if (!SCHEME_VECTORP(data)) - scheme_ill_formed_code(port); - val = SCHEME_VEC_ELS(data)[0]; size = SCHEME_VEC_SIZE(data); @@ -1029,24 +857,27 @@ static void define_values_validate(Scheme_Object *data, Mz_CPort *port, NULL, !!only_var, 0, vc, 0, 0, NULL); } -static Scheme_Object * -define_values_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_define_values_optimize(Scheme_Object *data, Optimize_Info *info, int context) { - Scheme_Object *vars = SCHEME_CAR(data); - Scheme_Object *val = SCHEME_CDR(data); + Scheme_Object *vars = SCHEME_VEC_ELS(data)[0]; + Scheme_Object *val = SCHEME_VEC_ELS(data)[1]; scheme_optimize_info_used_top(info); val = scheme_optimize_expr(val, info, 0); - return scheme_make_syntax_compiled(DEFINE_VALUES_EXPD, cons(vars, val)); + SCHEME_VEC_ELS(data)[0] = vars; + SCHEME_VEC_ELS(data)[1] = val; + + return data; } -static Scheme_Object * -define_values_resolve(Scheme_Object *data, Resolve_Info *rslv) +Scheme_Object * +scheme_define_values_resolve(Scheme_Object *data, Resolve_Info *rslv) { intptr_t cnt = 0; - Scheme_Object *vars = SCHEME_CAR(data), *l, *a; - Scheme_Object *val = SCHEME_CDR(data), *vec; + Scheme_Object *vars = SCHEME_VEC_ELS(data)[0], *l, *a; + Scheme_Object *val = SCHEME_VEC_ELS(data)[1], *vec; /* If this is a module-level definition: for each variable, if the defined variable doesn't have SCHEME_TOPLEVEL_MUTATED, then @@ -1073,11 +904,12 @@ define_values_resolve(Scheme_Object *data, Resolve_Info *rslv) val = scheme_resolve_expr(val, rslv); SCHEME_VEC_ELS(vec)[0] = val; - return scheme_make_syntax_resolved(DEFINE_VALUES_EXPD, vec); + vec->type = scheme_define_values_type; + return vec; } -static Scheme_Object * -define_values_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object * +scheme_define_values_sfs(Scheme_Object *data, SFS_Info *info) { Scheme_Object *e; scheme_sfs_start_sequence(info, 1, 0); @@ -1094,7 +926,9 @@ void scheme_resolve_lift_definition(Resolve_Info *info, Scheme_Object *var, Sche SCHEME_VEC_ELS(vec)[0] = rhs; SCHEME_VEC_ELS(vec)[1] = var; - decl = scheme_make_syntax_resolved(DEFINE_VALUES_EXPD, vec); + vec->type = scheme_define_values_type; + + decl = vec; vec = info->lifts; pr = cons(decl, SCHEME_VEC_ELS(vec)[0]); @@ -1180,7 +1014,7 @@ defn_targets_syntax (Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_In static Scheme_Object * define_values_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) { - Scheme_Object *var, *val, *targets, *variables; + Scheme_Object *var, *val, *targets, *variables, *vec; scheme_define_parse(form, &var, &val, 0, env, 0); variables = var; @@ -1199,9 +1033,12 @@ define_values_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_ val = scheme_compile_expr(val, env, rec, drec); - /* Note: module_optimize depends on the representation of - DEFINE_VALUES_EXPD's value. */ - return scheme_make_syntax_compiled(DEFINE_VALUES_EXPD, cons(targets, val)); + vec = scheme_make_vector(2, NULL); + SCHEME_VEC_ELS(vec)[0] = targets; + SCHEME_VEC_ELS(vec)[1] = val; + vec->type = scheme_define_values_type; + + return vec; } static Scheme_Object * @@ -1515,46 +1352,44 @@ with_cont_mark_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_I /* set! */ /**********************************************************************/ -static Scheme_Object * -set_execute (Scheme_Object *data) +Scheme_Object * +scheme_set_execute (Scheme_Object *data) { - Scheme_Object *val, *set_undef, *tl; - Scheme_Prefix *toplevels; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + Scheme_Object *val; Scheme_Bucket *var; + Scheme_Prefix *toplevels; - set_undef = SCHEME_CAR(data); - data = SCHEME_CDR(data); - - val = SCHEME_CDR(data); - val = _scheme_eval_linked_expr(val); + val = _scheme_eval_linked_expr(sb->val); - tl = SCHEME_CAR(data); - toplevels = (Scheme_Prefix *)MZ_RUNSTACK[SCHEME_TOPLEVEL_DEPTH(tl)]; - var = (Scheme_Bucket *)toplevels->a[SCHEME_TOPLEVEL_POS(tl)]; + toplevels = (Scheme_Prefix *)MZ_RUNSTACK[SCHEME_TOPLEVEL_DEPTH(sb->var)]; + var = (Scheme_Bucket *)toplevels->a[SCHEME_TOPLEVEL_POS(sb->var)]; - scheme_set_global_bucket("set!", var, val, SCHEME_TRUEP(set_undef)); + scheme_set_global_bucket("set!", var, val, sb->set_undef); return scheme_void; } -static Scheme_Object *set_jit(Scheme_Object *data) +Scheme_Object *scheme_set_jit(Scheme_Object *data) { + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data, *naya; Scheme_Object *orig_val, *naya_val; - orig_val = SCHEME_CDR(data); - orig_val = SCHEME_CDR(orig_val); + orig_val = sb->val; naya_val = scheme_jit_expr(orig_val); if (SAME_OBJ(naya_val, orig_val)) return data; - else - return scheme_make_pair(SCHEME_CAR(data), - scheme_make_pair(SCHEME_CADR(data), - naya_val)); + else { + naya = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + memcpy(naya, sb, sizeof(Scheme_Set_Bang)); + naya->val = naya_val; + return (Scheme_Object *)naya; + } } -static void set_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_set_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -1562,33 +1397,24 @@ static void set_validate(Scheme_Object *data, Mz_CPort *port, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { - Scheme_Object *val, *tl; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; - if (!SCHEME_PAIRP(data) - || !SCHEME_PAIRP(SCHEME_CDR(data))) - scheme_ill_formed_code(port); - - data = SCHEME_CDR(data); - tl = SCHEME_CAR(data); - val = SCHEME_CDR(data); - - scheme_validate_expr(port, val, stack, tls, depth, letlimit, delta, + scheme_validate_expr(port, sb->val, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, NULL, 0, 0, vc, 0, 0, procs); - scheme_validate_toplevel(tl, port, stack, tls, depth, delta, + scheme_validate_toplevel(sb->var, port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, 0); } -static Scheme_Object * -set_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_set_optimize(Scheme_Object *data, Optimize_Info *info, int context) { - Scheme_Object *var, *val, *set_undef; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + Scheme_Object *var, *val; - set_undef = SCHEME_CAR(data); - data = SCHEME_CDR(data); - var = SCHEME_CAR(data); - val = SCHEME_CDR(data); + var = sb->var; + val = sb->val; val = scheme_optimize_expr(val, info, 0); @@ -1612,19 +1438,24 @@ set_optimize(Scheme_Object *data, Optimize_Info *info, int context) } else { scheme_optimize_info_used_top(info); } - - return scheme_make_syntax_compiled(SET_EXPD, cons(set_undef, cons(var, val))); + + sb->var = var; + sb->val = val; + + return (Scheme_Object *)sb; } -static Scheme_Object * -set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) +Scheme_Object * +scheme_set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) { - Scheme_Object *var, *val, *set_undef; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data, *naya; + Scheme_Object *var, *val; - set_undef = SCHEME_CAR(data); - data = SCHEME_CDR(data); - var = SCHEME_CAR(data); - val = SCHEME_CDR(data); + naya = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + memcpy(naya, sb, sizeof(Scheme_Set_Bang)); + + var = naya->var; + val = naya->val; val = scheme_optimize_clone(dup_ok, val, info, delta, closure_depth); if (!val) return NULL; @@ -1633,33 +1464,34 @@ set_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int c if (!var) return NULL; } - return scheme_make_syntax_compiled(SET_EXPD, cons(set_undef, cons(var, val))); + naya->var = var; + naya->val = val; + + return (Scheme_Object *)naya; } -static Scheme_Object *set_shift(Scheme_Object *data, int delta, int after_depth) +Scheme_Object *scheme_set_shift(Scheme_Object *data, int delta, int after_depth) { - Scheme_Object *l, *e; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + Scheme_Object *e; - l = SCHEME_CDR(data); + e = scheme_optimize_shift(sb->var, delta, after_depth); + sb->var = e; - e = scheme_optimize_shift(SCHEME_CAR(l), delta, after_depth); - SCHEME_CAR(l) = e; + e = scheme_optimize_shift(sb->val, delta, after_depth); + sb->val = e; - e = scheme_optimize_shift(SCHEME_CDR(l), delta, after_depth); - SCHEME_CDR(l) = e; - - return scheme_make_syntax_compiled(SET_EXPD, data); + return (Scheme_Object *)sb; } -static Scheme_Object * -set_resolve(Scheme_Object *data, Resolve_Info *rslv) +Scheme_Object * +scheme_set_resolve(Scheme_Object *data, Resolve_Info *rslv) { - Scheme_Object *var, *val, *set_undef; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + Scheme_Object *var, *val; - set_undef = SCHEME_CAR(data); - data = SCHEME_CDR(data); - var = SCHEME_CAR(data); - val = SCHEME_CDR(data); + var = sb->var; + val = sb->val; val = scheme_resolve_expr(val, rslv); @@ -1686,33 +1518,37 @@ set_resolve(Scheme_Object *data, Resolve_Info *rslv) } var = scheme_resolve_expr(var, rslv); + + sb->var = var; + sb->val = val; - return scheme_make_syntax_resolved(SET_EXPD, cons(set_undef, cons(var, val))); + return (Scheme_Object *)sb; } -static Scheme_Object * -set_sfs(Scheme_Object *orig_data, SFS_Info *info) +Scheme_Object * +scheme_set_sfs(Scheme_Object *data, SFS_Info *info) { - Scheme_Object *data, *var, *val; + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)data; + Scheme_Object *var, *val; - data = SCHEME_CDR(orig_data); - var = SCHEME_CAR(data); - val = SCHEME_CDR(data); + var = sb->var; + val = sb->val; scheme_sfs_start_sequence(info, 2, 0); val = scheme_sfs_expr(val, info, -1); var = scheme_sfs_expr(var, info, -1); - SCHEME_CAR(data) = var; - SCHEME_CDR(data) = val; + sb->var = var; + sb->val = val; - return orig_data; + return (Scheme_Object *)sb; } static Scheme_Object * set_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) { + Scheme_Set_Bang *sb; Scheme_Env *menv = NULL; Scheme_Object *var, *val, *name, *body, *rest, *find_name; int l, set_undef; @@ -1793,12 +1629,14 @@ set_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, } set_undef = (rec[drec].comp_flags & COMP_ALLOW_SET_UNDEFINED); - - return scheme_make_syntax_compiled(SET_EXPD, - cons(set_undef - ? scheme_true - : scheme_false, - cons(var, val))); + + sb = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + sb->so.type = scheme_set_bang_type; + sb->var = var; + sb->val = val; + sb->set_undef = set_undef; + + return (Scheme_Object *)sb; } static Scheme_Object * @@ -1896,13 +1734,13 @@ set_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, /* #%variable-reference */ /**********************************************************************/ -static Scheme_Object * -ref_execute (Scheme_Object *data) +Scheme_Object * +scheme_ref_execute (Scheme_Object *data) { Scheme_Prefix *toplevels; Scheme_Object *o; Scheme_Bucket *var; - Scheme_Object *tl = SCHEME_CAR(data); + Scheme_Object *tl = SCHEME_PTR1_VAL(data); Scheme_Env *env; toplevels = (Scheme_Prefix *)MZ_RUNSTACK[SCHEME_TOPLEVEL_DEPTH(tl)]; @@ -1917,12 +1755,12 @@ ref_execute (Scheme_Object *data) return o; } -static Scheme_Object *ref_jit(Scheme_Object *data) +Scheme_Object *scheme_ref_jit(Scheme_Object *data) { return data; } -static void ref_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_ref_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -1930,16 +1768,16 @@ static void ref_validate(Scheme_Object *data, Mz_CPort *port, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { - scheme_validate_toplevel(SCHEME_CAR(data), port, stack, tls, depth, delta, + scheme_validate_toplevel(SCHEME_PTR1_VAL(data), port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, 0); - scheme_validate_toplevel(SCHEME_CDR(data), port, stack, tls, depth, delta, + scheme_validate_toplevel(SCHEME_PTR2_VAL(data), port, stack, tls, depth, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, 0); } -static Scheme_Object * -ref_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_ref_optimize(Scheme_Object *data, Optimize_Info *info, int context) { scheme_optimize_info_used_top(info); @@ -1947,38 +1785,49 @@ ref_optimize(Scheme_Object *data, Optimize_Info *info, int context) info->single_result = 1; info->size++; - return scheme_make_syntax_compiled(REF_EXPD, data); + return data; } -static Scheme_Object * -ref_shift(Scheme_Object *data, int delta, int after_depth) +Scheme_Object * +scheme_ref_shift(Scheme_Object *data, int delta, int after_depth) { - data = scheme_make_pair(scheme_optimize_shift(SCHEME_CAR(data), delta, after_depth), - scheme_optimize_shift(SCHEME_CDR(data), delta, after_depth)); - return scheme_make_syntax_compiled(REF_EXPD, data); + Scheme_Object *v; + + v = scheme_optimize_shift(SCHEME_PTR1_VAL(data), delta, after_depth); + SCHEME_PTR1_VAL(data) = v; + + v = scheme_optimize_shift(SCHEME_PTR2_VAL(data), delta, after_depth); + SCHEME_PTR2_VAL(data) = v; + + return data; } -static Scheme_Object * -ref_resolve(Scheme_Object *data, Resolve_Info *rslv) +Scheme_Object * +scheme_ref_resolve(Scheme_Object *data, Resolve_Info *rslv) { - data = scheme_make_pair(scheme_resolve_expr(SCHEME_CAR(data), rslv), - scheme_resolve_expr(SCHEME_CDR(data), rslv)); - return scheme_make_syntax_resolved(REF_EXPD, data); + Scheme_Object *v; + + v = scheme_resolve_expr(SCHEME_PTR1_VAL(data), rslv); + SCHEME_PTR1_VAL(data) = v; + v = scheme_resolve_expr(SCHEME_PTR2_VAL(data), rslv); + SCHEME_PTR2_VAL(data) = v; + + return data; } -static Scheme_Object * -ref_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object * +scheme_ref_sfs(Scheme_Object *data, SFS_Info *info) { Scheme_Object *a_naya; Scheme_Object *b_naya; + scheme_sfs_start_sequence(info, 1, 0); - a_naya = scheme_sfs_expr(SCHEME_CAR(data), info, -1); - b_naya = scheme_sfs_expr(SCHEME_CDR(data), info, -1); - if (SAME_OBJ(a_naya, SCHEME_CAR(data)) - && SAME_OBJ(b_naya, SCHEME_CDR(data))) - return data; - else - return scheme_make_syntax_resolved(REF_EXPD, scheme_make_pair(a_naya, b_naya)); + a_naya = scheme_sfs_expr(SCHEME_PTR1_VAL(data), info, -1); + b_naya = scheme_sfs_expr(SCHEME_PTR2_VAL(data), info, -1); + SCHEME_PTR1_VAL(data) = a_naya; + SCHEME_PTR2_VAL(data) = b_naya; + + return data; } static Scheme_Object * @@ -2067,9 +1916,14 @@ ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, } } - if (rec[drec].comp) - return scheme_make_syntax_compiled(REF_EXPD, scheme_make_pair(var, dummy)); - else + if (rec[drec].comp) { + Scheme_Object *o; + o = scheme_alloc_object(); + o->type = scheme_varref_form_type; + SCHEME_PTR1_VAL(o) = (Scheme_Object *)var; + SCHEME_PTR2_VAL(o) = (Scheme_Object *)dummy; + return o; + } else return scheme_void; } @@ -2089,11 +1943,11 @@ ref_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, /* apply-values */ /**********************************************************************/ -static Scheme_Object *apply_values_execute(Scheme_Object *data) +Scheme_Object *scheme_apply_values_execute(Scheme_Object *data) { Scheme_Object *f, *v; - f = SCHEME_CAR(data); + f = SCHEME_PTR1_VAL(data); f = _scheme_eval_linked_expr(f); if (!SCHEME_PROCP(f)) { @@ -2103,7 +1957,7 @@ static Scheme_Object *apply_values_execute(Scheme_Object *data) return NULL; } - v = _scheme_eval_linked_expr_multi(SCHEME_CDR(data)); + v = _scheme_eval_linked_expr_multi(SCHEME_PTR2_VAL(data)); if (SAME_OBJ(v, SCHEME_MULTIPLE_VALUES)) { Scheme_Thread *p = scheme_current_thread; int num_rands = p->ku.multiple.count; @@ -2121,27 +1975,32 @@ static Scheme_Object *apply_values_execute(Scheme_Object *data) } } -static Scheme_Object *apply_values_jit(Scheme_Object *data) +Scheme_Object *scheme_apply_values_jit(Scheme_Object *data) { Scheme_Object *f, *e; - f = scheme_jit_expr(SCHEME_CAR(data)); - e = scheme_jit_expr(SCHEME_CDR(data)); + f = scheme_jit_expr(SCHEME_PTR1_VAL(data)); + e = scheme_jit_expr(SCHEME_PTR2_VAL(data)); - if (SAME_OBJ(f, SCHEME_CAR(data)) - && SAME_OBJ(e, SCHEME_CAR(data))) + if (SAME_OBJ(f, SCHEME_PTR1_VAL(data)) + && SAME_OBJ(e, SCHEME_PTR2_VAL(data))) return data; - else - return scheme_make_pair(f, e); + else { + data = scheme_alloc_object(); + data->type = scheme_apply_values_type; + SCHEME_PTR1_VAL(data) = f; + SCHEME_PTR2_VAL(data) = e; + return data; + } } -static Scheme_Object * -apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object * +scheme_apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context) { Scheme_Object *f, *e; - f = SCHEME_CAR(data); - e = SCHEME_CDR(data); + f = SCHEME_PTR1_VAL(data); + e = SCHEME_PTR2_VAL(data); f = scheme_optimize_expr(f, info, 0); e = scheme_optimize_expr(e, info, 0); @@ -2152,70 +2011,78 @@ apply_values_optimize(Scheme_Object *data, Optimize_Info *info, int context) return scheme_optimize_apply_values(f, e, info, info->single_result, context); } -static Scheme_Object * -apply_values_resolve(Scheme_Object *data, Resolve_Info *rslv) +Scheme_Object * +scheme_apply_values_resolve(Scheme_Object *data, Resolve_Info *rslv) { Scheme_Object *f, *e; - f = SCHEME_CAR(data); - e = SCHEME_CDR(data); + f = SCHEME_PTR1_VAL(data); + e = SCHEME_PTR2_VAL(data); f = scheme_resolve_expr(f, rslv); e = scheme_resolve_expr(e, rslv); + + SCHEME_PTR1_VAL(data) = f; + SCHEME_PTR2_VAL(data) = e; - return scheme_make_syntax_resolved(APPVALS_EXPD, cons(f, e)); + return data; } -static Scheme_Object * -apply_values_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object * +scheme_apply_values_sfs(Scheme_Object *data, SFS_Info *info) { Scheme_Object *f, *e; - f = SCHEME_CAR(data); - e = SCHEME_CDR(data); + f = SCHEME_PTR1_VAL(data); + e = SCHEME_PTR2_VAL(data); scheme_sfs_start_sequence(info, 2, 0); f = scheme_sfs_expr(f, info, -1); e = scheme_sfs_expr(e, info, -1); - SCHEME_CAR(data) = f; - SCHEME_CDR(data) = e; + SCHEME_PTR1_VAL(data) = f; + SCHEME_PTR2_VAL(data) = e; return data; } -static Scheme_Object * -apply_values_shift(Scheme_Object *data, int delta, int after_depth) +Scheme_Object * +scheme_apply_values_shift(Scheme_Object *data, int delta, int after_depth) { Scheme_Object *e; - e = scheme_optimize_shift(SCHEME_CAR(data), delta, after_depth); - SCHEME_CAR(data) = e; + e = scheme_optimize_shift(SCHEME_PTR1_VAL(data), delta, after_depth); + SCHEME_PTR1_VAL(data) = e; - e = scheme_optimize_shift(SCHEME_CDR(data), delta, after_depth); - SCHEME_CDR(data) = e; + e = scheme_optimize_shift(SCHEME_PTR2_VAL(data), delta, after_depth); + SCHEME_PTR2_VAL(data) = e; - return scheme_make_syntax_compiled(APPVALS_EXPD, data); + return data; } -static Scheme_Object * -apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) +Scheme_Object * +scheme_apply_values_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) { Scheme_Object *f, *e; - f = SCHEME_CAR(data); - e = SCHEME_CDR(data); + f = SCHEME_PTR1_VAL(data); + e = SCHEME_PTR2_VAL(data); f = scheme_optimize_clone(dup_ok, f, info, delta, closure_depth); if (!f) return NULL; e = scheme_optimize_clone(dup_ok, e, info, delta, closure_depth); if (!e) return NULL; + + data = scheme_alloc_object(); + data->type = scheme_apply_values_type; + SCHEME_PTR1_VAL(data) = f; + SCHEME_PTR2_VAL(data) = e; - return scheme_make_syntax_compiled(APPVALS_EXPD, cons(f, e)); + return data; } -static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_apply_values_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -2225,8 +2092,8 @@ static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, { Scheme_Object *f, *e; - f = SCHEME_CAR(data); - e = SCHEME_CDR(data); + f = SCHEME_PTR1_VAL(data); + e = SCHEME_PTR2_VAL(data); scheme_validate_expr(port, f, stack, tls, depth, letlimit, delta, @@ -2242,8 +2109,8 @@ static void apply_values_validate(Scheme_Object *data, Mz_CPort *port, /* case-lambda */ /**********************************************************************/ -static Scheme_Object * -case_lambda_execute(Scheme_Object *expr) +Scheme_Object * +scheme_case_lambda_execute(Scheme_Object *expr) { Scheme_Case_Lambda *seqin, *seqout; int i, cnt; @@ -2307,7 +2174,7 @@ case_lambda_execute(Scheme_Object *expr) return (Scheme_Object *)seqout; } -static Scheme_Object *case_lambda_jit(Scheme_Object *expr) +Scheme_Object *scheme_case_lambda_jit(Scheme_Object *expr) { #ifdef MZ_USE_JIT Scheme_Case_Lambda *seqin = (Scheme_Case_Lambda *)expr; @@ -2382,7 +2249,7 @@ static Scheme_Object *case_lambda_jit(Scheme_Object *expr) return expr; } -static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, +void scheme_case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, void *tl_use_map, int result_ignored, @@ -2407,8 +2274,8 @@ static void case_lambda_validate(Scheme_Object *data, Mz_CPort *port, char *stac } } -static Scheme_Object * -case_lambda_resolve(Scheme_Object *expr, Resolve_Info *rslv) +Scheme_Object * +scheme_case_lambda_resolve(Scheme_Object *expr, Resolve_Info *rslv) { int i, all_closed = 1; Scheme_Case_Lambda *seq = (Scheme_Case_Lambda *)expr; @@ -2424,14 +2291,14 @@ case_lambda_resolve(Scheme_Object *expr, Resolve_Info *rslv) if (all_closed) { /* Produce closure directly */ - return case_lambda_execute(expr); + return scheme_case_lambda_execute(expr); } - return scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr); + return expr; } -static Scheme_Object * -case_lambda_sfs(Scheme_Object *expr, SFS_Info *info) +Scheme_Object * +scheme_case_lambda_sfs(Scheme_Object *expr, SFS_Info *info) { Scheme_Case_Lambda *seq = (Scheme_Case_Lambda *)expr; Scheme_Object *le, *clears = scheme_null; @@ -2442,12 +2309,11 @@ case_lambda_sfs(Scheme_Object *expr, SFS_Info *info) for (i = 0; i < seq->count; i++) { le = seq->array[i]; le = scheme_sfs_expr(le, info, -1); - if (SAME_TYPE(SCHEME_TYPE(le), scheme_syntax_type) - && (SCHEME_PINT_VAL(le) == BEGIN0_EXPD)) { + if (SAME_TYPE(SCHEME_TYPE(le), scheme_begin0_sequence_type)) { /* Some clearing actions were added to the closure. Lift them out. */ int j; - Scheme_Sequence *cseq = (Scheme_Sequence *)SCHEME_IPTR_VAL(le); + Scheme_Sequence *cseq = (Scheme_Sequence *)le; if (!cseq->count) scheme_signal_error("internal error: empty sequence"); for (j = 1; j < cseq->count; j++) { @@ -2466,14 +2332,13 @@ case_lambda_sfs(Scheme_Object *expr, SFS_Info *info) } if (!SCHEME_NULLP(clears)) { - expr = scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, expr); return scheme_sfs_add_clears(expr, clears, 0); } else return expr; } -static Scheme_Object * -case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context) +Scheme_Object * +scheme_case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context) { Scheme_Object *le; int i; @@ -2525,11 +2390,11 @@ case_lambda_optimize(Scheme_Object *expr, Optimize_Info *info, int context) info->transitive_use_len[tup] = tu_count; } - return scheme_make_syntax_compiled(CASE_LAMBDA_EXPD, expr); + return expr; } -static Scheme_Object * -case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) +Scheme_Object * +scheme_case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) { Scheme_Object *le; int i, sz; @@ -2547,11 +2412,11 @@ case_lambda_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delt seq2->array[i] = le; } - return scheme_make_syntax_compiled(CASE_LAMBDA_EXPD, (Scheme_Object *)seq2); + return (Scheme_Object *)seq2; } -static Scheme_Object * -case_lambda_shift(Scheme_Object *data, int delta, int after_depth) +Scheme_Object * +scheme_case_lambda_shift(Scheme_Object *data, int delta, int after_depth) { Scheme_Object *le; int i; @@ -2563,7 +2428,7 @@ case_lambda_shift(Scheme_Object *data, int delta, int after_depth) seq->array[i] = le; } - return scheme_make_syntax_compiled(CASE_LAMBDA_EXPD, data); + return data; } Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode) @@ -2597,10 +2462,10 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode) if (mode == 2) { /* sfs */ - return scheme_make_syntax_resolved(CASE_LAMBDA_EXPD, (Scheme_Object *)cl2); + return (Scheme_Object *)cl2; } else if (mode == 1) { /* JIT */ - return case_lambda_jit((Scheme_Object *)cl2); + return scheme_case_lambda_jit((Scheme_Object *)cl2); } else return (Scheme_Object *)cl2; } @@ -2658,7 +2523,7 @@ case_lambda_syntax (Scheme_Object *form, Scheme_Comp_Env *env, ((Scheme_Case_Lambda *)form)->name = name; } - return scheme_make_syntax_compiled(CASE_LAMBDA_EXPD, form); + return form; } if (!SCHEME_STX_PAIRP(form)) @@ -2740,7 +2605,7 @@ case_lambda_syntax (Scheme_Object *form, Scheme_Comp_Env *env, } } - return scheme_make_syntax_compiled(CASE_LAMBDA_EXPD, (Scheme_Object *)cl); + return (Scheme_Object *)cl; } static Scheme_Object * @@ -2807,12 +2672,12 @@ case_lambda_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info /* A bangboxenv step is inserted by the compilation of `lambda' and `let' forms where an argument or bindings is set!ed in the body. */ -Scheme_Object *bangboxenv_execute(Scheme_Object *data) +Scheme_Object *scheme_bangboxenv_execute(Scheme_Object *data) { - int pos = SCHEME_INT_VAL(SCHEME_CAR(data)); + int pos = SCHEME_INT_VAL(SCHEME_PTR1_VAL(data)); Scheme_Object *bb; - data = SCHEME_CDR(data); + data = SCHEME_PTR2_VAL(data); bb = scheme_make_envunbox(MZ_RUNSTACK[pos]); MZ_RUNSTACK[pos] = bb; @@ -2820,12 +2685,12 @@ Scheme_Object *bangboxenv_execute(Scheme_Object *data) return _scheme_tail_eval(data); } -static Scheme_Object *bangboxenv_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object *scheme_bangboxenv_sfs(Scheme_Object *data, SFS_Info *info) { Scheme_Object *e; int spos, drop; - spos = SCHEME_INT_VAL(SCHEME_CAR(data)) + info->stackpos; + spos = SCHEME_INT_VAL(SCHEME_PTR1_VAL(data)) + info->stackpos; if (info->pass && (info->max_used[spos] < info->ip)) /* Not used, so don't bother boxing. In fact, the original value @@ -2834,29 +2699,34 @@ static Scheme_Object *bangboxenv_sfs(Scheme_Object *data, SFS_Info *info) else drop = 0; - e = scheme_sfs_expr(SCHEME_CDR(data), info, -1); + e = scheme_sfs_expr(SCHEME_PTR2_VAL(data), info, -1); if (drop) return e; else { - SCHEME_CDR(data) = e; + SCHEME_PTR2_VAL(data) = e; return data; } } -static Scheme_Object *bangboxenv_jit(Scheme_Object *data) +Scheme_Object *scheme_bangboxenv_jit(Scheme_Object *data) { - Scheme_Object *orig, *naya; + Scheme_Object *orig, *naya, *new_data; - orig = SCHEME_CDR(data); + orig = SCHEME_PTR2_VAL(data); naya = scheme_jit_expr(orig); if (SAME_OBJ(naya, orig)) return data; - else - return cons(SCHEME_CAR(data), naya); + else { + new_data = scheme_alloc_object(); + new_data->type = scheme_boxenv_type; + SCHEME_PTR1_VAL(new_data) = SCHEME_PTR1_VAL(data); + SCHEME_PTR2_VAL(new_data) = naya; + return new_data; + } } -static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -2864,12 +2734,9 @@ static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, struct Validate_Clearing *vc, int tailpos, Scheme_Hash_Tree *procs) { - if (!SCHEME_PAIRP(data)) - scheme_ill_formed_code(port); - - scheme_validate_boxenv(SCHEME_INT_VAL(SCHEME_CAR(data)), port, stack, depth, delta, letlimit); + scheme_validate_boxenv(SCHEME_INT_VAL(SCHEME_PTR1_VAL(data)), port, stack, depth, delta, letlimit); - scheme_validate_expr(port, SCHEME_CDR(data), stack, tls, depth, letlimit, delta, + scheme_validate_expr(port, SCHEME_PTR2_VAL(data), stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts, tl_use_map, NULL, 0, result_ignored, vc, tailpos, 0, procs); } @@ -2896,8 +2763,8 @@ static int is_liftable(Scheme_Object *o, int bind_count, int fuel, int as_rator) switch (t) { case scheme_compiled_unclosed_procedure_type: return !as_rator; - case scheme_compiled_syntax_type: - return (!as_rator && (SCHEME_PINT_VAL(o) == CASE_LAMBDA_EXPD)); + case scheme_case_lambda_sequence_type: + return !as_rator; case scheme_compiled_toplevel_type: return 1; case scheme_local_type: @@ -2994,9 +2861,8 @@ int scheme_compiled_propagate_ok(Scheme_Object *value, Optimize_Info *info) return 1; } - if (SAME_TYPE(scheme_compiled_syntax_type, SCHEME_TYPE(value)) - && (SCHEME_PINT_VAL(value) == CASE_LAMBDA_EXPD)) { - Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(value); + if (SAME_TYPE(scheme_case_lambda_sequence_type, SCHEME_TYPE(value))) { + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)value; int i; for (i = cl->count; i--; ) { if (!scheme_compiled_propagate_ok(cl->array[i], info)) @@ -3025,11 +2891,8 @@ int scheme_is_statically_proc(Scheme_Object *value, Optimize_Info *info) while (1) { if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_unclosed_procedure_type)) return 1; - else if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_syntax_type)) { - if (SCHEME_PINT_VAL(value) == CASE_LAMBDA_EXPD) - return 1; - else - break; + else if (SAME_TYPE(SCHEME_TYPE(value), scheme_case_lambda_sequence_type)) { + return 1; } else if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_let_void_type)) { /* Look for (let ([x ]) ), which is generated for optional arguments. */ Scheme_Let_Header *lh = (Scheme_Let_Header *)value; @@ -3162,9 +3025,9 @@ static int set_code_flags(Scheme_Compiled_Let_Value *retry_start, cl2 = NULL; cl3 = NULL; } else { - cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(value); - cl2 = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(SCHEME_CAR(first)); - cl3 = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(SCHEME_CDR(first)); + cl = (Scheme_Case_Lambda *)value; + cl2 = (Scheme_Case_Lambda *)SCHEME_CAR(first); + cl3 = (Scheme_Case_Lambda *)SCHEME_CDR(first); count = cl->count; } @@ -3208,9 +3071,8 @@ int scheme_compiled_proc_body_size(Scheme_Object *o) { if (SAME_TYPE(SCHEME_TYPE(o), scheme_compiled_unclosed_procedure_type)) return scheme_closure_body_size((Scheme_Closure_Data *)o, 0, NULL, NULL); - else if (SAME_TYPE(SCHEME_TYPE(o), scheme_compiled_syntax_type) - && (SCHEME_PINT_VAL(o) == CASE_LAMBDA_EXPD)) { - Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)SCHEME_IPTR_VAL(o); + else if (SAME_TYPE(SCHEME_TYPE(o), scheme_case_lambda_sequence_type)) { + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)o; int i, sz = 0; for (i = cl->count; i--; ) { sz += scheme_closure_body_size((Scheme_Closure_Data *)cl->array[i], 0, NULL, NULL); @@ -3235,7 +3097,7 @@ static int worth_lifting(Scheme_Object *v) Scheme_Type lhs; lhs = SCHEME_TYPE(v); if ((lhs == scheme_compiled_unclosed_procedure_type) - || ((lhs == scheme_compiled_syntax_type) && (SCHEME_PINT_VAL(v) == CASE_LAMBDA_EXPD)) + || (lhs == scheme_case_lambda_sequence_type) || (lhs == scheme_local_type) || (lhs == scheme_compiled_toplevel_type) || (lhs == scheme_compiled_quote_syntax_type) @@ -4686,7 +4548,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) if (last) last->body = expr; else if (last_body) - SCHEME_CDR(last_body) = expr; + SCHEME_PTR2_VAL(last_body) = expr; else if (last_seq) ((Scheme_Sequence *)last_seq)->array[1] = expr; else @@ -4701,7 +4563,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) if (last) last->body = (Scheme_Object *)lv; else if (last_body) - SCHEME_CDR(last_body) = (Scheme_Object *)lv; + SCHEME_PTR2_VAL(last_body) = (Scheme_Object *)lv; else if (last_seq) ((Scheme_Sequence *)last_seq)->array[1] = (Scheme_Object *)lv; else @@ -4728,17 +4590,21 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) pos = scheme_make_integer(lv->position + j); if (SCHEME_LET_FLAGS(head) & (SCHEME_LET_STAR | SCHEME_LET_RECURSIVE)) { /* For let* or a let*-like letrec, we need to insert the boxes after each evaluation. */ - Scheme_Object *boxenv, *pr; - pr = scheme_make_pair(pos, scheme_false); - boxenv = scheme_make_syntax_resolved(BOXENV_EXPD, pr); + Scheme_Object *boxenv; + + boxenv = scheme_alloc_object(); + boxenv->type = scheme_boxenv_type; + SCHEME_PTR1_VAL(boxenv) = pos; + SCHEME_PTR2_VAL(boxenv) = scheme_false; + if (last) last->body = boxenv; else if (last_seq) ((Scheme_Sequence *)last_seq)->array[1] = boxenv; else - SCHEME_CDR(last_body) = boxenv; + SCHEME_PTR2_VAL(last_body) = boxenv; last = NULL; - last_body = pr; + last_body = boxenv; last_seq = NULL; } else { /* For regular let, delay the boxing until all RHSs are @@ -4757,9 +4623,12 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) while (SCHEME_PAIRP(boxes)) { /* See bangboxenv... */ - body = scheme_make_syntax_resolved(BOXENV_EXPD, - scheme_make_pair(SCHEME_CAR(boxes), - body)); + Scheme_Object *bcode; + bcode = scheme_alloc_object(); + bcode->type = scheme_boxenv_type; + SCHEME_PTR1_VAL(bcode) = SCHEME_CAR(boxes); + SCHEME_PTR2_VAL(bcode) = body; + body = bcode; boxes = SCHEME_CDR(boxes); } @@ -4768,7 +4637,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) if (last) last->body = (Scheme_Object *)letrec; else if (last_body) - SCHEME_CDR(last_body) = (Scheme_Object *)letrec; + SCHEME_PTR2_VAL(last_body) = (Scheme_Object *)letrec; else if (last_seq) ((Scheme_Sequence *)last_seq)->array[1] = (Scheme_Object *)letrec; else @@ -4776,7 +4645,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) } else if (last) last->body = body; else if (last_body) - SCHEME_CDR(last_body) = body; + SCHEME_PTR2_VAL(last_body) = body; else if (last_seq) ((Scheme_Sequence *)last_seq)->array[1] = (Scheme_Object *)body; else @@ -5430,8 +5299,8 @@ Scheme_Object *scheme_compiled_void() return scheme_void; } -static Scheme_Object * -begin0_execute(Scheme_Object *obj) +Scheme_Object * +scheme_begin0_execute(Scheme_Object *obj) { Scheme_Object *v, **mv; int i, mc, apos; @@ -5465,7 +5334,7 @@ begin0_execute(Scheme_Object *obj) return v; } -static Scheme_Object *begin0_jit(Scheme_Object *data) +Scheme_Object *scheme_begin0_jit(Scheme_Object *data) { Scheme_Sequence *seq = (Scheme_Sequence *)data, *seq2; Scheme_Object *old, *naya = NULL; @@ -5500,7 +5369,7 @@ static Scheme_Object *begin0_jit(Scheme_Object *data) return (Scheme_Object *)seq2; } -static void begin0_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_begin0_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -5523,8 +5392,8 @@ static void begin0_validate(Scheme_Object *data, Mz_CPort *port, } } -static Scheme_Object * -begin0_optimize(Scheme_Object *obj, Optimize_Info *info, int context) +Scheme_Object * +scheme_begin0_optimize(Scheme_Object *obj, Optimize_Info *info, int context) { int i, count; @@ -5544,50 +5413,11 @@ begin0_optimize(Scheme_Object *obj, Optimize_Info *info, int context) info->size += 1; - return scheme_make_syntax_compiled(BEGIN0_EXPD, obj); + return obj; } -static Scheme_Object * -begin0_clone(int dup_ok, Scheme_Object *obj, Optimize_Info *info, int delta, int closure_depth) -{ - obj = scheme_optimize_clone(dup_ok, obj, info, delta, closure_depth); - if (!obj) return NULL; - return scheme_make_syntax_compiled(BEGIN0_EXPD, obj); -} - -static Scheme_Object *begin0_shift(Scheme_Object *obj, int delta, int after_depth) -{ - int i; - - i = ((Scheme_Sequence *)obj)->count; - - while (i--) { - Scheme_Object *le; - le = scheme_optimize_shift(((Scheme_Sequence *)obj)->array[i], delta, after_depth); - ((Scheme_Sequence *)obj)->array[i] = le; - } - - return scheme_make_syntax_compiled(BEGIN0_EXPD, obj); -} - -static Scheme_Object * -begin0_resolve(Scheme_Object *obj, Resolve_Info *info) -{ - int i; - - i = ((Scheme_Sequence *)obj)->count; - - while (i--) { - Scheme_Object *le; - le = scheme_resolve_expr(((Scheme_Sequence *)obj)->array[i], info); - ((Scheme_Sequence *)obj)->array[i] = le; - } - - return scheme_make_syntax_resolved(BEGIN0_EXPD, obj); -} - -static Scheme_Object * -begin0_sfs(Scheme_Object *obj, SFS_Info *info) +Scheme_Object * +scheme_begin0_sfs(Scheme_Object *obj, SFS_Info *info) { int i, cnt; @@ -5675,13 +5505,11 @@ do_begin_syntax(char *name, if (!zero && SAME_TYPE(SCHEME_TYPE(forms), scheme_sequence_type) && scheme_is_toplevel(env)) { - return scheme_make_syntax_compiled(SPLICE_EXPD, forms); + forms->type = scheme_splice_sequence_type; + return forms; } - if (!zero || (NOT_SAME_TYPE(SCHEME_TYPE(forms), scheme_begin0_sequence_type))) - return forms; - - return scheme_make_syntax_compiled(BEGIN0_EXPD, forms); + return forms; } static Scheme_Object * @@ -5833,9 +5661,9 @@ static Scheme_Object *splice_one_expr(void *expr, int argc, Scheme_Object **argv return _scheme_eval_linked_expr_multi((Scheme_Object *)expr); } -static Scheme_Object *splice_execute(Scheme_Object *data) +Scheme_Object *scheme_splice_execute(Scheme_Object *data) { - if (SAME_TYPE(SCHEME_TYPE(data), scheme_sequence_type)) { + if (SAME_TYPE(SCHEME_TYPE(data), scheme_splice_sequence_type)) { Scheme_Sequence *seq = (Scheme_Sequence *)data; int i, cnt = seq->count - 1; @@ -5850,69 +5678,6 @@ static Scheme_Object *splice_execute(Scheme_Object *data) } } -static Scheme_Object *splice_jit(Scheme_Object *data) -{ - return scheme_jit_expr(data); -} - -static Scheme_Object * -splice_optimize(Scheme_Object *data, Optimize_Info *info, int context) -{ - data = scheme_optimize_expr(data, info, 0); - - if (SCHEME_TYPE(data) != scheme_sequence_type) - return data; - - return scheme_make_syntax_compiled(SPLICE_EXPD, data); -} - -static Scheme_Object * -splice_resolve(Scheme_Object *data, Resolve_Info *rslv) -{ - return scheme_make_syntax_resolved(SPLICE_EXPD, - scheme_resolve_expr(data, rslv)); -} - -static Scheme_Object * -splice_sfs(Scheme_Object *data, SFS_Info *info) -{ - Scheme_Object *naya; - naya = scheme_sfs_expr(data, info, -1); - if (SAME_OBJ(naya, data)) - return data; - else - return scheme_make_syntax_resolved(SPLICE_EXPD, data); -} - -static Scheme_Object * -splice_shift(Scheme_Object *data, int delta, int after_depth) -{ - return scheme_make_syntax_compiled(SPLICE_EXPD, - scheme_optimize_shift(data, delta, after_depth)); -} - -static Scheme_Object * -splice_clone(int dup_ok, Scheme_Object *data, Optimize_Info *info, int delta, int closure_depth) -{ - data = scheme_optimize_clone(dup_ok, data, info, delta, closure_depth); - if (!data) return NULL; - return scheme_make_syntax_compiled(SPLICE_EXPD, data); -} - -static void splice_validate(Scheme_Object *data, Mz_CPort *port, - char *stack, Validate_TLS tls, - int depth, int letlimit, int delta, - int num_toplevels, int num_stxes, int num_lifts, - void *tl_use_map, int result_ignored, - struct Validate_Clearing *vc, int tailpos, - Scheme_Hash_Tree *procs) -{ - scheme_validate_expr(port, data, stack, tls, - depth, letlimit, delta, - num_toplevels, num_stxes, num_lifts, tl_use_map, - NULL, 0, 0, vc, 0, 0, procs); -} - /**********************************************************************/ /* #%non-module and #%expression */ /**********************************************************************/ @@ -6127,14 +5892,14 @@ do_define_syntaxes_execute(Scheme_Object *form, Scheme_Env *dm_env, int for_stx) } } -static Scheme_Object * -define_syntaxes_execute(Scheme_Object *form) +Scheme_Object * +scheme_define_syntaxes_execute(Scheme_Object *form) { return do_define_syntaxes_execute(form, NULL, 0); } -static Scheme_Object * -define_for_syntaxes_execute(Scheme_Object *form) +Scheme_Object * +scheme_define_for_syntaxes_execute(Scheme_Object *form) { return do_define_syntaxes_execute(form, NULL, 1); } @@ -6157,19 +5922,19 @@ static Scheme_Object *do_define_syntaxes_jit(Scheme_Object *expr, int jit) && SAME_OBJ(orig_rp, rp)) return expr; else { - expr = clone_vector(expr, 0); + expr = clone_vector(expr, 0, 1); SCHEME_VEC_ELS(expr)[0] = naya; SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp; return expr; } } -static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr) +Scheme_Object *scheme_define_syntaxes_jit(Scheme_Object *expr) { return do_define_syntaxes_jit(expr, 1); } -static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr) +Scheme_Object *scheme_define_for_syntaxes_jit(Scheme_Object *expr) { return do_define_syntaxes_jit(expr, 1); } @@ -6222,14 +5987,13 @@ static void do_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, scheme_validate_code(port, SCHEME_VEC_ELS(data)[0], sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, 0); } else { /* Make a fake `define-values' to check with respect to the exp-time stack */ - val = clone_vector(data, 3); + val = clone_vector(data, 3, 1); SCHEME_VEC_ELS(val)[0] = SCHEME_VEC_ELS(data)[0]; - val = scheme_make_syntax_resolved(DEFINE_VALUES_EXPD, val); scheme_validate_code(port, val, sdepth, rp->num_toplevels, rp->num_stxes, rp->num_lifts, NULL, 0); } } -static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -6241,7 +6005,7 @@ static void define_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, num_toplevels, num_stxes, num_lifts, tl_use_map, 0); } -static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, +void scheme_define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, char *stack, Validate_TLS tls, int depth, int letlimit, int delta, int num_toplevels, int num_stxes, int num_lifts, @@ -6255,16 +6019,10 @@ static void define_for_syntaxes_validate(Scheme_Object *data, Mz_CPort *port, static Scheme_Object *do_define_syntaxes_optimize(Scheme_Object *data, Optimize_Info *info, int for_stx) { - Scheme_Object *cp, *names, *val, *dummy; + Scheme_Object *val; Optimize_Info *einfo; - cp = SCHEME_CAR(data); - data = SCHEME_CDDR(data); - dummy = SCHEME_CAR(data); - data = SCHEME_CDR(data); - - names = SCHEME_CAR(data); - val = SCHEME_CDR(data); + val = SCHEME_VEC_ELS(data)[3]; einfo = scheme_optimize_info_create(); if (info->inline_fuel < 0) @@ -6272,18 +6030,17 @@ static Scheme_Object *do_define_syntaxes_optimize(Scheme_Object *data, Optimize_ val = scheme_optimize_expr(val, einfo, 0); - return scheme_make_syntax_compiled((for_stx ? DEFINE_FOR_SYNTAX_EXPD : DEFINE_SYNTAX_EXPD), - cons(cp, - cons(dummy, - cons(names, val)))); + SCHEME_VEC_ELS(data)[3] = val; + + return data; } -static Scheme_Object *define_syntaxes_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object *scheme_define_syntaxes_optimize(Scheme_Object *data, Optimize_Info *info, int context) { return do_define_syntaxes_optimize(data, info, 0); } -static Scheme_Object *define_for_syntaxes_optimize(Scheme_Object *data, Optimize_Info *info, int context) +Scheme_Object *scheme_define_for_syntaxes_optimize(Scheme_Object *data, Optimize_Info *info, int context) { return do_define_syntaxes_optimize(data, info, 1); } @@ -6296,13 +6053,10 @@ static Scheme_Object *do_define_syntaxes_resolve(Scheme_Object *data, Resolve_In Resolve_Info *einfo; int len; - cp = (Comp_Prefix *)SCHEME_CAR(data); - data = SCHEME_CDR(data); - dummy = SCHEME_CAR(data); - data = SCHEME_CDR(data); - - names = SCHEME_CAR(data); - val = SCHEME_CDR(data); + cp = (Comp_Prefix *)SCHEME_VEC_ELS(data)[0]; + dummy = SCHEME_VEC_ELS(data)[1]; + names = SCHEME_VEC_ELS(data)[2]; + val = SCHEME_VEC_ELS(data)[3]; rp = scheme_resolve_prefix(1, cp, 1); @@ -6332,16 +6086,17 @@ static Scheme_Object *do_define_syntaxes_resolve(Scheme_Object *data, Resolve_In names = SCHEME_CDR(names); } - return scheme_make_syntax_resolved((for_stx ? DEFINE_FOR_SYNTAX_EXPD : DEFINE_SYNTAX_EXPD), - vec); + vec->type = (for_stx ? scheme_define_for_syntax_type : scheme_define_syntaxes_type); + + return vec; } -static Scheme_Object *define_syntaxes_resolve(Scheme_Object *data, Resolve_Info *info) +Scheme_Object *scheme_define_syntaxes_resolve(Scheme_Object *data, Resolve_Info *info) { return do_define_syntaxes_resolve(data, info, 0); } -static Scheme_Object *define_for_syntaxes_resolve(Scheme_Object *data, Resolve_Info *info) +Scheme_Object *scheme_define_for_syntaxes_resolve(Scheme_Object *data, Resolve_Info *info) { return do_define_syntaxes_resolve(data, info, 1); } @@ -6361,12 +6116,12 @@ static Scheme_Object *do_define_syntaxes_sfs(Scheme_Object *data, SFS_Info *info return data; } -static Scheme_Object *define_syntaxes_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object *scheme_define_syntaxes_sfs(Scheme_Object *data, SFS_Info *info) { return do_define_syntaxes_sfs(data, info); } -static Scheme_Object *define_for_syntaxes_sfs(Scheme_Object *data, SFS_Info *info) +Scheme_Object *scheme_define_for_syntaxes_sfs(Scheme_Object *data, SFS_Info *info) { return do_define_syntaxes_sfs(data, info); } @@ -6383,7 +6138,7 @@ do_define_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec, int for_stx) { Scheme_Object *names, *code, *dummy; - Scheme_Object *val; + Scheme_Object *val, *vec; Scheme_Comp_Env *exp_env; Scheme_Compile_Info rec1; @@ -6421,11 +6176,15 @@ do_define_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, val = scheme_compile_expr_lift_to_let(code, exp_env, &rec1, 0); - return scheme_make_syntax_compiled((for_stx ? DEFINE_FOR_SYNTAX_EXPD : DEFINE_SYNTAX_EXPD), - cons((Scheme_Object *)exp_env->prefix, - cons(scheme_make_integer(0), - cons(dummy, - cons(names, val))))); + vec = scheme_make_vector(4, NULL); + SCHEME_VEC_ELS(vec)[0] = (Scheme_Object *)exp_env->prefix; + SCHEME_VEC_ELS(vec)[1] = dummy; + SCHEME_VEC_ELS(vec)[2] = names; + SCHEME_VEC_ELS(vec)[3] = val; + + vec->type = (for_stx ? scheme_define_for_syntax_type : scheme_define_syntaxes_type); + + return vec; } static Scheme_Object * @@ -7210,12 +6969,145 @@ static Scheme_Object *read_case_lambda(Scheme_Object *obj) (We assume that this was generated by a direct write of a case-lambda data record in print.c, and that it's not in a CASE_LAMBDA_EXPD syntax record.) */ - return case_lambda_execute((Scheme_Object *)cl); + return scheme_case_lambda_execute((Scheme_Object *)cl); } return (Scheme_Object *)cl; } +static Scheme_Object *read_define_values(Scheme_Object *obj) +{ + if (!SCHEME_VECTORP(obj)) return NULL; + + obj = clone_vector(obj, 0, 0); + obj->type = scheme_define_values_type; + return obj; +} + +static Scheme_Object *write_define_values(Scheme_Object *obj) +{ + Scheme_Object *e; + + obj = clone_vector(obj, 0, 0); + e = scheme_protect_quote(SCHEME_VEC_ELS(obj)[0]); + SCHEME_VEC_ELS(obj)[0] = e; + + return obj; +} + +static Scheme_Object *read_define_syntaxes(Scheme_Object *obj) +{ + if (!SCHEME_VECTORP(obj)) return NULL; + + obj = clone_vector(obj, 0, 0); + obj->type = scheme_define_syntaxes_type; + return obj; +} + +static Scheme_Object *write_define_syntaxes(Scheme_Object *obj) +{ + return write_define_values(obj); +} + +static Scheme_Object *read_define_for_syntax(Scheme_Object *obj) +{ + if (!SCHEME_VECTORP(obj)) return NULL; + + obj = clone_vector(obj, 0, 0); + obj->type = scheme_define_for_syntax_type; + return obj; +} + +static Scheme_Object *write_define_for_syntax(Scheme_Object *obj) +{ + return write_define_values(obj); +} + +static Scheme_Object *read_set_bang(Scheme_Object *obj) +{ + Scheme_Set_Bang *sb; + + sb = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + sb->so.type = scheme_set_bang_type; + + if (!SCHEME_PAIRP(obj)) return NULL; + sb->set_undef = SCHEME_TRUEP(SCHEME_CAR(obj)); + + obj = SCHEME_CDR(obj); + if (!SCHEME_PAIRP(obj)) return NULL; + + sb->var = SCHEME_CAR(obj); + sb->val = SCHEME_CDR(obj); + + return (Scheme_Object *)sb; +} + +static Scheme_Object *write_set_bang(Scheme_Object *obj) +{ + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)obj; + return scheme_make_pair((sb->set_undef ? scheme_true : scheme_false), + scheme_make_pair(sb->var, + scheme_protect_quote(sb->val))); +} + +Scheme_Object *write_varref(Scheme_Object *o) +{ + return scheme_make_pair(SCHEME_PTR1_VAL(o), SCHEME_PTR2_VAL(o)); +} + +Scheme_Object *read_varref(Scheme_Object *o) +{ + Scheme_Object *data; + + if (!SCHEME_PAIRP(o)) return NULL; + + data = scheme_alloc_object(); + data->type = scheme_varref_form_type; + SCHEME_PTR1_VAL(data) = SCHEME_CAR(o); + SCHEME_PTR2_VAL(data) = SCHEME_CDR(o); + + return data; +} + +Scheme_Object *write_apply_values(Scheme_Object *o) +{ + return scheme_make_pair(scheme_protect_quote(SCHEME_PTR1_VAL(o)), + scheme_protect_quote(SCHEME_PTR2_VAL(o))); +} + +Scheme_Object *read_apply_values(Scheme_Object *o) +{ + Scheme_Object *data; + + if (!SCHEME_PAIRP(o)) return NULL; + + data = scheme_alloc_object(); + data->type = scheme_apply_values_type; + SCHEME_PTR1_VAL(data) = SCHEME_CAR(o); + SCHEME_PTR2_VAL(data) = SCHEME_CDR(o); + + return data; +} + +Scheme_Object *write_boxenv(Scheme_Object *o) +{ + return scheme_make_pair(SCHEME_PTR1_VAL(o), SCHEME_PTR2_VAL(o)); +} + +Scheme_Object *read_boxenv(Scheme_Object *o) +{ + Scheme_Object *data; + + if (!SCHEME_PAIRP(o)) return NULL; + + data = scheme_alloc_object(); + data->type = scheme_boxenv_type; + SCHEME_PTR1_VAL(data) = SCHEME_CAR(o); + SCHEME_PTR2_VAL(data) = SCHEME_CDR(o); + + return data; +} + /**********************************************************************/ /* expansion observer */ /**********************************************************************/ diff --git a/src/racket/src/type.c b/src/racket/src/type.c index dcda990736..8c4f8c83ec 100644 --- a/src/racket/src/type.c +++ b/src/racket/src/type.c @@ -107,15 +107,24 @@ scheme_init_type () set_name(scheme_application3_type, ""); set_name(scheme_compiled_unclosed_procedure_type, ""); set_name(scheme_unclosed_procedure_type, ""); - set_name(scheme_syntax_type, ""); - set_name(scheme_compiled_syntax_type, ""); set_name(scheme_branch_type, ""); set_name(scheme_sequence_type, ""); - set_name(scheme_case_lambda_sequence_type, ""); - set_name(scheme_begin0_sequence_type, ""); set_name(scheme_with_cont_mark_type, ""); set_name(scheme_quote_syntax_type, ""); + set_name(scheme_define_values_type, ""); + set_name(scheme_define_syntaxes_type, ""); + set_name(scheme_define_for_syntax_type, ""); + set_name(scheme_begin0_sequence_type, ""); + set_name(scheme_splice_sequence_type, ""); + set_name(scheme_module_type, ""); + set_name(scheme_set_bang_type, ""); + set_name(scheme_boxenv_type, ""); + set_name(scheme_require_form_type, ""); + set_name(scheme_varref_form_type, ""); + set_name(scheme_apply_values_type, ""); + set_name(scheme_case_lambda_sequence_type, ""); + set_name(scheme_let_value_type, ""); set_name(scheme_let_void_type, ""); set_name(scheme_compiled_let_value_type, ""); @@ -214,7 +223,6 @@ scheme_init_type () set_name(scheme_set_macro_type, ""); set_name(scheme_id_macro_type, ""); - set_name(scheme_module_type, ""); set_name(scheme_module_index_type, ""); set_name(scheme_subprocess_type, ""); @@ -502,7 +510,6 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_variable_type, variable_obj); GC_REG_TRAV(scheme_local_type, local_obj); GC_REG_TRAV(scheme_local_unbox_type, local_obj); - GC_REG_TRAV(scheme_syntax_type, iptr_obj); GC_REG_TRAV(scheme_application_type, app_rec); GC_REG_TRAV(scheme_application2_type, app2_rec); GC_REG_TRAV(scheme_application3_type, app3_rec); @@ -517,12 +524,24 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_quote_syntax_type, quotesyntax_obj); GC_REG_TRAV(scheme_module_variable_type, module_var); + GC_REG_TRAV(scheme_define_values_type, vector_obj); + GC_REG_TRAV(scheme_define_syntaxes_type, vector_obj); + GC_REG_TRAV(scheme_define_for_syntax_type, vector_obj); + GC_REG_TRAV(scheme_varref_form_type, twoptr_obj); + GC_REG_TRAV(scheme_apply_values_type, twoptr_obj); + GC_REG_TRAV(scheme_boxenv_type, twoptr_obj); + GC_REG_TRAV(scheme_case_lambda_sequence_type, case_closure); + GC_REG_TRAV(scheme_begin0_sequence_type, seq_rec); + GC_REG_TRAV(scheme_splice_sequence_type, seq_rec); + GC_REG_TRAV(scheme_set_bang_type, set_bang); + GC_REG_TRAV(scheme_module_type, module_val); + GC_REG_TRAV(scheme_require_form_type, twoptr_obj); + GC_REG_TRAV(_scheme_values_types_, bad_trav); GC_REG_TRAV(scheme_compiled_unclosed_procedure_type, unclosed_proc); GC_REG_TRAV(scheme_compiled_let_value_type, comp_let_value); GC_REG_TRAV(scheme_compiled_let_void_type, let_header); - GC_REG_TRAV(scheme_compiled_syntax_type, iptr_obj); GC_REG_TRAV(scheme_compiled_toplevel_type, toplevel_obj); GC_REG_TRAV(scheme_compiled_quote_syntax_type, local_obj); @@ -603,8 +622,6 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_undefined_type, char_obj); /* small */ GC_REG_TRAV(scheme_placeholder_type, small_object); GC_REG_TRAV(scheme_table_placeholder_type, iptr_obj); - GC_REG_TRAV(scheme_case_lambda_sequence_type, case_closure); - GC_REG_TRAV(scheme_begin0_sequence_type, seq_rec); GC_REG_TRAV(scheme_svector_type, svector_val); @@ -614,7 +631,6 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_stx_type, stx_val); GC_REG_TRAV(scheme_stx_offset_type, stx_off_val); GC_REG_TRAV(scheme_expanded_syntax_type, twoptr_obj); - GC_REG_TRAV(scheme_module_type, module_val); GC_REG_TRAV(scheme_rt_module_exports, module_exports_val); GC_REG_TRAV(scheme_module_phase_exports_type, module_phase_exports_val); GC_REG_TRAV(scheme_module_index_type, modidx_val);