scheme/flonum (v4.2.3.8)

svn: r17348
This commit is contained in:
Matthew Flatt 2009-12-18 15:40:00 +00:00
parent 5f7d1792ad
commit fdd7122994
34 changed files with 1853 additions and 766 deletions

View File

@ -14,6 +14,7 @@
(parameterize ([current-namespace ns])
(namespace-require ''#%kernel)
(namespace-require ''#%unsafe)
(namespace-require ''#%flonum)
(for/list ([l (namespace-mapped-symbols)])
(cons l (with-handlers ([exn:fail? (lambda (x) #f)])
(compile l))))))]
@ -350,16 +351,23 @@
[else #f]))
(if (and (symbol? (car a))
(case (length a)
[(2) (memq (car a) '(unsafe-flabs
unsafe-flsqrt
unsafe-fx->fl))]
[(3) (memq (car a) '(unsafe-fl+ unsafe-fl- unsafe-fl* unsafe-fl/
unsafe-fl< unsafe-fl>
unsafe-fl=
unsafe-fl<= unsafe-fl>=
unsafe-flvector-ref))]
[(2) (memq (car a) '(flabs flsqrt ->fl
unsafe-flabs
unsafe-flsqrt
unsafe-fx->fl))]
[(3) (memq (car a) '(fl+ fl- fl* fl/
fl< fl> fl<= fl>= fl=
flvector-ref
unsafe-fl+ unsafe-fl- unsafe-fl* unsafe-fl/
unsafe-fl< unsafe-fl>
unsafe-fl=
unsafe-fl<= unsafe-fl>=
unsafe-flvector-ref
unsafe-f64vector-ref))]
[(4) (memq (car a) '(unsafe-flvector-set!))]
[(4) (memq (car a) '(flvector-set!
unsafe-flvector-set!
unsafe-f64vector-set!))]
[else #f])
(andmap unboxable? args (cdr a)))
(cons '#%flonum a)

View File

@ -19,37 +19,42 @@
(define-syntax-rule (define-inliner define-fx numtype? numtype-str)
(...
(begin
(define-syntax define-an-fx
(syntax-rules ()
[(_ orig fx check-result ([(arg ...) (tmp ...)] ...) . rest)
(begin
(provide fx)
(define fx-proc
(let ([fx (case-lambda
[(arg ...)
(unless (numtype? arg)
(raise-type-error 'fx numtype-str arg))
...
(let ([r (orig arg ...)])
(check-result r (implementation-restriction 'fx r)))]
...
. rest)])
fx))
(define-syntax fx
(inline-rules
fx-proc
[(_ arg ...)
(let ([tmp arg] ...)
(if (and (numtype? tmp) ...)
(let ([v (orig tmp ...)])
(check-result v (fx-proc tmp ...)))
(fx-proc tmp ...)))]
...)))]))
(define-syntax (define-an-fx stx)
(syntax-case stx ()
[(_ orig fx binary-op check-result ([(arg ...) (tmp ...)] ...) . rest)
(with-syntax ([(extra-clauses ...)
(if (syntax-e #'binary-op)
#'([(_ arg1 arg2) (binary-op arg1 arg2)])
#'())])
#'(begin
(provide fx)
(define fx-proc
(let ([fx (case-lambda
[(arg ...)
(unless (numtype? arg)
(raise-type-error 'fx numtype-str arg))
...
(let ([r (orig arg ...)])
(check-result r (implementation-restriction 'fx r)))]
...
. rest)])
fx))
(define-syntax fx
(inline-rules
fx-proc
extra-clauses ...
[(_ arg ...)
(let ([tmp arg] ...)
(if (and (numtype? tmp) ...)
(let ([v (orig tmp ...)])
(check-result v (fx-proc tmp ...)))
(fx-proc tmp ...)))]
...))))]))
(define-syntax define-an-fx+rest
(syntax-rules ()
[(_ orig fx check clauses)
(define-an-fx orig fx check clauses
[(_ orig fx binary-op check clauses)
(define-an-fx orig fx binary-op check clauses
[args (for-each (lambda (arg)
(unless (numtype? arg)
(raise-type-error 'fx numtype-str arg)))
@ -61,28 +66,28 @@
(define-syntax define-fx
(syntax-rules (...)
[(_ orig fx [(a) (b c)] check)
(define-an-fx orig fx check
[(_ orig fx binary-op [(a) (b c)] check)
(define-an-fx orig fx binary-op check
([(a) (t1)]
[(b c) (t1 t2)]))]
[(_ orig fx [(a) (b c (... ...))] check)
(define-an-fx+rest orig fx check
[(_ orig fx binary-op [(a) (b c (... ...))] check)
(define-an-fx+rest orig fx binary-op check
([(a) (t1)]
[(b c) (t1 t2)]))]
[(_ orig fx (a b c (... ...)) check)
(define-an-fx+rest orig fx check
[(_ orig fx binary-op (a b c (... ...)) check)
(define-an-fx+rest orig fx binary-op check
([(a b) (t1 t2)]))]
[(_ orig fx (a b (... ...)) check)
(define-an-fx+rest orig fx check
[(_ orig fx binary-op (a b (... ...)) check)
(define-an-fx+rest orig fx binary-op check
([(a) (t1)]
[(a b) (t1 t2)]
[(a b c) (t1 t2 t3)]))]
[(_ orig fx (a) check)
(define-an-fx+rest orig fx check
[(_ orig fx binary-op (a) check)
(define-an-fx+rest orig fx binary-op check
([(a) (t1)]))]
[(_ orig fx (a b) check)
(define-an-fx orig fx check
[(_ orig fx binary-op (a b) check)
(define-an-fx orig fx binary-op check
([(a b) (t1 t2)]))]
[(_ orig fx (a b c) check)
(define-an-fx orig fx check
[(_ orig fx binary-op (a b c) check)
(define-an-fx orig fx binary-op check
([(a b c) (t1 t2 t3)]))])))))

View File

@ -36,24 +36,24 @@
(define-inliner define-fx fixnum? "fixnum")
(define-fx = fx=? (a b c ...) nocheck)
(define-fx > fx>? (a b c ...) nocheck)
(define-fx < fx<? (a b c ...) nocheck)
(define-fx <= fx<=? (a b c ...) nocheck)
(define-fx >= fx>=? (a b c ...) nocheck)
(define-fx = fx=? #f (a b c ...) nocheck)
(define-fx > fx>? #f (a b c ...) nocheck)
(define-fx < fx<? #f (a b c ...) nocheck)
(define-fx <= fx<=? #f (a b c ...) nocheck)
(define-fx >= fx>=? #f (a b c ...) nocheck)
(define-fx zero? fxzero? (a) nocheck)
(define-fx positive? fxpositive? (a) nocheck)
(define-fx negative? fxnegative? (a) nocheck)
(define-fx odd? fxodd? (a) nocheck)
(define-fx even? fxeven? (a) nocheck)
(define-fx zero? fxzero? #f (a) nocheck)
(define-fx positive? fxpositive? #f (a) nocheck)
(define-fx negative? fxnegative? #f (a) nocheck)
(define-fx odd? fxodd? #f (a) nocheck)
(define-fx even? fxeven? #f (a) nocheck)
(define-fx max fxmax (a b ...) nocheck)
(define-fx min fxmin (a b ...) nocheck)
(define-fx max fxmax #f (a b ...) nocheck)
(define-fx min fxmin #f (a b ...) nocheck)
(define-fx + fx+ (a b) check)
(define-fx * fx* (a b) check)
(define-fx - fx- [(a) (a b)] check)
(define-fx + fx+ #f (a b) check)
(define-fx * fx* #f (a b) check)
(define-fx - fx- #f [(a) (a b)] check)
(provide fxdiv-and-mod
fxdiv0-and-mod0)
@ -65,8 +65,8 @@
(let-values ([(d m) (div-and-mod a b)])
(check d (implementation-restriction 'div-and-mod d))
(values d m)))
(define-fx div fxdiv (a b) check)
(define-fx mod fxmod (a b) nocheck)
(define-fx div fxdiv #f (a b) check)
(define-fx mod fxmod #f (a b) nocheck)
(define (fxdiv0-and-mod0 a b)
(unless (fixnum? a)
(raise-type-error 'fxdiv0-and-mod0 "fixnum" a))
@ -75,8 +75,8 @@
(let-values ([(d m) (div0-and-mod0 a b)])
(check d (implementation-restriction 'div0-and-mod0 d))
(values d m)))
(define-fx div0 fxdiv0 (a b) check)
(define-fx mod0 fxmod0 (a b) nocheck)
(define-fx div0 fxdiv0 #f (a b) check)
(define-fx mod0 fxmod0 #f (a b) nocheck)
(define-syntax-rule (define-carry fx/carry (a b c) expr)
(begin
@ -96,18 +96,18 @@
(define-carry fx-/carry (a b c) (- a b c))
(define-carry fx*/carry (a b c) (+ (* a b) c))
(define-fx bitwise-not fxnot (a) nocheck)
(define-fx bitwise-and fxand (a b ...) nocheck)
(define-fx bitwise-ior fxior (a b ...) nocheck)
(define-fx bitwise-xor fxxor (a b ...) nocheck)
(define-fx bitwise-not fxnot #f (a) nocheck)
(define-fx bitwise-and fxand #f (a b ...) nocheck)
(define-fx bitwise-ior fxior #f (a b ...) nocheck)
(define-fx bitwise-xor fxxor #f (a b ...) nocheck)
(define-syntax-rule (fixnum-bitwise-if a b c)
(bitwise-ior (bitwise-and a b)
(bitwise-and (bitwise-not a) c)))
(define-fx fixnum-bitwise-if fxif (a b c) nocheck)
(define-fx fixnum-bitwise-if fxif #f (a b c) nocheck)
(define-fx bitwise-length fxlength (a) nocheck)
(define-fx bitwise-first-bit-set fxfirst-bit-set (a) nocheck)
(define-fx bitwise-length fxlength #f (a) nocheck)
(define-fx bitwise-first-bit-set fxfirst-bit-set #f (a) nocheck)
(define positive-fixnum-width-bounds
(string-append "exact integer in [0, " (number->string (- (fixnum-width) 1)) "]"))

View File

@ -5,17 +5,17 @@
div0-and-mod0 div0 mod0
[integer? r6rs:integer?]
finite? infinite? nan?)
(prefix-in core: scheme/flonum)
(only-in rnrs/arithmetic/fixnums-6
fixnum?)
rnrs/conditions-6
r6rs/private/num-inline
(for-syntax r6rs/private/inline-rules))
r6rs/private/num-inline)
(provide (rename-out [inexact-real? flonum?])
real->flonum
flnumerator
fldenominator
fllog flsqrt flexpt
fllog (rename-out [core:flsqrt flsqrt]) flexpt
&no-infinities make-no-infinities-violation no-infinities-violation?
&no-nans make-no-nans-violation no-nans-violation?
fixnum->flonum)
@ -23,31 +23,31 @@
(define-inliner define-fl inexact-real? "flonum")
(define-fl = fl=? (a b c ...) nocheck)
(define-fl > fl>? (a b c ...) nocheck)
(define-fl < fl<? (a b c ...) nocheck)
(define-fl <= fl<=? (a b c ...) nocheck)
(define-fl >= fl>=? (a b c ...) nocheck)
(define-fl = fl=? core:fl= (a b c ...) nocheck)
(define-fl > fl>? core:fl> (a b c ...) nocheck)
(define-fl < fl<? core:fl< (a b c ...) nocheck)
(define-fl <= fl<=? core:fl<= (a b c ...) nocheck)
(define-fl >= fl>=? core:fl>= (a b c ...) nocheck)
(define-fl integer? flinteger? (a) nocheck)
(define-fl zero? flzero? (a) nocheck)
(define-fl positive? flpositive? (a) nocheck)
(define-fl negative? flnegative? (a) nocheck)
(define-fl odd? flodd? (a) nocheck)
(define-fl even? fleven? (a) nocheck)
(define-fl finite? flfinite? (a) nocheck)
(define-fl infinite? flinfinite? (a) nocheck)
(define-fl nan? flnan? (a) nocheck)
(define-fl integer? flinteger? #f (a) nocheck)
(define-fl zero? flzero? #f (a) nocheck)
(define-fl positive? flpositive? #f (a) nocheck)
(define-fl negative? flnegative? #f (a) nocheck)
(define-fl odd? flodd? #f (a) nocheck)
(define-fl even? fleven? #f (a) nocheck)
(define-fl finite? flfinite? #f (a) nocheck)
(define-fl infinite? flinfinite? #f (a) nocheck)
(define-fl nan? flnan? #f (a) nocheck)
(define-fl max flmax (a b ...) nocheck)
(define-fl min flmin (a b ...) nocheck)
(define-fl max flmax #f (a b ...) nocheck)
(define-fl min flmin #f (a b ...) nocheck)
(define-fl + fl+ (a b ...) nocheck)
(define-fl * fl* (a b ...) nocheck)
(define-fl - fl- [(a) (a b ...)] nocheck)
(define-fl / fl/ [(a) (a b ...)] nocheck)
(define-fl + fl+ core:fl+ (a b ...) nocheck)
(define-fl * fl* core:fl* (a b ...) nocheck)
(define-fl - fl- core:fl- [(a) (a b ...)] nocheck)
(define-fl / fl/ core:fl/ [(a) (a b ...)] nocheck)
(define-fl abs flabs (a) nocheck)
(define-fl abs flabs core:flabs (a) nocheck)
(provide fldiv-and-mod
fldiv0-and-mod0)
@ -57,16 +57,16 @@
(unless (inexact-real? b)
(raise-type-error 'fldiv-and-mod "flonum" b))
(div-and-mod a b))
(define-fl div fldiv (a b) nocheck)
(define-fl mod flmod (a b) nocheck)
(define-fl div fldiv #f (a b) nocheck)
(define-fl mod flmod #f (a b) nocheck)
(define (fldiv0-and-mod0 a b)
(unless (inexact-real? a)
(raise-type-error 'fldiv0-and-mod0 "flonum" a))
(unless (inexact-real? b)
(raise-type-error 'fldiv0-and-mod0 "flonum" b))
(div0-and-mod0 a b))
(define-fl div0 fldiv0 (a b) nocheck)
(define-fl mod0 flmod0 (a b) nocheck)
(define-fl div0 fldiv0 #f (a b) nocheck)
(define-fl mod0 flmod0 #f (a b) nocheck)
(define (flnumerator c)
(if (inexact-real? c)
@ -83,12 +83,12 @@
1.0)
(raise-type-error 'fldenominator "flonum" c)))
(define-fl floor flfloor (a) nocheck)
(define-fl ceiling flceiling (a) nocheck)
(define-fl truncate fltruncate (a) nocheck)
(define-fl round flround (a) nocheck)
(define-fl floor flfloor #f (a) nocheck)
(define-fl ceiling flceiling #f (a) nocheck)
(define-fl truncate fltruncate #f (a) nocheck)
(define-fl round flround #f (a) nocheck)
(define-fl exp flexp (a) nocheck)
(define-fl exp flexp #f (a) nocheck)
(define fllog
(case-lambda
@ -102,20 +102,12 @@
[(v1 v2)
(/ (fllog v1) (fllog v2))]))
(define-fl sin flsin (a) nocheck)
(define-fl cos flcos (a) nocheck)
(define-fl tan fltan (a) nocheck)
(define-fl asin flasin (a) nocheck)
(define-fl acos flacos (a) nocheck)
(define-fl atan flatan [(a) (a b)] nocheck)
(define (flsqrt v)
(unless (inexact-real? v)
(raise-type-error 'flsqrt "flonum" v))
(let ([v (sqrt v)])
(if (inexact-real? v)
v
+nan.0)))
(define-fl sin flsin #f (a) nocheck)
(define-fl cos flcos #f (a) nocheck)
(define-fl tan fltan #f (a) nocheck)
(define-fl asin flasin #f (a) nocheck)
(define-fl acos flacos #f (a) nocheck)
(define-fl atan flatan #f [(a) (a b)] nocheck)
(define (flexpt a b)
(unless (inexact-real? a)

View File

@ -0,0 +1,4 @@
#lang scheme/base
(require '#%flonum)
(provide (all-from-out '#%flonum))

View File

@ -1,7 +1,7 @@
#lang scribble/doc
@(require scribble/manual
"guide-utils.ss"
(for-label scheme/unsafe/ops))
(for-label scheme/flonum scheme/unsafe/ops))
@title[#:tag "performance"]{Performance}
@ -257,30 +257,35 @@ arguments, such as @scheme[+], inlining works for two or more
arguments (except for @scheme[-], whose one-argument case is also
inlined) when the arguments are either all fixnums or all flonums.
Flonums are @defterm{boxed}, which means that memory is allocated to
hold every result of a flonum computation. Fortunately, the
generational garbage collector (described later in @secref["gc-perf"])
makes allocation for short-lived results reasonably cheap. Fixnums, in
contrast are never boxed, so they are especially cheap to use.
Flonums are typically @defterm{boxed}, which means that memory is
allocated to hold every result of a flonum computation. Fortunately,
the generational garbage collector (described later in
@secref["gc-perf"]) makes allocation for short-lived results
reasonably cheap. Fixnums, in contrast are never boxed, so they are
typically cheap to use.
The @schememodname[scheme/unsafe/ops] library provides fixnum- and
flonum-specific operations, and combinations of unchecked flonum
operations allow the @tech{JIT} compiler to generate code that avoids
boxing and unboxing intermediate results. Expressions involving a
combination of unchecked flonum operations, @scheme[unsafe-fx->fl],
constants, and variable references are optimized to avoid boxing. When
such a result is bound with @scheme[let] and then consumed by another
unchecked flonum operation, the result is similarly unboxed. Finally,
the compiler can detect some flonum-valued loop accumulators. The
bytecode decompiler (see @secref[#:doc '(lib
"scribblings/mzc/mzc.scrbl") "decompile"] annotates combinations where
the JIT can avoid boxes with @schemeidfont{#%flonum},
@schemeidfont{#%as-flonum}, and @schemeidfont{#%from-flonum}. See also
@secref["unchecked-unsafe"], especially the warnings about unsafety.
The @schememodname[scheme/flonum] library provides flonum-specific
operations, and combinations of flonum operations allow the @tech{JIT}
compiler to generate code that avoids boxing and unboxing intermediate
results. Besides results within immediate combinations,
flonum-specific results that are bound with @scheme[let] and consumed
by a later flonum-specific operation are unboxed within temporary
storage. Finally, the compiler can detect some flonum-valued loop
accumulators and avoid boxing of the accumulator. The bytecode
decompiler (see @secref[#:doc '(lib "scribblings/mzc/mzc.scrbl")
"decompile"]) annotates combinations where the JIT can avoid boxes with
@schemeidfont{#%flonum}, @schemeidfont{#%as-flonum}, and
@schemeidfont{#%from-flonum}.
@margin-note{Unboxing of local bindings and accumualtors is not
supported by the JIT for PowerPC.}
The @schememodname[scheme/unsafe/ops] library provides unchecked
fixnum- and flonum-specific operations. Unchecked flonum-specific
operations allow unboxing, and sometimes they allow the compiler to
reorder expressions to improve performance. See also
@secref["unchecked-unsafe"], especially the warnings about unsafety.
@; ----------------------------------------------------------------------
@section[#:tag "unchecked-unsafe"]{Unchecked, Unsafe Operations}

View File

@ -81,11 +81,11 @@ Many forms in the decompiled code, such as @scheme[module],
inline the operation. (Inlining information is not part of the
bytecode, but is instead based on an enumeration of primitives that
the JIT is known to handle specially.) Operations from
@schememodname[scheme/unsafe/ops] are always inlined, so
@schemeidfont{#%in} is not shown for them.}
@schememodname[scheme/flonum] and @schememodname[scheme/unsafe/ops]
are always inlined, so @schemeidfont{#%in} is not shown for them.}
@item{Some applications of unsafe flonum operations from
@schememodname[scheme/unsafe/ops] are annotated with
@item{Some applications of flonum operations from @schememodname[scheme/flonum]
and @schememodname[scheme/unsafe/ops] are annotated with
@schemeidfont{#%flonum}, indicating a place where the JIT compiler
might avoid allocation for intermediate flonum results. A single
@schemeidfont{#%flonum} by itself is not useful, but a

View File

@ -1,7 +1,8 @@
#lang scribble/doc
@(require "mz.ss"
scheme/math
(for-label scheme/math))
(for-label scheme/math
scheme/flonum))
@(define math-eval (make-base-eval))
@(interaction-eval #:eval math-eval (require scheme/math))
@ -850,7 +851,51 @@ for the machine running Scheme, @scheme[#f] if the native encoding
is little-endian.}
@; ------------------------------------------------------------------------
@section{Inexact-Real Vectors}
@section{Inexact-Real (Flonum) Operations}
@defmodule[scheme/flonum]
The @schememodname[scheme/flonum] library provides operations like
@scheme[fl+] that consume and produce only real @tech{inexact
numbers}, which are also known as @deftech{flonums}. Flonum-specific
operations provide can better performance when used consistently, and
they are as safe as generic operations like @scheme[+].
@margin-note{See @guidesecref["fixnums+flonums"].}
@subsection{Flonum Arithmetic}
@deftogether[(
@defproc[(fl+ [a inexact-real?][b inexact-real?]) inexact-real?]
@defproc[(fl- [a inexact-real?][b inexact-real?]) inexact-real?]
@defproc[(fl* [a inexact-real?][b inexact-real?]) inexact-real?]
@defproc[(fl/ [a inexact-real?][b inexact-real?]) inexact-real?]
@defproc[(flabs [a inexact-real?]) inexact-real?]
@defproc[(flsqrt [a inexact-real?]) inexact-real?]
)]{
Like @scheme[+], @scheme[-], @scheme[*], @scheme[/], @scheme[abs], and
@scheme[sqrt], but constrained to consume @tech{flonums}. The result
is always a @tech{flonum}. If a negative number is provided to
@scheme[sqrt], the result is @scheme[+nan.0].}
@deftogether[(
@defproc[(fl= [a inexact-real?][b inexact-real?]) boolean?]
@defproc[(fl< [a inexact-real?][b inexact-real?]) boolean?]
@defproc[(fl> [a inexact-real?][b inexact-real?]) boolean?]
@defproc[(fl<= [a inexact-real?][b inexact-real?]) boolean?]
@defproc[(fl>= [a inexact-real?][b inexact-real?]) boolean?]
)]{
Like @scheme[=], @scheme[<], @scheme[>], @scheme[<=], and @scheme[>=],
but constrained to consume @tech{flonums}.}
@defproc[(->fl [a exact-integer?]) inexact-real?]{
Like @scheme[exact->inexact], but constrained to consume exact integers,
so the result is always a @tech{flonum}.
}
@subsection{Flonum Vectors}
A @deftech{flvector} is like a @tech{vector}, but it holds only
inexact real numbers. This representation can be more compact, and

View File

@ -1,6 +1,7 @@
#lang scribble/doc
@(require "mz.ss"
(for-label scheme/unsafe/ops
scheme/flonum
(only-in scheme/foreign
f64vector?
f64vector-ref
@ -85,7 +86,7 @@ For @tech{fixnums}: Like @scheme[=], @scheme[<], @scheme[>],
@defproc[(unsafe-fx->fl [a fixnum?]) inexact-real?]{
Like @scheme[exact->inexact], but constrained to consume @tech{fixnums}.
Unchecked version of @scheme[->fl].
}
@ -98,11 +99,8 @@ Like @scheme[exact->inexact], but constrained to consume @tech{fixnums}.
@defproc[(unsafe-flsqrt [a inexact-real?]) inexact-real?]
)]{
For real @tech{inexact numbers}: Like @scheme[+], @scheme[-],
@scheme[*], @scheme[/], and @scheme[abs], but constrained to consume
real @tech{inexact numbers}. The result is always a real @tech{inexact
number}. If a negative number is provided to @scheme[unsafe-sqrt], the
result is @scheme[+nan.0].}
For @tech{flonums}: Unchecked versions of @scheme[fl+], @scheme[fl-],
@scheme[fl*], @scheme[fl/], @scheme[flabs], and @scheme[flsqrt].}
@deftogether[(
@ -113,9 +111,9 @@ result is @scheme[+nan.0].}
@defproc[(unsafe-fl>= [a inexact-real?][b inexact-real?]) boolean?]
)]{
For real @tech{inexact numbers}: Like @scheme[=], @scheme[<],
@scheme[>], @scheme[<=], and @scheme[>=], but constrained to consume
real @tech{inexact numbers}.}
For @tech{flonums}: Unchecked versions of @scheme[fl=],
@scheme[fl<], @scheme[fl>], @scheme[fl<=], and @scheme[fl>=], but constrained
to consume @tech{flonums}.}
@section{Unsafe Data Extraction}

View File

@ -0,0 +1,79 @@
;; ---------------------------------------------------------------------
;; The Great Computer Language Shootout
;; http://shootout.alioth.debian.org/
;;
;; Derived from the Chicken variant, which was
;; Contributed by Anthony Borla
;; The version that uses complex number is a little
;; more elegant, but much slower:
;; (define (mandelbrot iterations x y n ci)
;; (let ((c (+ (- (/ (* 2.0 x) n) 1.5)
;; (* ci 0.0+1.0i))))
;; (let loop ((i 0) (z 0.0+0.0i))
;; (cond
;; [(> i iterations) 1]
;; [(> (magnitude z) 2.0) 0]
;; [else (loop (add1 i) (+ (* z z) c))]))))
#lang scheme/base
(require scheme/cmdline)
(define +limit-sqr+ 4.0)
(define +iterations+ 50)
;; -------------------------------
(define (mandelbrot iterations x y n ci)
(let ((cr (- (/ (* 2.0 x) n) 1.5)))
(let loop ((i 0) (zr 0.0) (zi 0.0))
(if (> i iterations)
1
(let ((zrq (* zr zr))
(ziq (* zi zi)))
(cond
((> (+ zrq ziq) +limit-sqr+) 0)
(else (loop (add1 i)
(+ (- zrq ziq) cr)
(+ (* 2.0 zr zi) ci)))))))))
;; -------------------------------
(define (main n)
(let ((out (current-output-port)))
(fprintf out "P4\n~a ~a\n" n n)
(let loop-y ((y 0))
(when (< y n)
(let ([ci (- (/ (* 2.0 y) n) 1.0)])
(let loop-x ((x 0) (bitnum 0) (byteacc 0))
(if (< x n)
(let ([bitnum (add1 bitnum)]
[byteacc (+ (arithmetic-shift byteacc 1)
(mandelbrot +iterations+ x y n ci))])
(cond
((= bitnum 8)
(write-byte byteacc out)
(loop-x (add1 x) 0 0))
[else (loop-x (add1 x) bitnum byteacc)]))
(begin
(when (positive? bitnum)
(write-byte (arithmetic-shift byteacc
(- 8 (bitwise-and n #x7)))
out))
(loop-y (add1 y))))))))))
;; -------------------------------
(command-line #:args (n)
(main (string->number n)))

View File

@ -4,20 +4,10 @@
;;
;; Derived from the Chicken variant, which was
;; Contributed by Anthony Borla
;; The version that uses complex number is a little
;; more elegant, but much slower:
;; (define (mandelbrot iterations x y n ci)
;; (let ((c (+ (- (/ (* 2.0 x) n) 1.5)
;; (* ci 0.0+1.0i))))
;; (let loop ((i 0) (z 0.0+0.0i))
;; (cond
;; [(> i iterations) 1]
;; [(> (magnitude z) 2.0) 0]
;; [else (loop (add1 i) (+ (* z z) c))]))))
#lang scheme/base
(require scheme/cmdline)
(require scheme/cmdline
scheme/flonum)
(define +limit-sqr+ 4.0)
@ -25,18 +15,16 @@
;; -------------------------------
(define (mandelbrot iterations x y n ci)
(let ((cr (- (/ (* 2.0 x) n) 1.5)))
(define (mandelbrot x y n ci)
(let ((cr (fl- (fl/ (fl* 2.0 (->fl x)) (->fl n)) 1.5)))
(let loop ((i 0) (zr 0.0) (zi 0.0))
(if (> i iterations)
(if (> i +iterations+)
1
(let ((zrq (* zr zr))
(ziq (* zi zi)))
(cond
((> (+ zrq ziq) +limit-sqr+) 0)
(else (loop (add1 i)
(+ (- zrq ziq) cr)
(+ (* 2.0 zr zi) ci)))))))))
(cond
((fl> (fl+ (fl* zr zr) (fl* zi zi)) +limit-sqr+) 0)
(else (loop (+ 1 i)
(fl+ (fl- (fl* zr zr) (fl* zi zi)) cr)
(fl+ (fl* 2.0 (fl* zr zi)) ci))))))))
;; -------------------------------
@ -49,21 +37,21 @@
(when (< y n)
(let ([ci (- (/ (* 2.0 y) n) 1.0)])
(let ([ci (fl- (fl/ (fl* 2.0 (->fl y)) (->fl n)) 1.0)])
(let loop-x ((x 0) (bitnum 0) (byteacc 0))
(if (< x n)
(let ([bitnum (add1 bitnum)]
(let ([bitnum (+ 1 bitnum)]
[byteacc (+ (arithmetic-shift byteacc 1)
(mandelbrot +iterations+ x y n ci))])
(mandelbrot x y n ci))])
(cond
((= bitnum 8)
(write-byte byteacc out)
(loop-x (add1 x) 0 0))
(loop-x (+ 1 x) 0 0))
[else (loop-x (add1 x) bitnum byteacc)]))
[else (loop-x (+ 1 x) bitnum byteacc)]))
(begin
(when (positive? bitnum)

View File

@ -0,0 +1,157 @@
#!/usr/bin/mzscheme -qu
;; The Computer Language Benchmarks Game
;; http://shootout.alioth.debian.org/
;;
;; Imperative-style implementation based on the SBCL implementation by
;; Patrick Frankenberger and Juho Snellman, but using only native Scheme
;; idioms like 'named let' and 'do' special form.
;;
;; Contributed by Anthony Borla, then converted for mzscheme
;; by Matthew Flatt and Brent Fulgham
#|
Correct output N = 1000 is
-0.169075164
-0.169087605
|#
#lang scheme/base
(require scheme/cmdline)
;; ------------------------------
;; define planetary masses, initial positions & velocity
(define +pi+ 3.141592653589793)
(define +days-per-year+ 365.24)
(define +solar-mass+ (* 4 +pi+ +pi+))
(define +dt+ 0.01)
(define-struct body (x y z vx vy vz mass)
#:mutable)
(define *sun*
(make-body 0.0 0.0 0.0 0.0 0.0 0.0 +solar-mass+))
(define *jupiter*
(make-body 4.84143144246472090
-1.16032004402742839
-1.03622044471123109e-1
(* 1.66007664274403694e-3 +days-per-year+)
(* 7.69901118419740425e-3 +days-per-year+)
(* -6.90460016972063023e-5 +days-per-year+)
(* 9.54791938424326609e-4 +solar-mass+)))
(define *saturn*
(make-body 8.34336671824457987
4.12479856412430479
-4.03523417114321381e-1
(* -2.76742510726862411e-3 +days-per-year+)
(* 4.99852801234917238e-3 +days-per-year+)
(* 2.30417297573763929e-5 +days-per-year+)
(* 2.85885980666130812e-4 +solar-mass+)))
(define *uranus*
(make-body 1.28943695621391310e1
-1.51111514016986312e1
-2.23307578892655734e-1
(* 2.96460137564761618e-03 +days-per-year+)
(* 2.37847173959480950e-03 +days-per-year+)
(* -2.96589568540237556e-05 +days-per-year+)
(* 4.36624404335156298e-05 +solar-mass+)))
(define *neptune*
(make-body 1.53796971148509165e+01
-2.59193146099879641e+01
1.79258772950371181e-01
(* 2.68067772490389322e-03 +days-per-year+)
(* 1.62824170038242295e-03 +days-per-year+)
(* -9.51592254519715870e-05 +days-per-year+)
(* 5.15138902046611451e-05 +solar-mass+)))
(define *system* (list *sun* *jupiter* *saturn* *uranus* *neptune*))
;; -------------------------------
(define (offset-momentum)
(let loop-i ([i *system*] [px 0.0] [py 0.0] [pz 0.0])
(if (null? i)
(begin
(set-body-vx! (car *system*) (/ (- px) +solar-mass+))
(set-body-vy! (car *system*) (/ (- py) +solar-mass+))
(set-body-vz! (car *system*) (/ (- pz) +solar-mass+)))
(let ([i1 (car i)])
(loop-i (cdr i)
(+ px (* (body-vx i1) (body-mass i1)))
(+ py (* (body-vy i1) (body-mass i1)))
(+ pz (* (body-vz i1) (body-mass i1))))))))
;; -------------------------------
(define (energy)
(let loop-o ([o *system*] [e 0.0])
(if (null? o)
e
(let* ([o1 (car o)]
[e (+ e (* 0.5
(body-mass o1)
(+ (* (body-vx o1) (body-vx o1))
(* (body-vy o1) (body-vy o1))
(* (body-vz o1) (body-vz o1)))))])
(let loop-i ([i (cdr o)] [e e])
(if (null? i)
(loop-o (cdr o) e)
(let* ([i1 (car i)]
[dx (- (body-x o1) (body-x i1))]
[dy (- (body-y o1) (body-y i1))]
[dz (- (body-z o1) (body-z i1))]
[dist (sqrt (+ (* dx dx) (* dy dy) (* dz dz)))]
[e (- e (/ (* (body-mass o1) (body-mass i1)) dist))])
(loop-i (cdr i) e))))))))
;; -------------------------------
(define (advance)
(let loop-o ([o *system*])
(when (pair? o)
(let* ([o1 (car o)]
[o1x (body-x o1)]
[o1y (body-y o1)]
[o1z (body-z o1)]
[om (body-mass o1)])
(let loop-i ([i (cdr o)]
[vx (body-vx o1)]
[vy (body-vy o1)]
[vz (body-vz o1)])
(if (pair? i)
(let* ([i1 (car i)]
[dx (- o1x (body-x i1))]
[dy (- o1y (body-y i1))]
[dz (- o1z (body-z i1))]
[dist2 (+ (* dx dx) (* dy dy) (* dz dz))]
[mag (/ +dt+ (* dist2 (sqrt dist2)))]
[dxmag (* dx mag)]
[dymag (* dy mag)]
[dzmag (* dz mag)]
[im (body-mass i1)])
(set-body-vx! i1 (+ (body-vx i1) (* dxmag om)))
(set-body-vy! i1 (+ (body-vy i1) (* dymag om)))
(set-body-vz! i1 (+ (body-vz i1) (* dzmag om)))
(loop-i (cdr i)
(- vx (* dxmag im))
(- vy (* dymag im))
(- vz (* dzmag im))))
(begin (set-body-vx! o1 vx)
(set-body-vy! o1 vy)
(set-body-vz! o1 vz)
(set-body-x! o1 (+ o1x (* +dt+ vx)))
(set-body-y! o1 (+ o1y (* +dt+ vy)))
(set-body-z! o1 (+ o1z (* +dt+ vz)))))))
(loop-o (cdr o)))))
;; -------------------------------
(let ([n (command-line #:args (n) (string->number n))])
(offset-momentum)
(printf "~a\n" (real->decimal-string (energy) 9))
(for ([i (in-range n)]) (advance))
(printf "~a\n" (real->decimal-string (energy) 9)))

View File

@ -18,6 +18,7 @@ Correct output N = 1000 is
#lang scheme/base
(require scheme/cmdline scheme/require
(only-in scheme/flonum flvector)
(for-syntax scheme/base)
(filtered-in
(lambda (name)

View File

@ -17,7 +17,8 @@ Correct output N = 1000 is
|#
#lang scheme/base
(require scheme/cmdline)
(require scheme/cmdline
scheme/flonum)
;; ------------------------------
;; define planetary masses, initial positions & velocity
@ -93,20 +94,20 @@ Correct output N = 1000 is
(if (null? o)
e
(let* ([o1 (car o)]
[e (+ e (* 0.5
(body-mass o1)
(+ (* (body-vx o1) (body-vx o1))
(* (body-vy o1) (body-vy o1))
(* (body-vz o1) (body-vz o1)))))])
[e (+ e (fl* 0.5
(fl* (body-mass o1)
(fl+ (fl+ (fl* (body-vx o1) (body-vx o1))
(fl* (body-vy o1) (body-vy o1)))
(fl* (body-vz o1) (body-vz o1))))))])
(let loop-i ([i (cdr o)] [e e])
(if (null? i)
(loop-o (cdr o) e)
(let* ([i1 (car i)]
[dx (- (body-x o1) (body-x i1))]
[dy (- (body-y o1) (body-y i1))]
[dz (- (body-z o1) (body-z i1))]
[dist (sqrt (+ (* dx dx) (* dy dy) (* dz dz)))]
[e (- e (/ (* (body-mass o1) (body-mass i1)) dist))])
[dx (fl- (body-x o1) (body-x i1))]
[dy (fl- (body-y o1) (body-y i1))]
[dz (fl- (body-z o1) (body-z i1))]
[dist (flsqrt (fl+ (fl+ (fl* dx dx) (fl* dy dy)) (fl* dz dz)))]
[e (fl- e (fl/ (fl* (body-mass o1) (body-mass i1)) dist))])
(loop-i (cdr i) e))))))))
;; -------------------------------
@ -124,28 +125,28 @@ Correct output N = 1000 is
[vz (body-vz o1)])
(if (pair? i)
(let* ([i1 (car i)]
[dx (- o1x (body-x i1))]
[dy (- o1y (body-y i1))]
[dz (- o1z (body-z i1))]
[dist2 (+ (* dx dx) (* dy dy) (* dz dz))]
[mag (/ +dt+ (* dist2 (sqrt dist2)))]
[dxmag (* dx mag)]
[dymag (* dy mag)]
[dzmag (* dz mag)]
[dx (fl- o1x (body-x i1))]
[dy (fl- o1y (body-y i1))]
[dz (fl- o1z (body-z i1))]
[dist2 (fl+ (fl+ (fl* dx dx) (fl* dy dy)) (fl* dz dz))]
[mag (fl/ +dt+ (fl* dist2 (flsqrt dist2)))]
[dxmag (fl* dx mag)]
[dymag (fl* dy mag)]
[dzmag (fl* dz mag)]
[im (body-mass i1)])
(set-body-vx! i1 (+ (body-vx i1) (* dxmag om)))
(set-body-vy! i1 (+ (body-vy i1) (* dymag om)))
(set-body-vz! i1 (+ (body-vz i1) (* dzmag om)))
(set-body-vx! i1 (fl+ (body-vx i1) (fl* dxmag om)))
(set-body-vy! i1 (fl+ (body-vy i1) (fl* dymag om)))
(set-body-vz! i1 (fl+ (body-vz i1) (fl* dzmag om)))
(loop-i (cdr i)
(- vx (* dxmag im))
(- vy (* dymag im))
(- vz (* dzmag im))))
(fl- vx (fl* dxmag im))
(fl- vy (fl* dymag im))
(fl- vz (fl* dzmag im))))
(begin (set-body-vx! o1 vx)
(set-body-vy! o1 vy)
(set-body-vz! o1 vz)
(set-body-x! o1 (+ o1x (* +dt+ vx)))
(set-body-y! o1 (+ o1y (* +dt+ vy)))
(set-body-z! o1 (+ o1z (* +dt+ vz)))))))
(set-body-x! o1 (fl+ o1x (fl* +dt+ vx)))
(set-body-y! o1 (fl+ o1y (fl* +dt+ vy)))
(set-body-z! o1 (fl+ o1z (fl* +dt+ vz)))))))
(loop-o (cdr o)))))
;; -------------------------------

View File

@ -9,7 +9,8 @@
;; ---------------------------------------------------------------------
#lang scheme/base
(require scheme/cmdline)
(require scheme/cmdline
scheme/flonum)
;; -------------------------------
@ -25,8 +26,8 @@
(else (+ (fib (- n 2)) (fib (- n 1))))))
(define (fibflt n)
(cond ((< n 2.0) 1.0)
(else (+ (fibflt (- n 2.0)) (fibflt (- n 1.0))))))
(cond ((fl< n 2.0) 1.0)
(else (fl+ (fibflt (fl- n 2.0)) (fibflt (fl- n 1.0))))))
;; --------------
@ -35,8 +36,8 @@
(else (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)))))
(define (takflt x y z)
(cond ((not (< y x)) z)
(else (takflt (takflt (- x 1.0) y z) (takflt (- y 1.0) z x) (takflt (- z 1.0) x y)))))
(cond ((not (fl< y x)) z)
(else (takflt (takflt (fl- x 1.0) y z) (takflt (fl- y 1.0) z x) (takflt (fl- z 1.0) x y)))))
;; -------------------------------

View File

@ -0,0 +1,58 @@
;; The Great Computer Language Shootout
;; http://shootout.alioth.debian.org/
;; Translated directly from the C# version, which was:
;; contributed by Isaac Gouy
#lang scheme/base
(require scheme/cmdline)
(define (Approximate n)
(let ([u (make-vector n 1.0)]
[v (make-vector n 0.0)])
;; 20 steps of the power method
(for ([i (in-range 10)])
(MultiplyAtAv n u v)
(MultiplyAtAv n v u))
;; B=AtA A multiplied by A transposed
;; v.Bv /(v.v) eigenvalue of v
(let loop ([i 0][vBv 0][vv 0])
(if (= i n)
(sqrt (/ vBv vv))
(let ([vi (vector-ref v i)])
(loop (add1 i)
(+ vBv (* (vector-ref u i) vi))
(+ vv (* vi vi))))))))
;; return element i,j of infinite matrix A
(define (A i j)
(/ 1.0 (+ (* (+ i j) (/ (+ i (+ j 1)) 2.0)) (+ i 1))))
;; multiply vector v by matrix A
(define (MultiplyAv n v Av)
(for ([i (in-range n)])
(vector-set! Av i
(for/fold ([r 0])
([j (in-range n)])
(+ r (* (A i j) (vector-ref v j)))))))
;; multiply vector v by matrix A transposed
(define (MultiplyAtv n v Atv)
(for ([i (in-range n)])
(vector-set! Atv i
(for/fold ([r 0])
([j (in-range n)])
(+ r (* (A j i) (vector-ref v j)))))))
;; multiply vector v by matrix A and then by matrix A transposed
(define (MultiplyAtAv n v AtAv)
(let ([u (make-vector n 0.0)])
(MultiplyAv n v u)
(MultiplyAtv n u AtAv)))
(printf "~a\n"
(real->decimal-string
(Approximate (command-line #:args (n) (string->number n)))
9))

View File

@ -6,6 +6,7 @@
#lang scheme/base
(require scheme/cmdline
scheme/flonum
scheme/unsafe/ops)
(define (Approximate n)

View File

@ -5,7 +5,8 @@
;; contributed by Isaac Gouy
#lang scheme/base
(require scheme/cmdline)
(require scheme/cmdline
scheme/flonum)
(define (Approximate n)
(let ([u (make-vector n 1.0)]
@ -17,33 +18,35 @@
;; B=AtA A multiplied by A transposed
;; v.Bv /(v.v) eigenvalue of v
(let loop ([i 0][vBv 0][vv 0])
(let loop ([i 0][vBv 0.0][vv 0.0])
(if (= i n)
(sqrt (/ vBv vv))
(flsqrt (fl/ vBv vv))
(let ([vi (vector-ref v i)])
(loop (add1 i)
(+ vBv (* (vector-ref u i) vi))
(+ vv (* vi vi))))))))
(fl+ vBv (fl* (vector-ref u i) vi))
(fl+ vv (fl* vi vi))))))))
;; return element i,j of infinite matrix A
(define (A i j)
(/ 1.0 (+ (* (+ i j) (/ (+ i (+ j 1)) 2.0)) (+ i 1))))
(fl/ 1.0 (fl+ (fl* (->fl (+ i j))
(fl/ (->fl (+ i (+ j 1))) 2.0))
(->fl (+ i 1)))))
;; multiply vector v by matrix A
(define (MultiplyAv n v Av)
(for ([i (in-range n)])
(vector-set! Av i
(for/fold ([r 0])
(for/fold ([r 0.0])
([j (in-range n)])
(+ r (* (A i j) (vector-ref v j)))))))
(fl+ r (fl* (A i j) (vector-ref v j)))))))
;; multiply vector v by matrix A transposed
(define (MultiplyAtv n v Atv)
(for ([i (in-range n)])
(vector-set! Atv i
(for/fold ([r 0])
(for/fold ([r 0.0])
([j (in-range n)])
(+ r (* (A j i) (vector-ref v j)))))))
(fl+ r (fl* (A j i) (vector-ref v j)))))))
;; multiply vector v by matrix A and then by matrix A transposed
(define (MultiplyAtAv n v AtAv)

View File

@ -3,11 +3,14 @@
(Section 'optimization)
(require scheme/flonum)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check JIT inlining of primitives:
(parameterize ([current-namespace (make-base-namespace)]
[eval-jit-enabled #t])
(namespace-require 'scheme/flonum)
(let* ([check-error-message (lambda (name proc)
(unless (memq name '(eq? not null? pair?
real? number? boolean?
@ -215,6 +218,9 @@
(tri-if #t '< (lambda () 1) 2 3 void)
(tri-if #f '< (lambda () 1) 3 3 void)
(tri-if #f '< (lambda () 1) -1 3 void)
(bin-exact #t 'fl< 100.0 200.0)
(bin-exact #f 'fl< 200.0 100.0)
(bin-exact #f 'fl< 200.0 200.0)
(bin #t '<= 100 200)
(bin #f '<= 200 100)
@ -224,6 +230,9 @@
(tri-if #t '<= (lambda () 1) 2 3 void)
(tri-if #t '<= (lambda () 1) 3 3 void)
(tri-if #f '<= (lambda () 1) -1 3 void)
(bin-exact #t 'fl<= 100.0 200.0)
(bin-exact #f 'fl<= 200.0 100.0)
(bin-exact #t 'fl<= 200.0 200.0)
(bin #f '> 100 200)
(bin #t '> 200 100)
@ -234,6 +243,9 @@
(tri-if #t '> (lambda () 3) 2 1 void)
(tri-if #f '> (lambda () 3) 3 1 void)
(tri-if #f '> (lambda () 3) -1 1 void)
(bin-exact #f 'fl> 100.0 200.0)
(bin-exact #t 'fl> 200.0 100.0)
(bin-exact #f 'fl> 200.0 200.0)
(bin #f '>= 100 200)
(bin #t '>= 200 100)
@ -243,6 +255,9 @@
(tri-if #t '>= (lambda () 3) 2 1 void)
(tri-if #t '>= (lambda () 3) 3 1 void)
(tri-if #f '>= (lambda () 3) -1 1 void)
(bin-exact #f 'fl>= 100.0 200.0)
(bin-exact #t 'fl>= 200.0 100.0)
(bin-exact #t 'fl>= 200.0 200.0)
(bin #f '= 100 200)
(bin #f '= 200 100)
@ -253,6 +268,8 @@
(tri-if #f '= (lambda () 3) 3 1 void)
(tri-if #f '= (lambda () 3) 1 3 void)
(tri-if #f '= (lambda () 1) 3 3 void)
(bin-exact #f 'fl= 100.0 200.0)
(bin-exact #t 'fl= 200.0 200.0)
(un 3 'add1 2)
(un -3 'add1 -4)
@ -276,6 +293,10 @@
(un (expt 2 30) 'abs (- (expt 2 30)))
(un (sub1 (expt 2 62)) 'abs (sub1 (expt 2 62)))
(un (expt 2 62) 'abs (- (expt 2 62)))
(un-exact 3.0 'flabs -3.0)
(un-exact 3.0 'flsqrt 9.0)
(un-exact +nan.0 'flsqrt -9.0)
(un 1.0 'exact->inexact 1)
(un 1073741823.0 'exact->inexact (sub1 (expt 2 30)))
@ -283,12 +304,15 @@
(un 4611686018427387903.0 'exact->inexact (sub1 (expt 2 62)))
(un -4611686018427387904.0 'exact->inexact (- (expt 2 62)))
(un-exact 10.0 '->fl 10)
(bin 11 '+ 4 7)
(bin -3 '+ 4 -7)
(bin (expt 2 30) '+ (expt 2 29) (expt 2 29))
(bin (- (expt 2 31) 2) '+ (sub1 (expt 2 30)) (sub1 (expt 2 30)))
(tri 6 '+ (lambda () 1) 2 3 void)
(tri 13/2 '+ (lambda () 1) 5/2 3 void)
(bin-exact 3.4 'fl+ 1.1 2.3)
(bin 3 '- 7 4)
(bin 11 '- 7 -4)
@ -298,6 +322,7 @@
(bin (- 2 (expt 2 31)) '- (- 1 (expt 2 30)) (sub1 (expt 2 30)))
(tri 6 '- (lambda () 10) 3 1 void)
(tri 13/2 '- (lambda () 10) 3 1/2 void)
(bin-exact -0.75 'fl- 1.5 2.25)
(bin 4 '* 1 4)
(bin 0 '* 0 4)
@ -311,6 +336,7 @@
(bin (- (expt 2 30)) '* 2 (- (expt 2 29)))
(tri 30 '* (lambda () 2) 3 5 void)
(tri 5 '* (lambda () 2) 3 5/6 void)
(bin-exact 2.53 'fl* 1.1 2.3)
(bin 0 '/ 0 4)
(bin 1/4 '/ 1 4)
@ -321,6 +347,7 @@
(bin 4 '/ -16 -4)
(tri 3 '/ (lambda () 30) 5 2 void)
(tri 12 '/ (lambda () 30) 5 1/2 void)
(bin-exact (/ 1.1 2.3) 'fl/ 1.1 2.3)
(bin-int 3 'quotient 10 3)
(bin-int -3 'quotient 10 -3)

View File

@ -4,6 +4,7 @@
(Section 'unsafe)
(require scheme/unsafe/ops
scheme/flonum
scheme/foreign)
(let ()

View File

@ -1,3 +1,6 @@
Version 4.2.3.8
Added scheme/flonum; moved flvector operations to scheme/flonum
Version 4.2.3.6
Changed JIT to support unboxed local binding of known-flonum
arguments to unsafe-fl functions

View File

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

View File

@ -56,6 +56,7 @@ static int env_uid_counter = 0;
static Scheme_Object *kernel_symbol;
static Scheme_Env *kernel_env;
static Scheme_Env *unsafe_env;
static Scheme_Env *flonum_env;
#define MAX_CONST_LOCAL_POS 64
#define MAX_CONST_LOCAL_TYPES 2
@ -436,10 +437,40 @@ static void init_unsafe(Scheme_Env *env)
#endif
}
static void init_flonum(Scheme_Env *env)
{
Scheme_Module_Phase_Exports *pt;
REGISTER_SO(flonum_env);
flonum_env = scheme_primitive_module(scheme_intern_symbol("#%flonum"), env);
scheme_init_flonum_number(flonum_env);
scheme_init_flonum_numarith(flonum_env);
scheme_init_flonum_numcomp(flonum_env);
scheme_finish_primitive_module(flonum_env);
pt = flonum_env->module->me->rt;
scheme_populate_pt_ht(pt);
scheme_protect_primitive_provide(flonum_env, NULL);
#if USE_COMPILED_STARTUP
if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLONUM_COUNT)) {
printf("Flonum count %d doesn't match expected count %d\n",
builtin_ref_counter - EXPECTED_PRIM_COUNT - EXPECTED_UNSAFE_COUNT,
EXPECTED_FLONUM_COUNT);
abort();
}
#endif
}
Scheme_Env *scheme_get_unsafe_env() {
return unsafe_env;
}
Scheme_Env *scheme_get_flonum_env() {
return flonum_env;
}
static Scheme_Env *place_instance_init_post_kernel(int initial_main_os_thread) {
Scheme_Env *env;
/* error handling and buffers */
@ -692,6 +723,7 @@ static void make_kernel_env(void)
#endif
init_unsafe(env);
init_flonum(env);
scheme_init_print_global_constants();
@ -1344,11 +1376,13 @@ Scheme_Object **scheme_make_builtin_references_table(void)
scheme_misc_count += sizeof(Scheme_Object *) * (builtin_ref_counter + 1);
#endif
for (j = 0; j < 2; j++) {
for (j = 0; j < 3; j++) {
if (!j)
kenv = kernel_env;
else
else if (j == 1)
kenv = unsafe_env;
else
kenv = flonum_env;
ht = kenv->toplevel;
@ -1375,11 +1409,13 @@ Scheme_Hash_Table *scheme_map_constants_to_globals(void)
result = scheme_make_hash_table(SCHEME_hash_ptr);
for (j = 0; j < 2; j++) {
for (j = 0; j < 3; j++) {
if (!j)
kenv = kernel_env;
else
else if (j == 1)
kenv = unsafe_env;
else
kenv = flonum_env;
ht = kenv->toplevel;
bs = ht->buckets;
@ -1403,11 +1439,13 @@ const char *scheme_look_for_primitive(void *code)
long i;
int j;
for (j = 0; j < 2; j++) {
for (j = 0; j < 3; j++) {
if (!j)
kenv = kernel_env;
else
else if (j == 1)
kenv = unsafe_env;
else
kenv = flonum_env;
ht = kenv->toplevel;
bs = ht->buckets;
@ -3018,7 +3056,9 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
/* Used to have `&& !SAME_OBJ(modidx, modname)' below, but that was a bad
idea, because it causes module instances to be preserved. */
if (modname && !(flags & SCHEME_RESOLVE_MODIDS)
&& (!(scheme_is_kernel_modname(modname) || scheme_is_unsafe_modname(modname))
&& (!(scheme_is_kernel_modname(modname)
|| scheme_is_unsafe_modname(modname)
|| scheme_is_flonum_modname(modname))
|| (flags & SCHEME_REFERENCING))) {
/* Create a module variable reference, so that idx is preserved: */
return scheme_hash_module_variable(env->genv, modidx, find_id,
@ -3057,6 +3097,15 @@ Scheme_Object *scheme_extract_unsafe(Scheme_Object *o)
return NULL;
}
Scheme_Object *scheme_extract_flonum(Scheme_Object *o)
{
Scheme_Env *home = ((Scheme_Bucket_With_Home *)o)->home;
if (home && home->module && scheme_is_flonum_modname(home->module->modname))
return (Scheme_Object *)((Scheme_Bucket *)o)->val;
else
return NULL;
}
int *scheme_env_get_flags(Scheme_Comp_Env *frame, int start, int count)
{
int *v, i;

View File

@ -2686,11 +2686,58 @@ static int purely_functional_primitive(Scheme_Object *rator, int n)
#define IS_NAMED_PRIM(p, nm) (!strcmp(((Scheme_Primitive_Proc *)p)->name, nm))
int scheme_wants_flonum_arguments(Scheme_Object *rator)
int scheme_wants_flonum_arguments(Scheme_Object *rator, int rotate_mode)
{
if (SCHEME_PRIMP(rator)) {
if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL) {
if (IS_NAMED_PRIM(rator, "unsafe-flabs")
|| IS_NAMED_PRIM(rator, "unsafe-flsqrt")
|| IS_NAMED_PRIM(rator, "unsafe-fl+")
|| IS_NAMED_PRIM(rator, "unsafe-fl-")
|| IS_NAMED_PRIM(rator, "unsafe-fl*")
|| IS_NAMED_PRIM(rator, "unsafe-fl/")
|| IS_NAMED_PRIM(rator, "unsafe-fl<")
|| IS_NAMED_PRIM(rator, "unsafe-fl<=")
|| IS_NAMED_PRIM(rator, "unsafe-fl=")
|| IS_NAMED_PRIM(rator, "unsafe-fl>")
|| IS_NAMED_PRIM(rator, "unsafe-fl>=")
|| IS_NAMED_PRIM(rator, "unsafe-flvector-ref"))
return 1;
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNARY_INLINED) {
if (!rotate_mode) {
if (IS_NAMED_PRIM(rator, "flabs")
|| IS_NAMED_PRIM(rator, "flsqrt"))
return 1;
}
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_BINARY_INLINED) {
if (!rotate_mode) {
if (IS_NAMED_PRIM(rator, "fl+")
|| IS_NAMED_PRIM(rator, "fl-")
|| IS_NAMED_PRIM(rator, "fl*")
|| IS_NAMED_PRIM(rator, "fl/")
|| IS_NAMED_PRIM(rator, "fl<")
|| IS_NAMED_PRIM(rator, "fl<=")
|| IS_NAMED_PRIM(rator, "fl=")
|| IS_NAMED_PRIM(rator, "fl>")
|| IS_NAMED_PRIM(rator, "fl>=")
|| IS_NAMED_PRIM(rator, "flvector-ref"))
return 1;
}
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_NARY_INLINED) {
if (IS_NAMED_PRIM(rator, "unsafe-flvector-set!"))
return 1;
}
}
return 0;
}
static int produces_unboxed(Scheme_Object *rator)
{
if (SCHEME_PRIMP(rator)) {
if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL) {
if (IS_NAMED_PRIM(rator, "unsafe-flabs")
|| IS_NAMED_PRIM(rator, "unsafe-flsqrt")
|| IS_NAMED_PRIM(rator, "unsafe-fl+")
|| IS_NAMED_PRIM(rator, "unsafe-fl-")
|| IS_NAMED_PRIM(rator, "unsafe-fl*")
@ -2703,8 +2750,24 @@ int scheme_wants_flonum_arguments(Scheme_Object *rator)
|| IS_NAMED_PRIM(rator, "unsafe-flvector-ref")
|| IS_NAMED_PRIM(rator, "unsafe-fx->fl"))
return 1;
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_NARY_INLINED) {
if (IS_NAMED_PRIM(rator, "unsafe-flvector-set!"))
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNARY_INLINED) {
if (IS_NAMED_PRIM(rator, "flabs")
|| IS_NAMED_PRIM(rator, "flsqrt")
|| IS_NAMED_PRIM(rator, "->fl"))
return 1;
} else if (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_BINARY_INLINED) {
if (IS_NAMED_PRIM(rator, "flabs")
|| IS_NAMED_PRIM(rator, "flsqrt")
|| IS_NAMED_PRIM(rator, "fl+")
|| IS_NAMED_PRIM(rator, "fl-")
|| IS_NAMED_PRIM(rator, "fl*")
|| IS_NAMED_PRIM(rator, "fl/")
|| IS_NAMED_PRIM(rator, "fl<")
|| IS_NAMED_PRIM(rator, "fl<=")
|| IS_NAMED_PRIM(rator, "fl=")
|| IS_NAMED_PRIM(rator, "fl>")
|| IS_NAMED_PRIM(rator, "fl>=")
|| IS_NAMED_PRIM(rator, "flvector-ref"))
return 1;
}
}
@ -2712,28 +2775,6 @@ int scheme_wants_flonum_arguments(Scheme_Object *rator)
return 0;
}
static int produces_unboxed(Scheme_Object *rator)
{
if (SCHEME_PRIMP(rator)
&& (SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL)) {
if (IS_NAMED_PRIM(rator, "unsafe-flabs")
|| IS_NAMED_PRIM(rator, "unsafe-fl+")
|| IS_NAMED_PRIM(rator, "unsafe-fl-")
|| IS_NAMED_PRIM(rator, "unsafe-fl*")
|| IS_NAMED_PRIM(rator, "unsafe-fl/")
|| IS_NAMED_PRIM(rator, "unsafe-fl<")
|| IS_NAMED_PRIM(rator, "unsafe-fl<=")
|| IS_NAMED_PRIM(rator, "unsafe-fl=")
|| IS_NAMED_PRIM(rator, "unsafe-fl>")
|| IS_NAMED_PRIM(rator, "unsafe-fl>=")
|| IS_NAMED_PRIM(rator, "unsafe-flvector-ref")
|| IS_NAMED_PRIM(rator, "unsafe-fx->fl"))
return 1;
}
return 0;
}
static int is_unboxed_argument(Scheme_Object *rand, int fuel, Optimize_Info *info, int lifted)
{
if (fuel > 0) {
@ -2827,7 +2868,7 @@ static Scheme_Object *check_unbox_rotation(Scheme_Object *_app, Scheme_Object *r
Scheme_Compiled_Let_Value *inner = NULL;
int i, lifted = 0;
if (scheme_wants_flonum_arguments(rator)) {
if (scheme_wants_flonum_arguments(rator, 1)) {
for (i = 0; i < count; i++) {
if (count == 1)
rand = ((Scheme_App2_Rec *)_app)->rand;
@ -2988,7 +3029,7 @@ static Scheme_Object *optimize_application(Scheme_Object *o, Optimize_Info *info
return le;
}
if (scheme_wants_flonum_arguments(app->args[0]))
if (scheme_wants_flonum_arguments(app->args[0], 0))
sub_context |= OPT_CONTEXT_FLONUM_ARG;
}
@ -3093,7 +3134,7 @@ static Scheme_Object *optimize_application2(Scheme_Object *o, Optimize_Info *inf
return le;
}
if (scheme_wants_flonum_arguments(app->rator))
if (scheme_wants_flonum_arguments(app->rator, 0))
sub_context |= OPT_CONTEXT_FLONUM_ARG;
le = scheme_optimize_expr(app->rand, info, sub_context);
@ -3165,7 +3206,7 @@ static Scheme_Object *optimize_application3(Scheme_Object *o, Optimize_Info *inf
return le;
}
if (scheme_wants_flonum_arguments(app->rator))
if (scheme_wants_flonum_arguments(app->rator, 0))
sub_context |= OPT_CONTEXT_FLONUM_ARG;
/* 1st arg */
@ -6071,6 +6112,9 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env,
&& scheme_extract_unsafe(var)) {
scheme_register_unsafe_in_prefix(env, rec, drec, menv);
return scheme_extract_unsafe(var);
} else if (SAME_TYPE(SCHEME_TYPE(var), scheme_variable_type)
&& scheme_extract_flonum(var)) {
return scheme_extract_flonum(var);
} else if (SAME_TYPE(SCHEME_TYPE(var), scheme_variable_type)
|| SAME_TYPE(SCHEME_TYPE(var), scheme_module_variable_type))
return scheme_register_toplevel_in_prefix(var, env, rec, drec);

File diff suppressed because it is too large Load Diff

View File

@ -134,6 +134,7 @@ static Scheme_Object *kernel_modname;
static Scheme_Object *kernel_symbol;
static Scheme_Object *kernel_modidx;
static Scheme_Module *kernel;
static Scheme_Object *flonum_modname;
static Scheme_Object *unsafe_modname;
/* global read-only symbols */
@ -332,6 +333,7 @@ void scheme_init_module(Scheme_Env *env)
REGISTER_SO(kernel_modname);
REGISTER_SO(kernel_modidx);
REGISTER_SO(unsafe_modname);
REGISTER_SO(flonum_modname);
kernel_symbol = scheme_intern_symbol("#%kernel");
kernel_modname = scheme_intern_resolved_module_path(kernel_symbol);
kernel_modidx = scheme_make_modidx(scheme_make_pair(quote_symbol,
@ -340,6 +342,7 @@ void scheme_init_module(Scheme_Env *env)
scheme_false, kernel_modname);
(void)scheme_hash_key(kernel_modidx);
unsafe_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%unsafe"));
flonum_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%flonum"));
REGISTER_SO(module_symbol);
REGISTER_SO(module_begin_symbol);
@ -597,10 +600,16 @@ int scheme_is_unsafe_modname(Scheme_Object *modname)
return SAME_OBJ(modname, unsafe_modname);
}
int scheme_is_flonum_modname(Scheme_Object *modname)
{
return SAME_OBJ(modname, flonum_modname);
}
static int is_builtin_modname(Scheme_Object *modname)
{
return (SAME_OBJ(modname, kernel_modname)
|| SAME_OBJ(modname, unsafe_modname));
|| SAME_OBJ(modname, unsafe_modname)
|| SAME_OBJ(modname, flonum_modname));
}
Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env)
@ -1785,7 +1794,8 @@ static Scheme_Object *namespace_unprotect_module(int argc, Scheme_Object *argv[]
code_insp = scheme_get_param(scheme_current_config(), MZCONFIG_CODE_INSPECTOR);
if (!SAME_OBJ(name, kernel_modname)) {
if (!SAME_OBJ(name, kernel_modname)
&& !SAME_OBJ(name, flonum_modname)) {
if (SAME_OBJ(name, unsafe_modname))
menv2 = scheme_get_unsafe_env();
else
@ -2447,6 +2457,8 @@ void scheme_prep_namespace_rename(Scheme_Env *menv)
im = kernel;
else if (SAME_OBJ(name, unsafe_modname))
im = scheme_get_unsafe_env()->module;
else if (SAME_OBJ(name, flonum_modname))
im = scheme_get_flonum_env()->module;
else
im = (Scheme_Module *)scheme_hash_get(menv->module_registry, name);
@ -2841,6 +2853,8 @@ static Scheme_Object *module_export_protected_p(int argc, Scheme_Object **argv)
mv = (Scheme_Object *)kernel;
else if (SAME_OBJ(modname, unsafe_modname))
mv = (Scheme_Object *)scheme_get_unsafe_env()->module;
else if (SAME_OBJ(modname, flonum_modname))
mv = (Scheme_Object *)scheme_get_flonum_env()->module;
else
mv = scheme_hash_get(env->module_registry, modname);
if (!mv) {
@ -3134,6 +3148,8 @@ static Scheme_Module *module_load(Scheme_Object *name, Scheme_Env *env, const ch
return kernel;
else if (name == unsafe_modname)
return scheme_get_unsafe_env()->module;
else if (name == flonum_modname)
return scheme_get_flonum_env()->module;
else {
Scheme_Module *m;
@ -3218,6 +3234,8 @@ Scheme_Env *scheme_module_access(Scheme_Object *name, Scheme_Env *env, int rev_m
return scheme_get_kernel_env();
else if ((name == unsafe_modname) && !rev_mod_phase)
return scheme_get_unsafe_env();
else if ((name == flonum_modname) && !rev_mod_phase)
return scheme_get_flonum_env();
else {
Scheme_Object *chain;
Scheme_Env *menv;
@ -3556,7 +3574,8 @@ int scheme_module_export_position(Scheme_Object *modname, Scheme_Env *env, Schem
Scheme_Object *pos;
if (SAME_OBJ(modname, kernel_modname)
|| SAME_OBJ(modname, unsafe_modname))
|| SAME_OBJ(modname, unsafe_modname)
|| SAME_OBJ(modname, flonum_modname))
return -1;
m = module_load(modname, env, NULL);
@ -3580,8 +3599,9 @@ Scheme_Object *scheme_module_syntax(Scheme_Object *modname, Scheme_Env *env, Sch
kenv = scheme_get_kernel_env();
name = SCHEME_STX_SYM(name);
return scheme_lookup_in_table(kenv->syntax, (char *)name);
} else if (SAME_OBJ(modname, unsafe_modname)) {
/* no unsafe syntax */
} else if (SAME_OBJ(modname, unsafe_modname)
|| SAME_OBJ(modname, flonum_modname)) {
/* no unsafe or flonum syntax */
return NULL;
} else {
Scheme_Env *menv;
@ -4528,6 +4548,12 @@ Scheme_Object *scheme_builtin_value(const char *name)
if (v)
return v;
/* Try flonum next: */
a[0] = flonum_modname;
v = _dynamic_require(2, a, scheme_get_env(NULL), 0, 0, 0, 0, 0, -1);
if (v)
return v;
/* Try unsafe next: */
a[0] = unsafe_modname;
v = _dynamic_require(2, a, scheme_get_env(NULL), 0, 0, 0, 0, 0, -1);
@ -4836,6 +4862,8 @@ module_execute(Scheme_Object *data)
if (SAME_OBJ(m->modname, kernel_modname))
old_menv = scheme_get_kernel_env();
else if (SAME_OBJ(m->modname, flonum_modname))
old_menv = scheme_get_flonum_env();
else if (SAME_OBJ(m->modname, unsafe_modname))
old_menv = scheme_get_unsafe_env();
else
@ -5457,12 +5485,15 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env,
LOG_START_EXPAND(m);
if (SAME_OBJ(m->modname, kernel_modname)
|| SAME_OBJ(m->modname, unsafe_modname)) {
|| SAME_OBJ(m->modname, unsafe_modname)
|| SAME_OBJ(m->modname, flonum_modname)) {
/* Too confusing. Give it a different name while compiling. */
Scheme_Object *k2;
const char *kname;
if (SAME_OBJ(m->modname, kernel_modname))
kname = "#%kernel";
else if (SAME_OBJ(m->modname, flonum_modname))
kname = "#%flonum";
else
kname = "#%unsafe";
k2 = scheme_intern_resolved_module_path(scheme_make_symbol(kname)); /* uninterned! */
@ -8800,6 +8831,8 @@ void scheme_do_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info,
me = kernel->me;
} else if (SAME_OBJ(unsafe_modname, name)) {
me = scheme_get_unsafe_env()->module->me;
} else if (SAME_OBJ(flonum_modname, name)) {
me = scheme_get_flonum_env()->module->me;
} else {
if (!export_registry) {
env = scheme_get_env(scheme_current_config());

View File

@ -49,6 +49,13 @@ static Scheme_Object *fl_div (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_abs (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_sqrt (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_plus (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_minus (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_mult (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_div (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_abs (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_sqrt (int argc, Scheme_Object *argv[]);
#define zeroi scheme_exact_zero
void scheme_init_numarith(Scheme_Env *env)
@ -109,6 +116,41 @@ void scheme_init_numarith(Scheme_Env *env)
env);
}
void scheme_init_flonum_numarith(Scheme_Env *env)
{
Scheme_Object *p;
p = scheme_make_folding_prim(fl_plus, "fl+", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl+", p, env);
p = scheme_make_folding_prim(fl_minus, "fl-", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl-", p, env);
p = scheme_make_folding_prim(fl_mult, "fl*", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl*", p, env);
p = scheme_make_folding_prim(fl_div, "fl/", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl/", p, env);
p = scheme_make_folding_prim(fl_abs, "flabs", 1, 1, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("flabs", p, env);
p = scheme_make_folding_prim(fl_sqrt, "flsqrt", 1, 1, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("flsqrt", p, env);
}
void scheme_init_unsafe_numarith(Scheme_Env *env)
{
Scheme_Object *p;
@ -145,37 +187,37 @@ void scheme_init_unsafe_numarith(Scheme_Env *env)
scheme_add_global_constant("unsafe-fxabs", p, env);
p = scheme_make_folding_prim(fl_plus, "unsafe-fl+", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_plus, "unsafe-fl+", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl+", p, env);
p = scheme_make_folding_prim(fl_minus, "unsafe-fl-", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_minus, "unsafe-fl-", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl-", p, env);
p = scheme_make_folding_prim(fl_mult, "unsafe-fl*", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_mult, "unsafe-fl*", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl*", p, env);
p = scheme_make_folding_prim(fl_div, "unsafe-fl/", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_div, "unsafe-fl/", 2, 2, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl/", p, env);
p = scheme_make_folding_prim(fl_abs, "unsafe-flabs", 1, 1, 1);
p = scheme_make_folding_prim(unsafe_fl_abs, "unsafe-flabs", 1, 1, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-flabs", p, env);
p = scheme_make_folding_prim(fl_sqrt, "unsafe-flsqrt", 1, 1, 1);
p = scheme_make_folding_prim(unsafe_fl_sqrt, "unsafe-flsqrt", 1, 1, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
@ -834,25 +876,48 @@ static Scheme_Object *fx_abs(int argc, Scheme_Object *argv[])
return scheme_make_double(v); \
}
UNSAFE_FL(fl_plus, +, plus)
UNSAFE_FL(fl_minus, -, minus)
UNSAFE_FL(fl_mult, *, mult)
UNSAFE_FL(fl_div, /, div_prim)
UNSAFE_FL(unsafe_fl_plus, +, plus)
UNSAFE_FL(unsafe_fl_minus, -, minus)
UNSAFE_FL(unsafe_fl_mult, *, mult)
UNSAFE_FL(unsafe_fl_div, /, div_prim)
static Scheme_Object *fl_abs(int argc, Scheme_Object *argv[])
{
double v;
if (scheme_current_thread->constant_folding) return scheme_abs(argc, argv);
v = SCHEME_DBL_VAL(argv[0]);
v = fabs(v);
return scheme_make_double(v);
}
#define UNSAFE_FL1(name, op, fold) \
static Scheme_Object *name(int argc, Scheme_Object *argv[]) \
{ \
double v; \
if (scheme_current_thread->constant_folding) return fold(argc, argv); \
v = SCHEME_DBL_VAL(argv[0]); \
v = op(v); \
return scheme_make_double(v); \
}
static Scheme_Object *fl_sqrt(int argc, Scheme_Object *argv[])
{
double v;
if (scheme_current_thread->constant_folding) return scheme_sqrt(argc, argv);
v = SCHEME_DBL_VAL(argv[0]);
v = sqrt(v);
return scheme_make_double(v);
}
UNSAFE_FL1(unsafe_fl_abs, fabs, scheme_abs)
UNSAFE_FL1(unsafe_fl_sqrt, sqrt, scheme_sqrt)
#define SAFE_FL(name, sname, op) \
static Scheme_Object *name(int argc, Scheme_Object *argv[]) \
{ \
double v; \
if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \
if (!SCHEME_FLOATP(argv[1])) scheme_wrong_type(sname, "inexact-real", 1, argc, argv); \
v = SCHEME_DBL_VAL(argv[0]) op SCHEME_DBL_VAL(argv[1]); \
return scheme_make_double(v); \
}
SAFE_FL(fl_plus, "fl+", +)
SAFE_FL(fl_minus, "fl-", -)
SAFE_FL(fl_mult, "fl*", *)
SAFE_FL(fl_div, "fl/", /)
#define SAFE_FL1(name, sname, op) \
static Scheme_Object *name(int argc, Scheme_Object *argv[]) \
{ \
double v; \
if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \
v = SCHEME_DBL_VAL(argv[0]); \
v = op(v); \
return scheme_make_double(v); \
}
SAFE_FL1(fl_abs, "flabs", fabs)
SAFE_FL1(fl_sqrt, "flsqrt", sqrt)

View File

@ -103,6 +103,8 @@ static Scheme_Object *flvector_p (int argc, Scheme_Object *argv[]);
static Scheme_Object *flvector_length (int argc, Scheme_Object *argv[]);
static Scheme_Object *make_flvector (int argc, Scheme_Object *argv[]);
static Scheme_Object *integer_to_fl (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_and (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_or (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_xor (int argc, Scheme_Object *argv[]);
@ -506,6 +508,11 @@ scheme_init_number (Scheme_Env *env)
1, 1, 1),
env);
}
void scheme_init_flonum_number(Scheme_Env *env)
{
Scheme_Object *p;
scheme_add_global_constant("flvector",
scheme_make_prim_w_arity(flvector,
"flvector",
@ -538,6 +545,11 @@ scheme_init_number (Scheme_Env *env)
3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED;
scheme_add_global_constant("flvector-set!", p, env);
p = scheme_make_folding_prim(integer_to_fl, "->fl", 1, 1, 1);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("->fl", p, env);
}
void scheme_init_unsafe_number(Scheme_Env *env)
@ -3091,3 +3103,14 @@ static Scheme_Object *unsafe_flvector_set (int argc, Scheme_Object *argv[])
return scheme_void;
}
static Scheme_Object *integer_to_fl (int argc, Scheme_Object *argv[])
{
if (SCHEME_INTP(argv[0])
|| SCHEME_BIGNUMP(argv[0])) {
return scheme_exact_to_inexact(argc, argv);
} else {
scheme_wrong_type("->fl", "exact integer", 0, argc, argv);
return NULL;
}
}

View File

@ -50,6 +50,12 @@ static Scheme_Object *fl_gt (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_lt_eq (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_gt_eq (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_eq (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_lt (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_gt (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_lt_eq (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_fl_gt_eq (int argc, Scheme_Object *argv[]);
#define zeroi scheme_exact_zero
void scheme_init_numcomp(Scheme_Env *env)
@ -104,6 +110,36 @@ void scheme_init_numcomp(Scheme_Env *env)
scheme_add_global_constant("min", p, env);
}
void scheme_init_flonum_numcomp(Scheme_Env *env)
{
Scheme_Object *p;
p = scheme_make_folding_prim(fl_eq, "fl=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl=", p, env);
p = scheme_make_folding_prim(fl_lt, "fl<", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl<", p, env);
p = scheme_make_folding_prim(fl_gt, "fl>", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl>", p, env);
p = scheme_make_folding_prim(fl_lt_eq, "fl<=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl<=", p, env);
p = scheme_make_folding_prim(fl_gt_eq, "fl>=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("fl>=", p, env);
}
void scheme_init_unsafe_numcomp(Scheme_Env *env)
{
Scheme_Object *p;
@ -133,31 +169,31 @@ void scheme_init_unsafe_numcomp(Scheme_Env *env)
| SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL);
scheme_add_global_constant("unsafe-fx>=", p, env);
p = scheme_make_folding_prim(fl_eq, "unsafe-fl=", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_eq, "unsafe-fl=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl=", p, env);
p = scheme_make_folding_prim(fl_lt, "unsafe-fl<", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_lt, "unsafe-fl<", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl<", p, env);
p = scheme_make_folding_prim(fl_gt, "unsafe-fl>", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_gt, "unsafe-fl>", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl>", p, env);
p = scheme_make_folding_prim(fl_lt_eq, "unsafe-fl<=", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_lt_eq, "unsafe-fl<=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
scheme_add_global_constant("unsafe-fl<=", p, env);
p = scheme_make_folding_prim(fl_gt_eq, "unsafe-fl>=", 2, 2, 1);
p = scheme_make_folding_prim(unsafe_fl_gt_eq, "unsafe-fl>=", 2, 2, 1);
if (scheme_can_inline_fp_comp())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNSAFE_FUNCTIONAL;
@ -387,6 +423,23 @@ UNSAFE_FX(fx_gt, >, scheme_bin_gt)
UNSAFE_FX(fx_lt_eq, <=, scheme_bin_lt_eq)
UNSAFE_FX(fx_gt_eq, >=, scheme_bin_gt_eq)
#define SAFE_FL(name, sname, op) \
static Scheme_Object *name(int argc, Scheme_Object *argv[]) \
{ \
if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \
if (!SCHEME_FLOATP(argv[1])) scheme_wrong_type(sname, "inexact-real", 1, argc, argv); \
if (SCHEME_DBL_VAL(argv[0]) op SCHEME_DBL_VAL(argv[1])) \
return scheme_true; \
else \
return scheme_false; \
}
SAFE_FL(fl_eq, "fl=", ==)
SAFE_FL(fl_lt, "fl<", <)
SAFE_FL(fl_gt, "fl>", >)
SAFE_FL(fl_lt_eq, "fl<=", <=)
SAFE_FL(fl_gt_eq, "fl>=", >=)
#define UNSAFE_FL(name, op, fold) \
static Scheme_Object *name(int argc, Scheme_Object *argv[]) \
{ \
@ -397,8 +450,8 @@ UNSAFE_FX(fx_gt_eq, >=, scheme_bin_gt_eq)
return scheme_false; \
}
UNSAFE_FL(fl_eq, ==, scheme_bin_eq)
UNSAFE_FL(fl_lt, <, scheme_bin_lt)
UNSAFE_FL(fl_gt, >, scheme_bin_gt)
UNSAFE_FL(fl_lt_eq, <=, scheme_bin_lt_eq)
UNSAFE_FL(fl_gt_eq, >=, scheme_bin_gt_eq)
UNSAFE_FL(unsafe_fl_eq, ==, scheme_bin_eq)
UNSAFE_FL(unsafe_fl_lt, <, scheme_bin_lt)
UNSAFE_FL(unsafe_fl_gt, >, scheme_bin_gt)
UNSAFE_FL(unsafe_fl_lt_eq, <=, scheme_bin_lt_eq)
UNSAFE_FL(unsafe_fl_gt_eq, >=, scheme_bin_gt_eq)

View File

@ -4688,7 +4688,7 @@ static Scheme_Object *read_compact(CPort *port, int use_stack)
break;
case CPT_REFERENCE:
l = read_compact_number(port);
RANGE_CHECK(l, < (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT));
RANGE_CHECK(l, < (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLONUM_COUNT));
return variable_references[l];
break;
case CPT_LOCAL:

View File

@ -13,8 +13,9 @@
#define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 965
#define EXPECTED_PRIM_COUNT 959
#define EXPECTED_UNSAFE_COUNT 53
#define EXPECTED_FLONUM_COUNT 18
#ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP

View File

@ -184,10 +184,13 @@ void scheme_init_vector(Scheme_Env *env);
void scheme_init_unsafe_vector(Scheme_Env *env);
void scheme_init_string(Scheme_Env *env);
void scheme_init_number(Scheme_Env *env);
void scheme_init_numarith(Scheme_Env *env);
void scheme_init_unsafe_numarith(Scheme_Env *env);
void scheme_init_flonum_number(Scheme_Env *env);
void scheme_init_unsafe_number(Scheme_Env *env);
void scheme_init_numarith(Scheme_Env *env);
void scheme_init_flonum_numarith(Scheme_Env *env);
void scheme_init_unsafe_numarith(Scheme_Env *env);
void scheme_init_numcomp(Scheme_Env *env);
void scheme_init_flonum_numcomp(Scheme_Env *env);
void scheme_init_unsafe_numcomp(Scheme_Env *env);
void scheme_init_numstr(Scheme_Env *env);
void scheme_init_eval(Scheme_Env *env);
@ -2117,6 +2120,7 @@ Scheme_Object *scheme_lookup_binding(Scheme_Object *symbol, Scheme_Comp_Env *env
Scheme_Object **_lexical_binding_id);
Scheme_Object *scheme_extract_unsafe(Scheme_Object *o);
Scheme_Object *scheme_extract_flonum(Scheme_Object *o);
Scheme_Object *scheme_add_env_renames(Scheme_Object *stx, Scheme_Comp_Env *env,
Scheme_Comp_Env *upto);
@ -2321,7 +2325,7 @@ Scheme_Object *scheme_toplevel_to_flagged_toplevel(Scheme_Object *tl, int flags)
void scheme_env_make_closure_map(Optimize_Info *frame, mzshort *size, mzshort **map);
int scheme_env_uses_toplevel(Optimize_Info *frame);
int scheme_wants_flonum_arguments(Scheme_Object *rator);
int scheme_wants_flonum_arguments(Scheme_Object *rator, int rotate_mode);
int scheme_expr_produces_flonum(Scheme_Object *expr);
typedef struct Scheme_Once_Used {
@ -2851,6 +2855,7 @@ Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modid
Scheme_Env *scheme_get_kernel_env();
int scheme_is_kernel_env();
Scheme_Env *scheme_get_unsafe_env();
Scheme_Env *scheme_get_flonum_env();
void scheme_install_initial_module_set(Scheme_Env *env);
Scheme_Bucket_Table *scheme_clone_toplevel(Scheme_Bucket_Table *ht, Scheme_Env *home);
@ -2863,6 +2868,7 @@ Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o);
int scheme_is_kernel_modname(Scheme_Object *modname);
int scheme_is_unsafe_modname(Scheme_Object *modname);
int scheme_is_flonum_modname(Scheme_Object *modname);
void scheme_clear_modidx_cache(void);
void scheme_clear_shift_cache(void);

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "4.2.3.7"
#define MZSCHEME_VERSION "4.2.3.8"
#define MZSCHEME_VERSION_X 4
#define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 3
#define MZSCHEME_VERSION_W 7
#define MZSCHEME_VERSION_W 8
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -3854,7 +3854,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info)
if (SAME_TYPE(SCHEME_TYPE(app->rand), scheme_local_type)
&& (SCHEME_LOCAL_POS(app->rand) == 1)) {
if ((SCHEME_TYPE(app->rator) > _scheme_values_types_)
&& !scheme_wants_flonum_arguments(app->rator)) {
&& !scheme_wants_flonum_arguments(app->rator, 1)) {
/* Move <expr> to app, and drop let-one: */
app->rand = ((Scheme_Let_One *)body)->value;
scheme_reset_app2_eval_type(app);