diff --git a/collects/scribblings/reference/threads.scrbl b/collects/scribblings/reference/threads.scrbl index b0265a5cd1..883582a449 100644 --- a/collects/scribblings/reference/threads.scrbl +++ b/collects/scribblings/reference/threads.scrbl @@ -233,15 +233,16 @@ asynchronous channel. @margin-note/ref{See also @secref["async-channel"].} @defproc[(thread-send [thd thread?] [v any/c] - [fail-thunk (-> any) + [fail-thunk (or/c (-> any) false/c) (lambda () (raise-mismatch-error ....))]) any]{ Queues @scheme[v] as a message to @scheme[thd] without blocking. If -the message is queued, the result is @|void-const|. If @scheme[thd] is +the message is queued, the result is @|void-const|. If @scheme[thd] stops running---as in @scheme[thread-running?]---before the message is -queued, then @scheme[fail-thunk] is called (through a tail call) to -produce the result.} +queued, then @scheme[fail-thunk] is called (through a tail call) if is +a procedure to produce the result, or @scheme[#f] is returned if +@scheme[fail-thunk] is @scheme[#f].} @defproc[(thread-receive) any/c]{ @@ -259,3 +260,9 @@ or returns @scheme[#f] immediately if no message is available.} Returns a constant @tech{synchronizable event} (see @secref["sync"]) that becomes ready when the synchronizing thread has a message to receive. The event result is itself.} + +@defproc[(thread-rewind-receive [lst list?]) void?]{ + +Pushes the elements of @scheme[lst] back onto the front of the current +thread's queue. The elements are pushed one by one, so that the first +available message is the last element of @scheme[lst].} diff --git a/collects/tests/mzscheme/sync.ss b/collects/tests/mzscheme/sync.ss index ce37470a7e..afd819bc25 100644 --- a/collects/tests/mzscheme/sync.ss +++ b/collects/tests/mzscheme/sync.ss @@ -702,6 +702,20 @@ (sync (system-idle-evt)) (thread-send t 35)))) (test 35 thread-receive) +(test #f thread-try-receive) +(test (void) thread-rewind-receive '(1 2 3)) +(test 3 thread-try-receive) +(test 2 thread-try-receive) +(test (void) thread-rewind-receive '(4)) +(test 4 thread-try-receive) +(test 1 thread-try-receive) +(test #f thread-try-receive) +(test (void) thread-rewind-receive (vector->list (make-vector 500 'x))) +(let loop ([n 500]) + (unless (zero? n) + (test 'x thread-try-receive) + (loop (sub1 n)))) +(test #f thread-try-receive) (let* ([s #f] [t1 (let ([t (current-thread)]) (thread (lambda () diff --git a/collects/tests/mzscheme/testing.ss b/collects/tests/mzscheme/testing.ss index 3c9f22ea60..79fab3ab39 100644 --- a/collects/tests/mzscheme/testing.ss +++ b/collects/tests/mzscheme/testing.ss @@ -306,8 +306,8 @@ transcript. (printf "\n~aPerformed ~a expression tests (~a ~a, ~a ~a)\n" Section-prefix (+ number-of-tests number-of-error-tests) - number-of-tests "good expressions" - number-of-error-tests "bad expressions") + number-of-tests "value expressions" + number-of-error-tests "exn expressions") (printf "~aand ~a exception field tests.\n\n" Section-prefix number-of-exn-tests) diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 85743cde54..229a9f05f9 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,48,50,0,0,0,1,0,0,6,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,49,50,0,0,0,1,0,0,6,0, 9,0,14,0,17,0,24,0,31,0,35,0,48,0,55,0,60,0,65,0,69, 0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0, 155,0,177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107, @@ -14,11 +14,11 @@ 117,101,115,61,120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108, 97,109,98,100,97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105, 111,110,45,107,101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101, -115,98,10,34,11,8,164,207,94,159,2,16,34,34,159,2,15,34,34,16,20, +115,98,10,34,11,8,167,207,94,159,2,16,34,34,159,2,15,34,34,16,20, 2,3,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2,2, 9,2,2,2,10,2,2,2,4,2,2,2,11,2,2,2,12,2,2,97,35, -11,8,164,207,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, -2,2,13,97,10,11,11,8,164,207,16,0,97,10,36,11,8,164,207,16,0, +11,8,167,207,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, +2,2,13,97,10,11,11,8,167,207,16,0,97,10,36,11,8,167,207,16,0, 13,16,4,34,29,11,11,2,2,11,18,98,64,104,101,114,101,8,31,8,30, 8,29,8,28,8,27,27,248,22,180,3,23,196,1,249,22,173,3,80,158,37, 34,251,22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90, @@ -28,14 +28,14 @@ 35,34,35,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,173,3, 80,158,37,34,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,12,248, 22,65,23,202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4, -11,11,2,18,3,1,7,101,110,118,55,51,48,53,16,4,11,11,2,19,3, -1,7,101,110,118,55,51,48,54,27,248,22,65,248,22,180,3,23,197,1,28, +11,11,2,18,3,1,7,101,110,118,55,51,49,54,16,4,11,11,2,19,3, +1,7,101,110,118,55,51,49,55,27,248,22,65,248,22,180,3,23,197,1,28, 248,22,71,23,194,2,20,15,159,35,34,35,28,248,22,71,248,22,65,23,195, 2,248,22,64,193,249,22,173,3,80,158,37,34,250,22,73,2,20,248,22,73, 249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,2,21, 2,21,249,22,63,2,4,248,22,65,23,205,1,18,100,11,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,48,56, -16,4,11,11,2,19,3,1,7,101,110,118,55,51,48,57,248,22,180,3,193, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,49,57, +16,4,11,11,2,19,3,1,7,101,110,118,55,51,50,48,248,22,180,3,193, 27,248,22,180,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, 248,22,65,248,22,180,3,23,197,1,249,22,173,3,80,158,37,34,28,248,22, 51,248,22,174,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44, @@ -65,8 +65,8 @@ 65,202,251,22,73,2,17,28,249,22,140,8,248,22,174,3,248,22,64,23,201, 2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22, 65,23,201,1,249,22,63,2,3,248,22,65,23,203,1,99,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,51,49, -16,4,11,11,2,19,3,1,7,101,110,118,55,51,51,50,18,158,94,10,64, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,52,50, +16,4,11,11,2,19,3,1,7,101,110,118,55,51,52,51,18,158,94,10,64, 118,111,105,100,8,47,27,248,22,65,248,22,180,3,196,249,22,173,3,80,158, 37,34,28,248,22,51,248,22,174,3,248,22,64,197,250,22,73,2,26,248,22, 73,248,22,64,199,248,22,88,198,27,248,22,174,3,248,22,64,197,250,22,73, @@ -100,7 +100,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2046); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,48,60,0,0,0,1,0,0,3,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,49,60,0,0,0,1,0,0,3,0, 16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169, 0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1, 112,1,157,1,202,1,226,1,9,2,11,2,68,2,158,3,167,3,208,3,42, @@ -132,169 +132,169 @@ 103,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,32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158, -35,49,250,80,158,38,50,249,22,27,11,80,158,40,49,22,146,12,10,248,22, +35,49,250,80,158,38,50,249,22,27,11,80,158,40,49,22,147,12,10,248,22, 188,4,23,196,2,28,248,22,166,5,23,194,2,12,87,94,248,22,143,8,23, 194,1,248,80,159,36,53,35,195,28,248,22,71,23,195,2,9,27,248,22,64, -23,196,2,27,28,248,22,191,12,23,195,2,23,194,1,28,248,22,190,12,23, -195,2,249,22,128,13,23,196,1,250,80,158,41,47,248,22,142,13,2,20,11, -10,250,80,158,39,47,248,22,142,13,2,20,23,197,1,10,28,23,193,2,249, -22,63,248,22,130,13,249,22,128,13,23,198,1,247,22,143,13,27,248,22,65, +23,196,2,27,28,248,22,128,13,23,195,2,23,194,1,28,248,22,191,12,23, +195,2,249,22,129,13,23,196,1,250,80,158,41,47,248,22,143,13,2,20,11, +10,250,80,158,39,47,248,22,143,13,2,20,23,197,1,10,28,23,193,2,249, +22,63,248,22,131,13,249,22,129,13,23,198,1,247,22,144,13,27,248,22,65, 23,200,1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248, -22,191,12,23,195,2,23,194,1,28,248,22,190,12,23,195,2,249,22,128,13, -23,196,1,250,80,158,46,47,248,22,142,13,2,20,11,10,250,80,158,44,47, -248,22,142,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,130,13, -249,22,128,13,23,198,1,247,22,143,13,248,80,159,44,52,35,248,22,65,23, +22,128,13,23,195,2,23,194,1,28,248,22,191,12,23,195,2,249,22,129,13, +23,196,1,250,80,158,46,47,248,22,143,13,2,20,11,10,250,80,158,44,47, +248,22,143,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,131,13, +249,22,129,13,23,198,1,247,22,144,13,248,80,159,44,52,35,248,22,65,23, 199,1,87,94,23,193,1,248,80,159,42,52,35,248,22,65,23,197,1,87,94, 23,193,1,27,248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22, -64,23,195,2,27,28,248,22,191,12,23,195,2,23,194,1,28,248,22,190,12, -23,195,2,249,22,128,13,23,196,1,250,80,158,44,47,248,22,142,13,2,20, -11,10,250,80,158,42,47,248,22,142,13,2,20,23,197,1,10,28,23,193,2, -249,22,63,248,22,130,13,249,22,128,13,23,198,1,247,22,143,13,248,80,159, +64,23,195,2,27,28,248,22,128,13,23,195,2,23,194,1,28,248,22,191,12, +23,195,2,249,22,129,13,23,196,1,250,80,158,44,47,248,22,143,13,2,20, +11,10,250,80,158,42,47,248,22,143,13,2,20,23,197,1,10,28,23,193,2, +249,22,63,248,22,131,13,249,22,129,13,23,198,1,247,22,144,13,248,80,159, 42,52,35,248,22,65,23,199,1,248,80,159,40,52,35,248,22,65,196,249,80, -159,36,37,35,2,7,195,27,248,22,167,12,23,195,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,135,6,23,195,2,27,248,22,189,12,195,28,192,192, -248,22,190,12,195,11,87,94,28,28,248,22,168,12,23,195,2,10,27,248,22, -167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, -22,190,12,23,197,2,11,12,250,22,170,8,76,110,111,114,109,97,108,45,112, +159,36,37,35,2,7,195,27,248,22,168,12,23,195,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,195,2,27,248,22,190,12,195,28,192,192, +248,22,191,12,195,11,87,94,28,28,248,22,169,12,23,195,2,10,27,248,22, +168,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,190,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,191,12,23,197,2,11,12,250,22,170,8,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,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,168,12,23, -195,2,249,22,140,8,248,22,169,12,23,197,2,2,21,249,22,140,8,247,22, +112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,248,22,169,12,23, +195,2,249,22,140,8,248,22,170,12,23,197,2,2,21,249,22,140,8,247,22, 154,7,2,21,27,28,248,22,135,6,23,196,2,23,195,2,248,22,144,7,248, -22,172,12,23,197,2,28,249,22,155,13,0,21,35,114,120,34,94,91,92,92, +22,173,12,23,197,2,28,249,22,156,13,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,135,6, -195,248,22,175,12,195,194,27,248,22,174,6,23,195,1,249,22,176,12,248,22, -147,7,250,22,161,13,0,6,35,114,120,34,47,34,28,249,22,155,13,0,22, +195,248,22,176,12,195,194,27,248,22,174,6,23,195,1,249,22,177,12,248,22, +147,7,250,22,162,13,0,6,35,114,120,34,47,34,28,249,22,156,13,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,2,23,199,1,250,22,161,13,0,19,35,114,120,34,91,32,46,93, +34,23,201,2,23,199,1,250,22,162,13,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,158, -42,35,2,21,28,248,22,135,6,194,248,22,175,12,194,193,87,94,28,27,248, -22,167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, -23,196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,190,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2, -28,248,22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6, +42,35,2,21,28,248,22,135,6,194,248,22,176,12,194,193,87,94,28,27,248, +22,168,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,190,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,191,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2, +28,248,22,190,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6, 250,22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,28,27,248,22, -167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, -22,190,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2,28, -248,22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250, +168,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,190,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,191,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2,28, +248,22,190,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250, 22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94,28,27,248, -22,167,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, -23,196,2,27,248,22,189,12,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,190,12,23,197,2,11,12,250,22,170,8,195,2,22,23,197,2,28,248, -22,189,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250,22, +22,168,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,190,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,191,12,23,197,2,11,12,250,22,170,8,195,2,22,23,197,2,28,248, +22,190,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250,22, 183,6,2,23,199,23,201,1,247,22,23,249,22,3,89,162,42,35,48,9,223, 2,33,35,196,248,22,187,10,249,22,162,10,23,196,1,247,22,23,87,94,87, 94,249,80,159,36,37,35,2,7,195,249,22,3,80,159,36,51,35,196,251,80, 159,38,40,35,2,7,32,0,89,162,42,35,43,9,222,33,37,197,198,32,39, 89,162,42,40,57,65,99,108,111,111,112,222,33,40,28,248,22,71,23,199,2, 87,94,23,198,1,248,23,196,1,251,22,183,6,2,24,23,199,1,28,248,22, -71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,185,12,23,204,1, -23,205,1,23,198,1,27,249,22,185,12,248,22,64,23,202,2,23,199,2,28, -248,22,180,12,23,194,2,27,250,22,1,22,185,12,23,197,1,23,202,2,28, -248,22,180,12,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202,1,28, +71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,186,12,23,204,1, +23,205,1,23,198,1,27,249,22,186,12,248,22,64,23,202,2,23,199,2,28, +248,22,181,12,23,194,2,27,250,22,1,22,186,12,23,197,1,23,202,2,28, +248,22,181,12,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202,1,28, 248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,183,6,2,24, 23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250,22,1, -22,185,12,23,207,1,23,208,1,23,201,1,27,249,22,185,12,248,22,64,23, -197,2,23,202,2,28,248,22,180,12,23,194,2,27,250,22,1,22,185,12,23, -197,1,204,28,248,22,180,12,193,192,253,2,39,203,204,205,206,23,15,248,22, +22,186,12,23,207,1,23,208,1,23,201,1,27,249,22,186,12,248,22,64,23, +197,2,23,202,2,28,248,22,181,12,23,194,2,27,250,22,1,22,186,12,23, +197,1,204,28,248,22,181,12,193,192,253,2,39,203,204,205,206,23,15,248,22, 65,201,253,2,39,202,203,204,205,206,248,22,65,200,87,94,23,193,1,27,248, 22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,198,1, 251,22,183,6,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23,204,1, -23,203,1,250,22,1,22,185,12,23,206,1,23,207,1,23,200,1,27,249,22, -185,12,248,22,64,23,197,2,23,201,2,28,248,22,180,12,23,194,2,27,250, -22,1,22,185,12,23,197,1,203,28,248,22,180,12,193,192,253,2,39,202,203, +23,203,1,250,22,1,22,186,12,23,206,1,23,207,1,23,200,1,27,249,22, +186,12,248,22,64,23,197,2,23,201,2,28,248,22,181,12,23,194,2,27,250, +22,1,22,186,12,23,197,1,203,28,248,22,181,12,193,192,253,2,39,202,203, 204,205,206,248,22,65,201,253,2,39,201,202,203,204,205,248,22,65,200,27,247, -22,144,13,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,168,12,23, -194,2,10,27,248,22,167,12,23,195,2,28,23,193,2,192,87,94,23,193,1, -28,248,22,135,6,23,195,2,27,248,22,189,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,248,22,190,12,23,196,2,11,12,252,22,170,8,23,200,2, +22,145,13,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,169,12,23, +194,2,10,27,248,22,168,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,135,6,23,195,2,27,248,22,190,12,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,191,12,23,196,2,11,12,252,22,170,8,23,200,2, 2,25,34,23,198,2,23,199,2,28,28,248,22,135,6,23,195,2,10,248,22, 187,6,23,195,2,87,94,23,194,1,12,252,22,170,8,23,200,2,2,26,35, -23,198,2,23,199,1,91,159,37,11,90,161,37,34,11,248,22,188,12,23,197, +23,198,2,23,199,1,91,159,37,11,90,161,37,34,11,248,22,189,12,23,197, 2,87,94,23,195,1,87,94,28,192,12,250,22,171,8,23,201,1,2,27,23, 199,1,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87,95,28,28,248, -22,168,12,23,196,2,10,27,248,22,167,12,23,197,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,189,12,23,198,2,28, -23,193,2,192,87,94,23,193,1,248,22,190,12,23,198,2,11,12,252,22,170, +22,169,12,23,196,2,10,27,248,22,168,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,190,12,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,191,12,23,198,2,11,12,252,22,170, 8,2,10,2,25,34,23,200,2,23,201,2,28,28,248,22,135,6,23,197,2, 10,248,22,187,6,23,197,2,12,252,22,170,8,2,10,2,26,35,23,200,2, -23,201,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,199,2,87,94, +23,201,2,91,159,37,11,90,161,37,34,11,248,22,189,12,23,199,2,87,94, 23,195,1,87,94,28,23,193,2,12,250,22,171,8,2,10,2,27,23,201,2, -249,22,7,23,195,1,23,196,1,27,249,22,177,12,250,22,160,13,0,18,35, -114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,173,12, +249,22,7,23,195,1,23,196,1,27,249,22,178,12,250,22,161,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,174,12, 23,201,1,28,248,22,135,6,23,203,2,249,22,147,7,23,204,1,8,63,23, -202,1,28,248,22,168,12,23,199,2,248,22,169,12,23,199,1,87,94,23,198, -1,247,22,170,12,28,248,22,167,12,194,249,22,185,12,195,194,192,91,159,36, -11,90,161,36,34,11,87,95,28,28,248,22,168,12,23,196,2,10,27,248,22, -167,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -197,2,27,248,22,189,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248, -22,190,12,23,198,2,11,12,252,22,170,8,2,11,2,25,34,23,200,2,23, +202,1,28,248,22,169,12,23,199,2,248,22,170,12,23,199,1,87,94,23,198, +1,247,22,171,12,28,248,22,168,12,194,249,22,186,12,195,194,192,91,159,36, +11,90,161,36,34,11,87,95,28,28,248,22,169,12,23,196,2,10,27,248,22, +168,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +197,2,27,248,22,190,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248, +22,191,12,23,198,2,11,12,252,22,170,8,2,11,2,25,34,23,200,2,23, 201,2,28,28,248,22,135,6,23,197,2,10,248,22,187,6,23,197,2,12,252, 22,170,8,2,11,2,26,35,23,200,2,23,201,2,91,159,37,11,90,161,37, -34,11,248,22,188,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, +34,11,248,22,189,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, 250,22,171,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, -249,22,177,12,249,22,133,7,250,22,161,13,0,9,35,114,120,35,34,91,46, -93,34,248,22,173,12,23,203,1,6,1,1,95,28,248,22,135,6,23,202,2, -249,22,147,7,23,203,1,8,63,23,201,1,28,248,22,168,12,23,199,2,248, -22,169,12,23,199,1,87,94,23,198,1,247,22,170,12,28,248,22,167,12,194, -249,22,185,12,195,194,192,249,247,22,186,5,194,11,248,80,158,35,45,9,27, -247,22,146,13,249,80,158,37,46,28,23,195,2,27,248,22,152,7,6,11,11, +249,22,178,12,249,22,133,7,250,22,162,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,174,12,23,203,1,6,1,1,95,28,248,22,135,6,23,202,2, +249,22,147,7,23,203,1,8,63,23,201,1,28,248,22,169,12,23,199,2,248, +22,170,12,23,199,1,87,94,23,198,1,247,22,171,12,28,248,22,168,12,194, +249,22,186,12,195,194,192,249,247,22,186,5,194,11,248,80,158,35,45,9,27, +247,22,147,13,249,80,158,37,46,28,23,195,2,27,248,22,152,7,6,11,11, 80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27, -28,23,196,1,250,22,185,12,248,22,142,13,69,97,100,100,111,110,45,100,105, +28,23,196,1,250,22,186,12,248,22,143,13,69,97,100,100,111,110,45,100,105, 114,247,22,150,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159, -40,52,35,249,22,77,23,202,1,248,22,73,248,22,142,13,72,99,111,108,108, +40,52,35,249,22,77,23,202,1,248,22,73,248,22,143,13,72,99,111,108,108, 101,99,116,115,45,100,105,114,28,23,194,2,249,22,63,23,196,1,23,195,1, -192,32,48,89,162,8,44,37,49,2,19,222,33,49,27,249,22,153,13,23,197, +192,32,48,89,162,8,44,37,49,2,19,222,33,49,27,249,22,154,13,23,197, 2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195,2,27, 250,2,48,23,199,2,23,200,1,248,22,97,23,199,1,28,249,22,129,7,23, -196,2,2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,176,12, +196,2,2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,177,12, 23,197,1,194,87,95,23,195,1,23,193,1,28,249,22,129,7,23,198,2,2, -28,249,22,77,195,9,87,94,23,194,1,249,22,63,248,22,176,12,23,199,1, +28,249,22,77,195,9,87,94,23,194,1,249,22,63,248,22,177,12,23,199,1, 9,87,95,28,28,248,22,187,6,194,10,248,22,135,6,194,12,250,22,170,8, 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,72,195,249,22,4,22,167,12,196,11,12, +116,114,105,110,103,196,28,28,248,22,72,195,249,22,4,22,168,12,196,11,12, 250,22,170,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, 115,197,250,2,48,197,195,28,248,22,135,6,197,248,22,146,7,197,196,32,51, 89,162,8,44,38,56,2,19,222,33,54,32,52,89,162,8,44,37,53,70,102, 111,117,110,100,45,101,120,101,99,222,33,53,28,23,193,2,91,159,37,11,90, -161,37,34,11,248,22,188,12,23,199,2,87,95,23,195,1,23,194,1,27,28, -23,198,2,27,248,22,129,13,23,201,2,28,249,22,142,8,23,195,2,23,202, -2,11,28,248,22,189,12,23,194,2,250,2,52,23,201,2,23,202,2,249,22, -185,12,23,200,2,23,198,1,250,2,52,23,201,2,23,202,2,23,196,1,11, -28,23,193,2,192,87,94,23,193,1,27,28,248,22,167,12,23,196,2,27,249, -22,185,12,23,198,2,23,201,2,28,28,248,22,180,12,193,10,248,22,179,12, +161,37,34,11,248,22,189,12,23,199,2,87,95,23,195,1,23,194,1,27,28, +23,198,2,27,248,22,130,13,23,201,2,28,249,22,142,8,23,195,2,23,202, +2,11,28,248,22,190,12,23,194,2,250,2,52,23,201,2,23,202,2,249,22, +186,12,23,200,2,23,198,1,250,2,52,23,201,2,23,202,2,23,196,1,11, +28,23,193,2,192,87,94,23,193,1,27,28,248,22,168,12,23,196,2,27,249, +22,186,12,23,198,2,23,201,2,28,28,248,22,181,12,193,10,248,22,180,12, 193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248, -22,129,13,23,202,2,28,249,22,142,8,23,195,2,23,203,1,11,28,248,22, -189,12,23,194,2,250,2,52,23,202,1,23,203,1,249,22,185,12,23,201,1, +22,130,13,23,202,2,28,249,22,142,8,23,195,2,23,203,1,11,28,248,22, +190,12,23,194,2,250,2,52,23,202,1,23,203,1,249,22,186,12,23,201,1, 23,198,1,250,2,52,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22, -128,13,248,22,64,23,199,2,27,249,22,185,12,23,196,1,23,197,2,28,248, -22,179,12,23,194,2,250,2,52,198,199,195,87,94,23,193,1,27,248,22,65, -23,200,1,28,248,22,71,23,194,2,11,27,248,22,128,13,248,22,64,23,196, -2,27,249,22,185,12,23,196,1,23,200,2,28,248,22,179,12,23,194,2,250, +129,13,248,22,64,23,199,2,27,249,22,186,12,23,196,1,23,197,2,28,248, +22,180,12,23,194,2,250,2,52,198,199,195,87,94,23,193,1,27,248,22,65, +23,200,1,28,248,22,71,23,194,2,11,27,248,22,129,13,248,22,64,23,196, +2,27,249,22,186,12,23,196,1,23,200,2,28,248,22,180,12,23,194,2,250, 2,52,201,202,195,87,94,23,193,1,27,248,22,65,23,197,1,28,248,22,71, -23,194,2,11,27,248,22,128,13,248,22,64,195,27,249,22,185,12,23,196,1, -202,28,248,22,179,12,193,250,2,52,204,205,195,251,2,51,204,205,206,248,22, -65,199,87,95,28,27,248,22,167,12,23,196,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,135,6,23,196,2,27,248,22,189,12,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,190,12,23,197,2,11,12,250,22,170,8,2, +23,194,2,11,27,248,22,129,13,248,22,64,195,27,249,22,186,12,23,196,1, +202,28,248,22,180,12,193,250,2,52,204,205,195,251,2,51,204,205,206,248,22, +65,199,87,95,28,27,248,22,168,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,135,6,23,196,2,27,248,22,190,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,191,12,23,197,2,11,12,250,22,170,8,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,41,23,197,2,28,28,23,195,2,28,27,248,22,167, +97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,27,248,22,168, 12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23,197, -2,27,248,22,189,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22, -190,12,23,198,2,11,248,22,189,12,23,196,2,11,10,12,250,22,170,8,2, +2,27,248,22,190,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22, +191,12,23,198,2,11,248,22,190,12,23,196,2,11,10,12,250,22,170,8,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,114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,189,12, -23,195,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,198,2,249,22, +116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,190,12, +23,195,2,91,159,37,11,90,161,37,34,11,248,22,189,12,23,198,2,249,22, 140,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,152,7,6,4,4, 80,65,84,72,251,2,51,23,199,1,23,200,1,23,201,1,28,23,197,2,27, 249,80,158,42,46,23,200,1,9,28,249,22,140,8,247,22,154,7,2,21,249, -22,63,248,22,176,12,5,1,46,23,195,1,192,9,27,248,22,128,13,23,196, -1,28,248,22,179,12,193,250,2,52,198,199,195,11,250,80,158,37,47,196,197, +22,63,248,22,177,12,5,1,46,23,195,1,192,9,27,248,22,129,13,23,196, +1,28,248,22,180,12,193,250,2,52,198,199,195,11,250,80,158,37,47,196,197, 11,250,80,158,37,47,196,11,11,87,94,249,22,191,5,247,22,168,4,195,248, 22,142,5,249,22,153,3,34,249,22,137,3,197,198,27,28,23,197,2,87,95, -23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,142,13,2,20, +23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22,143,13,2,20, 27,249,80,158,39,47,23,196,1,11,27,27,248,22,156,3,23,200,1,28,192, 192,34,27,27,248,22,156,3,23,202,1,28,192,192,34,249,22,185,4,23,197, 1,83,158,38,20,96,95,89,162,8,44,34,46,9,224,3,2,33,58,23,195, @@ -330,7 +330,7 @@ 159,34,43,35,83,158,34,16,2,32,0,89,162,42,35,42,2,12,222,33,45, 80,159,34,44,35,83,158,34,16,2,83,158,37,20,95,95,2,13,89,162,42, 34,41,9,223,0,33,46,89,162,42,35,51,9,223,0,33,47,80,159,34,45, -35,83,158,34,16,2,27,248,22,149,13,248,22,146,7,27,28,249,22,140,8, +35,83,158,34,16,2,27,248,22,150,13,248,22,146,7,27,28,249,22,140,8, 247,22,154,7,2,21,6,1,1,59,6,1,1,58,250,22,183,6,6,14,14, 40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,89, 162,8,44,36,46,2,14,223,0,33,50,80,159,34,46,35,83,158,34,16,2, @@ -342,12 +342,12 @@ EVAL_ONE_SIZED_STR((char *)expr, 5013); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,48,8,0,0,0,1,0,0,6,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,49,8,0,0,0,1,0,0,6,0, 19,0,34,0,48,0,62,0,76,0,111,0,0,0,243,0,0,0,65,113,117, 111,116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69, 35,37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97, 109,122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1, -68,35,37,107,101,114,110,101,108,11,98,10,34,11,8,166,209,97,159,2,2, +68,35,37,107,101,114,110,101,108,11,98,10,34,11,8,169,209,97,159,2,2, 34,34,159,2,3,34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34, 34,16,0,159,34,20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0, 83,158,40,20,99,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10, @@ -359,202 +359,202 @@ EVAL_ONE_SIZED_STR((char *)expr, 282); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,48,52,0,0,0,1,0,0,3,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,49,53,0,0,0,1,0,0,3,0, 14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184, -0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1, -74,1,82,1,185,1,230,1,253,1,32,2,67,2,101,2,111,2,145,2,155, -2,162,2,68,4,81,4,100,4,219,4,231,4,135,5,149,5,10,6,16,6, -30,6,57,6,142,6,144,6,205,6,123,12,182,12,214,12,0,0,152,15,0, -0,29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97, -117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100, -65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,29,94, -2,4,68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117,108,116, -45,114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108, -101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112, -97,116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105, -108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112, -116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114, -101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114, -101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107,101,45, -115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, -114,101,115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,64,119,101, -97,107,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100, -117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98, -67,105,103,110,111,114,101,100,249,22,14,195,80,158,36,44,249,80,159,36,47, -35,195,10,27,28,23,195,2,28,249,22,140,8,23,197,2,80,158,37,45,87, -94,23,195,1,80,158,35,46,27,248,22,151,4,23,197,2,28,248,22,167,12, -23,194,2,91,159,37,11,90,161,37,34,11,248,22,188,12,23,197,1,87,95, -83,160,36,11,80,158,39,45,198,83,160,36,11,80,158,39,46,192,192,11,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,187,5,28,192,192,247,22,143, -13,20,14,159,80,158,34,38,250,80,158,37,39,249,22,27,11,80,158,39,38, -22,187,5,28,248,22,167,12,23,198,2,23,197,1,87,94,23,197,1,247,22, -143,13,247,194,250,22,185,12,23,197,1,23,199,1,249,80,158,41,37,23,198, -1,5,3,46,122,111,252,22,185,12,23,199,1,23,201,1,6,6,6,110,97, -116,105,118,101,247,22,155,7,249,80,158,43,37,23,200,1,80,158,43,34,87, -94,23,194,1,27,23,194,1,27,250,22,138,13,196,11,32,0,89,162,8,44, -34,39,9,222,11,28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1, -27,250,22,138,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249, -22,63,195,194,11,249,247,22,148,13,248,22,64,195,195,27,248,23,195,1,23, -196,1,27,250,22,138,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28, -192,249,22,63,195,194,11,249,247,22,185,5,248,22,64,195,195,249,247,22,185, -5,194,195,87,94,28,248,80,158,35,36,23,195,2,12,250,22,170,8,77,108, -111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97, -116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105, -110,103,23,197,2,91,159,40,11,90,161,35,34,11,28,248,22,191,12,23,201, -2,23,200,1,27,247,22,187,5,28,23,193,2,249,22,128,13,23,203,1,23, -195,1,200,90,161,37,35,11,248,22,188,12,23,194,2,87,94,23,196,1,90, -161,35,38,11,28,249,22,140,8,23,196,2,68,114,101,108,97,116,105,118,101, -87,94,23,194,1,2,17,23,194,1,90,161,35,39,11,247,22,145,13,27,89, -162,42,35,48,62,122,111,225,7,5,3,33,27,27,83,158,38,20,96,94,89, -162,42,35,50,9,225,8,6,4,33,28,23,197,1,27,249,22,5,89,162,8, -44,35,46,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5,83, -158,38,20,96,94,89,162,8,44,35,46,9,223,5,33,30,23,198,1,23,205, -2,27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22,149, -3,248,22,65,196,248,22,65,23,199,2,193,11,11,11,87,94,23,195,1,11, -28,23,193,2,249,80,159,46,53,35,202,89,162,42,34,44,9,224,14,2,33, -31,87,94,23,193,1,27,28,23,197,2,27,249,22,5,83,158,38,20,96,94, -89,162,8,44,35,46,9,223,7,33,32,23,200,1,23,206,1,27,28,196,11, -193,28,192,192,28,193,28,196,28,249,22,149,3,248,22,65,196,248,22,65,199, -193,11,11,11,11,28,192,249,80,159,47,53,35,203,89,162,42,34,44,9,224, -15,2,33,33,249,80,159,47,53,35,203,89,162,42,34,43,9,224,15,7,33, -34,32,36,89,162,8,44,35,53,2,19,222,33,38,0,17,35,114,120,34,94, -40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,153,13,2,37,23,196, -2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27,248, -22,97,23,197,1,27,249,22,153,13,2,37,23,196,2,28,23,193,2,87,94, -23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27,249, -22,153,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248, -22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194,248,22,73, -194,248,22,73,194,32,39,89,162,42,35,53,2,19,222,33,40,28,248,22,71, -248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,36,11,90,161,36, -34,11,27,248,22,65,23,197,2,28,248,22,71,248,22,65,23,195,2,249,22, -7,9,248,22,64,23,196,1,91,159,36,11,90,161,36,34,11,27,248,22,65, -23,197,2,28,248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,64,23, -196,1,91,159,36,11,90,161,36,34,11,248,2,39,248,22,65,23,197,2,249, -22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249, -22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249,22,63,248, -22,64,23,200,1,23,197,1,195,27,248,2,36,23,195,1,28,194,192,248,2, -39,193,87,95,28,248,22,149,4,195,12,250,22,170,8,2,20,6,20,20,114, -101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,28, -24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,126,80,158, -40,41,248,22,171,13,247,22,151,11,11,28,23,193,2,192,87,94,23,193,1, -27,247,22,120,87,94,250,22,125,80,158,41,41,248,22,171,13,247,22,151,11, -195,192,250,22,125,195,198,66,97,116,116,97,99,104,251,211,197,198,199,10,28, -192,250,22,169,8,11,196,195,248,22,167,8,194,28,249,22,141,6,194,6,1, -1,46,2,17,28,249,22,141,6,194,6,2,2,46,46,62,117,112,192,28,249, -22,142,8,248,22,65,23,200,2,23,197,1,28,249,22,140,8,248,22,64,23, -200,2,23,196,1,251,22,167,8,2,20,6,26,26,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,65,248,22,78,249,22,63,23,206,1,23,202,1,12,12,247, -192,20,14,159,80,158,38,43,249,22,63,247,22,151,11,23,197,1,20,14,159, -80,158,38,38,250,80,158,41,39,249,22,27,11,80,158,43,38,22,133,4,23, -196,1,249,247,22,186,5,23,198,1,248,22,52,248,22,171,12,23,198,1,87, -94,28,28,248,22,167,12,23,197,2,10,248,22,154,4,23,197,2,12,28,23, -198,2,250,22,169,8,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32, -112,97,116,104,23,201,2,250,22,170,8,2,20,6,19,19,109,111,100,117,108, -101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,199,2,28,28,248,22, -61,23,197,2,249,22,140,8,248,22,64,23,199,2,2,4,11,248,22,150,4, -248,22,88,197,28,28,248,22,61,23,197,2,249,22,140,8,248,22,64,23,199, -2,66,112,108,97,110,101,116,11,87,94,28,207,12,20,14,159,80,158,36,38, -250,80,158,39,39,249,22,27,11,80,158,41,38,22,151,11,23,197,1,90,161, -35,34,10,249,22,134,4,21,94,2,21,6,18,18,112,108,97,110,101,116,47, -114,101,115,111,108,118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109, -111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,251, -211,199,200,201,202,87,94,23,193,1,27,89,162,42,35,44,79,115,104,111,119, -45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,6,33,44,27,28, -248,22,51,23,199,2,27,250,22,126,80,158,42,42,249,22,63,23,204,2,247, -22,144,13,11,28,23,193,2,192,87,94,23,193,1,91,159,36,11,90,161,36, -34,11,249,80,159,43,47,35,248,22,54,23,204,2,11,27,251,80,158,46,49, -2,20,23,202,1,28,248,22,71,23,199,2,23,199,2,248,22,64,23,199,2, -28,248,22,71,23,199,2,9,248,22,65,23,199,2,249,22,185,12,23,195,1, +0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,28,1,59,1,63,1, +71,1,79,1,87,1,190,1,235,1,255,1,34,2,69,2,103,2,113,2,160, +2,170,2,177,2,76,4,89,4,108,4,227,4,239,4,143,5,157,5,18,6, +24,6,38,6,65,6,150,6,152,6,213,6,131,12,190,12,222,12,0,0,160, +15,0,0,29,11,11,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101, +102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108, +101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11, +29,94,2,4,68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117, +108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100, +117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71, +45,112,97,116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45, +102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111, +109,112,116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45, +112,114,101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116, +45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107, +101,45,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109, +101,45,114,101,115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,5, +3,46,122,111,64,119,101,97,107,64,108,111,111,112,1,29,115,116,97,110,100, +97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108, +118,101,114,63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,158, +36,44,249,80,159,36,47,35,195,10,27,28,23,195,2,28,249,22,140,8,23, +197,2,80,158,37,45,87,94,23,195,1,80,158,35,46,27,248,22,151,4,23, +197,2,28,248,22,168,12,23,194,2,91,159,37,11,90,161,37,34,11,248,22, +189,12,23,197,1,87,95,83,160,36,11,80,158,39,45,198,83,160,36,11,80, +158,39,46,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,187, +5,28,192,192,247,22,144,13,20,14,159,80,158,34,38,250,80,158,37,39,249, +22,27,11,80,158,39,38,22,187,5,28,248,22,168,12,23,198,2,23,197,1, +87,94,23,197,1,247,22,144,13,247,194,250,22,186,12,23,197,1,23,199,1, +249,80,158,41,37,23,198,1,2,18,252,22,186,12,23,199,1,23,201,1,6, +6,6,110,97,116,105,118,101,247,22,155,7,249,80,158,43,37,23,200,1,80, +158,43,34,87,94,23,194,1,27,23,194,1,27,250,22,139,13,196,11,32,0, +89,162,8,44,34,39,9,222,11,28,192,249,22,63,195,194,11,27,248,23,195, +1,23,196,1,27,250,22,139,13,196,11,32,0,89,162,8,44,34,39,9,222, +11,28,192,249,22,63,195,194,11,249,247,22,149,13,248,22,64,195,195,27,250, +22,186,12,23,198,1,23,200,1,249,80,158,42,37,23,199,1,2,18,27,250, +22,139,13,196,11,32,0,89,162,8,44,34,39,9,222,11,28,192,249,22,63, +195,194,11,249,247,22,185,5,248,22,64,195,195,249,247,22,185,5,194,195,87, +94,28,248,80,158,35,36,23,195,2,12,250,22,170,8,77,108,111,97,100,47, +117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,104,32,111, +114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197, +2,91,159,40,11,90,161,35,34,11,28,248,22,128,13,23,201,2,23,200,1, +27,247,22,187,5,28,23,193,2,249,22,129,13,23,203,1,23,195,1,200,90, +161,37,35,11,248,22,189,12,23,194,2,87,94,23,196,1,90,161,35,38,11, +28,249,22,140,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194, +1,2,17,23,194,1,90,161,35,39,11,247,22,146,13,27,89,162,42,35,48, +62,122,111,225,7,5,3,33,28,27,89,162,42,35,50,9,225,8,6,4,33, +29,27,249,22,5,89,162,8,44,35,46,9,223,5,33,30,23,203,2,27,28, +23,195,2,27,249,22,5,83,158,38,20,96,94,89,162,8,44,35,46,9,223, +5,33,31,23,198,1,23,205,2,27,28,23,196,2,11,193,28,192,192,28,193, +28,23,196,2,28,249,22,149,3,248,22,65,196,248,22,65,23,199,2,193,11, +11,11,87,94,23,195,1,11,28,23,193,2,249,80,159,46,53,35,202,89,162, +42,34,44,9,224,14,2,33,32,87,94,23,193,1,27,28,23,197,1,27,249, +22,5,83,158,38,20,96,94,89,162,8,44,35,49,9,225,14,12,10,33,33, +23,203,1,23,206,1,27,28,196,11,193,28,192,192,28,193,28,196,28,249,22, +149,3,248,22,65,196,248,22,65,199,193,11,11,11,11,28,192,249,80,159,47, +53,35,203,89,162,42,34,44,9,224,15,2,33,34,249,80,159,47,53,35,203, +89,162,42,34,43,9,224,15,7,33,35,32,37,89,162,8,44,35,53,2,20, +222,33,39,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36, +34,27,249,22,154,13,2,38,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27,249,22,154,13,2, +38,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196, +2,27,248,22,97,23,197,1,27,249,22,154,13,2,38,23,196,2,28,23,193, +2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,248,2,37,248,22,97, +23,197,1,248,22,73,194,248,22,73,194,248,22,73,194,32,40,89,162,42,35, +53,2,20,222,33,41,28,248,22,71,248,22,65,23,195,2,249,22,7,9,248, +22,64,195,91,159,36,11,90,161,36,34,11,27,248,22,65,23,197,2,28,248, +22,71,248,22,65,23,195,2,249,22,7,9,248,22,64,23,196,1,91,159,36, +11,90,161,36,34,11,27,248,22,65,23,197,2,28,248,22,71,248,22,65,23, +195,2,249,22,7,9,248,22,64,23,196,1,91,159,36,11,90,161,36,34,11, +248,2,40,248,22,65,23,197,2,249,22,7,249,22,63,248,22,64,23,200,1, +23,197,1,23,196,1,249,22,7,249,22,63,248,22,64,23,200,1,23,197,1, +23,196,1,249,22,7,249,22,63,248,22,64,23,200,1,23,197,1,195,27,248, +2,37,23,195,1,28,194,192,248,2,40,193,87,95,28,248,22,149,4,195,12, +250,22,170,8,2,21,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100, +117,108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23, +193,1,12,27,27,250,22,126,80,158,40,41,248,22,172,13,247,22,151,11,11, +28,23,193,2,192,87,94,23,193,1,27,247,22,120,87,94,250,22,125,80,158, +41,41,248,22,172,13,247,22,151,11,195,192,250,22,125,195,198,66,97,116,116, +97,99,104,251,211,197,198,199,10,28,192,250,22,169,8,11,196,195,248,22,167, +8,194,28,249,22,141,6,194,6,1,1,46,2,17,28,249,22,141,6,194,6, +2,2,46,46,62,117,112,192,28,249,22,142,8,248,22,65,23,200,2,23,197, +1,28,249,22,140,8,248,22,64,23,200,2,23,196,1,251,22,167,8,2,21, +6,26,26,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,65,248,22,78,249,22, +63,23,206,1,23,202,1,12,12,247,192,20,14,159,80,158,38,43,249,22,63, +247,22,151,11,23,197,1,20,14,159,80,158,38,38,250,80,158,41,39,249,22, +27,11,80,158,43,38,22,133,4,23,196,1,249,247,22,186,5,23,198,1,248, +22,52,248,22,172,12,23,198,1,87,94,28,28,248,22,168,12,23,197,2,10, +248,22,154,4,23,197,2,12,28,23,198,2,250,22,169,8,11,6,15,15,98, +97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,170,8, +2,21,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112, +97,116,104,23,199,2,28,28,248,22,61,23,197,2,249,22,140,8,248,22,64, +23,199,2,2,4,11,248,22,150,4,248,22,88,197,28,28,248,22,61,23,197, +2,249,22,140,8,248,22,64,23,199,2,66,112,108,97,110,101,116,11,87,94, +28,207,12,20,14,159,80,158,36,38,250,80,158,39,39,249,22,27,11,80,158, +41,38,22,151,11,23,197,1,90,161,35,34,10,249,22,134,4,21,94,2,22, +6,18,18,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,115,115, +1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45, +114,101,115,111,108,118,101,114,12,251,211,199,200,201,202,87,94,23,193,1,27, +89,162,42,35,44,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110, +45,101,114,114,223,6,33,45,27,28,248,22,51,23,199,2,27,250,22,126,80, +158,42,42,249,22,63,23,204,2,247,22,145,13,11,28,23,193,2,192,87,94, +23,193,1,91,159,36,11,90,161,36,34,11,249,80,159,43,47,35,248,22,54, +23,204,2,11,27,251,80,158,46,49,2,21,23,202,1,28,248,22,71,23,199, +2,23,199,2,248,22,64,23,199,2,28,248,22,71,23,199,2,9,248,22,65, +23,199,2,249,22,186,12,23,195,1,28,248,22,71,23,197,1,87,94,23,197, +1,6,7,7,109,97,105,110,46,115,115,249,22,158,6,23,199,1,6,3,3, +46,115,115,28,248,22,135,6,23,199,2,87,94,23,194,1,27,248,80,159,40, +54,35,23,201,2,27,250,22,126,80,158,43,42,249,22,63,23,205,2,23,199, +2,11,28,23,193,2,192,87,94,23,193,1,91,159,36,11,90,161,36,34,11, +249,80,159,44,47,35,23,204,2,11,250,22,1,22,186,12,23,199,1,249,22, +77,249,22,2,32,0,89,162,8,44,35,42,9,222,33,46,23,200,1,248,22, +73,23,200,1,28,248,22,168,12,23,199,2,87,94,23,194,1,28,248,22,191, +12,23,199,2,23,198,2,248,22,73,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, +140,8,248,22,64,23,201,2,2,22,27,250,22,126,80,158,42,42,249,22,63, +23,204,2,247,22,145,13,11,28,23,193,2,192,87,94,23,193,1,91,159,37, +11,90,161,36,34,11,249,80,159,44,47,35,248,22,88,23,205,2,11,90,161, +35,36,11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249, +22,156,13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28, +23,197,2,249,22,77,28,248,22,71,248,22,90,23,208,2,21,93,6,5,5, +109,122,108,105,98,249,22,1,22,77,249,22,2,80,159,50,55,35,248,22,90, +23,211,2,23,197,2,28,248,22,71,23,196,2,248,22,73,23,197,2,23,195, +2,251,80,158,48,49,2,21,23,204,1,248,22,64,23,198,2,248,22,65,23, +198,1,249,22,186,12,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1, 28,248,22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115, -115,249,22,158,6,23,199,1,6,3,3,46,115,115,28,248,22,135,6,23,199, -2,87,94,23,194,1,27,248,80,159,40,54,35,23,201,2,27,250,22,126,80, -158,43,42,249,22,63,23,205,2,23,199,2,11,28,23,193,2,192,87,94,23, -193,1,91,159,36,11,90,161,36,34,11,249,80,159,44,47,35,23,204,2,11, -250,22,1,22,185,12,23,199,1,249,22,77,249,22,2,32,0,89,162,8,44, -35,42,9,222,33,45,23,200,1,248,22,73,23,200,1,28,248,22,167,12,23, -199,2,87,94,23,194,1,28,248,22,190,12,23,199,2,23,198,2,248,22,73, -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,140,8,248,22,64,23,201,2,2,21, -27,250,22,126,80,158,42,42,249,22,63,23,204,2,247,22,144,13,11,28,23, -193,2,192,87,94,23,193,1,91,159,37,11,90,161,36,34,11,249,80,159,44, -47,35,248,22,88,23,205,2,11,90,161,35,36,11,28,248,22,71,248,22,90, -23,204,2,28,248,22,71,23,194,2,249,22,155,13,0,8,35,114,120,34,91, -46,93,34,23,196,2,11,10,27,27,28,23,197,2,249,22,77,28,248,22,71, -248,22,90,23,208,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,77, -249,22,2,80,159,50,55,35,248,22,90,23,211,2,23,197,2,28,248,22,71, -23,196,2,248,22,73,23,197,2,23,195,2,251,80,158,48,49,2,20,23,204, -1,248,22,64,23,198,2,248,22,65,23,198,1,249,22,185,12,23,195,1,28, -23,198,1,87,94,23,196,1,23,197,1,28,248,22,71,23,197,1,87,94,23, -197,1,6,7,7,109,97,105,110,46,115,115,28,249,22,155,13,0,8,35,114, -120,34,91,46,93,34,23,199,2,23,197,1,249,22,158,6,23,199,1,6,3, -3,46,115,115,28,249,22,140,8,248,22,64,23,201,2,64,102,105,108,101,249, -22,128,13,248,22,88,23,201,2,248,80,159,41,54,35,23,202,2,12,87,94, -28,28,248,22,167,12,23,194,2,10,248,22,157,7,23,194,2,87,94,23,200, -1,12,28,23,200,2,250,22,169,8,67,114,101,113,117,105,114,101,249,22,183, -6,6,17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97, -28,23,198,2,248,22,64,23,199,2,6,0,0,23,203,1,87,94,23,200,1, -250,22,170,8,2,20,249,22,183,6,6,13,13,109,111,100,117,108,101,32,112, -97,116,104,126,97,28,23,198,2,248,22,64,23,199,2,6,0,0,23,201,2, -27,28,248,22,157,7,23,195,2,249,22,162,7,23,196,2,34,249,22,130,13, -248,22,131,13,23,197,2,11,27,28,248,22,157,7,23,196,2,249,22,162,7, -23,197,2,35,248,80,158,41,50,23,195,2,91,159,37,11,90,161,37,34,11, -28,248,22,157,7,23,199,2,250,22,7,2,22,249,22,162,7,23,203,2,36, -2,22,248,22,188,12,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22, -157,7,23,200,2,249,22,162,7,23,201,2,37,249,80,158,46,51,23,197,2, -5,0,27,28,248,22,157,7,23,201,2,249,22,162,7,23,202,2,38,248,22, -150,4,23,200,2,27,27,250,22,126,80,158,50,41,248,22,171,13,247,22,151, -11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,120,87,94,250,22,125, -80,158,51,41,248,22,171,13,247,22,151,11,195,192,87,95,28,23,209,1,27, -250,22,126,23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17, -80,158,50,44,80,158,49,44,247,22,19,250,22,25,248,22,23,23,197,2,80, -158,52,43,23,196,1,27,247,22,151,11,249,22,3,83,158,38,20,96,94,89, -162,8,44,35,53,9,226,12,11,2,3,33,46,23,195,1,23,196,1,248,28, -248,22,17,80,158,49,44,32,0,89,162,42,35,40,9,222,33,47,80,159,48, -56,35,89,162,42,34,49,9,227,14,9,8,4,3,33,48,250,22,125,23,197, -1,197,10,12,28,28,248,22,157,7,23,202,1,11,27,248,22,135,6,23,208, -2,28,192,192,28,248,22,61,23,208,2,249,22,140,8,248,22,64,23,210,2, -2,21,11,250,22,125,80,158,49,42,28,248,22,135,6,23,210,2,249,22,63, -23,211,1,248,80,159,52,54,35,23,213,1,87,94,23,210,1,249,22,63,23, -211,1,247,22,144,13,252,22,159,7,23,208,1,23,207,1,23,205,1,23,203, -1,201,12,193,91,159,36,10,90,161,35,34,10,11,90,161,35,35,10,83,158, -37,20,95,96,2,20,89,162,8,44,35,49,9,224,2,0,33,42,89,162,42, -37,47,9,223,1,33,43,89,162,42,38,8,30,9,225,2,3,0,33,49,208, -87,95,248,22,132,4,248,80,158,36,48,247,22,151,11,248,22,186,5,80,158, -35,35,248,22,141,12,80,159,35,40,35,159,34,20,102,159,34,16,1,20,24, -65,98,101,103,105,110,16,0,83,158,40,20,99,137,66,35,37,98,111,111,116, -2,1,11,10,10,36,80,158,34,34,20,102,159,38,16,19,30,2,1,2,2, -193,30,2,1,2,3,193,30,2,5,72,112,97,116,104,45,115,116,114,105,110, -103,63,10,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, -120,7,30,2,6,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105, -111,110,45,107,101,121,4,30,2,6,1,23,101,120,116,101,110,100,45,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,30,2,1,2,7,193, -30,2,1,2,8,193,30,2,1,2,9,193,30,2,1,2,10,193,30,2,1, -2,11,193,30,2,1,2,12,193,30,2,1,2,13,193,30,2,1,2,14,193, -30,2,1,2,15,193,30,2,5,69,45,102,105,110,100,45,99,111,108,0,30, -2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,30, -2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, -120,9,30,2,1,2,16,193,16,0,11,11,16,11,2,10,2,11,2,8,2, -9,2,12,2,13,2,3,2,7,2,2,2,15,2,14,45,11,37,34,11,16, -1,9,16,1,2,16,16,1,11,16,1,2,16,35,35,35,11,11,16,0,16, -0,16,0,34,34,11,11,11,16,0,16,0,16,0,34,34,16,0,16,16,83, -158,34,16,2,89,162,42,35,43,9,223,0,33,23,80,159,34,56,35,83,158, -34,16,2,89,162,8,44,35,43,9,223,0,33,24,80,159,34,55,35,83,158, -34,16,2,89,162,42,35,47,67,103,101,116,45,100,105,114,223,0,33,25,80, -159,34,54,35,83,158,34,16,2,89,162,42,36,47,68,119,105,116,104,45,100, -105,114,223,0,33,26,80,159,34,53,35,83,158,34,16,2,248,22,154,7,69, -115,111,45,115,117,102,102,105,120,80,159,34,34,35,83,158,34,16,2,89,162, -42,36,58,2,3,223,0,33,35,80,159,34,35,35,83,158,34,16,2,32,0, -89,162,8,44,35,40,2,7,222,192,80,159,34,40,35,83,158,34,16,2,248, -22,120,2,18,80,159,34,41,35,83,158,34,16,2,249,22,120,2,18,65,101, -113,117,97,108,80,159,34,42,35,83,158,34,16,2,247,22,59,80,159,34,43, -35,83,158,34,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100, -105,110,103,80,159,34,44,35,83,158,34,16,2,11,80,158,34,45,83,158,34, -16,2,11,80,158,34,46,83,158,34,16,2,32,0,89,162,42,36,43,2,14, -222,33,41,80,159,34,47,35,83,158,34,16,2,89,162,8,44,35,43,2,15, -223,0,33,50,80,159,34,48,35,83,158,34,16,2,89,162,42,34,42,2,16, -223,0,33,51,80,159,34,52,35,95,29,94,2,4,68,35,37,107,101,114,110, -101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2,5,9, -9,9,34,0}; - EVAL_ONE_SIZED_STR((char *)expr, 4119); +115,28,249,22,156,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197, +1,249,22,158,6,23,199,1,6,3,3,46,115,115,28,249,22,140,8,248,22, +64,23,201,2,64,102,105,108,101,249,22,129,13,248,22,88,23,201,2,248,80, +159,41,54,35,23,202,2,12,87,94,28,28,248,22,168,12,23,194,2,10,248, +22,157,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,169,8,67, +114,101,113,117,105,114,101,249,22,183,6,6,17,17,98,97,100,32,109,111,100, +117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,64,23,199,2,6, +0,0,23,203,1,87,94,23,200,1,250,22,170,8,2,21,249,22,183,6,6, +13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22, +64,23,199,2,6,0,0,23,201,2,27,28,248,22,157,7,23,195,2,249,22, +162,7,23,196,2,34,249,22,131,13,248,22,132,13,23,197,2,11,27,28,248, +22,157,7,23,196,2,249,22,162,7,23,197,2,35,248,80,158,41,50,23,195, +2,91,159,37,11,90,161,37,34,11,28,248,22,157,7,23,199,2,250,22,7, +2,23,249,22,162,7,23,203,2,36,2,23,248,22,189,12,23,198,2,87,95, +23,195,1,23,193,1,27,28,248,22,157,7,23,200,2,249,22,162,7,23,201, +2,37,249,80,158,46,51,23,197,2,5,0,27,28,248,22,157,7,23,201,2, +249,22,162,7,23,202,2,38,248,22,150,4,23,200,2,27,27,250,22,126,80, +158,50,41,248,22,172,13,247,22,151,11,11,28,23,193,2,192,87,94,23,193, +1,27,247,22,120,87,94,250,22,125,80,158,51,41,248,22,172,13,247,22,151, +11,195,192,87,95,28,23,209,1,27,250,22,126,23,197,2,197,11,28,23,193, +1,12,87,95,27,27,28,248,22,17,80,158,50,44,80,158,49,44,247,22,19, +250,22,25,248,22,23,23,197,2,80,158,52,43,23,196,1,27,247,22,151,11, +249,22,3,83,158,38,20,96,94,89,162,8,44,35,53,9,226,12,11,2,3, +33,47,23,195,1,23,196,1,248,28,248,22,17,80,158,49,44,32,0,89,162, +42,35,40,9,222,33,48,80,159,48,56,35,89,162,42,34,49,9,227,14,9, +8,4,3,33,49,250,22,125,23,197,1,197,10,12,28,28,248,22,157,7,23, +202,1,11,27,248,22,135,6,23,208,2,28,192,192,28,248,22,61,23,208,2, +249,22,140,8,248,22,64,23,210,2,2,22,11,250,22,125,80,158,49,42,28, +248,22,135,6,23,210,2,249,22,63,23,211,1,248,80,159,52,54,35,23,213, +1,87,94,23,210,1,249,22,63,23,211,1,247,22,145,13,252,22,159,7,23, +208,1,23,207,1,23,205,1,23,203,1,201,12,193,91,159,36,10,90,161,35, +34,10,11,90,161,35,35,10,83,158,37,20,95,96,2,21,89,162,8,44,35, +49,9,224,2,0,33,43,89,162,42,37,47,9,223,1,33,44,89,162,42,38, +8,30,9,225,2,3,0,33,50,208,87,95,248,22,132,4,248,80,158,36,48, +247,22,151,11,248,22,186,5,80,158,35,35,248,22,142,12,80,159,35,40,35, +159,34,20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0,83,158,40, +20,99,137,66,35,37,98,111,111,116,2,1,11,10,10,36,80,158,34,34,20, +102,159,38,16,19,30,2,1,2,2,193,30,2,1,2,3,193,30,2,5,72, +112,97,116,104,45,115,116,114,105,110,103,63,10,30,2,5,75,112,97,116,104, +45,97,100,100,45,115,117,102,102,105,120,7,30,2,6,1,20,112,97,114,97, +109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,6,1, +23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,3,30,2,1,2,7,193,30,2,1,2,8,193,30,2,1,2,9, +193,30,2,1,2,10,193,30,2,1,2,11,193,30,2,1,2,12,193,30,2, +1,2,13,193,30,2,1,2,14,193,30,2,1,2,15,193,30,2,5,69,45, +102,105,110,100,45,99,111,108,0,30,2,5,76,110,111,114,109,97,108,45,99, +97,115,101,45,112,97,116,104,6,30,2,5,79,112,97,116,104,45,114,101,112, +108,97,99,101,45,115,117,102,102,105,120,9,30,2,1,2,16,193,16,0,11, +11,16,11,2,10,2,11,2,8,2,9,2,12,2,13,2,3,2,7,2,2, +2,15,2,14,45,11,37,34,11,16,1,9,16,1,2,16,16,1,11,16,1, +2,16,35,35,35,11,11,16,0,16,0,16,0,34,34,11,11,11,16,0,16, +0,16,0,34,34,16,0,16,16,83,158,34,16,2,89,162,42,35,43,9,223, +0,33,24,80,159,34,56,35,83,158,34,16,2,89,162,8,44,35,43,9,223, +0,33,25,80,159,34,55,35,83,158,34,16,2,89,162,42,35,47,67,103,101, +116,45,100,105,114,223,0,33,26,80,159,34,54,35,83,158,34,16,2,89,162, +42,36,47,68,119,105,116,104,45,100,105,114,223,0,33,27,80,159,34,53,35, +83,158,34,16,2,248,22,154,7,69,115,111,45,115,117,102,102,105,120,80,159, +34,34,35,83,158,34,16,2,89,162,42,36,58,2,3,223,0,33,36,80,159, +34,35,35,83,158,34,16,2,32,0,89,162,8,44,35,40,2,7,222,192,80, +159,34,40,35,83,158,34,16,2,248,22,120,2,19,80,159,34,41,35,83,158, +34,16,2,249,22,120,2,19,65,101,113,117,97,108,80,159,34,42,35,83,158, +34,16,2,247,22,59,80,159,34,43,35,83,158,34,16,2,248,22,18,74,109, +111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,34,44,35,83,158,34, +16,2,11,80,158,34,45,83,158,34,16,2,11,80,158,34,46,83,158,34,16, +2,32,0,89,162,42,36,43,2,14,222,33,42,80,159,34,47,35,83,158,34, +16,2,89,162,8,44,35,43,2,15,223,0,33,51,80,159,34,48,35,83,158, +34,16,2,89,162,42,34,42,2,16,223,0,33,52,80,159,34,52,35,95,29, +94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109, +105,110,45,115,116,120,11,2,5,9,9,9,34,0}; + EVAL_ONE_SIZED_STR((char *)expr, 4129); } diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 442d6a4e57..c6e07416a1 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 903 +#define EXPECTED_PRIM_COUNT 904 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 3f75df5f22..e90c219bde 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "3.99.0.20" +#define MZSCHEME_VERSION "3.99.0.21" #define MZSCHEME_VERSION_X 3 #define MZSCHEME_VERSION_Y 99 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 20 +#define MZSCHEME_VERSION_W 21 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/mzscheme/src/sema.c b/src/mzscheme/src/sema.c index 4b76a2c16c..5388d570f4 100644 --- a/src/mzscheme/src/sema.c +++ b/src/mzscheme/src/sema.c @@ -42,6 +42,7 @@ static Scheme_Object *thread_send(int n, Scheme_Object **p); static Scheme_Object *thread_receive(int n, Scheme_Object **p); static Scheme_Object *thread_try_receive(int n, Scheme_Object **p); static Scheme_Object *thread_receive_evt(int n, Scheme_Object **p); +static Scheme_Object *thread_rewind_receive(int n, Scheme_Object **p); static Scheme_Object *make_alarm(int n, Scheme_Object **p); static Scheme_Object *make_sys_idle(int n, Scheme_Object **p); @@ -163,7 +164,11 @@ void scheme_init_sema(Scheme_Env *env) "thread-receive-evt", 0, 0), env); - + scheme_add_global_constant("thread-rewind-receive", + scheme_make_prim_w_arity(thread_rewind_receive, + "thread-rewind-receive", + 1, 1), + env); scheme_add_global_constant("alarm-evt", scheme_make_prim_w_arity(make_alarm, @@ -1043,6 +1048,35 @@ static void mbox_push(Scheme_Thread *p, Scheme_Object *o) memory for the queue, first. */ } +static void mbox_push_front(Scheme_Thread *p, Scheme_Object *lst) +{ + int cnt = -1; + Scheme_Object *next, *hd; + + next = lst; + while (!SCHEME_NULLP(next)) { + /* Push one: */ + hd = scheme_make_raw_pair(SCHEME_CAR(next), p->mbox_first); + if (!p->mbox_first) + p->mbox_last = hd; + p->mbox_first = hd; + + ++cnt; + next = SCHEME_CDR(next); + + if (SCHEME_NULLP(next) || (cnt == 256)) { + /* Either done or need to use fuel */ + if (cnt > -1) { + /* do a single post for all messages */ + ((Scheme_Sema*)p->mbox_sema)->value += cnt; + scheme_post_sema(p->mbox_sema); + } + SCHEME_USE_FUEL(cnt+1); /* might sleep */ + cnt = -1; + } + } +} + static Scheme_Object *mbox_pop( Scheme_Thread *p, int dec) { /* Assertion: mbox_first != NULL */ @@ -1065,7 +1099,8 @@ static Scheme_Object *thread_send(int argc, Scheme_Object **argv) int running; if (argc > 2) { - scheme_check_proc_arity("thread-send", 0, 2, argc, argv); + if (!SCHEME_FALSEP(argv[2])) /* redundant, but keeps it fast as possible */ + scheme_check_proc_arity2("thread-send", 0, 2, argc, argv, 1); } running = ((Scheme_Thread*)argv[0])->running; @@ -1074,7 +1109,10 @@ static Scheme_Object *thread_send(int argc, Scheme_Object **argv) return scheme_void; } else { if (argc > 2) { - return _scheme_tail_apply(argv[2], 0, NULL); + if (SCHEME_FALSEP(argv[2])) + return scheme_false; + else + return _scheme_tail_apply(argv[2], 0, NULL); } else scheme_raise_exn(MZEXN_FAIL_CONTRACT, "thread-send: target thread is not running"); } @@ -1138,6 +1176,17 @@ static int thread_recv_ready(Scheme_Object *ch, Scheme_Schedule_Info *sinfo) return 0; } +static Scheme_Object *thread_rewind_receive(int argc, Scheme_Object **argv) +{ + if (scheme_is_list(argv[0])) { + mbox_push_front(scheme_current_thread, argv[0]); + return scheme_void; + } else + scheme_wrong_type("thread-rewind", "list", 0, argc, argv); + + return NULL; +} + /**********************************************************************/ /* alarms */ /**********************************************************************/