switch printer to constructor+quote style

This commit is contained in:
Matthew Flatt 2010-05-06 10:33:42 -06:00
parent 6027eb9627
commit 43027a8d9b
23 changed files with 998 additions and 612 deletions

View File

@ -97,7 +97,7 @@
(let ([n (make-base-empty-namespace)] (let ([n (make-base-empty-namespace)]
[argv (if args (list->vector args) (vector))]) [argv (if args (list->vector args) (vector))])
(parameterize ([current-command-line-arguments argv] (parameterize ([current-command-line-arguments argv]
[print-as-quasiquote #f]) [print-as-expression #f])
(thread-wait (thread-wait
(thread (thread
(lambda () (lambda ()

View File

@ -221,7 +221,7 @@
(pretty-print-print-line)) (pretty-print-print-line))
(print-graph) (print-struct) (print-hash-table) (print-graph) (print-struct) (print-hash-table)
(and (not display?) (print-vector-length)) (print-box) (and (not display?) (print-vector-length)) (print-box)
(and (not display?) as-qq? (print-as-quasiquote)) (and (not display?) as-qq? (print-as-expression))
(pretty-print-depth) (pretty-print-depth)
(lambda (o display?) (lambda (o display?)
(size-hook o display? port))) (size-hook o display? port)))
@ -488,14 +488,8 @@
(ormap loop (ormap loop
(vector->list (struct->vector obj)))] (vector->list (struct->vector obj)))]
[(hash? obj) [(hash? obj)
(let/ec esc (for/or ([(k v) (in-hash obj)])
(hash-for-each (or (loop v) (loop k)))])])
obj
(lambda (v k)
(when (or (loop v)
(loop k))
(esc #t))))
#f)])])
(hash-remove! table obj) (hash-remove! table obj)
cycle))))))) cycle)))))))
@ -548,6 +542,67 @@
(make-mark #f (box #f))))))) (make-mark #f (box #f)))))))
(void))))) (void)))))
(define (custom-print? obj)
(and (custom-print-as-constructor? obj)
(custom-print-as-constructor-accessor obj)))
(define escapes-table
(let* ([table (make-hasheq)]
[local-cycle (and found-cycle (make-hasheq))]
[escapes! (lambda (obj)
(hash-set! table obj #t)
#t)]
[orf (lambda (a b) (or a b))])
(and print-as-qq?
(let loop ([obj obj])
(if (and local-cycle (hash-ref local-cycle obj #f))
#f
(begin
(when local-cycle
(hash-set! local-cycle obj #t))
(begin0
(cond
[ #f]
[(vector? obj)
(let ([len (vector-length obj)])
(let vloop ([esc? #f][i 0])
(if (= i len)
(and esc?
(escapes! obj))
(vloop (or (loop (vector-ref obj i)) esc?)
(add1 i)))))]
[(pair? obj)
(and (orf (loop (car obj))
(loop (cdr obj)))
(escapes! obj))]
[(mpair? obj)
(loop (mcar obj))
(loop (mcdr obj))
;; always unquoted:
#t]
[(and (box? obj) print-box?)
(and (loop (unbox obj))
(escapes! obj))]
[(and (custom-write? obj)
(not (struct-type? obj)))
(and (or (loop (extract-sub-objects obj pport))
(custom-print? obj))
(escapes! obj))]
[(struct? obj)
(and (or (loop (struct->vector obj))
(not (prefab-struct-key obj)))
(escapes! obj))]
[(hash? obj)
(and (for/fold ([esc? #f]) ([(k v) (in-hash obj)])
(or (orf (loop v)
(loop k))
esc?))
(escapes! obj))]
[else #f])
(when local-cycle
(hash-remove! local-cycle obj)))))))
table))
(define cycle-counter 0) (define cycle-counter 0)
(define found (if found-cycle (define found (if found-cycle
@ -615,7 +670,43 @@
(register-printing-port-like p pport) (register-printing-port-like p pport)
(parameterize ([pretty-printing #t] (parameterize ([pretty-printing #t]
[pretty-print-columns (or width 'infinity)]) [pretty-print-columns (or width 'infinity)])
((custom-write-accessor obj) obj p (not display?)))))) ((custom-write-accessor obj) obj p (or qd (not display?)))))))
;; ------------------------------------------------------------
(define (convert-pair obj)
(cond
[(list? obj) (cons (make-unquoted 'list)
;; reconstruct first pair in case it
;; starts a cycle:
(cons (car obj) (cdr obj)))]
[(and (pair? (cdr obj))
(not (and found
(hash-ref found (cdr obj) #f))))
(cons (make-unquoted 'list*)
(cons
(car obj)
(let loop ([obj (cdr obj)])
(cond
[(and found (hash-ref found obj #f)) (list obj)]
[(pair? obj) (cons (car obj) (loop (cdr obj)))]
[else (list obj)]))))]
[else (list (make-unquoted 'cons) (car obj) (cdr obj))]))
(define (convert-hash obj expr?)
(let ([l (hash-map obj (lambda (k v)
(if expr?
(list k v)
(cons k (make-hide v)))))])
(if expr?
(cons (make-unquoted
(if (hash-eq? obj)
'hasheq
(if (hash-eqv? obj)
'hasheqv
'hash)))
(apply append l))
l)))
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
;; wr: write on a single line ;; wr: write on a single line
@ -637,47 +728,43 @@
(define (wr-lst l check? depth pair? car cdr open close qd) (define (wr-lst l check? depth pair? car cdr open close qd)
(if (pair? l) (if (pair? l)
(check-expr-found (if (and depth (zero? depth))
l pport check? (begin
#f #f (out open)
(lambda () (out "...")
(if (and depth (zero? depth)) (out close))
(begin (begin
(out open) (out open)
(out "...") (wr (car l) (dsub1 depth) qd)
(out close)) (let loop ([l (cdr l)])
(begin (check-expr-found
(out open) l pport (and check? (pair? l))
(wr (car l) (dsub1 depth) qd) (lambda (s) (out " . ") (out s) (out close))
(let loop ([l (cdr l)]) (lambda ()
(check-expr-found (out " . ")
l pport (and check? (pair? l)) (wr-lst l check? (dsub1 depth) pair? car cdr open close qd)
(lambda (s) (out " . ") (out s) (out close)) (out close))
(lambda () (lambda ()
(out " . ") (cond
(wr-lst l check? (dsub1 depth) pair? car cdr open close qd) [(pair? l)
(out close)) (if (and (eq? (do-remap (car l)) 'unquote)
(lambda () (not (equal? qd 1))
(cond (pair? (cdr l))
[(pair? l) (null? (cdr (cdr l))))
(if (and (eq? (do-remap (car l)) 'unquote) (begin
(not (equal? qd 1)) (out " . ,")
(pair? (cdr l)) (wr (car (cdr l)) (dsub1 depth)
(null? (cdr (cdr l)))) (reader-adjust-qd (car l) qd))
(begin (out close))
(out " . ,") (begin
(wr (car (cdr l)) (dsub1 depth) (out " ")
(reader-adjust-qd (car l) qd)) (wr (car l) (dsub1 depth) qd)
(out close)) (loop (cdr l))))]
(begin [(null? l) (out close)]
(out " ") [else
(wr (car l) (dsub1 depth) qd) (out " . ")
(loop (cdr l))))] (wr l (dsub1 depth) qd)
[(null? l) (out close)] (out close)]))))))
[else
(out " . ")
(wr l (dsub1 depth) qd)
(out close)]))))))))
(begin (begin
(out open) (out open)
(out close)))) (out close))))
@ -695,33 +782,55 @@
(output-hooked pport obj len display?))] (output-hooked pport obj len display?))]
[(pair? obj) [(pair? obj)
(let ([qd (to-quoted out qd "`")]) (check-expr-found
(wr-expr obj depth pair? car cdr pair-open pair-close qd))] obj pport #t
#f #f
(lambda ()
(let* ([qd (to-quoted out qd obj)]
[pair (if (and qd (zero? qd))
(convert-pair obj)
obj)])
(wr-expr pair depth pair? car cdr pair-open pair-close qd))))]
[(mpair? obj) [(mpair? obj)
(let ([qd (to-quoted out qd "`")]) (check-expr-found
(wr-expr obj depth mpair? mcar mcdr mpair-open mpair-close qd))] obj pport #t
#f #f
(lambda ()
(if (and qd (zero? qd))
(wr-expr (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
depth pair? car cdr pair-open pair-close qd)
(wr-expr obj depth mpair? mcar mcdr mpair-open mpair-close qd))))]
[(null? obj) [(null? obj)
(let ([qd (to-quoted out qd "'")]) (let ([qd (to-quoted out qd obj)])
(wr-lst obj #f depth pair? car cdr "(" ")" qd))] (wr-lst obj #f depth pair? car cdr "(" ")" qd))]
[(vector? obj) [(vector? obj)
(check-expr-found (check-expr-found
obj pport #t obj pport #t
#f #f #f #f
(lambda () (lambda ()
(let ([qd (to-quoted out qd "`")]) (let ([qd (to-quoted out qd obj)]
(out "#") [vecl (vector->repeatless-list obj)])
(when print-vec-length? (if (and qd (zero? qd))
(out (number->string (vector-length obj)))) (wr-lst (cons (make-unquoted 'vector) vecl)
(wr-lst (vector->repeatless-list obj) #f depth pair? car cdr "(" ")" qd))))] #f depth pair? car cdr "(" ")" qd)
(begin
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(wr-lst vecl #f depth pair? car cdr "(" ")" qd))))))]
[(and (box? obj) [(and (box? obj)
print-box?) print-box?)
(check-expr-found (check-expr-found
obj pport #t obj pport #t
#f #f #f #f
(lambda () (lambda ()
(let ([qd (to-quoted out qd "`")]) (let ([qd (to-quoted out qd obj)])
(out "#&") (if (and qd (zero? qd))
(wr (unbox obj) (dsub1 depth) qd))))] (wr-lst (list (make-unquoted 'box) (unbox obj))
#f depth pair? car cdr "(" ")" qd)
(begin
(out "#&")
(wr (unbox obj) (dsub1 depth) qd))))))]
[(and (custom-write? obj) [(and (custom-write? obj)
(not (struct-type? obj))) (not (struct-type? obj)))
(check-expr-found (check-expr-found
@ -729,7 +838,10 @@
#f #f #f #f
(lambda () (lambda ()
(parameterize ([pretty-print-columns 'infinity]) (parameterize ([pretty-print-columns 'infinity])
(write-custom wr* obj pport depth display? width qd))))] (let ([qd (if (custom-print? obj)
qd
(to-quoted out qd obj))])
(write-custom wr* obj pport depth display? width qd)))))]
[(struct? obj) [(struct? obj)
(if (and print-struct? (if (and print-struct?
(not (and depth (not (and depth
@ -741,13 +853,13 @@
(let* ([v (struct->vector obj struct-ellipses)] (let* ([v (struct->vector obj struct-ellipses)]
[pf? (prefab?! obj v)]) [pf? (prefab?! obj v)])
(let ([qd (if pf? (let ([qd (if pf?
(to-quoted out qd "`") (to-quoted out qd obj)
(to-unquoted out qd))]) qd)])
(when (or (not qd) pf?) (when (or (not qd) (positive? qd))
(out "#") (out "#")
(when pf? (out "s"))) (when pf? (out "s")))
(wr-lst (let ([l (vector->list v)]) (wr-lst (let ([l (vector->list v)])
(if (and qd (not pf?)) (if (and qd (zero? qd))
(cons (make-unquoted (object-name obj)) (cons (make-unquoted (object-name obj))
(cdr l)) (cdr l))
l)) l))
@ -763,14 +875,15 @@
obj pport #t obj pport #t
#f #f #f #f
(lambda () (lambda ()
(let ([qd (to-quoted out qd "`")]) (let* ([qd (to-quoted out qd obj)]
(out (if (hash-eq? obj) [expr? (and qd (zero? qd))])
"#hasheq" (unless expr?
(if (hash-eqv? obj) (out (if (hash-eq? obj)
"#hasheqv" "#hasheq"
"#hash"))) (if (hash-eqv? obj)
(wr-lst (hash-map obj (lambda (k v) "#hasheqv"
(cons k (make-hide v)))) "#hash"))))
(wr-lst (convert-hash obj expr?)
#f depth #f depth
pair? car cdr "(" ")" qd)))) pair? car cdr "(" ")" qd))))
(parameterize ([print-hash-table #f]) (parameterize ([print-hash-table #f])
@ -790,19 +903,13 @@
[(and (pretty-print-.-symbol-without-bars) [(and (pretty-print-.-symbol-without-bars)
(eq? obj '|.|)) (eq? obj '|.|))
(out ".")] (out ".")]
[(and (equal? qd 1)
(or (eq? 'unquote obj)
(eq? 'unquote-splicing obj)))
(out ",'")
(orig-write obj pport)]
[(and qd (or (symbol? obj) [(and qd (or (symbol? obj)
(keyword? obj))) (keyword? obj)))
(unless (eq? obj struct-ellipses) (unless (eq? obj struct-ellipses)
(to-quoted out qd "'")) (to-quoted out qd obj))
(orig-write obj pport)] (orig-write obj pport)]
[(unquoted? obj) [(unquoted? obj)
(let ([qd (to-unquoted out qd)]) (orig-write (unquoted-val obj) pport)]
(orig-write (unquoted-val obj) pport))]
[else [else
((if display? orig-display orig-write) obj pport)])) ((if display? orig-display orig-write) obj pport)]))
(unless (hide? obj) (unless (hide? obj)
@ -878,38 +985,54 @@
(pre-print pport obj) (pre-print pport obj)
(cond (cond
[(pair? obj) [(pair? obj)
(let ([qd (to-quoted out qd "`")]) (let* ([qd (to-quoted out qd obj)]
(pp-pair obj extra depth [pair (if (and qd (zero? qd))
(convert-pair obj)
obj)])
(pp-pair pair extra depth
pair? car cdr pair-open pair-close pair? car cdr pair-open pair-close
qd))] qd))]
[(mpair? obj) [(mpair? obj)
(let ([qd (to-quoted out qd "`")]) (if (and qd (zero? qd))
(pp-pair obj extra depth (pp-pair (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
mpair? mcar mcdr mpair-open mpair-close extra depth
qd))] pair? car cdr pair-open pair-close
qd)
(pp-pair obj extra depth
mpair? mcar mcdr mpair-open mpair-close
qd))]
[(vector? obj) [(vector? obj)
(let ([qd (to-quoted out qd "`")]) (let ([qd (to-quoted out qd obj)]
(out "#") [vecl (vector->repeatless-list obj)])
(when print-vec-length? (if (and qd (zero? qd))
(out (number->string (vector-length obj)))) (pp-pair (cons (make-unquoted 'vector) vecl)
(pp-list (vector->repeatless-list obj) extra pp-expr #f depth extra depth
pair? car cdr pair-open pair-close pair? car cdr pair-open pair-close
qd))] qd)
(begin
(out "#")
(when print-vec-length?
(out (number->string (vector-length obj))))
(pp-list vecl extra pp-expr #f depth
pair? car cdr pair-open pair-close
qd))))]
[(and (custom-write? obj) [(and (custom-write? obj)
(not (struct-type? obj))) (not (struct-type? obj)))
(let ([qd (to-unquoted out qd)]) (let ([qd (if (custom-print? obj)
qd
(to-quoted out qd obj))])
(write-custom pp* obj pport depth display? width qd))] (write-custom pp* obj pport depth display? width qd))]
[(struct? obj) ; print-struct is on if we got here [(struct? obj) ; print-struct is on if we got here
(let* ([v (struct->vector obj struct-ellipses)] (let* ([v (struct->vector obj struct-ellipses)]
[pf? (prefab?! obj v)]) [pf? (prefab?! obj v)])
(let ([qd (if pf? (let ([qd (if pf?
(to-quoted out qd "`") (to-quoted out qd obj)
(to-unquoted out qd))]) qd)])
(when (or (not qd) pf?) (when (or (not qd) (positive? qd))
(out "#") (out "#")
(when pf? (out "s"))) (when pf? (out "s")))
(pp-list (let ([l (vector->list v)]) (pp-list (let ([l (vector->list v)])
(if (and qd (not pf?)) (if (and qd (zero? qd))
(cons (make-unquoted (object-name obj)) (cons (make-unquoted (object-name obj))
(cdr l)) (cdr l))
l)) l))
@ -917,19 +1040,27 @@
pair? car cdr pair-open pair-close pair? car cdr pair-open pair-close
qd)))] qd)))]
[(hash? obj) [(hash? obj)
(let ([qd (to-quoted out qd "`")]) (let* ([qd (to-quoted out qd obj)]
(out (if (hash-eq? obj) [expr? (and qd (zero? qd))])
"#hasheq" (unless expr?
(if (hash-eqv? obj) (out (if (hash-eq? obj)
"#hasheqv" "#hasheq"
"#hash"))) (if (hash-eqv? obj)
(pp-list (hash-map obj cons) extra pp-expr #f depth "#hasheqv"
"#hash"))))
(pp-list (convert-hash obj expr?) extra pp-expr #f depth
pair? car cdr pair-open pair-close pair? car cdr pair-open pair-close
qd))] qd))]
[(and (box? obj) print-box?) [(and (box? obj) print-box?)
(let ([qd (to-quoted out qd "`")]) (let ([qd (to-quoted out qd obj)])
(out "#&") (if (and qd (zero? qd))
(pr (unbox obj) extra pp-pair depth qd))]) (pp-pair (list (make-unquoted 'box) (unbox obj))
extra depth
pair? car cdr pair-open pair-close
qd)
(begin
(out "#&")
(pr (unbox obj) extra pp-pair depth qd))))])
(post-print pport obj))))) (post-print pport obj)))))
;; Not possible to split obj across lines; so just write directly ;; Not possible to split obj across lines; so just write directly
(wr* pport obj depth display? qd)))) (wr* pport obj depth display? qd))))
@ -953,7 +1084,10 @@
((pretty-print-remap-stylable) head)) ((pretty-print-remap-stylable) head))
(let ((proc (style head expr apair? acar acdr))) (let ((proc (style head expr apair? acar acdr)))
(if proc (if proc
(let ([qd (to-quoted out qd "`")]) (let* ([qd (to-quoted out qd expr)]
[pair (if (and qd (zero? qd))
(cons (make-unquoted 'list) obj)
obj)])
(proc expr extra depth (proc expr extra depth
apair? acar acdr open close apair? acar acdr open close
qd)) qd))
@ -1264,22 +1398,16 @@
(pr obj 0 pp-expr depth qd)) (pr obj 0 pp-expr depth qd))
(define (to-quoted out qd str) (define (to-quoted out qd obj)
(and qd (and qd
(if (zero? qd) (if (zero? qd)
(begin (if (hash-ref escapes-table obj #f)
(out str) qd
(add1 qd)) (begin
(out "'")
(add1 qd)))
qd))) qd)))
(define (to-unquoted out qd)
(and qd
(if (zero? qd)
qd
(begin
(out ",")
(to-unquoted out (sub1 qd))))))
;; ------------------------------------------------------------ ;; ------------------------------------------------------------
;; This is where generic-write's body expressions start ;; This is where generic-write's body expressions start

View File

@ -4,4 +4,4 @@
(define-values (configure) (define-values (configure)
(lambda (config) (lambda (config)
(print-as-quasiquote #t)))) (print-as-expression #t))))

View File

@ -645,14 +645,14 @@
(let ([sp (open-output-string)]) (let ([sp (open-output-string)])
(parameterize ([current-output-port sp] (parameterize ([current-output-port sp]
[current-traced-metafunctions 'all] [current-traced-metafunctions 'all]
[print-as-quasiquote #f]) [print-as-expression #f])
(term (f 1))) (term (f 1)))
(test (get-output-string sp) ">(f 1)\n<0\n")) (test (get-output-string sp) ">(f 1)\n<0\n"))
(let ([sp (open-output-string)]) (let ([sp (open-output-string)])
(parameterize ([current-output-port sp] (parameterize ([current-output-port sp]
[current-traced-metafunctions '(f)] [current-traced-metafunctions '(f)]
[print-as-quasiquote #f]) [print-as-expression #f])
(term (f 1))) (term (f 1)))
(test (get-output-string sp) ">(f 1)\n<0\n"))) (test (get-output-string sp) ">(f 1)\n<0\n")))

View File

@ -4,4 +4,4 @@
(define-values (configure) (define-values (configure)
(lambda (config) (lambda (config)
(print-as-quasiquote #f)))) (print-as-expression #f))))

View File

@ -124,7 +124,7 @@
(list (list
(hspace 2) (hspace 2)
(elem #:style result-color (elem #:style result-color
(to-element/no-color v #:qq? (print-as-quasiquote))))))))) (to-element/no-color v #:qq? (print-as-expression)))))))))
val-list)))) val-list))))
(loop (cdr expr-paras) (loop (cdr expr-paras)
(cdr val-list+outputs) (cdr val-list+outputs)
@ -320,7 +320,7 @@
(define (show-val v) (define (show-val v)
(elem #:style result-color (elem #:style result-color
(to-element/no-color v #:qq? (print-as-quasiquote)))) (to-element/no-color v #:qq? (print-as-expression))))
(define (do-interaction-eval-show ev e) (define (do-interaction-eval-show ev e)
(parameterize ([current-command-line-arguments #()]) (parameterize ([current-command-line-arguments #()])

View File

@ -11,7 +11,7 @@ using @scheme[read] on the output produces a value that is
printing of strings, byte strings, characters, and symbols changes to printing of strings, byte strings, characters, and symbols changes to
render the character/byte content directly to the output port. The render the character/byte content directly to the output port. The
printer's @scheme[print] mode is similar to @scheme[write], but it is printer's @scheme[print] mode is similar to @scheme[write], but it is
sensitive to the @scheme[print-as-quasiquote] parameter for printing sensitive to the @scheme[print-as-expression] parameter for printing
values in a way that @scheme[read] plus @scheme[eval] on the output values in a way that @scheme[read] plus @scheme[eval] on the output
can be @scheme[equal?] to the printed value. can be @scheme[equal?] to the printed value.
@ -68,7 +68,7 @@ characters. That is, the display form of a symbol is the same as the
display form of @scheme[symbol->string] applied to the symbol. display form of @scheme[symbol->string] applied to the symbol.
Symbols @scheme[print] the same as they @scheme[write], unless Symbols @scheme[print] the same as they @scheme[write], unless
@scheme[print-as-quasiquote] is set to @scheme[#t] and the current @scheme[print-as-expression] is set to @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0]. In that case, the symbol's @scheme[quasiquote] depth is @scheme[0]. In that case, the symbol's
@scheme[print]ed form is prefixed with @litchar{'}. If the current @scheme[print]ed form is prefixed with @litchar{'}. If the current
@scheme[quasiquote] depth is @scheme[1], and if the symbol is @scheme[quasiquote] depth is @scheme[1], and if the symbol is
@ -146,9 +146,9 @@ including the tail as two elements of the enclosing list.
The printed form of a pair is the same in both @scheme[write] and The printed form of a pair is the same in both @scheme[write] and
@scheme[display] modes, except as the printed form of the pair's @scheme[display] modes, except as the printed form of the pair's
@scheme[car] and @scheme[cdr] vary with the mode. The @scheme[print] @scheme[car] and @scheme[cdr] vary with the mode. The @scheme[print]
form is also the same is @scheme[print-as-quasiquote] is @scheme[#f]. form is also the same is @scheme[print-as-expression] is @scheme[#f].
When @scheme[print-as-quasiquote] is @scheme[#t] and the current When @scheme[print-as-expression] is @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0], then the empty list prints as @scheme[quasiquote] depth is @scheme[0], then the empty list prints as
@litchar{'()} and a pair's output is prefixed with @litchar{`}; the @litchar{'()} and a pair's output is prefixed with @litchar{`}; the
pair's content is printed at @scheme[quasiquote] depth is pair's content is printed at @scheme[quasiquote] depth is
@ -211,7 +211,7 @@ decimal integer is printed after the @litchar{#}, and a repeated last
element is printed only once. element is printed only once.
Vectors @scheme[print] the same as they @scheme[write], unless Vectors @scheme[print] the same as they @scheme[write], unless
@scheme[print-as-quasiquote] is set to @scheme[#t] and the current @scheme[print-as-expression] is set to @scheme[#t] and the current
@scheme[quasiquote] depth is @scheme[0]. In that case, the vector's @scheme[quasiquote] depth is @scheme[0]. In that case, the vector's
@scheme[print]ed form is prefixed with @litchar{`}, and its content is @scheme[print]ed form is prefixed with @litchar{`}, and its content is
printed with @scheme[quasiquote] depth @scheme[1]. printed with @scheme[quasiquote] depth @scheme[1].
@ -230,7 +230,7 @@ for which the structure is an instance:
structure type key, then the printed form each field in the structure type key, then the printed form each field in the
structure, and then @litchar{)}. structure, and then @litchar{)}.
In @scheme[print] mode when @scheme[print-as-quasiquote] is set In @scheme[print] mode when @scheme[print-as-expression] is set
to @scheme[#t] and the current @scheme[quasiquote] depth is to @scheme[#t] and the current @scheme[quasiquote] depth is
@scheme[0], the structure's @scheme[print]ed form is prefixed @scheme[0], the structure's @scheme[print]ed form is prefixed
with @litchar{`} and its content is printed with with @litchar{`} and its content is printed with
@ -245,9 +245,9 @@ for which the structure is an instance:
transparent, then the structure prints as the vector produced transparent, then the structure prints as the vector produced
by @scheme[struct->vector] in @scheme[display] mode, in by @scheme[struct->vector] in @scheme[display] mode, in
@scheme[write] mode, or in @scheme[print] mode when @scheme[write] mode, or in @scheme[print] mode when
@scheme[print-as-quasiquote] is set to @scheme[#f]. @scheme[print-as-expression] is set to @scheme[#f].
In @scheme[print] mode with @scheme[print-as-quasiquote] as In @scheme[print] mode with @scheme[print-as-expression] as
@scheme[#t], then the printed form is prefixed with as many @scheme[#t], then the printed form is prefixed with as many
@litchar{,}s as the current @scheme[quasiquote] depth. Instead @litchar{,}s as the current @scheme[quasiquote] depth. Instead
of printing as a vector, the structure content is printed as a of printing as a vector, the structure content is printed as a
@ -278,7 +278,7 @@ additional space if the key--value pair is not the last to be printed.
After all key-value pairs, the printed form completes with After all key-value pairs, the printed form completes with
@litchar{)}. @litchar{)}.
In @scheme[print] mode when @scheme[print-as-quasiquote] is In @scheme[print] mode when @scheme[print-as-expression] is
@scheme[#t] and the current quasiquote depth is @scheme[0], then the @scheme[#t] and the current quasiquote depth is @scheme[0], then the
printed form is prefixed with @litchar{`} and the hash table's content printed form is prefixed with @litchar{`} and the hash table's content
is printed at @scheme[quasiquote] depth @scheme[1]. In the printed is printed at @scheme[quasiquote] depth @scheme[1]. In the printed
@ -293,7 +293,7 @@ hash table prints (un@scheme[read]ably) as @litchar{#<hash>}.
When the @scheme[print-box] parameter is set to @scheme[#t], When the @scheme[print-box] parameter is set to @scheme[#t],
a box prints as @litchar{#&} followed by the printed form of its content. a box prints as @litchar{#&} followed by the printed form of its content.
In @scheme[print] mode when @scheme[print-as-quasiquote] is In @scheme[print] mode when @scheme[print-as-expression] is
@scheme[#t] and the current quasiquote depth is @scheme[0], then the @scheme[#t] and the current quasiquote depth is @scheme[0], then the
printed form is prefixed with @litchar{`} and the box's content printed form is prefixed with @litchar{`} and the box's content
is printed at @scheme[quasiquote] depth @scheme[1]. is printed at @scheme[quasiquote] depth @scheme[1].

View File

@ -44,7 +44,7 @@ proportional to the depth of the value being printed, due to the
initial cycle check.} initial cycle check.}
@defproc[(print [datum any/c][out output-port? (current-output-port)] @defproc[(print [datum any/c][out output-port? (current-output-port)]
[qq-depth exact-nonnegative-integer? 0]) [quote-depth (or/c 0 1) 0])
void?]{ void?]{
Writes @racket[datum] to @racket[out], normally the same way as Writes @racket[datum] to @racket[out], normally the same way as
@ -53,10 +53,10 @@ Writes @racket[datum] to @racket[out], normally the same way as
the handler specified by @racket[global-port-print-handler] is called; the handler specified by @racket[global-port-print-handler] is called;
the default handler uses the default printer in @racket[write] mode. the default handler uses the default printer in @racket[write] mode.
The optional @racket[qq-depth] argument adjust printing when the The optional @racket[quote-depth] argument adjusts printing when the
@racket[print-as-quasiquote] parameter is set to @racket[#t]. In that @racket[print-as-expression] parameter is set to @racket[#t]. In that
case, @racket[qq-depth] specifies the starting @racket[quasiquote] case, @racket[quote-depth] specifies the starting quote depth for
depth for printing @racket[datum]. printing @racket[datum].
The rationale for providing @racket[print] is that @racket[display] The rationale for providing @racket[print] is that @racket[display]
and @racket[write] both have specific output conventions, and those and @racket[write] both have specific output conventions, and those
@ -209,7 +209,7 @@ with @racket[quote], @racket['quasiquote], @racket['unquote],
@racket['unsyntax], or @racket['unsyntax-splicing]; defaults to @racket['unsyntax], or @racket['unsyntax-splicing]; defaults to
@racket[#f]. See @secref["print-pairs"] for more information.} @racket[#f]. See @secref["print-pairs"] for more information.}
@defboolparam[print-as-quasiquote on?]{ @defboolparam[print-as-expression on?]{
A parameter that controls printing in @racket[print] mode (as opposed A parameter that controls printing in @racket[print] mode (as opposed
to @racket[write] or @racket[display]); defaults to @racket[#f]. See to @racket[write] or @racket[display]); defaults to @racket[#f]. See
@ -253,7 +253,7 @@ it is not @racket[#f], otherwise the path is left relative).}
[proc (any/c output-port? . -> . any)]) [proc (any/c output-port? . -> . any)])
void?])]{} void?])]{}
@defproc*[([(port-print-handler [out output-port?]) ((any/c output-port?) (exact-nonnegative-integer?) . ->* . any)] @defproc*[([(port-print-handler [out output-port?]) ((any/c output-port?) ((or/c 0 1)) . ->* . any)]
[(port-print-handler [out output-port?] [(port-print-handler [out output-port?]
[proc (any/c output-port? . -> . any)]) [proc (any/c output-port? . -> . any)])
void?])]{ void?])]{
@ -277,7 +277,7 @@ default print handler calls the global port print handler (the value
of the @racket[global-port-print-handler] parameter); the default of the @racket[global-port-print-handler] parameter); the default
global port print handler is the same as the default write handler.} global port print handler is the same as the default write handler.}
@defproc*[([(global-port-print-handler) ((any/c output-port?) (exact-nonnegative-integer?) . ->* . any)] @defproc*[([(global-port-print-handler) ((any/c output-port?) ((or/c 0 1)) . ->* . any)]
[(global-port-print-handler [proc (any/c output-port? . -> . any)]) void?])]{ [(global-port-print-handler [proc (any/c output-port? . -> . any)]) void?])]{
A parameter that determines @deftech{global port print handler}, A parameter that determines @deftech{global port print handler},

View File

@ -5,6 +5,7 @@
(load-relative "unicode.rktl") (load-relative "unicode.rktl")
(load-relative "rx.rktl") (load-relative "rx.rktl")
(load-relative "read.rktl") (load-relative "read.rktl")
(load-relative "print.rktl")
(load-relative "macro.rktl") (load-relative "macro.rktl")
(load-relative "syntax.rktl") (load-relative "syntax.rktl")
(load-relative "procs.rktl") (load-relative "procs.rktl")

View File

@ -14,7 +14,7 @@
(require mzlib/pretty) (require mzlib/pretty)
(print-as-quasiquote #f) (print-as-expression #f)
(define (pprec-print pprec port write?) (define (pprec-print pprec port write?)
(define (print-one n port) (define (print-one n port)
@ -325,6 +325,6 @@
(test #t 'use-regression? use-regression?) (test #t 'use-regression? use-regression?)
(print-as-quasiquote #t) (print-as-expression #t)
(report-errs) (report-errs)

View File

@ -0,0 +1,162 @@
;; Test printing in as-expression mode
(load-relative "loadtest.rktl")
(Section 'printing)
(let ([ptest (lambda (s v)
(define (to-string v)
(format "~v" v))
(define (to-pretty-string v)
(pretty-format v))
(test (regexp-replace* #rx"\n *" s " ") to-string v)
(test s to-pretty-string v))])
(define-struct a (x y))
(define-struct b (x y) #:transparent)
(define-struct c (x y) #:prefab)
(define (custom-printer get-xy)
(lambda (v port mode)
(define-values (d-x d-y) (get-xy))
(define (recur v)
(case mode
[(#f) (display v port)]
[(#t) (write v port)]
[else (print v port mode)]))
(write-char #\< port)
(write mode port)
(write-char #\space port)
(recur (d-x v))
(write-char #\space port)
(recur (d-y v))
(write-char #\> port)))
(define-struct d (x y)
#:property prop:custom-write (custom-printer (lambda () (values d-x d-y))))
(define-struct e (x y)
#:property prop:custom-write (custom-printer (lambda () (values e-x e-y)))
#:property prop:custom-print-as-constructor #t)
(ptest "1" 1)
(ptest "1/2" 1/2)
(ptest "#f" #f)
(ptest "#\\x" #\x)
(ptest "'apple" 'apple)
(ptest "'|apple banana|" '|apple banana|)
(ptest "'#:apple" '#:apple)
(ptest "\"apple\"" "apple")
(ptest "#\"apple\"" #"apple")
(ptest "#rx\"apple\"" #rx"apple")
(ptest "#rx#\"apple\"" #rx#"apple")
(ptest "'()" '())
(ptest "#<procedure:add1>" add1)
(ptest "'#&1" (box 1))
(ptest "'(1 . 2)" (cons 1 2))
(ptest "'(1 2)" (list 1 2))
(ptest "'(1 2 . 3)" (list* 1 2 3))
(ptest "'#(1 2 3)" (vector 1 2 3))
(ptest "'#hash((1 . 2))" (hash 1 2))
(ptest "'#hash((1 . 2))" (make-hash (list (cons 1 2))))
(ptest "'#hasheq((1 . 2))" (hasheq 1 2))
(ptest "'#hasheq((1 . 2))" (make-hasheq (list (cons 1 2))))
(ptest "'#hasheqv((1 . 2))" (hasheqv 1 2))
(ptest "'#hasheqv((1 . 2))" (make-hasheqv (list (cons 1 2))))
(ptest "(mcons 1 2)" (mcons 1 2))
(ptest "#<a>" (a 1 2))
(ptest "(b 1 2)" (b 1 2))
(ptest "'#s(c 1 2)" (c 1 2))
(ptest "'<1 1 2>" (d 1 2))
(ptest "'<1 1 #<a>>" (d 1 (a 1 2)))
(ptest "<0 1 (b 1 2)>" (d 1 (b 1 2)))
(ptest "'#&#<a>" (box (a 1 2)))
(ptest "(box (b 1 2))" (box (b 1 2)))
(ptest "'#&#s(c 1 2)" (box (c 1 2)))
(ptest "'(#<a>)" (list (a 1 2)))
(ptest "(list (b 1 2))" (list (b 1 2)))
(ptest "'(#s(c 1 2))" (list (c 1 2)))
(ptest "'(<1 1 2>)" (list (d 1 2)))
(ptest "(list <0 1 2>)" (list (e 1 2)))
(ptest "'(0 . #<a>)" (cons 0 (a 1 2)))
(ptest "(cons 0 (b 1 2))" (cons 0 (b 1 2)))
(ptest "'(0 . #s(c 1 2))" (cons 0 (c 1 2)))
(ptest "'#(#<a>)" (vector (a 1 2)))
(ptest "(vector (b 1 2))" (vector (b 1 2)))
(ptest "'#(#s(c 1 2))" (vector (c 1 2)))
(ptest "'#hash((0 . #<a>))" (hash 0 (a 1 2)))
(ptest "(hash 0 (b 1 2))" (hash 0 (b 1 2)))
(ptest "'#hash((0 . #s(c 1 2)))" (hash 0 (c 1 2)))
(ptest "(mcons 0 #<a>)" (mcons 0 (a 1 2)))
(ptest "(mcons 0 (b 1 2))" (mcons 0 (b 1 2)))
(ptest "(mcons 0 '#s(c 1 2))" (mcons 0 (c 1 2)))
(ptest "(list '(1 2) #<a> (b 1 2))" (list '(1 2) (a 1 2) (b 1 2)))
(ptest "(list* '(1 2) #<a> (b 1 2))" (list* '(1 2) (a 1 2) (b 1 2)))
(ptest "(vector '(1 2) #<a> (b 1 2))" (vector '(1 2) (a 1 2) (b 1 2)))
(ptest "(hash '(1 2) (b 1 2))" (hash '(1 2) (b 1 2)))
(ptest "'(#<procedure:add1>)" (list add1))
(ptest "'#(#<procedure:add1>)" (vector add1))
(ptest "#0='(#0#)" (read (open-input-string "#0=(#0#)")))
(ptest "#0='(#0# #0#)" (read (open-input-string "#0=(#0# #0#)")))
(ptest "#0='(#0# . #0#)" (read (open-input-string "#0=(#0# . #0#)")))
(ptest "#0='(#0# #0# . #0#)" (read (open-input-string "#0=(#0# #0# . #0#)")))
(ptest "#0='#(#0# #0#)" (read (open-input-string "#0=#(#0# #0#)")))
(ptest "#0='#&#0#" (read (open-input-string "#0=#&#0#")))
(ptest "#0=(list (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (list (b 1 2) v))
(make-reader-graph v)))
(ptest "#0=(list* (b 1 2) 8 #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (list* (b 1 2) 8 v))
(make-reader-graph v)))
(ptest "#0=(cons (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (cons (b 1 2) v))
(make-reader-graph v)))
(ptest "#0=(vector (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (vector (b 1 2) v))
(make-reader-graph v)))
(ptest "#0='#s(c 1 #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (c 1 v))
(make-reader-graph v)))
(ptest "#0=(c (b 1 2) #0#)" (let ([v (make-placeholder #f)])
(placeholder-set! v (c (b 1 2) v))
(make-reader-graph v)))
(ptest "'(apple\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(list 'apple (make-string 70 #\0)))
(ptest "'#(apple\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(vector 'apple (make-string 70 #\0)))
(ptest "'(apple\n .\n \"0000000000000000000000000000000000000000000000000000000000000000000000\")"
(cons 'apple (make-string 70 #\0)))
(ptest "'#hash((apple\n .\n \"0000000000000000000000000000000000000000000000000000000000000000000000\"))"
(hash 'apple (make-string 70 #\0)))
(ptest "(list\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(list (b 1 2) (make-string 65 #\0)))
(ptest "(cons\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(cons (b 1 2) (make-string 65 #\0)))
(ptest "(vector\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(vector (b 1 2) (make-string 65 #\0)))
(ptest "(mcons\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(mcons (b 1 2) (make-string 65 #\0)))
(ptest "(hash\n (b 1 2)\n \"00000000000000000000000000000000000000000000000000000000000000000\")"
(hash (b 1 2) (make-string 65 #\0)))
(ptest "(box\n (b 1 \"00000000000000000000000000000000000000000000000000000000000000000000\"))"
(box (b 1 (make-string 68 #\0))))
(ptest "#0='(#0#\n \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\"\n #0#)"
(read (open-input-string "#0=(#0# \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\" #0#)")))
(void))
(report-errs)

View File

@ -840,13 +840,13 @@
(let ([t (make-tuple (list (box 1) 2 "a"))]) (let ([t (make-tuple (list (box 1) 2 "a"))])
(set-box! (car (tuple-ref t 0)) t) (set-box! (car (tuple-ref t 0)) t)
(write t)))) (write t))))
(test "ack: here: <10, 2, \"a\">" with-output-string (test "ack: here: '<10, 2, \"a\">" with-output-string
(lambda () (lambda ()
(with-handlers ([exn:fail? (lambda (exn) (with-handlers ([exn:fail? (lambda (exn)
(printf "~a" (exn-message exn)))]) (printf "~a" (exn-message exn)))])
(error 'ack "here: ~e" (make-tuple (list 10 2 "a")))))) (error 'ack "here: ~e" (make-tuple (list 10 2 "a"))))))
(test "ack: here: <100000..." with-output-string (test "ack: here: '<10000..." with-output-string
(lambda () (lambda ()
(parameterize ([error-print-width 10]) (parameterize ([error-print-width 10])
(with-handlers ([exn:fail? (lambda (exn) (with-handlers ([exn:fail? (lambda (exn)

View File

@ -1103,7 +1103,7 @@
(test 3 'non-top (test 3 'non-top
(parameterize ([current-namespace ns]) (parameterize ([current-namespace ns])
(eval '(+ 1 2)))) (eval '(+ 1 2))))
(test '`(+ 1 2) 'repl-top (test ''(+ 1 2) 'repl-top
(let ([s (open-output-bytes)]) (let ([s (open-output-bytes)])
(parameterize ([current-input-port (open-input-string "(+ 1 2)")] (parameterize ([current-input-port (open-input-string "(+ 1 2)")]
[current-namespace ns] [current-namespace ns]

View File

@ -1,44 +1,44 @@
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,51,0,0,0,1,0,0,10,0,13, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,51,0,0,0,1,0,0,10,0,13,
0,22,0,29,0,33,0,46,0,53,0,57,0,62,0,65,0,70,0,75,0, 0,22,0,27,0,32,0,45,0,52,0,57,0,61,0,65,0,72,0,79,0,
82,0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158, 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, 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,106,3,126,3,177, 144,1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,
3,243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35, 3,243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,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, 37,109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,
108,101,116,114,101,99,63,108,101,116,72,112,97,114,97,109,101,116,101,114,105, 108,101,116,42,64,99,111,110,100,72,112,97,114,97,109,101,116,101,114,105,122,
122,101,66,100,101,102,105,110,101,63,97,110,100,64,108,101,116,42,62,111,114, 101,66,108,101,116,114,101,99,64,119,104,101,110,63,108,101,116,63,97,110,100,
64,119,104,101,110,64,99,111,110,100,66,117,110,108,101,115,115,65,113,117,111, 66,117,110,108,101,115,115,66,100,101,102,105,110,101,62,111,114,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, 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, 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, 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, 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, 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,225,78,0,0, 101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,249,80,0,0,
95,159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,5,2, 95,159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,4,2,
2,2,6,2,2,2,7,2,2,2,8,2,2,2,10,2,2,2,9,2,2, 2,2,11,2,2,2,5,2,2,2,12,2,2,2,7,2,2,2,8,2,2,
2,4,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240, 2,9,2,2,2,10,2,2,2,6,2,2,2,13,2,2,97,37,11,8,240,
225,78,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2, 249,80,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,
2,2,3,96,11,11,8,240,225,78,0,0,16,0,96,38,11,8,240,225,78, 2,2,3,96,11,11,8,240,249,80,0,0,16,0,96,38,11,8,240,249,80,
0,0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101, 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,232,78,0,0,95,9, 114,101,8,32,8,31,8,30,8,29,8,28,93,8,224,0,81,0,0,95,9,
8,224,232,78,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39, 8,224,0,81,0,0,2,2,27,248,22,147,4,195,249,22,140,4,80,158,39,
36,251,22,81,2,17,248,22,96,199,12,249,22,71,2,18,248,22,98,201,27, 36,251,22,81,2,17,248,22,96,199,12,249,22,71,2,18,248,22,98,201,27,
248,22,147,4,195,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,96, 248,22,147,4,195,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,96,
199,249,22,71,2,18,248,22,98,201,12,27,248,22,73,248,22,147,4,196,28, 199,249,22,71,2,18,248,22,98,201,12,27,248,22,73,248,22,147,4,196,28,
248,22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72, 248,22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,
193,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71, 193,249,22,140,4,80,158,39,36,251,22,81,2,17,248,22,72,199,249,22,71,
2,8,248,22,73,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8, 2,10,248,22,73,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,50,54,53,50,16,4,11, 28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,52,54,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,54,53,51,93,8,224,233,78,0,0, 11,2,20,3,1,8,101,110,118,49,50,55,52,55,93,8,224,1,81,0,0,
95,9,8,224,233,78,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248, 95,9,8,224,1,81,0,0,2,2,27,248,22,73,248,22,147,4,196,28,248,
22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193, 22,79,193,20,15,159,37,36,37,28,248,22,79,248,22,73,194,248,22,72,193,
249,22,140,4,80,158,39,36,250,22,81,2,21,248,22,81,249,22,81,248,22, 249,22,140,4,80,158,39,36,250,22,81,2,21,248,22,81,249,22,81,248,22,
81,2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,10, 81,2,22,248,22,72,201,251,22,81,2,17,2,22,2,22,249,22,71,2,13,
248,22,73,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4, 248,22,73,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,50,54,53,53,16,4,11,11,2,20, 11,11,2,19,3,1,8,101,110,118,49,50,55,52,57,16,4,11,11,2,20,
3,1,8,101,110,118,49,50,54,53,54,93,8,224,234,78,0,0,95,9,8, 3,1,8,101,110,118,49,50,55,53,48,93,8,224,2,81,0,0,95,9,8,
224,234,78,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71, 224,2,81,0,0,2,2,248,22,147,4,193,27,248,22,147,4,194,249,22,71,
248,22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,147,4,23,197, 248,22,81,248,22,72,196,248,22,73,195,27,248,22,73,248,22,147,4,23,197,
1,249,22,140,4,80,158,39,36,28,248,22,56,248,22,141,4,248,22,72,23, 1,249,22,140,4,80,158,39,36,28,248,22,56,248,22,141,4,248,22,72,23,
198,2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,147, 198,2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,147,
@ -52,7 +52,7 @@
44,37,47,9,222,33,43,248,22,147,4,248,22,72,201,248,22,73,198,27,248, 44,37,47,9,222,33,43,248,22,147,4,248,22,72,201,248,22,73,198,27,248,
22,73,248,22,147,4,196,27,248,22,147,4,248,22,72,195,249,22,140,4,80, 22,73,248,22,147,4,196,27,248,22,147,4,248,22,72,195,249,22,140,4,80,
158,40,36,28,248,22,79,195,250,22,82,2,21,9,248,22,73,199,250,22,81, 158,40,36,28,248,22,79,195,250,22,82,2,21,9,248,22,73,199,250,22,81,
2,5,248,22,81,248,22,72,199,250,22,82,2,9,248,22,73,201,248,22,73, 2,9,248,22,81,248,22,72,199,250,22,82,2,4,248,22,73,201,248,22,73,
202,27,248,22,73,248,22,147,4,23,197,1,27,249,22,1,22,85,249,22,2, 202,27,248,22,73,248,22,147,4,23,197,1,27,249,22,1,22,85,249,22,2,
22,147,4,248,22,147,4,248,22,72,199,249,22,140,4,80,158,40,36,251,22, 22,147,4,248,22,147,4,248,22,72,199,249,22,140,4,80,158,40,36,251,22,
81,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45, 81,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,
@ -63,13 +63,13 @@
22,147,4,196,28,248,22,79,193,20,15,159,37,36,37,249,22,140,4,80,158, 22,147,4,196,28,248,22,79,193,20,15,159,37,36,37,249,22,140,4,80,158,
39,36,27,248,22,147,4,248,22,72,197,28,249,22,181,8,62,61,62,248,22, 39,36,27,248,22,147,4,248,22,72,197,28,249,22,181,8,62,61,62,248,22,
141,4,248,22,96,196,250,22,81,2,21,248,22,81,249,22,81,21,93,2,26, 141,4,248,22,96,196,250,22,81,2,21,248,22,81,249,22,81,21,93,2,26,
248,22,72,199,250,22,82,2,12,249,22,81,2,26,249,22,81,248,22,105,203, 248,22,72,199,250,22,82,2,5,249,22,81,2,26,249,22,81,248,22,105,203,
2,26,248,22,73,202,251,22,81,2,17,28,249,22,181,8,248,22,141,4,248, 2,26,248,22,73,202,251,22,81,2,17,28,249,22,181,8,248,22,141,4,248,
22,72,200,64,101,108,115,101,10,248,22,72,197,250,22,82,2,21,9,248,22, 22,72,200,64,101,108,115,101,10,248,22,72,197,250,22,82,2,21,9,248,22,
73,200,249,22,71,2,12,248,22,73,202,100,8,32,8,31,8,30,8,29,8, 73,200,249,22,71,2,5,248,22,73,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,50,54,55,56,16,4,11, 28,16,4,11,11,2,19,3,1,8,101,110,118,49,50,55,55,50,16,4,11,
11,2,20,3,1,8,101,110,118,49,50,54,55,57,93,8,224,235,78,0,0, 11,2,20,3,1,8,101,110,118,49,50,55,55,51,93,8,224,3,81,0,0,
18,16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,235,78,0,0, 18,16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,3,81,0,0,
2,2,27,248,22,73,248,22,147,4,196,249,22,140,4,80,158,39,36,28,248, 2,2,27,248,22,73,248,22,147,4,196,249,22,140,4,80,158,39,36,28,248,
22,56,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72, 22,56,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,81,248,22,72,
199,248,22,96,198,27,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22, 199,248,22,96,198,27,248,22,141,4,248,22,72,197,250,22,81,2,27,248,22,
@ -81,25 +81,25 @@
11,11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10, 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, 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, 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,13,89,162,8, 36,36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,11,89,162,8,
44,37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16, 44,37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,
5,2,11,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1, 5,2,8,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,
2,3,16,0,11,16,5,2,8,89,162,8,44,37,53,9,223,0,33,36,36, 2,3,16,0,11,16,5,2,10,89,162,8,44,37,53,9,223,0,33,36,36,
20,105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,10,89,162,8,44, 20,105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13,89,162,8,44,
37,56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11, 37,56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,
16,5,2,5,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16, 16,5,2,9,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,
1,2,3,16,0,11,16,5,2,4,89,162,8,44,37,53,9,223,0,33,44, 1,2,3,16,0,11,16,5,2,7,89,162,8,44,37,53,9,223,0,33,44,
36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,9,89,162,8,44,37, 36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,4,89,162,8,44,37,
54,9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2, 54,9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,
6,89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3, 6,89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,
16,0,11,16,5,2,12,89,162,8,44,37,58,9,223,0,33,47,36,20,105, 16,0,11,16,5,2,5,89,162,8,44,37,58,9,223,0,33,47,36,20,105,
159,36,16,1,2,3,16,1,33,49,11,16,5,2,7,89,162,8,44,37,54, 159,36,16,1,2,3,16,1,33,49,11,16,5,2,12,89,162,8,44,37,54,
9,223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2, 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}; 15,2,16,93,2,15,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 2025); EVAL_ONE_SIZED_STR((char *)expr, 2025);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,65,0,0,0,1,0,0,8,0,21, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,65,0,0,0,1,0,0,8,0,21,
0,26,0,43,0,58,0,76,0,92,0,102,0,120,0,140,0,156,0,174,0, 0,26,0,43,0,58,0,76,0,92,0,102,0,120,0,140,0,156,0,174,0,
205,0,234,0,0,1,14,1,20,1,34,1,39,1,49,1,57,1,85,1,117, 205,0,234,0,0,1,14,1,20,1,34,1,39,1,49,1,57,1,85,1,117,
1,123,1,168,1,213,1,237,1,20,2,22,2,188,2,22,4,63,4,136,5, 1,123,1,168,1,213,1,237,1,20,2,22,2,188,2,22,4,63,4,136,5,
@ -132,231 +132,231 @@
32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110, 32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,
110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97, 110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,
32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,159,37, 32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,159,37,
51,38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,150,13,10, 51,38,250,80,159,40,52,38,249,22,27,11,80,159,42,51,38,22,153,13,10,
248,22,173,5,23,196,2,28,248,22,170,6,23,194,2,12,87,94,248,22,187, 248,22,173,5,23,196,2,28,248,22,170,6,23,194,2,12,87,94,248,22,187,
8,23,194,1,27,20,14,159,80,159,38,51,38,250,80,159,41,52,38,249,22, 8,23,194,1,27,20,14,159,80,159,38,51,38,250,80,159,41,52,38,249,22,
27,11,80,159,43,51,38,22,150,13,10,248,22,173,5,23,197,2,28,248,22, 27,11,80,159,43,51,38,22,153,13,10,248,22,173,5,23,197,2,28,248,22,
170,6,23,194,2,12,87,94,248,22,187,8,23,194,1,27,20,14,159,80,159, 170,6,23,194,2,12,87,94,248,22,187,8,23,194,1,27,20,14,159,80,159,
39,51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,150,13, 39,51,38,250,80,159,42,52,38,249,22,27,11,80,159,44,51,38,22,153,13,
10,248,22,173,5,23,198,2,28,248,22,170,6,23,194,2,12,87,94,248,22, 10,248,22,173,5,23,198,2,28,248,22,170,6,23,194,2,12,87,94,248,22,
187,8,23,194,1,248,80,159,40,54,37,197,28,248,22,79,23,195,2,9,27, 187,8,23,194,1,248,80,159,40,54,37,197,28,248,22,79,23,195,2,9,27,
248,22,72,23,196,2,27,28,248,22,134,14,23,195,2,23,194,1,28,248,22, 248,22,72,23,196,2,27,28,248,22,137,14,23,195,2,23,194,1,28,248,22,
133,14,23,195,2,249,22,135,14,23,196,1,250,80,158,43,49,248,22,150,14, 136,14,23,195,2,249,22,138,14,23,196,1,250,80,158,43,49,248,22,153,14,
2,20,11,10,250,80,158,41,49,248,22,150,14,2,20,23,197,1,10,28,23, 2,20,11,10,250,80,158,41,49,248,22,153,14,2,20,23,197,1,10,28,23,
193,2,249,22,71,248,22,137,14,249,22,135,14,23,198,1,247,22,151,14,27, 193,2,249,22,71,248,22,140,14,249,22,138,14,23,198,1,247,22,154,14,27,
248,22,73,23,200,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2, 248,22,73,23,200,1,28,248,22,79,23,194,2,9,27,248,22,72,23,195,2,
27,28,248,22,134,14,23,195,2,23,194,1,28,248,22,133,14,23,195,2,249, 27,28,248,22,137,14,23,195,2,23,194,1,28,248,22,136,14,23,195,2,249,
22,135,14,23,196,1,250,80,158,48,49,248,22,150,14,2,20,11,10,250,80, 22,138,14,23,196,1,250,80,158,48,49,248,22,153,14,2,20,11,10,250,80,
158,46,49,248,22,150,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248, 158,46,49,248,22,153,14,2,20,23,197,1,10,28,23,193,2,249,22,71,248,
22,137,14,249,22,135,14,23,198,1,247,22,151,14,248,80,159,46,53,37,248, 22,140,14,249,22,138,14,23,198,1,247,22,154,14,248,80,159,46,53,37,248,
22,73,23,199,1,87,94,23,193,1,248,80,159,44,53,37,248,22,73,23,197, 22,73,23,199,1,87,94,23,193,1,248,80,159,44,53,37,248,22,73,23,197,
1,87,94,23,193,1,27,248,22,73,23,198,1,28,248,22,79,23,194,2,9, 1,87,94,23,193,1,27,248,22,73,23,198,1,28,248,22,79,23,194,2,9,
27,248,22,72,23,195,2,27,28,248,22,134,14,23,195,2,23,194,1,28,248, 27,248,22,72,23,195,2,27,28,248,22,137,14,23,195,2,23,194,1,28,248,
22,133,14,23,195,2,249,22,135,14,23,196,1,250,80,158,46,49,248,22,150, 22,136,14,23,195,2,249,22,138,14,23,196,1,250,80,158,46,49,248,22,153,
14,2,20,11,10,250,80,158,44,49,248,22,150,14,2,20,23,197,1,10,28, 14,2,20,11,10,250,80,158,44,49,248,22,153,14,2,20,23,197,1,10,28,
23,193,2,249,22,71,248,22,137,14,249,22,135,14,23,198,1,247,22,151,14, 23,193,2,249,22,71,248,22,140,14,249,22,138,14,23,198,1,247,22,154,14,
248,80,159,44,53,37,248,22,73,23,199,1,248,80,159,42,53,37,248,22,73, 248,80,159,44,53,37,248,22,73,23,199,1,248,80,159,42,53,37,248,22,73,
196,27,248,22,174,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248, 196,27,248,22,177,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,175,6,23,195,2,27,248,22,132,14,195,28,192,192,248,22,133,14,195,11, 22,175,6,23,195,2,27,248,22,135,14,195,28,192,192,248,22,136,14,195,11,
87,94,28,28,248,22,175,13,23,195,2,10,28,248,22,174,13,23,195,2,10, 87,94,28,28,248,22,178,13,23,195,2,10,28,248,22,177,13,23,195,2,10,
28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2,10,248,22,133,14, 28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,10,248,22,136,14,
23,195,2,11,12,250,22,151,9,76,110,111,114,109,97,108,45,112,97,116,104, 23,195,2,11,12,250,22,151,9,76,110,111,114,109,97,108,45,112,97,116,104,
45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121, 45,99,97,115,101,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110,121,
32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116, 32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97,116,
104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,175,13,23,195,2,249, 104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,178,13,23,195,2,249,
22,181,8,248,22,176,13,23,197,2,2,21,249,22,181,8,247,22,130,8,2, 22,181,8,248,22,179,13,23,197,2,2,21,249,22,181,8,247,22,130,8,2,
21,27,28,248,22,175,6,23,196,2,23,195,2,248,22,184,7,248,22,179,13, 21,27,28,248,22,175,6,23,196,2,23,195,2,248,22,184,7,248,22,182,13,
23,197,2,28,249,22,165,14,0,21,35,114,120,34,94,91,92,92,93,91,92, 23,197,2,28,249,22,168,14,0,21,35,114,120,34,94,91,92,92,93,91,92,
92,93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,175,6,195,248,22, 92,93,91,63,93,91,92,92,93,34,23,195,2,28,248,22,175,6,195,248,22,
182,13,195,194,27,248,22,150,7,23,195,1,249,22,183,13,248,22,187,7,250, 185,13,195,194,27,248,22,150,7,23,195,1,249,22,186,13,248,22,187,7,250,
22,173,14,0,6,35,114,120,34,47,34,28,249,22,165,14,0,22,35,114,120, 22,176,14,0,6,35,114,120,34,47,34,28,249,22,168,14,0,22,35,114,120,
34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201, 34,91,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,173,14,0,19,35,114,120,34,91,32,46,93,43,40,91, 2,23,199,1,250,22,176,14,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, 47,92,92,93,42,41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,
2,21,28,248,22,175,6,194,248,22,182,13,194,193,87,94,28,28,248,22,174, 2,21,28,248,22,175,6,194,248,22,185,13,194,193,87,94,28,28,248,22,177,
13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2, 13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,
10,248,22,133,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,23,197, 10,248,22,136,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,23,197,
2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132,11,248,22,140, 2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,11,248,22,140,
7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248, 7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,28,28,248,
22,174,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23, 22,177,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,
195,2,10,248,22,133,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22, 195,2,10,248,22,136,14,23,195,2,11,12,250,22,151,9,23,196,2,2,22,
23,197,2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132,11,248, 23,197,2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,11,248,
22,140,7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87, 22,140,7,250,22,159,7,2,23,23,200,1,23,201,1,247,22,23,87,94,87,
94,28,28,248,22,174,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248, 94,28,28,248,22,177,13,23,195,2,10,28,248,22,175,6,23,195,2,28,248,
22,132,14,23,195,2,10,248,22,133,14,23,195,2,11,12,250,22,151,9,195, 22,135,14,23,195,2,10,248,22,136,14,23,195,2,11,12,250,22,151,9,195,
2,22,23,197,2,28,248,22,132,14,23,195,2,12,248,22,190,11,249,22,132, 2,22,23,197,2,28,248,22,135,14,23,195,2,12,248,22,129,12,249,22,135,
11,248,22,140,7,250,22,159,7,2,23,199,23,201,1,247,22,23,249,22,3, 11,248,22,140,7,250,22,159,7,2,23,199,23,201,1,247,22,23,249,22,3,
89,162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,174,13,23, 89,162,8,44,37,50,9,223,2,33,35,196,87,94,28,28,248,22,177,13,23,
194,2,10,28,248,22,175,6,23,194,2,28,248,22,132,14,23,194,2,10,248, 194,2,10,28,248,22,175,6,23,194,2,28,248,22,135,14,23,194,2,10,248,
22,133,14,23,194,2,11,12,250,22,151,9,2,7,2,22,23,196,2,28,248, 22,136,14,23,194,2,11,12,250,22,151,9,2,7,2,22,23,196,2,28,248,
22,132,14,23,194,2,12,248,22,190,11,249,22,132,11,248,22,140,7,250,22, 22,135,14,23,194,2,12,248,22,129,12,249,22,135,11,248,22,140,7,250,22,
159,7,2,23,2,7,23,200,1,247,22,23,32,38,89,162,8,44,40,55,2, 159,7,2,23,2,7,23,200,1,247,22,23,32,38,89,162,8,44,40,55,2,
24,222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,190,11,249, 24,222,33,39,28,248,22,79,23,197,2,87,94,23,196,1,248,22,129,12,249,
22,165,11,251,22,159,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23, 22,168,11,251,22,159,7,2,25,2,7,28,248,22,79,23,203,2,87,94,23,
202,1,23,201,1,250,22,1,22,128,14,23,204,1,23,205,1,23,200,1,247, 202,1,23,201,1,250,22,1,22,131,14,23,204,1,23,205,1,23,200,1,247,
22,23,27,249,22,128,14,248,22,72,23,200,2,23,197,2,28,248,22,187,13, 22,23,27,249,22,131,14,248,22,72,23,200,2,23,197,2,28,248,22,190,13,
23,194,2,27,250,22,1,22,128,14,23,197,1,199,28,248,22,187,13,193,192, 23,194,2,27,250,22,1,22,131,14,23,197,1,199,28,248,22,190,13,193,192,
251,2,38,198,199,200,248,22,73,202,251,2,38,197,198,199,248,22,73,201,87, 251,2,38,198,199,200,248,22,73,202,251,2,38,197,198,199,248,22,73,201,87,
94,87,94,87,94,28,28,248,22,174,13,193,10,28,248,22,175,6,193,28,248, 94,87,94,87,94,28,28,248,22,177,13,193,10,28,248,22,175,6,193,28,248,
22,132,14,193,10,248,22,133,14,193,11,12,250,22,151,9,2,7,2,22,195, 22,135,14,193,10,248,22,136,14,193,11,12,250,22,151,9,2,7,2,22,195,
28,248,22,132,14,193,12,248,22,190,11,249,22,132,11,248,22,140,7,250,22, 28,248,22,135,14,193,12,248,22,129,12,249,22,135,11,248,22,140,7,250,22,
159,7,2,23,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49, 159,7,2,23,2,7,199,247,22,23,249,22,3,32,0,89,162,8,44,37,49,
9,222,33,37,195,27,247,22,152,14,251,2,38,196,197,198,196,32,41,89,162, 9,222,33,37,195,27,247,22,155,14,251,2,38,196,197,198,196,32,41,89,162,
44,42,59,2,24,222,33,42,28,248,22,79,23,199,2,87,94,23,198,1,248, 44,42,59,2,24,222,33,42,28,248,22,79,23,199,2,87,94,23,198,1,248,
23,196,1,251,22,159,7,2,25,23,199,1,28,248,22,79,23,203,2,87,94, 23,196,1,251,22,159,7,2,25,23,199,1,28,248,22,79,23,203,2,87,94,
23,202,1,23,201,1,250,22,1,22,128,14,23,204,1,23,205,1,23,198,1, 23,202,1,23,201,1,250,22,1,22,131,14,23,204,1,23,205,1,23,198,1,
27,249,22,128,14,248,22,72,23,202,2,23,199,2,28,248,22,187,13,23,194, 27,249,22,131,14,248,22,72,23,202,2,23,199,2,28,248,22,190,13,23,194,
2,27,250,22,1,22,128,14,23,197,1,23,202,2,28,248,22,187,13,23,194, 2,27,250,22,1,22,131,14,23,197,1,23,202,2,28,248,22,190,13,23,194,
2,192,87,94,23,193,1,27,248,22,73,23,202,1,28,248,22,79,23,194,2, 2,192,87,94,23,193,1,27,248,22,73,23,202,1,28,248,22,79,23,194,2,
87,94,23,193,1,248,23,199,1,251,22,159,7,2,25,23,202,1,28,248,22, 87,94,23,193,1,248,23,199,1,251,22,159,7,2,25,23,202,1,28,248,22,
79,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,128,14,23,207,1, 79,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,131,14,23,207,1,
23,208,1,23,201,1,27,249,22,128,14,248,22,72,23,197,2,23,202,2,28, 23,208,1,23,201,1,27,249,22,131,14,248,22,72,23,197,2,23,202,2,28,
248,22,187,13,23,194,2,27,250,22,1,22,128,14,23,197,1,204,28,248,22, 248,22,190,13,23,194,2,27,250,22,1,22,131,14,23,197,1,204,28,248,22,
187,13,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202, 190,13,193,192,253,2,41,203,204,205,206,23,15,248,22,73,201,253,2,41,202,
203,204,205,206,248,22,73,200,87,94,23,193,1,27,248,22,73,23,201,1,28, 203,204,205,206,248,22,73,200,87,94,23,193,1,27,248,22,73,23,201,1,28,
248,22,79,23,194,2,87,94,23,193,1,248,23,198,1,251,22,159,7,2,25, 248,22,79,23,194,2,87,94,23,193,1,248,23,198,1,251,22,159,7,2,25,
23,201,1,28,248,22,79,23,205,2,87,94,23,204,1,23,203,1,250,22,1, 23,201,1,28,248,22,79,23,205,2,87,94,23,204,1,23,203,1,250,22,1,
22,128,14,23,206,1,23,207,1,23,200,1,27,249,22,128,14,248,22,72,23, 22,131,14,23,206,1,23,207,1,23,200,1,27,249,22,131,14,248,22,72,23,
197,2,23,201,2,28,248,22,187,13,23,194,2,27,250,22,1,22,128,14,23, 197,2,23,201,2,28,248,22,190,13,23,194,2,27,250,22,1,22,131,14,23,
197,1,203,28,248,22,187,13,193,192,253,2,41,202,203,204,205,206,248,22,73, 197,1,203,28,248,22,190,13,193,192,253,2,41,202,203,204,205,206,248,22,73,
201,253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,152,14,253,2,41, 201,253,2,41,201,202,203,204,205,248,22,73,200,27,247,22,155,14,253,2,41,
198,199,200,201,202,198,87,95,28,28,248,22,175,13,23,194,2,10,28,248,22, 198,199,200,201,202,198,87,95,28,28,248,22,178,13,23,194,2,10,28,248,22,
174,13,23,194,2,10,28,248,22,175,6,23,194,2,28,248,22,132,14,23,194, 177,13,23,194,2,10,28,248,22,175,6,23,194,2,28,248,22,135,14,23,194,
2,10,248,22,133,14,23,194,2,11,12,252,22,151,9,23,200,2,2,26,36, 2,10,248,22,136,14,23,194,2,11,12,252,22,151,9,23,200,2,2,26,36,
23,198,2,23,199,2,28,28,248,22,175,6,23,195,2,10,248,22,163,7,23, 23,198,2,23,199,2,28,28,248,22,175,6,23,195,2,10,248,22,163,7,23,
195,2,87,94,23,194,1,12,252,22,151,9,23,200,2,2,27,37,23,198,2, 195,2,87,94,23,194,1,12,252,22,151,9,23,200,2,2,27,37,23,198,2,
23,199,1,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2,87,94, 23,199,1,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,87,94,
23,195,1,87,94,28,192,12,250,22,152,9,23,201,1,2,28,23,199,1,249, 23,195,1,87,94,28,192,12,250,22,152,9,23,201,1,2,28,23,199,1,249,
22,7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,175,13, 22,7,194,195,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,178,13,
23,196,2,10,28,248,22,174,13,23,196,2,10,28,248,22,175,6,23,196,2, 23,196,2,10,28,248,22,177,13,23,196,2,10,28,248,22,175,6,23,196,2,
28,248,22,132,14,23,196,2,10,248,22,133,14,23,196,2,11,12,252,22,151, 28,248,22,135,14,23,196,2,10,248,22,136,14,23,196,2,11,12,252,22,151,
9,2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,175,6,23,197,2, 9,2,10,2,26,36,23,200,2,23,201,2,28,28,248,22,175,6,23,197,2,
10,248,22,163,7,23,197,2,12,252,22,151,9,2,10,2,27,37,23,200,2, 10,248,22,163,7,23,197,2,12,252,22,151,9,2,10,2,27,37,23,200,2,
23,201,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,199,2,87,94, 23,201,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,199,2,87,94,
23,195,1,87,94,28,192,12,250,22,152,9,2,10,2,28,23,201,2,249,22, 23,195,1,87,94,28,192,12,250,22,152,9,2,10,2,28,23,201,2,249,22,
7,194,195,27,249,22,184,13,250,22,172,14,0,20,35,114,120,35,34,40,63, 7,194,195,27,249,22,187,13,250,22,175,14,0,20,35,114,120,35,34,40,63,
58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,180,13,23,201,1,28, 58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,183,13,23,201,1,28,
248,22,175,6,23,203,2,249,22,187,7,23,204,1,8,63,23,202,1,28,248, 248,22,175,6,23,203,2,249,22,187,7,23,204,1,8,63,23,202,1,28,248,
22,175,13,23,199,2,248,22,176,13,23,199,1,87,94,23,198,1,247,22,177, 22,178,13,23,199,2,248,22,179,13,23,199,1,87,94,23,198,1,247,22,180,
13,28,248,22,174,13,194,249,22,128,14,195,194,192,91,159,38,11,90,161,38, 13,28,248,22,177,13,194,249,22,131,14,195,194,192,91,159,38,11,90,161,38,
36,11,87,95,28,28,248,22,175,13,23,196,2,10,28,248,22,174,13,23,196, 36,11,87,95,28,28,248,22,178,13,23,196,2,10,28,248,22,177,13,23,196,
2,10,28,248,22,175,6,23,196,2,28,248,22,132,14,23,196,2,10,248,22, 2,10,28,248,22,175,6,23,196,2,28,248,22,135,14,23,196,2,10,248,22,
133,14,23,196,2,11,12,252,22,151,9,2,11,2,26,36,23,200,2,23,201, 136,14,23,196,2,11,12,252,22,151,9,2,11,2,26,36,23,200,2,23,201,
2,28,28,248,22,175,6,23,197,2,10,248,22,163,7,23,197,2,12,252,22, 2,28,28,248,22,175,6,23,197,2,10,248,22,163,7,23,197,2,12,252,22,
151,9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36, 151,9,2,11,2,27,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,
11,248,22,131,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,152, 11,248,22,134,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,152,
9,2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,184,13,249,22,173, 9,2,11,2,28,23,201,2,249,22,7,194,195,27,249,22,187,13,249,22,173,
7,250,22,173,14,0,9,35,114,120,35,34,91,46,93,34,248,22,180,13,23, 7,250,22,176,14,0,9,35,114,120,35,34,91,46,93,34,248,22,183,13,23,
203,1,6,1,1,95,28,248,22,175,6,23,202,2,249,22,187,7,23,203,1, 203,1,6,1,1,95,28,248,22,175,6,23,202,2,249,22,187,7,23,203,1,
8,63,23,201,1,28,248,22,175,13,23,199,2,248,22,176,13,23,199,1,87, 8,63,23,201,1,28,248,22,178,13,23,199,2,248,22,179,13,23,199,1,87,
94,23,198,1,247,22,177,13,28,248,22,174,13,194,249,22,128,14,195,194,192, 94,23,198,1,247,22,180,13,28,248,22,177,13,194,249,22,131,14,195,194,192,
249,247,22,142,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37, 249,247,22,142,5,194,11,249,80,159,38,47,37,9,9,249,80,159,38,47,37,
195,9,27,247,22,154,14,249,80,158,39,48,28,23,195,2,27,248,22,128,8, 195,9,27,247,22,157,14,249,80,158,39,48,28,23,195,2,27,248,22,128,8,
6,11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6, 6,11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,
0,0,27,28,23,196,1,250,22,128,14,248,22,150,14,69,97,100,100,111,110, 0,0,27,28,23,196,1,250,22,131,14,248,22,153,14,69,97,100,100,111,110,
45,100,105,114,247,22,190,7,6,8,8,99,111,108,108,101,99,116,115,11,27, 45,100,105,114,247,22,190,7,6,8,8,99,111,108,108,101,99,116,115,11,27,
248,80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,150,14,72,99, 248,80,159,42,53,37,250,22,85,23,203,1,248,22,81,248,22,153,14,72,99,
111,108,108,101,99,116,115,45,100,105,114,23,204,1,28,193,249,22,71,195,194, 111,108,108,101,99,116,115,45,100,105,114,23,204,1,28,193,249,22,71,195,194,
192,32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,161,14,23, 192,32,51,89,162,8,44,39,8,31,2,19,222,33,52,27,249,22,164,14,23,
197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,96,23,195,2, 197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,96,23,195,2,
27,27,248,22,105,23,197,1,27,249,22,161,14,23,201,2,23,196,2,28,23, 27,27,248,22,105,23,197,1,27,249,22,164,14,23,201,2,23,196,2,28,23,
193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197, 193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,27,248,22,105,23,197,
1,27,249,22,161,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1, 1,27,249,22,164,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,
27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,161,14,23, 27,248,22,96,23,195,2,27,27,248,22,105,23,197,1,27,249,22,164,14,23,
209,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2, 209,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,96,23,195,2,
27,27,248,22,105,23,197,1,27,249,22,161,14,23,213,2,23,196,2,28,23, 27,27,248,22,105,23,197,1,27,249,22,164,14,23,213,2,23,196,2,28,23,
193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,250,2,51,23,215,2, 193,2,87,94,23,194,1,27,248,22,96,23,195,2,27,250,2,51,23,215,2,
23,216,1,248,22,105,23,199,1,28,249,22,169,7,23,196,2,2,29,249,22, 23,216,1,248,22,105,23,199,1,28,249,22,169,7,23,196,2,2,29,249,22,
85,23,214,2,194,249,22,71,248,22,183,13,23,197,1,194,87,95,23,211,1, 85,23,214,2,194,249,22,71,248,22,186,13,23,197,1,194,87,95,23,211,1,
23,193,1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,212,2,9,249, 23,193,1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,212,2,9,249,
22,71,248,22,183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249, 22,71,248,22,186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,
22,85,23,210,2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193, 22,85,23,210,2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,
1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71, 1,28,249,22,169,7,23,196,2,2,29,249,22,85,23,208,2,9,249,22,71,
248,22,183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85, 248,22,186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,
23,206,2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28, 23,206,2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,
249,22,169,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22, 249,22,169,7,23,196,2,2,29,249,22,85,23,204,2,9,249,22,71,248,22,
183,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,23,202, 186,13,23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,23,202,
2,194,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28,249,22, 2,194,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,249,22,
169,7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,183,13, 169,7,23,196,2,2,29,249,22,85,23,200,2,9,249,22,71,248,22,186,13,
23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,197,194,87,94, 23,197,1,9,28,249,22,169,7,23,196,2,2,29,249,22,85,197,194,87,94,
23,196,1,249,22,71,248,22,183,13,23,197,1,194,87,94,23,193,1,28,249, 23,196,1,249,22,71,248,22,186,13,23,197,1,194,87,94,23,193,1,28,249,
22,169,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71, 22,169,7,23,198,2,2,29,249,22,85,195,9,87,94,23,194,1,249,22,71,
248,22,183,13,23,199,1,9,87,95,28,28,248,22,163,7,194,10,248,22,175, 248,22,186,13,23,199,1,9,87,95,28,28,248,22,163,7,194,10,248,22,175,
6,194,12,250,22,151,9,2,14,6,21,21,98,121,116,101,32,115,116,114,105, 6,194,12,250,22,151,9,2,14,6,21,21,98,121,116,101,32,115,116,114,105,
110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,80,195,249,22, 110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,80,195,249,22,
4,22,174,13,196,11,12,250,22,151,9,2,14,6,13,13,108,105,115,116,32, 4,22,177,13,196,11,12,250,22,151,9,2,14,6,13,13,108,105,115,116,32,
111,102,32,112,97,116,104,115,197,250,2,51,197,195,28,248,22,175,6,197,248, 111,102,32,112,97,116,104,115,197,250,2,51,197,195,28,248,22,175,6,197,248,
22,186,7,197,196,32,54,89,162,8,44,39,53,70,102,111,117,110,100,45,101, 22,186,7,197,196,32,54,89,162,8,44,39,53,70,102,111,117,110,100,45,101,
120,101,99,222,33,57,32,55,89,162,8,44,40,58,64,110,101,120,116,222,33, 120,101,99,222,33,57,32,55,89,162,8,44,40,58,64,110,101,120,116,222,33,
56,27,248,22,136,14,23,196,2,28,249,22,183,8,23,195,2,23,197,1,11, 56,27,248,22,139,14,23,196,2,28,249,22,183,8,23,195,2,23,197,1,11,
28,248,22,132,14,23,194,2,27,249,22,128,14,23,197,1,23,196,1,28,23, 28,248,22,135,14,23,194,2,27,249,22,131,14,23,197,1,23,196,1,28,23,
197,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2,87,95,23, 197,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,87,95,23,
195,1,23,194,1,27,28,23,202,2,27,248,22,136,14,23,199,2,28,249,22, 195,1,23,194,1,27,28,23,202,2,27,248,22,139,14,23,199,2,28,249,22,
183,8,23,195,2,23,200,2,11,28,248,22,132,14,23,194,2,250,2,54,23, 183,8,23,195,2,23,200,2,11,28,248,22,135,14,23,194,2,250,2,54,23,
205,2,23,206,2,249,22,128,14,23,200,2,23,198,1,250,2,54,23,205,2, 205,2,23,206,2,249,22,131,14,23,200,2,23,198,1,250,2,54,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,87,94,23,193,1,27,28,248,22,
174,13,23,196,2,27,249,22,128,14,23,198,2,23,205,2,28,28,248,22,187, 177,13,23,196,2,27,249,22,131,14,23,198,2,23,205,2,28,28,248,22,190,
13,193,10,248,22,186,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1, 13,193,10,248,22,189,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,
28,23,203,2,11,27,248,22,136,14,23,200,2,28,249,22,183,8,23,195,2, 28,23,203,2,11,27,248,22,139,14,23,200,2,28,249,22,183,8,23,195,2,
23,201,1,11,28,248,22,132,14,23,194,2,250,2,54,23,206,1,23,207,1, 23,201,1,11,28,248,22,135,14,23,194,2,250,2,54,23,206,1,23,207,1,
249,22,128,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194, 249,22,131,14,23,201,1,23,198,1,250,2,54,205,206,195,192,87,94,23,194,
1,28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,2, 1,28,23,196,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,2,
87,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,136,14,23,199,2, 87,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,139,14,23,199,2,
28,249,22,183,8,23,195,2,23,200,2,11,28,248,22,132,14,23,194,2,250, 28,249,22,183,8,23,195,2,23,200,2,11,28,248,22,135,14,23,194,2,250,
2,54,23,204,2,23,205,2,249,22,128,14,23,200,2,23,198,1,250,2,54, 2,54,23,204,2,23,205,2,249,22,131,14,23,200,2,23,198,1,250,2,54,
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,87,94,23,193,1,27,
28,248,22,174,13,23,196,2,27,249,22,128,14,23,198,2,23,204,2,28,28, 28,248,22,177,13,23,196,2,27,249,22,131,14,23,198,2,23,204,2,28,28,
248,22,187,13,193,10,248,22,186,13,193,192,11,11,28,23,193,2,192,87,94, 248,22,190,13,193,10,248,22,189,13,193,192,11,11,28,23,193,2,192,87,94,
23,193,1,28,23,202,2,11,27,248,22,136,14,23,200,2,28,249,22,183,8, 23,193,1,28,23,202,2,11,27,248,22,139,14,23,200,2,28,249,22,183,8,
23,195,2,23,201,1,11,28,248,22,132,14,23,194,2,250,2,54,23,205,1, 23,195,2,23,201,1,11,28,248,22,135,14,23,194,2,250,2,54,23,205,1,
23,206,1,249,22,128,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28, 23,206,1,249,22,131,14,23,201,1,23,198,1,250,2,54,204,205,195,192,28,
23,193,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,199,2,87,95, 23,193,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,199,2,87,95,
23,195,1,23,194,1,27,28,23,198,2,251,2,55,23,198,2,23,203,2,23, 23,195,1,23,194,1,27,28,23,198,2,251,2,55,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,174, 201,2,23,202,2,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,177,
13,195,27,249,22,128,14,197,200,28,28,248,22,187,13,193,10,248,22,186,13, 13,195,27,249,22,131,14,197,200,28,28,248,22,190,13,193,10,248,22,189,13,
193,192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,89, 193,192,11,11,28,192,192,28,198,11,251,2,55,198,203,201,202,194,32,58,89,
162,8,44,40,8,31,2,19,222,33,59,28,248,22,79,23,197,2,11,27,248, 162,8,44,40,8,31,2,19,222,33,59,28,248,22,79,23,197,2,11,27,248,
22,135,14,248,22,72,23,199,2,27,249,22,128,14,23,196,1,23,197,2,28, 22,138,14,248,22,72,23,199,2,27,249,22,131,14,23,196,1,23,197,2,28,
248,22,186,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22, 248,22,189,13,23,194,2,250,2,54,198,199,195,87,94,23,193,1,27,248,22,
73,23,200,1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,23, 73,23,200,1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,23,
196,2,27,249,22,128,14,23,196,1,23,200,2,28,248,22,186,13,23,194,2, 196,2,27,249,22,131,14,23,196,1,23,200,2,28,248,22,189,13,23,194,2,
250,2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22, 250,2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,
79,23,194,2,11,27,248,22,135,14,248,22,72,23,196,2,27,249,22,128,14, 79,23,194,2,11,27,248,22,138,14,248,22,72,23,196,2,27,249,22,131,14,
23,196,1,23,203,2,28,248,22,186,13,23,194,2,250,2,54,204,205,195,87, 23,196,1,23,203,2,28,248,22,189,13,23,194,2,250,2,54,204,205,195,87,
94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248, 94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,
22,135,14,248,22,72,23,196,2,27,249,22,128,14,23,196,1,23,206,2,28, 22,138,14,248,22,72,23,196,2,27,249,22,131,14,23,196,1,23,206,2,28,
248,22,186,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27, 248,22,189,13,23,194,2,250,2,54,23,15,23,16,195,87,94,23,193,1,27,
248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22, 248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,
72,23,196,2,27,249,22,128,14,23,196,1,23,209,2,28,248,22,186,13,23, 72,23,196,2,27,249,22,131,14,23,196,1,23,209,2,28,248,22,189,13,23,
194,2,250,2,54,23,18,23,19,195,87,94,23,193,1,27,248,22,73,23,197, 194,2,250,2,54,23,18,23,19,195,87,94,23,193,1,27,248,22,73,23,197,
1,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,195,27,249,22, 1,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,195,27,249,22,
128,14,23,196,1,23,19,28,248,22,186,13,193,250,2,54,23,21,23,22,195, 131,14,23,196,1,23,19,28,248,22,189,13,193,250,2,54,23,21,23,22,195,
251,2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,174,13, 251,2,58,23,21,23,22,23,23,248,22,73,199,87,95,28,28,248,22,177,13,
23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,132,14,23,195,2,10, 23,195,2,10,28,248,22,175,6,23,195,2,28,248,22,135,14,23,195,2,10,
248,22,133,14,23,195,2,11,12,250,22,151,9,2,15,6,25,25,112,97,116, 248,22,136,14,23,195,2,11,12,250,22,151,9,2,15,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, 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,28,248,22,174,13,23,196,2,10,28,248, 41,23,197,2,28,28,23,195,2,28,28,248,22,177,13,23,196,2,10,28,248,
22,175,6,23,196,2,28,248,22,132,14,23,196,2,10,248,22,133,14,23,196, 22,175,6,23,196,2,28,248,22,135,14,23,196,2,10,248,22,136,14,23,196,
2,11,248,22,132,14,23,196,2,11,10,12,250,22,151,9,2,15,6,29,29, 2,11,248,22,135,14,23,196,2,11,10,12,250,22,151,9,2,15,6,29,29,
35,102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111, 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,132,14,23,195,2,91, 114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,135,14,23,195,2,91,
159,39,11,90,161,39,36,11,248,22,131,14,23,198,2,249,22,181,8,194,68, 159,39,11,90,161,39,36,11,248,22,134,14,23,198,2,249,22,181,8,194,68,
114,101,108,97,116,105,118,101,11,27,248,22,128,8,6,4,4,80,65,84,72, 114,101,108,97,116,105,118,101,11,27,248,22,128,8,6,4,4,80,65,84,72,
27,28,23,194,2,27,249,80,159,41,48,38,23,197,1,9,28,249,22,181,8, 27,28,23,194,2,27,249,80,159,41,48,38,23,197,1,9,28,249,22,181,8,
247,22,130,8,2,21,249,22,71,248,22,183,13,5,1,46,194,192,87,94,23, 247,22,130,8,2,21,249,22,71,248,22,186,13,5,1,46,194,192,87,94,23,
194,1,9,28,248,22,79,23,194,2,11,27,248,22,135,14,248,22,72,23,196, 194,1,9,28,248,22,79,23,194,2,11,27,248,22,138,14,248,22,72,23,196,
2,27,249,22,128,14,23,196,1,23,200,2,28,248,22,186,13,23,194,2,250, 2,27,249,22,131,14,23,196,1,23,200,2,28,248,22,189,13,23,194,2,250,
2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79, 2,54,201,202,195,87,94,23,193,1,27,248,22,73,23,197,1,28,248,22,79,
23,194,2,11,27,248,22,135,14,248,22,72,23,196,2,27,249,22,128,14,23, 23,194,2,11,27,248,22,138,14,248,22,72,23,196,2,27,249,22,131,14,23,
196,1,23,203,2,28,248,22,186,13,23,194,2,250,2,54,204,205,195,87,94, 196,1,23,203,2,28,248,22,189,13,23,194,2,250,2,54,204,205,195,87,94,
23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22, 23,193,1,27,248,22,73,23,197,1,28,248,22,79,23,194,2,11,27,248,22,
135,14,248,22,72,195,27,249,22,128,14,23,196,1,205,28,248,22,186,13,193, 138,14,248,22,72,195,27,249,22,131,14,23,196,1,205,28,248,22,189,13,193,
250,2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248,22,73,199, 250,2,54,23,15,23,16,195,251,2,58,23,15,23,16,23,17,248,22,73,199,
27,248,22,135,14,23,196,1,28,248,22,186,13,193,250,2,54,198,199,195,11, 27,248,22,138,14,23,196,1,28,248,22,189,13,193,250,2,54,198,199,195,11,
250,80,159,39,49,37,196,197,11,250,80,159,39,49,37,196,11,11,87,94,249, 250,80,159,39,49,37,196,197,11,250,80,159,39,49,37,196,11,11,87,94,249,
22,166,6,247,22,138,5,195,248,22,128,6,249,22,184,3,36,249,22,168,3, 22,166,6,247,22,138,5,195,248,22,128,6,249,22,184,3,36,249,22,168,3,
197,198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23, 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,150,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27, 197,1,27,248,22,153,14,2,20,27,249,80,159,41,49,37,23,196,1,11,27,
27,248,22,187,3,23,200,1,28,192,192,36,27,27,248,22,187,3,23,202,1, 27,248,22,187,3,23,200,1,28,192,192,36,27,27,248,22,187,3,23,202,1,
28,192,192,36,249,22,169,5,23,197,1,83,158,40,20,100,95,89,162,8,44, 28,192,192,36,249,22,169,5,23,197,1,83,158,40,20,100,95,89,162,8,44,
36,48,9,224,3,2,33,63,23,195,1,23,196,1,27,248,22,154,5,23,195, 36,48,9,224,3,2,33,63,23,195,1,23,196,1,27,248,22,154,5,23,195,
@ -388,7 +388,7 @@
222,33,47,80,159,36,46,37,83,158,36,16,2,83,158,39,20,99,96,2,13, 222,33,47,80,159,36,46,37,83,158,36,16,2,83,158,39,20,99,96,2,13,
89,162,44,36,44,9,223,0,33,48,89,162,44,37,45,9,223,0,33,49,89, 89,162,44,36,44,9,223,0,33,48,89,162,44,37,45,9,223,0,33,49,89,
162,44,38,55,9,223,0,33,50,80,159,36,47,37,83,158,36,16,2,27,248, 162,44,38,55,9,223,0,33,50,80,159,36,47,37,83,158,36,16,2,27,248,
22,157,14,248,22,186,7,27,28,249,22,181,8,247,22,130,8,2,21,6,1, 22,160,14,248,22,186,7,27,28,249,22,181,8,247,22,130,8,2,21,6,1,
1,59,6,1,1,58,250,22,159,7,6,14,14,40,91,94,126,97,93,42,41, 1,59,6,1,1,58,250,22,159,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,162,8,44,38,48,2,14,223, 126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,48,2,14,223,
0,33,53,80,159,36,48,37,83,158,36,16,2,83,158,39,20,99,96,2,15, 0,33,53,80,159,36,48,37,83,158,36,16,2,83,158,39,20,99,96,2,15,
@ -400,13 +400,13 @@
EVAL_ONE_SIZED_STR((char *)expr, 6246); EVAL_ONE_SIZED_STR((char *)expr, 6246);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,9,0,0,0,1,0,0,10,0,16, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,9,0,0,0,1,0,0,10,0,16,
0,29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,1,0,0,69,35, 0,29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,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, 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, 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,68,35,37, 29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,68,35,37,
101,120,112,111,98,115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11, 101,120,112,111,98,115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,
97,36,11,8,240,103,79,0,0,98,159,2,3,36,36,159,2,4,36,36,159, 97,36,11,8,240,127,81,0,0,98,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,7,36,36,16,0, 2,5,36,36,159,2,6,36,36,159,2,7,36,36,159,2,7,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, 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,44,44,44,36,80,158,36,36,20,105,159,36, 29,11,11,11,11,11,18,96,11,44,44,44,36,80,158,36,36,20,105,159,36,
@ -420,7 +420,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 353); EVAL_ONE_SIZED_STR((char *)expr, 353);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,50,74,0,0,0,1,0,0,7,0,18, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,52,46,50,46,53,46,49,52,74,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, 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, 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,94,1,101,1,107,1,115,1,124,1,145,1, 1,70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,
@ -446,40 +446,40 @@
97,109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118, 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,6,3,3,46,115,115,6,4,4,46,114, 101,64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,
107,116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80, 107,116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,
159,38,46,38,250,22,128,14,23,197,1,23,199,1,249,80,159,43,39,38,23, 159,38,46,38,250,22,131,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,23,250,22,128,14,23,197,1,23,199,1,249,80,159,43,39,38,23, 198,1,2,23,250,22,131,14,23,197,1,23,199,1,249,80,159,43,39,38,23,
198,1,2,24,252,22,128,14,23,199,1,23,201,1,2,25,247,22,131,8,249, 198,1,2,24,252,22,131,14,23,199,1,23,201,1,2,25,247,22,131,8,249,
80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,128,14,23,199,1,23, 80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,131,14,23,199,1,23,
201,1,2,25,247,22,131,8,249,80,159,45,39,38,23,200,1,80,159,45,36, 201,1,2,25,247,22,131,8,249,80,159,45,39,38,23,200,1,80,159,45,36,
38,27,252,22,128,14,23,200,1,23,202,1,2,25,247,22,131,8,249,80,159, 38,27,252,22,131,14,23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,
46,39,38,23,201,1,80,159,46,36,38,27,250,22,145,14,196,11,32,0,89, 46,39,38,23,201,1,80,159,46,36,38,27,250,22,148,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,128,14, 162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,252,22,131,14,
23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,46,39,38,23,201,1, 23,200,1,23,202,1,2,25,247,22,131,8,249,80,159,46,39,38,23,201,1,
80,159,46,36,38,27,250,22,145,14,196,11,32,0,89,162,8,44,36,41,9, 80,159,46,36,38,27,250,22,148,14,196,11,32,0,89,162,8,44,36,41,9,
222,11,28,192,249,22,71,195,194,11,27,250,22,128,14,23,198,1,23,200,1, 222,11,28,192,249,22,71,195,194,11,27,250,22,131,14,23,198,1,23,200,1,
249,80,159,44,39,38,23,199,1,2,23,27,250,22,145,14,196,11,32,0,89, 249,80,159,44,39,38,23,199,1,2,23,27,250,22,148,14,196,11,32,0,89,
162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,128,14, 162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,11,27,250,22,131,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,145, 23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,148,
14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,195,194, 14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,195,194,
11,87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,151,9,77,108,111, 11,87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,151,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, 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, 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,134,14,23,205,2, 103,23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,137,14,23,205,2,
23,204,2,27,247,22,143,5,28,23,193,2,249,22,135,14,23,207,2,23,195, 23,204,2,27,247,22,143,5,28,23,193,2,249,22,138,14,23,207,2,23,195,
1,23,205,2,90,161,39,37,11,248,22,131,14,23,205,1,87,94,23,196,1, 1,23,205,2,90,161,39,37,11,248,22,134,14,23,205,1,87,94,23,196,1,
90,161,38,40,11,28,23,205,2,27,248,22,179,13,23,197,2,27,248,22,166, 90,161,38,40,11,28,23,205,2,27,248,22,182,13,23,197,2,27,248,22,166,
7,23,195,2,28,28,249,22,180,3,23,195,2,40,249,22,169,7,5,4,46, 7,23,195,2,28,28,249,22,180,3,23,195,2,40,249,22,169,7,5,4,46,
114,107,116,249,22,172,7,23,198,2,249,22,168,3,23,199,2,40,11,249,22, 114,107,116,249,22,172,7,23,198,2,249,22,168,3,23,199,2,40,11,249,22,
7,23,199,2,248,22,183,13,249,22,173,7,250,22,172,7,23,202,1,36,249, 7,23,199,2,248,22,186,13,249,22,173,7,250,22,172,7,23,202,1,36,249,
22,168,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22, 22,168,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,181,8,23,199,2,23,197,2, 7,23,197,2,11,90,161,37,42,11,28,249,22,181,8,23,199,2,23,197,2,
23,193,2,249,22,128,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198, 23,193,2,249,22,131,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,
2,28,249,22,181,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249, 2,28,249,22,181,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,
22,128,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28, 22,131,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,
249,22,181,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1, 249,22,181,8,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,153,14,27,27,250,22,145,14,23, 2,22,23,194,1,90,161,37,45,11,247,22,156,14,27,27,250,22,148,14,23,
204,2,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,203, 204,2,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,203,
2,194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,145,14,23,206,2, 2,194,11,27,28,23,202,2,28,23,194,2,11,27,250,22,148,14,23,206,2,
11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,205,2,194, 11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,71,23,205,2,194,
11,11,27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122, 11,11,27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122,
111,225,14,12,8,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225, 111,225,14,12,8,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225,
@ -494,8 +494,8 @@
1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159, 1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,14,159,80,159,
56,40,38,250,80,159,59,41,38,249,22,27,11,80,159,8,25,40,38,22,167, 56,40,38,250,80,159,59,41,38,249,22,27,11,80,159,8,25,40,38,22,167,
4,11,20,14,159,80,159,56,40,38,250,80,159,59,41,38,249,22,27,11,80, 4,11,20,14,159,80,159,56,40,38,250,80,159,59,41,38,249,22,27,11,80,
159,8,25,40,38,22,143,5,28,248,22,174,13,23,215,2,23,214,1,87,94, 159,8,25,40,38,22,143,5,28,248,22,177,13,23,215,2,23,214,1,87,94,
23,214,1,247,22,151,14,249,247,22,156,14,248,22,72,195,23,24,87,94,23, 23,214,1,247,22,154,14,249,247,22,159,14,248,22,72,195,23,24,87,94,23,
193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162,8,44,37,53, 193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162,8,44,37,53,
9,225,24,22,19,33,38,23,216,2,27,28,23,204,2,11,193,28,192,192,28, 9,225,24,22,19,33,38,23,216,2,27,28,23,204,2,11,193,28,192,192,28,
193,28,203,28,249,22,180,3,248,22,73,196,248,22,73,206,193,11,11,11,11, 193,28,203,28,249,22,180,3,248,22,73,196,248,22,73,206,193,11,11,11,11,
@ -503,8 +503,8 @@
23,208,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159, 23,208,1,23,201,1,23,200,1,23,199,1,23,196,1,23,195,1,20,14,159,
80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40, 80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,40,
38,22,167,4,23,214,1,20,14,159,80,159,57,40,38,250,80,159,8,24,41, 38,22,167,4,23,214,1,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,143,5,28,248,22,174,13,23,216, 38,249,22,27,11,80,159,8,26,40,38,22,143,5,28,248,22,177,13,23,216,
2,23,215,1,87,94,23,215,1,247,22,151,14,249,247,22,156,14,248,22,72, 2,23,215,1,87,94,23,215,1,247,22,154,14,249,247,22,159,14,248,22,72,
195,23,25,87,94,23,193,1,27,28,23,197,2,28,23,201,1,27,249,22,5, 195,23,25,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,162,8,44,37,51,9,225,25,23,19,33,39,23,212, 83,158,40,20,100,94,89,162,8,44,37,51,9,225,25,23,19,33,39,23,212,
1,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28, 1,23,217,2,27,28,23,204,2,11,193,28,192,192,28,193,28,23,204,2,28,
@ -513,8 +513,8 @@
23,211,1,23,210,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159, 23,211,1,23,210,1,23,202,1,23,200,1,23,197,1,23,196,1,20,14,159,
80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40, 80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,
38,22,167,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249, 38,22,167,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249,
22,27,11,80,159,8,27,40,38,22,143,5,28,248,22,174,13,23,217,2,23, 22,27,11,80,159,8,27,40,38,22,143,5,28,248,22,177,13,23,217,2,23,
216,1,87,94,23,216,1,247,22,151,14,249,247,22,141,5,248,22,72,195,23, 216,1,87,94,23,216,1,247,22,154,14,249,247,22,141,5,248,22,72,195,23,
26,87,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,83,158, 26,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,162,8,44,37,51,9,225,26,24,21,33,40,23,214,1,23, 40,20,100,94,89,162,8,44,37,51,9,225,26,24,21,33,40,23,214,1,23,
218,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,180,3, 218,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,180,3,
@ -522,21 +522,21 @@
11,87,94,23,201,1,11,28,23,193,2,87,95,23,212,1,23,198,1,20,14, 11,87,94,23,201,1,11,28,23,193,2,87,95,23,212,1,23,198,1,20,14,
159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28, 159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,
40,38,22,167,4,23,216,1,20,14,159,80,159,59,40,38,250,80,159,8,26, 40,38,22,167,4,23,216,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,143,5,28,248,22,174,13,23, 41,38,249,22,27,11,80,159,8,28,40,38,22,143,5,28,248,22,177,13,23,
218,2,23,217,1,87,94,23,217,1,247,22,151,14,249,247,22,141,5,248,22, 218,2,23,217,1,87,94,23,217,1,247,22,154,14,249,247,22,141,5,248,22,
72,195,23,27,87,94,23,193,1,27,28,23,199,2,87,94,23,214,1,23,213, 72,195,23,27,87,94,23,193,1,27,28,23,199,2,87,94,23,214,1,23,213,
1,87,94,23,213,1,23,214,1,20,14,159,80,159,8,24,40,38,250,80,159, 1,87,94,23,213,1,23,214,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,167,4,28,23,29,28, 8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,167,4,28,23,29,28,
23,202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,24,40,38,250, 23,202,1,11,195,87,94,23,202,1,11,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,143,5,28,248, 80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,143,5,28,248,
22,174,13,23,219,2,23,218,1,87,94,23,218,1,247,22,151,14,249,247,22, 22,177,13,23,219,2,23,218,1,87,94,23,218,1,247,22,154,14,249,247,22,
141,5,194,23,28,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42, 141,5,194,23,28,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,
41,36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,161,14, 41,36,34,32,43,89,162,8,44,37,59,2,26,222,33,44,27,249,22,164,14,
2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23, 2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,
196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23, 196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,
193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23, 193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,
197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1, 197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,
249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14, 249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,
2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23, 2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,
196,2,248,2,43,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22, 196,2,248,2,43,248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,
81,194,248,22,81,194,32,45,89,162,44,37,55,2,26,222,33,46,28,248,22, 81,194,248,22,81,194,32,45,89,162,44,37,55,2,26,222,33,46,28,248,22,
@ -546,12 +546,12 @@
22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90, 22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,
161,38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248,22,72,199, 161,38,36,11,248,2,45,248,22,73,196,249,22,7,249,22,71,248,22,72,199,
196,195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248, 196,195,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,
22,72,199,196,195,27,27,249,22,161,14,2,42,23,197,2,28,23,193,2,87, 22,72,199,196,195,27,27,249,22,164,14,2,42,23,197,2,28,23,193,2,87,
94,23,195,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27, 94,23,195,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,
249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71, 249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,
248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23, 248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,
196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27, 196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,
248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87, 248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,
94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,43,248,22,105,23,197, 94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,43,248,22,105,23,197,
1,248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,195,28,23,195,1, 1,248,22,81,194,248,22,81,194,248,22,81,194,248,22,81,195,28,23,195,1,
192,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159, 192,28,248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,
@ -563,20 +563,20 @@
249,22,71,248,22,72,199,196,195,87,95,28,248,22,185,4,195,12,250,22,151, 249,22,71,248,22,72,199,196,195,87,95,28,248,22,185,4,195,12,250,22,151,
9,2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101, 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, 45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,
27,27,250,22,150,2,80,159,42,43,38,248,22,186,14,247,22,154,12,11,28, 27,27,250,22,150,2,80,159,42,43,38,248,22,189,14,247,22,157,12,11,28,
23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250,22,148,2,80, 23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,250,22,148,2,80,
159,43,43,38,248,22,186,14,247,22,154,12,195,192,250,22,148,2,195,198,66, 159,43,43,38,248,22,189,14,247,22,157,12,195,192,250,22,148,2,195,198,66,
97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,150,9,11,196,195, 97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,150,9,11,196,195,
248,22,148,9,194,32,51,89,162,44,37,52,2,26,222,33,52,28,248,22,79, 248,22,148,9,194,32,51,89,162,44,37,52,2,26,222,33,52,28,248,22,79,
248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38, 248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,
36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9, 36,11,27,248,22,73,196,28,248,22,79,248,22,73,23,195,2,249,22,7,9,
248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,51,248,22,73,196,249, 248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,51,248,22,73,196,249,
22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199, 22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,22,72,199,
196,195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,161,14,2, 196,195,32,53,89,162,8,44,37,55,2,26,222,33,54,27,249,22,164,14,2,
42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196, 42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,
2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193, 2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,
2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197, 2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,
1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, 1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,
22,71,248,22,96,23,196,2,248,2,53,248,22,105,23,197,1,248,22,81,194, 22,71,248,22,96,23,196,2,248,2,53,248,22,105,23,197,1,248,22,81,194,
248,22,81,194,248,22,81,194,32,55,89,162,44,37,52,2,26,222,33,56,28, 248,22,81,194,248,22,81,194,32,55,89,162,44,37,52,2,26,222,33,56,28,
248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11, 248,22,79,248,22,73,23,195,2,249,22,7,9,248,22,72,195,91,159,38,11,
@ -584,10 +584,10 @@
22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,55,248,22, 22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,55,248,22,
73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248, 73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,248,
22,72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22, 22,72,199,196,195,32,57,89,162,8,44,37,55,2,26,222,33,58,27,249,22,
161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, 164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2, 96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,
28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22, 28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,22,
105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23, 105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,
194,1,249,22,71,248,22,96,23,196,2,248,2,57,248,22,105,23,197,1,248, 194,1,249,22,71,248,22,96,23,196,2,248,2,57,248,22,105,23,197,1,248,
22,81,194,248,22,81,194,248,22,81,194,28,249,22,181,6,194,6,1,1,46, 22,81,194,248,22,81,194,248,22,81,194,28,249,22,181,6,194,6,1,1,46,
2,22,28,249,22,181,6,194,6,2,2,46,46,62,117,112,192,0,11,35,114, 2,22,28,249,22,181,6,194,6,2,2,46,46,62,117,112,192,0,11,35,114,
@ -597,16 +597,16 @@
249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,61,248, 249,22,7,9,248,22,72,195,91,159,38,11,90,161,38,36,11,248,2,61,248,
22,73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71, 22,73,196,249,22,7,249,22,71,248,22,72,199,196,195,249,22,7,249,22,71,
248,22,72,199,196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249, 248,22,72,199,196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,
22,161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248, 22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,
22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196, 22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,
2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248, 2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,27,248,
22,105,23,197,1,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94, 22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,
23,194,1,249,22,71,248,22,96,23,196,2,248,2,63,248,22,105,23,197,1, 23,194,1,249,22,71,248,22,96,23,196,2,248,2,63,248,22,105,23,197,1,
248,22,81,194,248,22,81,194,248,22,81,194,32,65,89,162,8,44,37,55,2, 248,22,81,194,248,22,81,194,248,22,81,194,32,65,89,162,8,44,37,55,2,
26,222,33,66,27,249,22,161,14,2,42,23,196,2,28,23,193,2,87,94,23, 26,222,33,66,27,249,22,164,14,2,42,23,196,2,28,23,193,2,87,94,23,
194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22, 194,1,249,22,71,248,22,96,23,196,2,27,248,22,105,23,197,1,27,249,22,
161,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22, 164,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,71,248,22,
96,23,196,2,27,248,22,105,23,197,1,27,249,22,161,14,2,42,23,196,2, 96,23,196,2,27,248,22,105,23,197,1,27,249,22,164,14,2,42,23,196,2,
28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,65, 28,23,193,2,87,94,23,194,1,249,22,71,248,22,96,23,196,2,248,2,65,
248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,27,248,2, 248,22,105,23,197,1,248,22,81,194,248,22,81,194,248,22,81,194,27,248,2,
65,23,195,1,192,28,249,22,183,8,248,22,73,23,200,2,23,197,1,28,249, 65,23,195,1,192,28,249,22,183,8,248,22,73,23,200,2,23,197,1,28,249,
@ -614,9 +614,9 @@
99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126, 99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,
101,58,32,126,101,23,200,1,249,22,2,22,73,248,22,86,249,22,71,23,206, 101,58,32,126,101,23,200,1,249,22,2,22,73,248,22,86,249,22,71,23,206,
1,23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22, 1,23,202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,71,248,22,
186,14,247,22,154,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43, 189,14,247,22,157,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,166,4,23,196,1,249,247,22,142, 41,38,249,22,27,11,80,159,45,40,38,22,166,4,23,196,1,249,247,22,142,
5,23,198,1,248,22,59,248,22,178,13,23,198,1,87,94,28,28,248,22,174, 5,23,198,1,248,22,59,248,22,181,13,23,198,1,87,94,28,28,248,22,177,
13,23,196,2,10,248,22,129,5,23,196,2,12,28,23,197,2,250,22,150,9, 13,23,196,2,10,248,22,129,5,23,196,2,12,28,23,197,2,250,22,150,9,
11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200, 11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,
2,250,22,151,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104, 2,250,22,151,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,
@ -630,77 +630,77 @@
12,252,212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44, 12,252,212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,
37,46,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114, 37,46,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,56,23,198,2,27,250,22,150,2,80,159,43, 114,223,5,33,50,27,28,248,22,56,23,198,2,27,250,22,150,2,80,159,43,
44,38,249,22,71,23,203,2,247,22,152,14,11,28,23,193,2,192,87,94,23, 44,38,249,22,71,23,203,2,247,22,155,14,11,28,23,193,2,192,87,94,23,
193,1,91,159,38,11,90,161,38,36,11,27,248,22,62,23,202,2,248,2,51, 193,1,91,159,38,11,90,161,38,36,11,27,248,22,62,23,202,2,248,2,51,
248,2,53,23,195,1,27,251,80,159,47,54,38,2,18,23,202,1,28,248,22, 248,2,53,23,195,1,27,251,80,159,47,54,38,2,18,23,202,1,28,248,22,
79,23,199,2,23,199,2,248,22,72,23,199,2,28,248,22,79,23,199,2,9, 79,23,199,2,23,199,2,248,22,72,23,199,2,28,248,22,79,23,199,2,9,
248,22,73,23,199,2,249,22,128,14,23,195,1,28,248,22,79,23,197,1,87, 248,22,73,23,199,2,249,22,131,14,23,195,1,28,248,22,79,23,197,1,87,
94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,249,22,134,7,23,199, 94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,249,22,134,7,23,199,
1,6,4,4,46,114,107,116,28,248,22,175,6,23,198,2,87,94,23,194,1, 1,6,4,4,46,114,107,116,28,248,22,175,6,23,198,2,87,94,23,194,1,
27,27,28,23,200,2,28,249,22,181,8,23,202,2,80,158,43,47,80,158,41, 27,27,28,23,200,2,28,249,22,181,8,23,202,2,80,158,43,47,80,158,41,
48,27,248,22,187,4,23,202,2,28,248,22,174,13,23,194,2,91,159,39,11, 48,27,248,22,187,4,23,202,2,28,248,22,177,13,23,194,2,91,159,39,11,
90,161,39,36,11,248,22,131,14,23,197,1,87,95,83,160,38,11,80,158,45, 90,161,39,36,11,248,22,134,14,23,197,1,87,95,83,160,38,11,80,158,45,
47,23,204,2,83,160,38,11,80,158,45,48,192,192,11,11,28,23,193,2,192, 47,23,204,2,83,160,38,11,80,158,45,48,192,192,11,11,28,23,193,2,192,
87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87,94,23,193,1,247, 87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87,94,23,193,1,247,
22,151,14,27,250,22,150,2,80,159,44,44,38,249,22,71,23,204,2,23,199, 22,154,14,27,250,22,150,2,80,159,44,44,38,249,22,71,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, 2,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11,
248,2,55,248,2,57,23,203,2,250,22,1,22,128,14,23,199,1,249,22,85, 248,2,55,248,2,57,23,203,2,250,22,1,22,131,14,23,199,1,249,22,85,
249,22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,81, 249,22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,81,
27,248,22,178,6,23,202,2,28,249,22,180,3,194,39,28,249,22,181,6,2, 27,248,22,178,6,23,202,2,28,249,22,180,3,194,39,28,249,22,181,6,2,
28,249,22,133,7,204,249,22,168,3,198,39,249,22,134,7,250,22,133,7,205, 28,249,22,133,7,204,249,22,168,3,198,39,249,22,134,7,250,22,133,7,205,
36,249,22,168,3,199,39,2,29,200,200,28,248,22,174,13,23,198,2,87,94, 36,249,22,168,3,199,39,2,29,200,200,28,248,22,177,13,23,198,2,87,94,
23,194,1,28,248,22,133,14,23,198,2,91,159,39,11,90,161,39,36,11,248, 23,194,1,28,248,22,136,14,23,198,2,91,159,39,11,90,161,39,36,11,248,
22,131,14,23,201,2,87,95,23,195,1,23,193,1,28,249,22,161,14,2,60, 22,134,14,23,201,2,87,95,23,195,1,23,193,1,28,249,22,164,14,2,60,
248,22,179,13,23,197,1,249,80,159,44,53,38,23,202,2,2,30,23,200,2, 248,22,182,13,23,197,1,249,80,159,44,53,38,23,202,2,2,30,23,200,2,
248,22,81,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98, 248,22,81,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,181,8,248,22,72,23,200, 101,32,97,98,115,111,108,117,116,101,41,28,249,22,181,8,248,22,72,23,200,
2,2,27,27,250,22,150,2,80,159,43,44,38,249,22,71,23,203,2,247,22, 2,2,27,27,250,22,150,2,80,159,43,44,38,249,22,71,23,203,2,247,22,
152,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36, 155,14,11,28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,
11,27,248,22,96,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38, 11,27,248,22,96,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38,
11,28,248,22,79,248,22,98,23,203,2,28,248,22,79,23,194,2,249,22,165, 11,28,248,22,79,248,22,98,23,203,2,28,248,22,79,23,194,2,249,22,168,
14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197, 14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,
2,249,22,85,28,248,22,79,248,22,98,23,207,2,21,93,6,5,5,109,122, 2,249,22,85,28,248,22,79,248,22,98,23,207,2,21,93,6,5,5,109,122,
108,105,98,249,22,1,22,85,249,22,2,32,0,89,162,8,44,37,44,9,222, 108,105,98,249,22,1,22,85,249,22,2,32,0,89,162,8,44,37,44,9,222,
33,67,248,22,98,23,210,2,23,197,2,28,248,22,79,23,196,2,248,22,81, 33,67,248,22,98,23,210,2,23,197,2,28,248,22,79,23,196,2,248,22,81,
23,197,2,23,195,2,251,80,159,49,54,38,2,18,23,204,1,248,22,72,23, 23,197,2,23,195,2,251,80,159,49,54,38,2,18,23,204,1,248,22,72,23,
198,2,248,22,73,23,198,1,249,22,128,14,23,195,1,28,23,198,1,87,94, 198,2,248,22,73,23,198,1,249,22,131,14,23,195,1,28,23,198,1,87,94,
23,196,1,27,248,22,178,6,23,199,2,28,249,22,180,3,194,39,28,249,22, 23,196,1,27,248,22,178,6,23,199,2,28,249,22,180,3,194,39,28,249,22,
181,6,2,28,249,22,133,7,201,249,22,168,3,198,39,249,22,134,7,250,22, 181,6,2,28,249,22,133,7,201,249,22,168,3,198,39,249,22,134,7,250,22,
133,7,202,36,249,22,168,3,199,39,2,29,197,197,28,248,22,79,23,197,1, 133,7,202,36,249,22,168,3,199,39,2,29,197,197,28,248,22,79,23,197,1,
87,94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,28,249,22,165,14, 87,94,23,197,1,6,8,8,109,97,105,110,46,114,107,116,28,249,22,168,14,
0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22,178,6,23,199,2, 0,8,35,114,120,34,91,46,93,34,23,199,2,27,248,22,178,6,23,199,2,
28,249,22,180,3,194,39,28,249,22,181,6,2,28,249,22,133,7,201,249,22, 28,249,22,180,3,194,39,28,249,22,181,6,2,28,249,22,133,7,201,249,22,
168,3,198,39,249,22,134,7,250,22,133,7,202,36,249,22,168,3,199,39,2, 168,3,198,39,249,22,134,7,250,22,133,7,202,36,249,22,168,3,199,39,2,
29,197,197,249,22,134,7,23,199,1,6,4,4,46,114,107,116,28,249,22,181, 29,197,197,249,22,134,7,23,199,1,6,4,4,46,114,107,116,28,249,22,181,
8,248,22,72,23,200,2,64,102,105,108,101,27,249,22,135,14,248,22,139,14, 8,248,22,72,23,200,2,64,102,105,108,101,27,249,22,138,14,248,22,142,14,
248,22,96,23,202,2,27,28,23,202,2,28,249,22,181,8,23,204,2,80,158, 248,22,96,23,202,2,27,28,23,202,2,28,249,22,181,8,23,204,2,80,158,
45,47,80,158,43,48,27,248,22,187,4,23,204,2,28,248,22,174,13,23,194, 45,47,80,158,43,48,27,248,22,187,4,23,204,2,28,248,22,177,13,23,194,
2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,1,87,95,83,160, 2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,1,87,95,83,160,
38,11,80,158,47,47,23,206,2,83,160,38,11,80,158,47,48,192,192,11,11, 38,11,80,158,47,47,23,206,2,83,160,38,11,80,158,47,48,192,192,11,11,
28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87, 28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193,2,192,87,
94,23,193,1,247,22,151,14,91,159,39,11,90,161,39,36,11,248,22,131,14, 94,23,193,1,247,22,154,14,91,159,39,11,90,161,39,36,11,248,22,134,14,
23,197,2,87,95,23,195,1,23,193,1,28,249,22,161,14,2,60,248,22,179, 23,197,2,87,95,23,195,1,23,193,1,28,249,22,164,14,2,60,248,22,182,
13,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,12,87,94,28,28, 13,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,12,87,94,28,28,
248,22,174,13,23,194,2,10,248,22,133,8,23,194,2,87,94,23,199,1,12, 248,22,177,13,23,194,2,10,248,22,133,8,23,194,2,87,94,23,199,1,12,
28,23,199,2,250,22,150,9,67,114,101,113,117,105,114,101,249,22,159,7,6, 28,23,199,2,250,22,150,9,67,114,101,113,117,105,114,101,249,22,159,7,6,
17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, 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,72,23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22, 198,2,248,22,72,23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,
151,9,2,18,249,22,159,7,6,13,13,109,111,100,117,108,101,32,112,97,116, 151,9,2,18,249,22,159,7,6,13,13,109,111,100,117,108,101,32,112,97,116,
104,126,97,28,23,198,2,248,22,72,23,199,2,6,0,0,23,200,2,27,28, 104,126,97,28,23,198,2,248,22,72,23,199,2,6,0,0,23,200,2,27,28,
248,22,133,8,23,195,2,249,22,138,8,23,196,2,36,249,22,137,14,248,22, 248,22,133,8,23,195,2,249,22,138,8,23,196,2,36,249,22,140,14,248,22,
138,14,23,197,2,11,27,28,248,22,133,8,23,196,2,249,22,138,8,23,197, 141,14,23,197,2,11,27,28,248,22,133,8,23,196,2,249,22,138,8,23,197,
2,37,248,80,159,42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28, 2,37,248,80,159,42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28,
248,22,133,8,23,199,2,250,22,7,2,31,249,22,138,8,23,203,2,38,2, 248,22,133,8,23,199,2,250,22,7,2,31,249,22,138,8,23,203,2,38,2,
31,248,22,131,14,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,133, 31,248,22,134,14,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,133,
8,23,200,2,249,22,138,8,23,201,2,39,249,80,159,47,53,38,23,197,2, 8,23,200,2,249,22,138,8,23,201,2,39,249,80,159,47,53,38,23,197,2,
5,0,27,28,248,22,133,8,23,201,2,249,22,138,8,23,202,2,40,248,22, 5,0,27,28,248,22,133,8,23,201,2,249,22,138,8,23,202,2,40,248,22,
186,4,23,200,2,27,27,250,22,150,2,80,159,51,43,38,248,22,186,14,247, 186,4,23,200,2,27,27,250,22,150,2,80,159,51,43,38,248,22,189,14,247,
22,154,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94, 22,157,12,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,2,87,94,
250,22,148,2,80,159,52,43,38,248,22,186,14,247,22,154,12,195,192,87,95, 250,22,148,2,80,159,52,43,38,248,22,189,14,247,22,157,12,195,192,87,95,
28,23,208,1,27,250,22,150,2,23,197,2,197,11,28,23,193,1,12,87,95, 28,23,208,1,27,250,22,150,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, 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,186,14,247, 25,248,22,23,23,197,2,80,159,53,45,38,23,196,1,27,248,22,189,14,247,
22,154,12,249,22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12, 22,157,12,249,22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12,
11,2,3,33,68,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38, 11,2,3,33,68,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38,
32,0,89,162,44,37,42,9,222,33,69,80,159,49,59,37,89,162,44,36,51, 32,0,89,162,44,37,42,9,222,33,69,80,159,49,59,37,89,162,44,36,51,
9,227,13,9,8,4,3,33,70,250,22,148,2,23,197,1,197,10,12,28,28, 9,227,13,9,8,4,3,33,70,250,22,148,2,23,197,1,197,10,12,28,28,
@ -709,14 +709,14 @@
2,27,11,250,22,148,2,80,159,50,44,38,28,248,22,175,6,23,209,2,249, 2,27,11,250,22,148,2,80,159,50,44,38,28,248,22,175,6,23,209,2,249,
22,71,23,210,1,27,28,23,212,2,28,249,22,181,8,23,214,2,80,158,55, 22,71,23,210,1,27,28,23,212,2,28,249,22,181,8,23,214,2,80,158,55,
47,87,94,23,212,1,80,158,53,48,27,248,22,187,4,23,214,2,28,248,22, 47,87,94,23,212,1,80,158,53,48,27,248,22,187,4,23,214,2,28,248,22,
174,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,131,14,23,197,1, 177,13,23,194,2,91,159,39,11,90,161,39,36,11,248,22,134,14,23,197,1,
87,95,83,160,38,11,80,158,57,47,23,23,83,160,38,11,80,158,57,48,192, 87,95,83,160,38,11,80,158,57,47,23,23,83,160,38,11,80,158,57,48,192,
192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193, 192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,143,5,28,23,193,
2,192,87,94,23,193,1,247,22,151,14,249,22,71,23,210,1,247,22,152,14, 2,192,87,94,23,193,1,247,22,154,14,249,22,71,23,210,1,247,22,155,14,
252,22,135,8,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,87,96, 252,22,135,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, 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,165,4,80,159,37,51,38,248,22,142,5,80,159,37,37,37,248, 52,38,248,22,165,4,80,159,37,51,38,248,22,142,5,80,159,37,37,37,248,
22,145,13,80,159,37,42,37,83,160,38,11,80,158,36,50,248,80,159,37,58, 22,148,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, 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, 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,37,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115, 36,20,105,159,37,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115,

View File

@ -3404,6 +3404,7 @@ static int place_async_channel_val_SIZE(void *p, struct NewGC *gc) {
static int place_async_channel_val_MARK(void *p, struct NewGC *gc) { static int place_async_channel_val_MARK(void *p, struct NewGC *gc) {
Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p; Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p;
int i; int i;
gcMARK2(pac->msgs, gc);
for (i = pac->size; i--; ) for (i = pac->size; i--; )
gcMARK2(pac->msgs[i], gc); gcMARK2(pac->msgs[i], gc);
@ -3414,6 +3415,7 @@ static int place_async_channel_val_MARK(void *p, struct NewGC *gc) {
static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) { static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) {
Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p; Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p;
int i; int i;
gcFIXUP2(pac->msgs, gc);
for (i = pac->size; i--; ) for (i = pac->size; i--; )
gcFIXUP2(pac->msgs[i], gc); gcFIXUP2(pac->msgs[i], gc);
@ -3834,6 +3836,7 @@ static int mark_print_params_MARK(void *p, struct NewGC *gc) {
gcMARK2(pp->print_port, gc); gcMARK2(pp->print_port, gc);
gcMARK2(pp->print_buffer, gc); gcMARK2(pp->print_buffer, gc);
gcMARK2(pp->depth_delta, gc); gcMARK2(pp->depth_delta, gc);
gcMARK2(pp->uq_ht, gc);
return return
gcBYTES_TO_WORDS(sizeof(PrintParams)); gcBYTES_TO_WORDS(sizeof(PrintParams));
} }
@ -3844,6 +3847,7 @@ static int mark_print_params_FIXUP(void *p, struct NewGC *gc) {
gcFIXUP2(pp->print_port, gc); gcFIXUP2(pp->print_port, gc);
gcFIXUP2(pp->print_buffer, gc); gcFIXUP2(pp->print_buffer, gc);
gcFIXUP2(pp->depth_delta, gc); gcFIXUP2(pp->depth_delta, gc);
gcFIXUP2(pp->uq_ht, gc);
return return
gcBYTES_TO_WORDS(sizeof(PrintParams)); gcBYTES_TO_WORDS(sizeof(PrintParams));
} }

View File

@ -1564,6 +1564,7 @@ mark_print_params {
gcMARK2(pp->print_port, gc); gcMARK2(pp->print_port, gc);
gcMARK2(pp->print_buffer, gc); gcMARK2(pp->print_buffer, gc);
gcMARK2(pp->depth_delta, gc); gcMARK2(pp->depth_delta, gc);
gcMARK2(pp->uq_ht, gc);
size: size:
gcBYTES_TO_WORDS(sizeof(PrintParams)); gcBYTES_TO_WORDS(sizeof(PrintParams));
} }

View File

@ -3697,8 +3697,10 @@ static Scheme_Object *sch_default_global_port_print_handler(int argc, Scheme_Obj
{ {
if (!SCHEME_OUTPUT_PORTP(argv[1])) if (!SCHEME_OUTPUT_PORTP(argv[1]))
scheme_wrong_type("default-global-port-print-handler", "output-port", 1, argc, argv); scheme_wrong_type("default-global-port-print-handler", "output-port", 1, argc, argv);
if ((argc > 2) && !scheme_nonneg_exact_p(argv[2])) if ((argc > 2)
scheme_wrong_type("default-global-port-print-handler", "non-negative exact integer", && !SAME_OBJ(argv[2], scheme_make_integer(0))
&& !SAME_OBJ(argv[2], scheme_make_integer(1)))
scheme_wrong_type("default-global-port-print-handler", "0 or 1",
2, argc, argv); 2, argc, argv);
if (argc == 2) { if (argc == 2) {
@ -3772,8 +3774,9 @@ display_write(char *name,
if (argc > 2) { if (argc > 2) {
h = argv[2]; h = argv[2];
if (!scheme_nonneg_exact_p(h)) if (!SAME_OBJ(h, scheme_make_integer(0))
scheme_wrong_type(name, "non-negative exact integer", 2, argc, argv); && !SAME_OBJ(h, scheme_make_integer(1)))
scheme_wrong_type(name, "0 or 1", 2, argc, argv);
} else } else
h = scheme_make_integer(0); h = scheme_make_integer(0);

View File

@ -95,6 +95,7 @@ typedef struct Scheme_Print_Params {
Scheme_Object *print_port; Scheme_Object *print_port;
mz_jmp_buf *print_escape; mz_jmp_buf *print_escape;
Scheme_Object *depth_delta; /* for large qq depth */ Scheme_Object *depth_delta; /* for large qq depth */
Scheme_Hash_Table *uq_ht;
} PrintParams; } PrintParams;
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
@ -475,8 +476,12 @@ static Scheme_Object *check_cycle_k(void)
#endif #endif
static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht, PrintParams *pp) static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht, PrintParams *pp)
/* Results: 0x2 = cycle bit
0x1 = unquote bit */
{ {
Scheme_Type t; Scheme_Type t;
Scheme_Object *val;
int res, res2;
#ifdef DO_STACK_CHECK #ifdef DO_STACK_CHECK
{ {
@ -507,17 +512,27 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
|| (pp->print_hash_table || (pp->print_hash_table
&& (SAME_TYPE(t, scheme_hash_table_type) && (SAME_TYPE(t, scheme_hash_table_type)
|| SAME_TYPE(t, scheme_hash_tree_type)))) { || SAME_TYPE(t, scheme_hash_tree_type)))) {
if (scheme_hash_get(ht, obj)) val = scheme_hash_get(ht, obj);
return 1; if (val)
scheme_hash_set(ht, obj, (Scheme_Object *)0x1); return SCHEME_INT_VAL(val);
scheme_hash_set(ht, obj, scheme_make_integer(0x2));
} else } else
return 0; return 0;
if (SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj)) { if (SCHEME_PAIRP(obj)) {
if (check_cycles(SCHEME_CAR(obj), for_write, ht, pp)) res = check_cycles(SCHEME_CAR(obj), for_write, ht, pp);
return 1; if ((for_write < 3) && res)
if (check_cycles(SCHEME_CDR(obj), for_write, ht, pp)) return res;
return 1; res2 = check_cycles(SCHEME_CDR(obj), for_write, ht, pp);
res |= res2;
} else if (SCHEME_MUTABLE_PAIRP(obj)) {
res = check_cycles(SCHEME_CAR(obj), for_write, ht, pp);
if ((for_write < 3) && res)
return res;
res2 = check_cycles(SCHEME_CDR(obj), for_write, ht, pp);
res |= res2;
if (for_write >= 3)
res |= 0x1; /* always escape for qq printing */
} else if (SCHEME_CHAPERONE_BOXP(obj)) { } else if (SCHEME_CHAPERONE_BOXP(obj)) {
/* got here => printable */ /* got here => printable */
Scheme_Object *v; Scheme_Object *v;
@ -525,8 +540,7 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
v = SCHEME_BOX_VAL(obj); v = SCHEME_BOX_VAL(obj);
else else
v = scheme_unbox(obj); v = scheme_unbox(obj);
if (check_cycles(v, for_write, ht, pp)) res = check_cycles(v, for_write, ht, pp);
return 1;
} else if (SCHEME_CHAPERONE_VECTORP(obj)) { } else if (SCHEME_CHAPERONE_VECTORP(obj)) {
int i, len; int i, len;
Scheme_Object *v; Scheme_Object *v;
@ -535,29 +549,47 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
len = SCHEME_VEC_SIZE(obj); len = SCHEME_VEC_SIZE(obj);
else else
len = SCHEME_VEC_SIZE(SCHEME_CHAPERONE_VAL(obj)); len = SCHEME_VEC_SIZE(SCHEME_CHAPERONE_VAL(obj));
res = 0;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
if (SCHEME_VECTORP(obj)) if (SCHEME_VECTORP(obj))
v = SCHEME_VEC_ELS(obj)[i]; v = SCHEME_VEC_ELS(obj)[i];
else else
v = scheme_chaperone_vector_ref(obj, i); v = scheme_chaperone_vector_ref(obj, i);
if (check_cycles(v, for_write, ht, pp)) { res2 = check_cycles(v, for_write, ht, pp);
return 1; res |= res2;
} if ((for_write < 3) && res)
return res;
} }
} else if (SAME_TYPE(t, scheme_structure_type) } else if (SAME_TYPE(t, scheme_structure_type)
|| SAME_TYPE(t, scheme_proc_struct_type)) { || SAME_TYPE(t, scheme_proc_struct_type)) {
if (scheme_is_writable_struct(obj)) { if (scheme_is_print_as_constructor_struct(obj)) {
if (check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp)) /* Struct wants to be unquoted. */
return 1; if (pp->print_unreadable) {
res = check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp);
if (for_write >= 3)
res |= 0x1;
} else
res = 0;
} else if (scheme_is_writable_struct(obj)) {
/* A "writeable" struct can be quoted or not. */
if (pp->print_unreadable)
res = check_cycles(writable_struct_subs(obj, for_write, pp), for_write, ht, pp);
else
res = 0;
} else { } else {
/* got here => printable */ /* got here => printable */
int i = SCHEME_STRUCT_NUM_SLOTS(obj); int i = SCHEME_STRUCT_NUM_SLOTS(obj);
if ((for_write >= 3) && !SCHEME_PREFABP(obj))
res = 0x1;
else
res = 0;
while (i--) { while (i--) {
if (scheme_inspector_sees_part(obj, pp->inspector, i)) { if (scheme_inspector_sees_part(obj, pp->inspector, i)) {
if (check_cycles(((Scheme_Structure *)obj)->slots[i], for_write, ht, pp)) { res2 = check_cycles(((Scheme_Structure *)obj)->slots[i], for_write, ht, pp);
return 1; res |= res2;
} if ((for_write < 3) && res)
return res;
} }
} }
} }
@ -574,6 +606,7 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
keys = t->keys; keys = t->keys;
vals = t->vals; vals = t->vals;
res = 0;
for (i = 0; i < t->size; i++) { for (i = 0; i < t->size; i++) {
if (vals[i]) { if (vals[i]) {
key = keys[i]; key = keys[i];
@ -582,10 +615,14 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
else else
val = vals[i]; val = vals[i];
if (val) { if (val) {
if (check_cycles(key, for_write, ht, pp)) res2 = check_cycles(key, for_write, ht, pp);
return 1; res |= res2;
if (check_cycles(val, for_write, ht, pp)) if ((for_write < 3) && res)
return 1; return res;
res2 = check_cycles(val, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
} }
} }
} }
@ -600,31 +637,42 @@ static int check_cycles(Scheme_Object *obj, int for_write, Scheme_Hash_Table *ht
else else
t = (Scheme_Hash_Tree *)obj; t = (Scheme_Hash_Tree *)obj;
res = 0;
i = scheme_hash_tree_next(t, -1); i = scheme_hash_tree_next(t, -1);
while (i != -1) { while (i != -1) {
scheme_hash_tree_index(t, i, &key, &val); scheme_hash_tree_index(t, i, &key, &val);
if (!SAME_OBJ((Scheme_Object *)t, obj)) if (!SAME_OBJ((Scheme_Object *)t, obj))
val = scheme_chaperone_hash_traversal_get(obj, key); val = scheme_chaperone_hash_traversal_get(obj, key);
if (check_cycles(key, for_write, ht, pp)) res2 = check_cycles(key, for_write, ht, pp);
return 1; res |= res2;
if (check_cycles(val, for_write, ht, pp)) if ((for_write < 3) && res)
return 1; return res;
res2 = check_cycles(val, for_write, ht, pp);
res |= res2;
if ((for_write < 3) && res)
return res;
i = scheme_hash_tree_next(t, i); i = scheme_hash_tree_next(t, i);
} }
} } else
res = 0;
scheme_hash_set(ht, obj, NULL); scheme_hash_set(ht, obj, scheme_make_integer(res));
return 0; return res;
} }
/* The fast cycle-checker plays a dangerous game: it changes type /* The fast cycle-checker plays a dangerous game: it changes type
tags. No GCs can occur here, and no thread switches. If the fast tags. No GCs can occur here, and no thread switches. If the fast
version takes to long, we back out to the general case. (We don't version takes to long, we back out to the general case. (We don't
even check for stack overflow, so keep the max limit low.) */ even check for stack overflow, so keep the max limit low.)
A 0 result means no cycles, a 1 result means cycles, and a -1 result
means "unknown" (i.e., try slow path). When write is >= 3 (implying
qq-based printing), then a 0 result also implies that no expression
escapes are needed. */
#if !defined(MZ_USE_PLACES) #if !defined(MZ_USE_PLACES)
static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_checker_counter) static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_checker_counter, int write)
XFORM_SKIP_PROC XFORM_SKIP_PROC
{ {
Scheme_Type t; Scheme_Type t;
@ -637,15 +685,23 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
if ((*fast_checker_counter)-- < 0) if ((*fast_checker_counter)-- < 0)
return -1; return -1;
if (SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj)) { if (SCHEME_PAIRP(obj) || ((write < 3) && SCHEME_MUTABLE_PAIRP(obj))) {
obj->type = -t; obj->type = -t;
cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter); cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter, write);
if (!cycle) if (!cycle)
cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter); cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter, write);
obj->type = t;
} else if (SCHEME_MUTABLE_PAIRP(obj)) {
if (write >= 3)
return -1;
obj->type = -t;
cycle = check_cycles_fast(SCHEME_CAR(obj), pp, fast_checker_counter, write);
if (!cycle)
cycle = check_cycles_fast(SCHEME_CDR(obj), pp, fast_checker_counter, write);
obj->type = t; obj->type = t;
} else if (pp->print_box && SCHEME_BOXP(obj)) { } else if (pp->print_box && SCHEME_BOXP(obj)) {
obj->type = -t; obj->type = -t;
cycle = check_cycles_fast(SCHEME_BOX_VAL(obj), pp, fast_checker_counter); cycle = check_cycles_fast(SCHEME_BOX_VAL(obj), pp, fast_checker_counter, write);
obj->type = t; obj->type = t;
} else if (SCHEME_VECTORP(obj)) { } else if (SCHEME_VECTORP(obj)) {
int i, len; int i, len;
@ -653,7 +709,7 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
obj->type = -t; obj->type = -t;
len = SCHEME_VEC_SIZE(obj); len = SCHEME_VEC_SIZE(obj);
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
cycle = check_cycles_fast(SCHEME_VEC_ELS(obj)[i], pp, fast_checker_counter); cycle = check_cycles_fast(SCHEME_VEC_ELS(obj)[i], pp, fast_checker_counter, write);
if (cycle) if (cycle)
break; break;
} }
@ -669,10 +725,13 @@ static int check_cycles_fast(Scheme_Object *obj, PrintParams *pp, int *fast_chec
} else if (pp->print_struct && PRINTABLE_STRUCT(obj, pp)) { } else if (pp->print_struct && PRINTABLE_STRUCT(obj, pp)) {
int i = SCHEME_STRUCT_NUM_SLOTS(obj); int i = SCHEME_STRUCT_NUM_SLOTS(obj);
if ((write >= 3) && !SCHEME_PREFABP(obj))
return -1;
obj->type = -t; obj->type = -t;
while (i--) { while (i--) {
if (scheme_inspector_sees_part(obj, pp->inspector, i)) { if (scheme_inspector_sees_part(obj, pp->inspector, i)) {
cycle = check_cycles_fast(((Scheme_Structure *)obj)->slots[i], pp, fast_checker_counter); cycle = check_cycles_fast(((Scheme_Structure *)obj)->slots[i], pp, fast_checker_counter, write);
if (cycle) if (cycle)
break; break;
} }
@ -890,6 +949,7 @@ print_to_string(Scheme_Object *obj,
Scheme_Object *qq_depth) Scheme_Object *qq_depth)
{ {
Scheme_Hash_Table * volatile ht; Scheme_Hash_Table * volatile ht;
Scheme_Hash_Table *uq_ht;
Scheme_Object *v; Scheme_Object *v;
char *ca; char *ca;
int cycles; int cycles;
@ -994,19 +1054,22 @@ print_to_string(Scheme_Object *obj,
params.inspector = v; params.inspector = v;
} }
if (params.print_graph) uq_ht = NULL;
if (params.print_graph && (write < 3))
cycles = 1; cycles = 1;
else { else {
#ifdef MZ_USE_PLACES #ifdef MZ_USE_PLACES
cycles = -1; cycles = -1;
#else #else
int fast_checker_counter = 50; int fast_checker_counter = 50;
cycles = check_cycles_fast(obj, (PrintParams *)&params, &fast_checker_counter); cycles = check_cycles_fast(obj, (PrintParams *)&params, &fast_checker_counter, write);
#endif #endif
if (cycles == -1) { if ((cycles == -1) || (cycles && (write >= 3))) {
ht = scheme_make_hash_table(SCHEME_hash_ptr); uq_ht = scheme_make_hash_table(SCHEME_hash_ptr);
cycles = check_cycles(obj, write, ht, (PrintParams *)&params); cycles = check_cycles(obj, write, uq_ht, (PrintParams *)&params);
} } else if (!cycles && params.print_graph)
cycles = 1;
} }
if (cycles) if (cycles)
@ -1019,6 +1082,8 @@ print_to_string(Scheme_Object *obj,
else else
params.print_escape = NULL; params.print_escape = NULL;
params.uq_ht = uq_ht;
if ((maxl <= PRINT_MAXLEN_MIN) if ((maxl <= PRINT_MAXLEN_MIN)
|| !scheme_setjmp(escape)) || !scheme_setjmp(escape))
print(obj, write, 0, ht, NULL, (PrintParams *)&params); print(obj, write, 0, ht, NULL, (PrintParams *)&params);
@ -1654,22 +1719,35 @@ static void always_scheme(PrintParams *pp, int reset)
} }
} }
static int to_quoted(PrintParams *pp, int notdisplay, const char *quote) static int to_quoted(Scheme_Object *obj, PrintParams *pp, int notdisplay)
{ {
if (notdisplay == 3) { if (notdisplay == 3) {
print_utf8_string(pp, quote, 0, 1); if (!obj || !pp->uq_ht)
return notdisplay + 1; obj = scheme_make_integer(0);
else {
obj = scheme_hash_get(pp->uq_ht, obj);
if (!obj) obj = scheme_make_integer(0);
}
if (!(SCHEME_INT_VAL(obj) & 0x1)) {
print_utf8_string(pp, "'", 0, 1);
return notdisplay + 1;
} else
return notdisplay;
} else } else
return notdisplay; return notdisplay;
} }
static int to_unquoted(PrintParams *pp, int notdisplay) static int is_graph_point(Scheme_Hash_Table *ht, Scheme_Object *obj)
{ {
while (notdisplay > 3) { if (ht) {
print_utf8_string(pp, ",", 0, 1); long v;
--notdisplay; v = (long)scheme_hash_get(ht, obj);
} if ((v == 0) || (v == 1))
return notdisplay; return 0;
return 1;
} else
return 0;
} }
static int static int
@ -1846,9 +1924,9 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
|| SAME_OBJ(obj, unquote_splicing_symbol)) || SAME_OBJ(obj, unquote_splicing_symbol))
print_utf8_string(pp, ",'", 0, 2); print_utf8_string(pp, ",'", 0, 2);
else else
notdisplay = to_quoted(pp, notdisplay, "'"); notdisplay = to_quoted(NULL, pp, notdisplay);
} else } else
notdisplay = to_quoted(pp, notdisplay, "'"); notdisplay = to_quoted(NULL, pp, notdisplay);
} }
if (is_kw) if (is_kw)
@ -1976,7 +2054,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
if (compact) { if (compact) {
print_compact(pp, CPT_NULL); print_compact(pp, CPT_NULL);
} else { } else {
notdisplay = to_quoted(pp, notdisplay, "'"); notdisplay = to_quoted(NULL, pp, notdisplay);
if (pp->honu_mode) if (pp->honu_mode)
print_utf8_string(pp, "null", 0, 4); print_utf8_string(pp, "null", 0, 4);
else else
@ -1986,13 +2064,12 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} }
else if (SCHEME_PAIRP(obj)) else if (SCHEME_PAIRP(obj))
{ {
notdisplay = to_quoted(pp, notdisplay, "`"); notdisplay = to_quoted(obj, pp, notdisplay);
print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 0); print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 0);
closed = 1; closed = 1;
} }
else if (SCHEME_MUTABLE_PAIRP(obj)) else if (SCHEME_MUTABLE_PAIRP(obj))
{ {
notdisplay = to_quoted(pp, notdisplay, "`");
if (compact || !pp->print_unreadable) if (compact || !pp->print_unreadable)
cannot_print(pp, notdisplay, obj, ht, compact); cannot_print(pp, notdisplay, obj, ht, compact);
print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_mutable_pair_type, !pp->print_mpair_curly, 0); print_pair(obj, notdisplay, compact, ht, mt, pp, scheme_mutable_pair_type, !pp->print_mpair_curly, 0);
@ -2000,7 +2077,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} }
else if (SCHEME_CHAPERONE_VECTORP(obj)) else if (SCHEME_CHAPERONE_VECTORP(obj))
{ {
notdisplay = to_quoted(pp, notdisplay, "`"); notdisplay = to_quoted(obj, pp, notdisplay);
print_vector(obj, notdisplay, compact, ht, mt, pp, 0); print_vector(obj, notdisplay, compact, ht, mt, pp, 0);
closed = 1; closed = 1;
} }
@ -2014,14 +2091,19 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_compact(pp, CPT_BOX); print_compact(pp, CPT_BOX);
else { else {
always_scheme(pp, 1); always_scheme(pp, 1);
notdisplay = to_quoted(pp, notdisplay, "`"); notdisplay = to_quoted(obj, pp, notdisplay);
print_utf8_string(pp, "#&", 0, 2); if (notdisplay == 3)
print_utf8_string(pp, "(box ", 0, 5);
else
print_utf8_string(pp, "#&", 0, 2);
} }
if (SCHEME_BOXP(obj)) if (SCHEME_BOXP(obj))
content = SCHEME_BOX_VAL(obj); content = SCHEME_BOX_VAL(obj);
else else
content = scheme_unbox(obj); content = scheme_unbox(obj);
closed = print(content, notdisplay, compact, ht, mt, pp); closed = print(content, notdisplay, compact, ht, mt, pp);
if (notdisplay == 3)
print_utf8_string(pp, ")", 0, 1);
} }
} }
else if ((compact || pp->print_hash_table) else if ((compact || pp->print_hash_table)
@ -2048,8 +2130,11 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_compact_number(pp, 0); print_compact_number(pp, 0);
} else { } else {
always_scheme(pp, 1); always_scheme(pp, 1);
notdisplay = to_quoted(pp, notdisplay, "`"); notdisplay = to_quoted(obj, pp, notdisplay);
print_utf8_string(pp, "#hash", 0, 5); if (notdisplay == 3)
print_utf8_string(pp, "(hash ", 0, 6);
else
print_utf8_string(pp, "#hash", 0, 5);
if (SCHEME_HASHTP(obj)) { if (SCHEME_HASHTP(obj)) {
if (!scheme_is_hash_table_equal(obj)) { if (!scheme_is_hash_table_equal(obj)) {
if (scheme_is_hash_table_eqv(obj)) if (scheme_is_hash_table_eqv(obj))
@ -2065,7 +2150,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
print_utf8_string(pp, "eq", 0, 2); print_utf8_string(pp, "eq", 0, 2);
} }
} }
print_utf8_string(pp, "(", 0, 1); if (notdisplay != 3)
print_utf8_string(pp, "(", 0, 1);
} }
if (SCHEME_HASHTP(obj)) { if (SCHEME_HASHTP(obj)) {
@ -2108,21 +2194,28 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
if (!compact) { if (!compact) {
if (did_one) if (did_one)
print_utf8_string(pp, " ", 0, 1); print_utf8_string(pp, " ", 0, 1);
print_utf8_string(pp, "(", 0, 1); if (notdisplay != 3)
print_utf8_string(pp, "(", 0, 1);
} }
print(key, notdisplay, compact, ht, mt, pp); print(key, notdisplay, compact, ht, mt, pp);
if (!compact) if (!compact) {
print_utf8_string(pp, " . ", 0, 3); if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
print(val, notdisplay, compact, ht, mt, pp); print(val, notdisplay, compact, ht, mt, pp);
if (!compact) if (!compact && (notdisplay != 3))
print_utf8_string(pp, ")", 0, 1); print_utf8_string(pp, ")", 0, 1);
did_one++; did_one++;
} }
} }
} }
if (!compact) if (!compact && (notdisplay != 3))
print_utf8_string(pp, ")", 0, 1); print_utf8_string(pp, ")", 0, 1);
if (notdisplay == 3)
print_utf8_string(pp, ")", 0, 1);
closed = 1; closed = 1;
} }
@ -2167,6 +2260,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} else if (compact || !pp->print_unreadable) { } else if (compact || !pp->print_unreadable) {
cannot_print(pp, notdisplay, obj, ht, compact); cannot_print(pp, notdisplay, obj, ht, compact);
} else if (scheme_is_writable_struct(obj)) { } else if (scheme_is_writable_struct(obj)) {
if ((notdisplay == 3) && !scheme_is_print_as_constructor_struct(obj))
notdisplay = to_quoted(obj, pp, notdisplay);
custom_write_struct(obj, ht, mt, pp, notdisplay); custom_write_struct(obj, ht, mt, pp, notdisplay);
} else { } else {
int pb; int pb;
@ -2177,16 +2272,15 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
Scheme_Object *vec, *prefab; Scheme_Object *vec, *prefab;
prefab = ((Scheme_Structure *)obj)->stype->prefab_key; prefab = ((Scheme_Structure *)obj)->stype->prefab_key;
vec = scheme_struct_to_vector(obj, (notdisplay >= 3) ? qq_ellipses : NULL, pp->inspector); vec = scheme_struct_to_vector(obj, (notdisplay >= 3) ? qq_ellipses : NULL, pp->inspector);
if ((notdisplay >= 3) && !prefab) { if (prefab)
notdisplay = to_unquoted(pp, notdisplay); notdisplay = to_quoted(obj, pp, notdisplay);
if (notdisplay == 3) {
vec = scheme_vector_to_list(vec); vec = scheme_vector_to_list(vec);
vec = scheme_make_pair(scheme_object_name(obj), SCHEME_CDR(vec)); vec = scheme_make_pair(scheme_object_name(obj), SCHEME_CDR(vec));
print_pair(vec, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 1); print_pair(vec, notdisplay, compact, ht, mt, pp, scheme_pair_type, !pp->print_pair_curly, 1);
} else { } else {
if (prefab) { if (prefab)
SCHEME_VEC_ELS(vec)[0] = SCHEME_CDR(prefab); SCHEME_VEC_ELS(vec)[0] = SCHEME_CDR(prefab);
notdisplay = to_quoted(pp, notdisplay, "`");
}
print_vector(vec, notdisplay, compact, ht, mt, pp, !!prefab); print_vector(vec, notdisplay, compact, ht, mt, pp, !!prefab);
} }
closed = 1; closed = 1;
@ -3191,74 +3285,6 @@ print_byte_string(const char *str, int delta, int len, int notdisplay, PrintPara
} }
} }
static int is_special_reader_form(PrintParams *pp, int notdisplay, Scheme_Object *p)
{
Scheme_Object *v;
if (notdisplay && pp->print_reader) {
v = SCHEME_CAR(p);
p = SCHEME_CDR(p);
if (!SCHEME_PAIRP(p)) return 0;
p = SCHEME_CDR(p);
if (!SCHEME_NULLP(p)) return 0;
if (SCHEME_SYMBOLP(v)) {
if (SAME_OBJ(v, quote_symbol)
|| SAME_OBJ(v, quasiquote_symbol)
|| (SAME_OBJ(v, unquote_symbol) && (notdisplay != 4))
|| (SAME_OBJ(v, unquote_splicing_symbol) && (notdisplay != 4))
|| SAME_OBJ(v, syntax_symbol)
|| SAME_OBJ(v, quasisyntax_symbol)
|| SAME_OBJ(v, unsyntax_symbol)
|| SAME_OBJ(v, unsyntax_splicing_symbol))
return 1;
}
}
return 0;
}
static int print_special_reader_form(Scheme_Object *v, PrintParams *pp, int notdisplay)
{
const char *str;
int len;
if (SAME_OBJ(v, quote_symbol)) {
str = "'";
len = 1;
} else if (SAME_OBJ(v, quasiquote_symbol)) {
str = "`";
len = 1;
notdisplay++;
} else if (SAME_OBJ(v, unquote_symbol)) {
str = ",";
len = 1;
--notdisplay;
} else if (SAME_OBJ(v, unquote_splicing_symbol)) {
str = ",@";
len = 2;
--notdisplay;
} else if (SAME_OBJ(v, syntax_symbol)) {
str = "#'";
len = 2;
} else if (SAME_OBJ(v, quasisyntax_symbol)) {
str = "#`";
len = 2;
} else if (SAME_OBJ(v, unsyntax_symbol)) {
str = "#,";
len = 2;
} else if (SAME_OBJ(v, unsyntax_splicing_symbol)) {
str = "#,@";
len = 3;
} else {
str = "???";
len = 3;
}
print_utf8_string(pp, str, 0, len);
return notdisplay;
}
static void static void
print_pair(Scheme_Object *pair, int notdisplay, int compact, print_pair(Scheme_Object *pair, int notdisplay, int compact,
Scheme_Hash_Table *ht, Scheme_Hash_Table *ht,
@ -3276,7 +3302,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
pr = pair; pr = pair;
while (SAME_TYPE(SCHEME_TYPE(pr), pair_type)) { while (SAME_TYPE(SCHEME_TYPE(pr), pair_type)) {
if (ht) if (ht)
if ((long)scheme_hash_get(ht, pr) != 1) { if (is_graph_point(ht, pr)) {
c = -1; c = -1;
break; break;
} }
@ -3303,7 +3329,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
cdr = SCHEME_CDR(pair); cdr = SCHEME_CDR(pair);
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) { while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
if (ht) { if (ht) {
if ((long)scheme_hash_get(ht, cdr) != 1) { if (is_graph_point(ht, cdr)) {
/* This needs a tag */ /* This needs a tag */
break; break;
} }
@ -3330,7 +3356,7 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) { while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
print_utf8_string(pp, ", ", 0, 2); print_utf8_string(pp, ", ", 0, 2);
if (ht) { if (ht) {
if ((long)scheme_hash_get(ht, cdr) != 1) { if (is_graph_point(ht, cdr)) {
/* This needs a tag */ /* This needs a tag */
(void)print(cdr, notdisplay, compact, ht, mt, pp); (void)print(cdr, notdisplay, compact, ht, mt, pp);
break; break;
@ -3355,13 +3381,22 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
if (!super_compact) if (!super_compact)
print_compact(pp, CPT_PAIR); print_compact(pp, CPT_PAIR);
} else { } else {
if (round_parens) { if ((notdisplay == 3) && !first_unquoted) {
if (!first_unquoted && is_special_reader_form(pp, notdisplay, pair)) { if (SAME_TYPE(pair_type, scheme_pair_type)) {
notdisplay = print_special_reader_form(SCHEME_CAR(pair), pp, notdisplay); if (scheme_is_list(pair))
(void)print(SCHEME_CADR(pair), notdisplay, compact, ht, mt, pp); print_utf8_string(pp,"(list ", 0, 6);
return; else if (!SCHEME_PAIRP(SCHEME_CDR(pair))
} else || is_graph_point(ht, SCHEME_CDR(pair)))
print_utf8_string(pp,"(", 0, 1); print_utf8_string(pp,"(cons ", 0, 6);
else
print_utf8_string(pp,"(list* ", 0, 7);
} else {
pair_type = -1;
print_utf8_string(pp,"(mcons ", 0, 7);
}
round_parens = 1;
} else if (round_parens) {
print_utf8_string(pp,"(", 0, 1);
} else } else
print_utf8_string(pp,"{", 0, 1); print_utf8_string(pp,"{", 0, 1);
} }
@ -3369,13 +3404,16 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
print(SCHEME_CAR(pair), (first_unquoted ? 1 : notdisplay), compact, ht, mt, pp); print(SCHEME_CAR(pair), (first_unquoted ? 1 : notdisplay), compact, ht, mt, pp);
cdr = SCHEME_CDR(pair); cdr = SCHEME_CDR(pair);
while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type) while (SAME_TYPE(SCHEME_TYPE(cdr), pair_type)) {
&& !is_special_reader_form(pp, notdisplay, pair)) {
if (ht && !super_compact) { if (ht && !super_compact) {
if ((long)scheme_hash_get(ht, cdr) != 1) { if (is_graph_point(ht, cdr)) {
/* This needs a tag */ /* This needs a tag */
if (!compact) if (!compact) {
print_utf8_string(pp, " . ", 0, 3); if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
(void)print(cdr, notdisplay, compact, ht, mt, pp); (void)print(cdr, notdisplay, compact, ht, mt, pp);
if (!compact) { if (!compact) {
if (round_parens) if (round_parens)
@ -3395,8 +3433,12 @@ print_pair(Scheme_Object *pair, int notdisplay, int compact,
} }
if (!SCHEME_NULLP(cdr)) { if (!SCHEME_NULLP(cdr)) {
if (!compact) if (!compact) {
print_utf8_string(pp, " . ", 0, 3); if (notdisplay == 3)
print_utf8_string(pp, " ", 0, 1);
else
print_utf8_string(pp, " . ", 0, 3);
}
print(cdr, notdisplay, compact, ht, mt, pp); print(cdr, notdisplay, compact, ht, mt, pp);
} else if (compact && (super_compact < 1)) } else if (compact && (super_compact < 1))
print_compact(pp, CPT_NULL); print_compact(pp, CPT_NULL);
@ -3440,7 +3482,7 @@ print_vector(Scheme_Object *vec, int notdisplay, int compact,
if (as_prefab) { if (as_prefab) {
print_utf8_string(pp, "#s(", 0, 3); print_utf8_string(pp, "#s(", 0, 3);
} else if (notdisplay && pp->print_vec_shorthand) { } else if (notdisplay && pp->print_vec_shorthand && (notdisplay != 3)) {
if (size == 0) { if (size == 0) {
if (pp->honu_mode) if (pp->honu_mode)
print_utf8_string(pp, "vectorN(0", 0, 7); print_utf8_string(pp, "vectorN(0", 0, 7);
@ -3454,6 +3496,8 @@ print_vector(Scheme_Object *vec, int notdisplay, int compact,
} }
} else if (pp->honu_mode) } else if (pp->honu_mode)
print_utf8_string(pp, "vector(", 0, 7); print_utf8_string(pp, "vector(", 0, 7);
else if (notdisplay == 3)
print_utf8_string(pp, "(vector ", 0, 8);
else else
print_utf8_string(pp, "#(", 0, 2); print_utf8_string(pp, "#(", 0, 2);
} }
@ -3597,7 +3641,8 @@ static Scheme_Object *accum_write(void *_b, int argc, Scheme_Object **argv)
static Scheme_Object *writable_struct_subs(Scheme_Object *s, int for_write, PrintParams *pp) static Scheme_Object *writable_struct_subs(Scheme_Object *s, int for_write, PrintParams *pp)
{ {
Scheme_Object *v, *o, *a[3], *b, *accum_proc; Scheme_Object *v, *o, *a[3], *b;
Scheme_Object *d_accum_proc, *w_accum_proc, *p_accum_proc;
Scheme_Output_Port *op; Scheme_Output_Port *op;
v = scheme_is_writable_struct(s); v = scheme_is_writable_struct(s);
@ -3608,14 +3653,22 @@ static Scheme_Object *writable_struct_subs(Scheme_Object *s, int for_write, Prin
op = (Scheme_Output_Port *)o; op = (Scheme_Output_Port *)o;
b = scheme_box(scheme_null); b = scheme_box(scheme_null);
accum_proc = scheme_make_closed_prim_w_arity(accum_write, d_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b, b,
"custom-write-recur-handler", "custom-display-recur-handler",
2, 2); 2, 2);
w_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b,
"custom-write-recur-handler",
2, 2);
p_accum_proc = scheme_make_closed_prim_w_arity(accum_write,
b,
"custom-print-recur-handler",
2, 3);
op->display_handler = accum_proc; op->display_handler = d_accum_proc;
op->write_handler = accum_proc; op->write_handler = w_accum_proc;
op->print_handler = accum_proc; op->print_handler = p_accum_proc;
a[0] = s; a[0] = s;
a[1] = o; a[1] = o;
@ -3651,7 +3704,7 @@ static Scheme_Object *custom_recur(int notdisplay, void *_vec, int argc, Scheme_
if (!SCHEME_OUTPORTP(argv[1])) { if (!SCHEME_OUTPORTP(argv[1])) {
scheme_wrong_type((notdisplay > 1) scheme_wrong_type((notdisplay > 1)
? "print/recursive" ? "print/recursive"
: (notdisplay ? "write/recusrive" : "display/recursive"), : (notdisplay ? "write/recursive" : "display/recursive"),
"output-port", 1, argc, argv); "output-port", 1, argc, argv);
return NULL; return NULL;
} }

View File

@ -539,7 +539,7 @@ void scheme_init_read(Scheme_Env *env)
GLOBAL_PARAMETER("print-honu", print_honu, MZCONFIG_HONU_MODE, env); GLOBAL_PARAMETER("print-honu", print_honu, MZCONFIG_HONU_MODE, env);
GLOBAL_PARAMETER("print-syntax-width", print_syntax_width, MZCONFIG_PRINT_SYNTAX_WIDTH, env); GLOBAL_PARAMETER("print-syntax-width", print_syntax_width, MZCONFIG_PRINT_SYNTAX_WIDTH, env);
GLOBAL_PARAMETER("print-reader-abbreviations", print_reader, MZCONFIG_PRINT_READER, env); GLOBAL_PARAMETER("print-reader-abbreviations", print_reader, MZCONFIG_PRINT_READER, env);
GLOBAL_PARAMETER("print-as-quasiquote", print_as_qq, MZCONFIG_PRINT_AS_QQ, env); GLOBAL_PARAMETER("print-as-expression", print_as_qq, MZCONFIG_PRINT_AS_QQ, env);
GLOBAL_PRIM_W_ARITY("make-readtable", make_readtable, 1, -1, env); GLOBAL_PRIM_W_ARITY("make-readtable", make_readtable, 1, -1, env);
GLOBAL_FOLDING_PRIM("readtable?", readtable_p, 1, 1, 1, env); GLOBAL_FOLDING_PRIM("readtable?", readtable_p, 1, 1, 1, env);
@ -766,7 +766,7 @@ print_reader(int argc, Scheme_Object *argv[])
static Scheme_Object * static Scheme_Object *
print_as_qq(int argc, Scheme_Object *argv[]) print_as_qq(int argc, Scheme_Object *argv[])
{ {
DO_CHAR_PARAM("print-as-quasiquote", MZCONFIG_PRINT_AS_QQ); DO_CHAR_PARAM("print-as-expression", MZCONFIG_PRINT_AS_QQ);
} }
static Scheme_Object *good_syntax_width(int c, Scheme_Object **argv) static Scheme_Object *good_syntax_width(int c, Scheme_Object **argv)

View File

@ -11,9 +11,9 @@
EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP
can be set to 1 again. */ can be set to 1 again. */
#define USE_COMPILED_STARTUP 0 #define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 992 #define EXPECTED_PRIM_COUNT 995
#define EXPECTED_UNSAFE_COUNT 65 #define EXPECTED_UNSAFE_COUNT 65
#define EXPECTED_FLFXNUM_COUNT 53 #define EXPECTED_FLFXNUM_COUNT 53

View File

@ -719,6 +719,7 @@ Scheme_Object *scheme_proc_struct_name_source(Scheme_Object *a);
Scheme_Object *scheme_object_name(Scheme_Object *a); Scheme_Object *scheme_object_name(Scheme_Object *a);
Scheme_Object *scheme_is_writable_struct(Scheme_Object *s); Scheme_Object *scheme_is_writable_struct(Scheme_Object *s);
Scheme_Object *scheme_is_print_as_constructor_struct(Scheme_Object *s);
#define SCHEME_STRUCT_INSPECTOR(obj) (((Scheme_Structure *)obj)->stype->inspector) #define SCHEME_STRUCT_INSPECTOR(obj) (((Scheme_Structure *)obj)->stype->inspector)

View File

@ -13,12 +13,12 @@
consistently.) consistently.)
*/ */
#define MZSCHEME_VERSION "4.2.5.13" #define MZSCHEME_VERSION "4.2.5.14"
#define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_X 4
#define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 5 #define MZSCHEME_VERSION_Z 5
#define MZSCHEME_VERSION_W 13 #define MZSCHEME_VERSION_W 14
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -40,6 +40,7 @@ READ_ONLY Scheme_Object *scheme_write_special_symbol;
READ_ONLY static Scheme_Object *location_struct; READ_ONLY static Scheme_Object *location_struct;
READ_ONLY static Scheme_Object *write_property; READ_ONLY static Scheme_Object *write_property;
READ_ONLY static Scheme_Object *print_as_constructor_property;
READ_ONLY static Scheme_Object *evt_property; READ_ONLY static Scheme_Object *evt_property;
READ_ONLY static Scheme_Object *proc_property; READ_ONLY static Scheme_Object *proc_property;
READ_ONLY static Scheme_Object *rename_transformer_property; READ_ONLY static Scheme_Object *rename_transformer_property;
@ -87,6 +88,7 @@ static Scheme_Object *chaperone_property_p(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_equal_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_equal_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_print_as_constructor_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_output_port_property_value_ok(int argc, Scheme_Object *argv[]);
static Scheme_Object *check_rename_transformer_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_rename_transformer_property_value_ok(int argc, Scheme_Object *argv[]);
@ -284,6 +286,22 @@ scheme_init_struct (Scheme_Env *env)
scheme_add_global_constant("custom-write-accessor", access, env); scheme_add_global_constant("custom-write-accessor", access, env);
} }
REGISTER_SO(print_as_constructor_property);
{
Scheme_Object *a[2], *pred, *access;
guard = scheme_make_prim_w_arity(check_print_as_constructor_property_value_ok,
"guard-for-prop:custom-print-as-constructor",
2, 2);
a[0] = scheme_intern_symbol("custom-print-as-constructor");
a[1] = guard;
print_as_constructor_property = make_struct_type_property_from_c(2, a, &pred, &access,
scheme_struct_property_type);
scheme_add_global_constant("prop:custom-print-as-constructor", print_as_constructor_property, env);
scheme_add_global_constant("custom-print-as-constructor?", pred, env);
scheme_add_global_constant("custom-print-as-constructor-accessor", access, env);
}
REGISTER_SO(evt_property); REGISTER_SO(evt_property);
{ {
guard = scheme_make_prim_w_arity(check_evt_property_value_ok, guard = scheme_make_prim_w_arity(check_evt_property_value_ok,
@ -1463,11 +1481,26 @@ static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *arg
return v; return v;
} }
static Scheme_Object *check_print_as_constructor_property_value_ok(int argc, Scheme_Object *argv[])
{
if (SCHEME_TRUEP(argv[0]))
return scheme_true;
else
return scheme_false;
}
Scheme_Object *scheme_is_writable_struct(Scheme_Object *s) Scheme_Object *scheme_is_writable_struct(Scheme_Object *s)
{ {
return scheme_struct_type_property_ref(write_property, s); return scheme_struct_type_property_ref(write_property, s);
} }
Scheme_Object *scheme_is_print_as_constructor_struct(Scheme_Object *s)
{
s = scheme_struct_type_property_ref(print_as_constructor_property, s);
if (!s || SCHEME_FALSEP(s)) return NULL;
return scheme_true;
}
/*========================================================================*/ /*========================================================================*/
/* rename and set! transformer properties */ /* rename and set! transformer properties */
/*========================================================================*/ /*========================================================================*/