diff --git a/BUILDING b/BUILDING index a25e558867..ed7f8ef14a 100644 --- a/BUILDING +++ b/BUILDING @@ -229,9 +229,9 @@ trouble, try running configure with --libkernel so that the build avoids running ld directly. On OpenBSD, Chez Scheme must be built and installed on a filesystem -that is mounted with wxneeded. +that is mounted with wxallowed. -On NetNSD, note that the makefiles run "paxctl +m" to enable WX pages +On NetBSD, note that the makefiles run "paxctl +m" to enable WX pages (i.e., pages that have both write and execute enabled). WINDOWS diff --git a/LOG b/LOG index 797320bc15..d650a12488 100644 --- a/LOG +++ b/LOG @@ -1423,7 +1423,7 @@ prim5.c, system.stex - restore {Free,Open,Net}BSD build, support Windows cross-compile via MinGW, add configuration options, and add helper makefile targets - expenditor.c, thread.c, stats.c, statics.c, scheme.c, main.c, types.h, + expeditor.c, thread.c, stats.c, statics.c, scheme.c, main.c, types.h, externs.h, globals.h, nocurses.h, version.h, system.h, segment.h, a6ob.def, ta6ob.def, a6nb.def, ta6nb.def, i3nt.def, ti3nt.def, c/Mf-*, build.bat, makefiles/Makefile.in, makefiles/Mf-install.in, @@ -1436,3 +1436,557 @@ scheme.c - remove dead stores in files compress-io.c, new-io.c +- fixed tab character in makefiles + c/Mf-*nt +- use case-insensitive search for ".exe" on Windows + c/scheme.c +- fix __collect_safe for x86_64 and floating-point arguments or results + x86_64.ss, foreign.ms, release_notes.stex +- annotations are now preserved in object files for debug + only, for profiling only, for both, or not at all, depending + on the settings of generate-inspector-information and + compile-profile. in particular, when inspector information + is not enabled but profiling is, source information does + not leak into error messages and inspector output, though it is + still available via the profile tools. The mechanics of this + involved repurposing the fasl a? parameter to hold an annotation + flags value when it is not #f and remaking annotations with + new flags if necessary before emitting them. + compile.ss, fasl.ss, misc.ms +- altered a number of mats to produce correct results even + when the 's' directory is profiled. + misc.ms, cp0.ms, record.ms +- profile-release-counters is now generation-friendly; that is, + it doesn't look for dropped code objects in generations that have + not been collected since the last call to profile-release-counters. + also, it no longer allocates memory when it releases counters. + pdhtml.ss, + gc.c, gcwrapper.c, globals.h, prim5.c +- removed unused entry points S_ifile, S_ofile, and S_iofile + alloc.c, externs.h +- mats that test loading profile info into the compiler's database + to guide optimization now weed out preexisting entries, in case + the 's' directory is profiled. + 4.ms, mat.ss, misc.ms, primvars.ms +- counters for dropped code objects are now released at the start + of each mat group. + mat.ss +- replaced ehc (enable-heap-check) option with hci (heap-check-interval) + option that allows heap checks to be performed periodically rather + than on each collection. hci=0 is equivalent to ehc=f (disabling + heap checks) and hci=1 is equivalent to ehc=t (enabling heap + checks every collection), while hci=100 enables heap checks only + every 100th collection. allx and bullyx mats use this feature + to reduce heap-checking overhead to a more reasonable level. this + is particularly important when the 's' directory is profiled, + since the amount of static memory to be checked is greatly increased + due to the counters. + mats/Mf-base, mat.ss, primvars.ms +- added a mat that calls #%show-allocation, which was otherwise not + being tested. + misc.ms +- removed a broken primvars mat and updated two others. in each case, + the mat was looking for information about primitives in the wrong + (i.e., old) place and silently succeeding when it didn't find any + primitives to test. the revised mats (along with a few others) now + check to make sure at least one identifier has the information they + look for. the removed mat was checking for library information that + is now compiled in, so the mat is now unnecessary. the others were + (not) doing argument-error checks. fixing these turned up a handful of + problems that have also been fixed: a couple of unbound variables in the + mat driver, two broken primdata declarations, a tardy argument check + by profile-load-data, and a bug in char-ready?, which was requiring + an argument rather than defaulting it to the current input port. + primdata.ss, pdhtml.ss, io.ms, + primdvars.ms, 4.ms, 6.ms, misc.ms, patch* +- added initial support for recording coverage information. when the + new parameter generate-covin-files is set, the compiler generates + .covin files containing the universe of all source objects for which + profile forms are present in the expander output. when profiling + and generation of covin files are enabled in the 's' directory, the + mats optionally generate .covout files for each mat file giving + the subset of the universe covered by the mat file, along with an + all.covout in each mat output directory aggregating the coverage + for the directory and another all.covout in the top-level mat + directory aggregating the coverage for all directories. + back.ss, compile.ss, cprep.ss, primdata.ss, s/Mf-base, + mat.ss, mats/Mf-base, mats/primvars.ms +- support for generating covout files is now built in. with-coverage-output + gathers and dumps coverage information, and aggregate-coverage-output + combines (aggregates) covout files. + pdhtml.ss, primdata.ss, compile.ss, + mat.ss, mats/Mf-base, primvars.ms +- profile-clear now adjusts active coverage trackers to avoid losing + coverage information. + pdhtml.ss, + prim5.c +- nested with-coverage calls are now supported. + pdhtml.ss +- switched to a more compact representation for covin and covout files; + reduces disk space (compressed or not) by about a factor of four + and read time by about a factor of two with no increase in write time. + primdata.ss, pdhtml.ss, cprep.ss, compile.ss, + mat.ss, mats/Mf-base +- added support for determining coverage for an entire run, including + coverage for expressions hit during boot time. 'all' mats now produce + run.covout files in each output directory, and 'allx' mats produce + an aggregate run.covout file in the mat directory. + pdhtml.ss, + mat.ss, mats/Mf-base +- profile-release-counters now adjusts active coverage trackers to + account for the counters that have been released. + pdhtml.ss, + prim5.c +- replaced the artificial "examples" target with a real "build-examples" + target so make won't think it always has to mats that depend upon + the examples directory having been compiled. mats make clean now + runs make clean in the examples directory. + mats/Mf-base +- importing a library from an object file now just visits the object + file rather than doing a full load so that the run-time code for + the library is not retained. The run-time code is still read + because the current fasl format forces the entire file to be read, + but not retaining the code can lower heap size and garbage-collection + cost, particularly when many object-code libraries are imported. + The downside is that the file must be revisited if the run-time + code turns out to be required. This change exposed several + places where the code was failing to check if a revisit is needed. + syntax.ss, + 7.ms, 8.ms, misc.ms, root-experr* +- fixed typos: was passing unquoted load rather than quoted load + to $load-library along one path (where it is loading source code + and therefore irrelevant), and was reporting src-path rather than + obj-path in a message about failing to define a library. + syntax.ss +- compile-file and friends now put all recompile information in + the first fasl object after the header so the library manager can + find it without loading the entire fasl file. The library manager + now does so. It also now checks to see if library object files + need to be recreated before loading them rather than loading them and + possibly recompiling them after discovering they are out of date, since + the latter requires loading the full object file even if it's out of + date, while the former takes advantage of the ability to extract just + recompile information. as well as reducing overhead, this eliminates + possibly undesirable side effects, such as creation and registration + of out-of-date nongenerative record-type descriptors. because the + library manager expects to find recompile information at the front of + an object file, it will not find all recompile information if object + files are "catted" together. also, compile-file has to hold in memory + the object code for all expressions in the file so that it can emit the + unified recompile information, rather than writing to the object file + incrementally, which can significantly increase the memory required + to compile a large file full of individual top-level forms. This does + not affect top-level programs, which were already handled as a whole, + or a typical library file that contains just a single library form. + compile.ss, syntax.ss +- the library manager now checks include files before library dependencies + when compile-imported-libraries is false (as it already did when + compile-imported-libraries is true) in case a source change affects + the set of imported libraries. (A library change can affect the set + of include files as well, but checking dependencies before include + files can cause unneeded libraries to be loaded.) The include-file + check is based on recompile-info rather than dependencies, but the + library checks are still based on dependencies. + syntax.ss +- fixed check for binding of scheme-version. (the check prevents + premature treatment of recompile-info records as Lexpand forms + to be passed to $interpret-backend.) + scheme.c +- strip-fasl-file now preserves recompile-info when compile-time info + is stripped. + strip.ss +- removed include-req* from library/ct-info and ctdesc records; it + is no longer needed now that all recompile information is maintained + separately. + expand-lang.ss, syntax.ss, compile.ss, cprep.ss, syntax.ss +- changed the fasl format and reworked a lot of code in the expander, + compiler, fasl writer, and fasl reader to allow the fasl reader + to skip past run-time information when it isn't needed and + compile-time information when it isn't needed. Skipping past + still involves reading and decoding when encrypted, but the fasl + reader no longer parses or allocates code and data in the portions + to be skipped. Side effects of associating record uids with rtds + are also avoided, as are the side effects of interning symbols + present only in the skipped data. Skipping past code objects + also reduces or eliminates the need to synchronize data and + instruction caches. Since the fasl reader no longer returns + compile-time (visit) or run-time (revisit) code and data when not + needed, the fasl reader no longer wraps these objects in a pair + with a 0 or 1 visit or revisit marker. To support this change, + the fasl writer generates separate top-level fasl entries (and + graphs) for separate forms in the same top-level source form + (e.g., begin or library). This reliably breaks eq-ness of shared + structure across these forms, which was previously broken only + when visit or revisit code was loaded at different times (this + is an incompatible change). Because of the change, fasl "groups" + are no longer needed, so they are no longer handled. + 7.ss, cmacros.ss, compile.ss, expand-lang.ss, strip.ss, + externs.h, fasl.c, scheme.c, + hash.ms +- the change above is surfaced in an optional fasl-read "situation" + argument (visit, revisit, or load). The default is load. visit + causes it to skip past revisit code and data; revisit causes it + to skip past visit code and data; and load causes it not to skip + past either. visit-revisit data produced by (eval-when (visit + revisit) ---) is never skipped. + 7.ss, primdata.ss, + io.stex +- to improve compile-time and run-time error checking, the + Lexpand recompile-info, library/rt-info, library-ct-info, and + program-info forms have been replaced with list-structured forms, + e.g., (recompile-info ,rcinfo). + expand-lang.ss, compile.ss, cprep.ss, interpret.ss, syntax.ss +- added visit-compiled-from-port and revisit-compiled-from-port + to complement the existing load-compiled-from-port. + 7.ss, primdata.ss, + 7.ms, + system.stex +- increased amount read when seeking an lz4-compressed input + file from 32 to 1024 bytes at a time + compress-io.c +- replaced the fasl a? parameter value #t with an "all" flag value + so it's value is consistently a mask. + cmacros.ss, fasl.ss, compile.ss +- split off profile mats into a separate file + misc.ms, profile.ms (new), root-experr*, mats/Mf-base +- added coverage percent computations to mat allx/bullyx output + mat.ss, mats/Mf-base, primvars.ms +- replaced coverage tables with more generic and generally useful + source tables, which map source objects to arbitrary values. + pdhtml.ss, compile.ss, cprep.ss, primdata.ss, + mat.ss, mats/Mf-base, primvars.ms, profile.ms, + syntax.stex +- reduced profile counting overhead by using calls to fold-left + instead of calls to apply and map and by using fixnum operations + for profile counts on 64-bit machines. + pdhtml.ss +- used a critical section to fix a race condition in the calculations + of profile counts that sometimes resulted in bogus (including + negative) counts, especially when the 's' directory is profiled. + pdhtml.ss +- added discard flag to declaration for hashtable-size + primdata.ss +- redesigned the printed representation of source tables and rewrote + get-source-table! to read and store incrementally to reduce memory + overhead. + compile.ss +- added generate-covin-files to the set of parameters preserved + by compile-file, etc. + compile.ss, + system.stex +- moved covop argument before the undocumented machine and hostop + arguments to compile-port and compile-to-port. removed the + undocumented ofn argument from compile-to-port; using + (port-name ip) instead. + compile.ss, primdata.ss, + 7.ms, + system.stex +- compile-port now tries to come up with a file position to supply + to make-read, which it can do if the port's positions are character + positions (presently string ports) or if the port is positioned + at zero. + compile.ss +- audited the argument-type-error fuzz mat exceptions and fixed a + host of problems this turned up (entries follow). added #f as + an invalid argument for every type for which #f is indeed invalid + to catch places where the maybe- prefix was missing on the argument + type. the mat tries hard to determine if the condition raised + (if any) as the result of an invalid argument is appropriate and + redirects the remainder to the mat-output (.mo) file prefixed + with 'Expected error', causing them to show up in the expected + error output so developers will be encouraged to audit them in + the future. + primvars.ms, mat.ss +- added an initial symbol? test on machine type names so we produce + an invalid machine type error message rather than something + confusing like "machine type #f is not supported". + compile.ss +- fixed declarations for many primitives that were specified as + accepting arguments of more general types than they actually + accept, such as number -> real for various numeric operations, + symbol -> endianness for various bytevector operations, + time -> time-utc for time-utc->date, and list -> list-of-string-pairs + for default-library-search-handler. also replaced some of the + sub-xxxx types with specific types such as sub-symbol -> endianness + in utf16->string, but only where they were causing issues with + the primvars argument-type-error fuzz mat. (this should be done + more generally.) + primdata.ss +- fixed incorrect who arguments (was map instead of fold-right, + current-date instead of time-utc->date); switched to using + define-who/set-who! generally. + 4.ss, date.ss +- append! now checks all arguments before any mutation + 5_2.ss +- with-source-path now properly supplies itself as who for the + string? argument check; callers like load now do their own checks. + 7.ss +- added missing integer? check to $fold-bytevector-native-ref whose + lack could have resulted in a compile-time error. + cp0.ss +- fixed typo in output-port-buffer-mode error message + io.ss +- fixed who argument (was fx< rather than fx maybe-timeout) + primdata.ms +- added "invalid code page ~s" to set of messages considered valid + argument-type-check error messages, for Windows multibyte->string + and string->multibyte. + primvars.ms +- used with-object-file to restore accidentally dropped close-port in + compile-whole-program and compile-whole-library + compile.ss +- initialized variable to enable compilation with gcc 9.1.0 at -O3 + c/scheme.c +- added missing Inner wrappers around the library/ct-info and + library-rt-info records in the code for compile-whole-xxx. + compile.ss, + 7.ms +- local-eval-hook now calls eval rather than interpret when profiling + is enabled, so local transformer code can be profiled. + syntax.ss, + profile.ms +- fix compiler bug related to call-with-values and a first argument + whose body result is compiled to an allocation, inline form, or + foreign call + cpnanopass.ss, 3.ms +- improved error reporting for library compilation-instance errors: + now including the name of the object file from which the "wrong" + compilation instance was loaded, if it was loaded from (or compiled + to) an object file and the original importing library, if it was + previously loaded from an object file due to a library import. + syntax.ss, 7.ss, interpret.ss, + 8.ms, root-experr* +- removed situation and for-input? arguments from $make-load-binary, + since the only consumer always passes 'load and #f. + 7.ss, + scheme.c +- $separate-eval now prints the stderr and stdout of the subprocess + to help in diagnosing separate-eval and separate-compile issues. + mat.ss +- added unregister-guardian, which can be used to unregister + the unressurected objects registered with any guardian. guardian? + can be used to distinguish guardian procedures from other objects. + cp0.ss, cmacros.ss, cpnanopass.ss, ftype.ss, primdata.ss, + prims.ss, + gcwrapper.c, prim.c, externs.h, + 4.ms, primvars.ms + release_notes.stex + smgmt.stex, threads.stex +- added verify-loadability. given a situation (visit, revisit, + or load) and zero or more pathnames (each of which may be optionally + paired with a library search path), verity-loadability checks + whether the set of object files named by those pathnames and any + additional object files required by library requirements in the + given situation can be loaded together. it raises an exception + in each case where actually attempting to load the files would + raise an exception and additionally in cases where loading files + would result in the compilation or loading of source files in + place of the object files. if the check is successful, + verity-loadability returns an unspecified value. in either case, + although portions of the object files are read, none of the + information read from the object files is retained, and none of + the object code is read, so there are no side effects other than + the file operations and possibly the raising of an exception. + library and program info records are now moved to the top of each + object file produced by one of the file compilation routines, + just after recompile info, with a marker to allow verity-loadability + to stop reading once it reads all such records. this change is + not entirely backward compatible; the repositioning of the records + can be detected by a call to list-library made from a loaded file + before the definition of one or more libraries. it is fully + backward compatible for typical library files that contain a + single library definition and nothing else. adding this feature + required changes to the object-file format and corresponding + changes in the compiler and library manager. it also required + moving cross-library optimization information from library/ct-info + records (which verity-loadability must read) to the invoke-code + for each library (which verity-loadability does not read) to + avoid reading and permanently associating record-type descriptors + in the code with their uids. + compile.ss, syntax.ss, expand-lang.ss, primdata.ss, 7.ss, + 7.ms, misc.ms, root-experr*, patch*, + system.stex, release_notes.stex +- fixed a bug that bit only with the compiler compiled at + optimize-level 2: add-library/rt-records was building a library/ct-info + wrapper rather than a library/rt-info wrapper. + compile.ss +- fixed a bug in visit-library that could result in an indefinite + recursion: it was not checking to make sure the call to $visit + actually added compile-time info to the libdesc record. it's not + clear, however, whether the libdesc record can be missing + compile-time information on entry to visit-library, so the code + that calls $visit (and now checks for compile-time information + having been added) might not be reachable. ditto for + revisit-library. + syntax.ss + syntax.ss, primdata.ss, + 7.ms, root-experr*, patch*, + system.stex, release_notes.stex +- added some argument-error checks for library-directories and + library-extensions, and fixed up the error messages a bit. + syntax.ss, + 7.ms, root-experr* +- compile-whole-program now inserts the program record into the + object file for the benefit of verify-loadability. + syntax.ss, + 7.ms, root-experr* +- changed 'loading' import-notify messages to the more precise + 'visiting' or 'revisiting' in a couple of places. + syntax.ss, + 7.ms, 8.ms +- added concatenate-object-files + compile.ss, primdata.ss + 7.ms, root-experr* + system.stex, use.stex, release_notes.stex +- added invoke-library + syntax.ss, primdata.ss, + 8.ms, root-experr*, + libraries.stex, release_notes.stex +- updated the date + release_notes.stex +- libraries contained within a whole program or library are now + marked pending before their invoke code is run so that invoke + cycles are reported as such rather than as attempts to invoke + while still loading. + compile.ss, syntax.ss, primdata.ss, + 7.ms, root-experr* +- the library manager now protects against unbound references + from separately compiled libraries or programs to identifiers + ostensibly but not actually exported by (invisible) libraries + that exist only locally within a whole program. this is done by + marking the invisibility of the library in the library-info and + propagating it to libdesc records; the latter is checked upon + library import, visit, and invoke as well as by verify-loadability. + the import and visit code of each invisible no longer complains + about invisibility since it shouldn't be reachable. + syntax.ss, compile.ss, expand-lang.ss, + 7.ms, 8.ms, root-experr*, patch* +- documented that compile-whole-xxx's linearization of the + library initialization code based on static dependencies might + not work for dynamic dependencies. + system.stex +- optimized bignum right shifts so the code (1) doesn't look at + shifted-off bigits if the bignum is positive, since it doesn't + need to know in that case if any bits are set; (2) doesn't look + at shifted-off bigits if the bignum is negative if it determines + that at least one bit is set in the bits shifted off the low-order + partially retained bigit; (3) quits looking, if it must look, for + one bits as soon as it finds one; (4) looks from both ends under + the assumption that set bits, if any, are most likely to be found + toward the high or low end of the bignum rather than just in the + middle; and (5) doesn't copy the retained bigits and then shift; + rather shifts as it copies. This leads to dramatic improvements + when the shift count is large and often significant improvements + otherwise. + number.c, + 5_3.ms, + release_notes.stex +- threaded tc argument through to all calls to S_bignum and + S_trunc_rem so they don't have to call get_thread_context() + when it might already have been called. + alloc.c, number.c, fasl.c, print.c, prim5.c, externs.h +- added an expand-primitive handler to partially inline integer?. + cpnanopass.ss +- added some special cases for basic arithmetic operations (+, -, *, + /, quotient, remainder, and the div/div0/mod/mod0 operations) to + avoid doing unnecessary work for large bignums when the result + will be zero (e.g,. multiplying by 0), the same as one of the + inputs (e.g., adding 0 or multiplying by 1), or the additive + inverse of one of the inputs (e.g., subtracting from 0, dividing + by -1). This can have a major beneficial affect when operating + on large bignums in the cases handled. also converted some uses + of / into integer/ where going through the former would just add + overhead without the possibility of optimization. + 5_3.ss, + number.c, externs.h, prim5.c, + 5_3.ms, root-experr, patch*, + release_notes.stex +- added a queue to hold pending signals for which handlers have + been registered via register-signal-handler so up to 63 (configurable + in the source code) unhandled signals are buffered before the + handler has to start dropping them. + cmacros.ss, library.ss, prims.ss, primdata.ss, + schsig.c, externs.h, prim5.c, thread.c, gc.c, + unix.ms, + system.stex, release_notes.stex +- bytevector-compress now selects the level of compression based + on the compress-level parameter. Prior to this it always used a + default setting for compression. the compress-level parameter + can now take on the new minimum in addition to low, medium, high, + and maximum. minimum is presently treated the same as low + except in the case of lz4 bytevector compression, where it + results in the use of LZ4_compress_default rather than the + slower but more effective LZ4_compress_HC. + cmacros,ss, back.ss, + compress_io.c, new_io.c, externs.h, + bytevector.ms, mats/Mf-base, root-experr* + io.stex, objects.stex, release_notes.stex diff --git a/c/Mf-a6nt b/c/Mf-a6nt index 3e96e0e64a..6dab00245b 100644 --- a/c/Mf-a6nt +++ b/c/Mf-a6nt @@ -55,7 +55,7 @@ ${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} ../zlib/configure.log: echo "all:" >> ../zlib/Makefile - echo '\t$$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile touch ../zlib/configure.log ../lz4/lib/liblz4.a: ${LZ4Sources} diff --git a/c/Mf-i3nt b/c/Mf-i3nt index dee0ff05bb..8f0e8fee1f 100644 --- a/c/Mf-i3nt +++ b/c/Mf-i3nt @@ -55,7 +55,7 @@ ${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} ../zlib/configure.log: echo "all:" >> ../zlib/Makefile - echo '\t$$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile touch ../zlib/configure.log ../lz4/lib/liblz4.a: ${LZ4Sources} diff --git a/c/Mf-ta6nt b/c/Mf-ta6nt index 1c9e689884..c872906788 100644 --- a/c/Mf-ta6nt +++ b/c/Mf-ta6nt @@ -55,7 +55,7 @@ ${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} ../zlib/configure.log: echo "all:" >> ../zlib/Makefile - echo '\t$$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile touch ../zlib/configure.log ../lz4/lib/liblz4.a: ${LZ4Sources} diff --git a/c/Mf-ti3nt b/c/Mf-ti3nt index 030a3d0338..9ac4353547 100644 --- a/c/Mf-ti3nt +++ b/c/Mf-ti3nt @@ -55,7 +55,7 @@ ${KernelO}: ${kernelobj} ${zlibDep} ${LZ4Dep} ../zlib/configure.log: echo "all:" >> ../zlib/Makefile - echo '\t$$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile + echo ' $$(MAKE) -f win32/Makefile.gcc CC="$(CC)" CFLAGS="$(CFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" RC="$(WINDRES)"' >> ../zlib/Makefile touch ../zlib/configure.log ../lz4/lib/liblz4.a: ${LZ4Sources} diff --git a/c/alloc.c b/c/alloc.c index 25d2bf84b3..f79c9f5b99 100644 --- a/c/alloc.c +++ b/c/alloc.c @@ -688,64 +688,6 @@ ptr S_exactnum(a, b) ptr a, b; { return p; } -ptr S_ifile(icount, name, fd, info, flags, ilast, ibuf) - iptr flags, icount; char *ilast; iptr fd; ptr name, ibuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTICNT(p) = icount; - PORTILAST(p) = (ptr)ilast; - PORTIBUF(p) = ibuf; - /* leave output buffer and last uninitialized for input only ports */ - PORTOCNT(p) = 0; - return p; -} - -ptr S_ofile(ocount, name, fd, info, flags, olast, obuf) - iptr flags, ocount; char *olast; iptr fd; ptr name, obuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTOCNT(p) = ocount; - PORTOLAST(p) = (ptr)olast; - PORTOBUF(p) = obuf; - /* leave input buffer and last uninitialized for output only ports */ - PORTICNT(p) = 0; - return p; -} - -ptr S_iofile(icount, ocount, name, fd, info, flags, ilast, ibuf, olast, obuf) - iptr flags, icount, ocount; char *ilast, *olast; iptr fd; ptr name, ibuf, obuf, info; { - ptr tc = get_thread_context(); - ptr p; - - thread_find_room(tc, type_typed_object, size_port, p); - PORTTYPE(p) = flags | type_port; - PORTNAME(p) = name; - /* PORTHANDLER is really a ptr only when PORTTYPE & PORT_FLAG_PROC_HANDLER is true */ - PORTHANDLER(p) = (ptr)fd; - PORTINFO(p) = info; - PORTICNT(p) = icount; - PORTILAST(p) = (ptr)ilast; - PORTIBUF(p) = ibuf; - PORTOCNT(p) = ocount; - PORTOLAST(p) = (ptr)olast; - PORTOBUF(p) = obuf; - return p; -} - /* S_string returns a new string of length n. If s is not NULL, it is * copied into the new string. If n < 0, then s must be non-NULL, * and the length of s (by strlen) determines the length of the string */ @@ -906,8 +848,7 @@ ptr Sstring_utf8(s, n) const char *s; iptr n; { return p; } -ptr S_bignum(n, sign) iptr n; IBOOL sign; { - ptr tc = get_thread_context(); +ptr S_bignum(tc, n, sign) ptr tc; iptr n; IBOOL sign; { ptr p; iptr d; if ((uptr)n > (uptr)maximum_bignum_length) diff --git a/c/compress-io.c b/c/compress-io.c index 960dfb85b5..15eba871ac 100644 --- a/c/compress-io.c +++ b/c/compress-io.c @@ -91,6 +91,23 @@ static INT glzread_lz4(lz4File_in *lz4, void *buffer, UINT count); static INT glzemit_lz4(lz4File_out *lz4, void *buffer, UINT count); static INT glzwrite_lz4(lz4File_out *lz4, void *buffer, UINT count); +INT S_zlib_compress_level(INT compress_level) { + switch (compress_level) { + case COMPRESS_MIN: + case COMPRESS_LOW: + return Z_BEST_SPEED; + case COMPRESS_MEDIUM: + return (Z_BEST_SPEED + Z_BEST_COMPRESSION) / 2; + case COMPRESS_HIGH: + return (Z_BEST_SPEED + (3 * Z_BEST_COMPRESSION)) / 4; + case COMPRESS_MAX: + return Z_BEST_COMPRESSION; + default: + S_error1("S_zlib_compress_level", "unexpected compress level ~s", Sinteger(compress_level)); + return 0; + } +} + static glzFile glzdopen_output_gz(INT fd, INT compress_level) { gzFile gz; glzFile glz; @@ -105,24 +122,7 @@ static glzFile glzdopen_output_gz(INT fd, INT compress_level) { if ((gz = gzdopen(fd, as_append ? "ab" : "wb")) == Z_NULL) return Z_NULL; - switch (compress_level) { - case COMPRESS_LOW: - level = Z_BEST_SPEED; - break; - case COMPRESS_MEDIUM: - level = (Z_BEST_SPEED + Z_BEST_COMPRESSION) / 2; - break; - case COMPRESS_HIGH: - level = (Z_BEST_SPEED + (3 * Z_BEST_COMPRESSION)) / 4; - break; - case COMPRESS_MAX: - level = Z_BEST_COMPRESSION; - break; - default: - S_error1("glzdopen_output_gz", "unexpected compress level ~s", Sinteger(compress_level)); - level = 0; - break; - } + level = S_zlib_compress_level(compress_level); gzsetparams(gz, level, Z_DEFAULT_STRATEGY); @@ -137,29 +137,29 @@ static glzFile glzdopen_output_gz(INT fd, INT compress_level) { return glz; } +INT S_lz4_compress_level(INT compress_level) { + switch (compress_level) { + case COMPRESS_MIN: + case COMPRESS_LOW: + return 1; + case COMPRESS_MEDIUM: + return LZ4HC_CLEVEL_MIN; + case COMPRESS_HIGH: + return (LZ4HC_CLEVEL_MIN + LZ4HC_CLEVEL_MAX) / 2; + case COMPRESS_MAX: + return LZ4HC_CLEVEL_MAX; + default: + S_error1("S_lz4_compress_level", "unexpected compress level ~s", Sinteger(compress_level)); + return 0; + } +} + static glzFile glzdopen_output_lz4(INT fd, INT compress_level) { glzFile glz; lz4File_out *lz4; INT level; - switch (compress_level) { - case COMPRESS_LOW: - level = 1; - break; - case COMPRESS_MEDIUM: - level = LZ4HC_CLEVEL_MIN; - break; - case COMPRESS_HIGH: - level = (LZ4HC_CLEVEL_MIN + LZ4HC_CLEVEL_MAX) / 2; - break; - case COMPRESS_MAX: - level = LZ4HC_CLEVEL_MAX; - break; - default: - S_error1("glzdopen_output_lz4", "unexpected compress level ~s", Sinteger(compress_level)); - level = 0; - break; - } + level = S_lz4_compress_level(compress_level); if ((lz4 = malloc(sizeof(lz4File_out))) == NULL) return Z_NULL; memset(&lz4->preferences, 0, sizeof(LZ4F_preferences_t)); @@ -561,7 +561,7 @@ long S_glzseek(glzFile glz, long offset, INT whence) { lz4->stream_pos = 0; } while ((size_t)offset > lz4->stream_pos) { - char buffer[32]; + static char buffer[1024]; size_t amt = (size_t)offset - lz4->stream_pos; if (amt > sizeof(buffer)) amt = sizeof(buffer); if (glzread_lz4(lz4, buffer, (UINT)amt) < 0) diff --git a/c/externs.h b/c/externs.h index 5abaa41c49..b83c071ae3 100644 --- a/c/externs.h +++ b/c/externs.h @@ -91,14 +91,8 @@ extern ptr S_mkcontinuation PROTO((ISPC s, IGEN g, ptr nuate, ptr stack, extern ptr S_inexactnum PROTO((double rp, double ip)); extern ptr S_exactnum PROTO((ptr a, ptr b)); extern ptr S_thread PROTO((ptr tc)); -extern ptr S_ifile PROTO((iptr icount, ptr name, iptr fd, ptr info, iptr flags, char *ilast, - ptr ibuf)); -extern ptr S_ofile PROTO((iptr ocount, ptr name, iptr fd, ptr info, iptr flags, char *olast, - ptr obuf)); -extern ptr S_iofile PROTO((iptr icount, iptr ocount, ptr name, iptr fd, ptr info, iptr flags, - char *ilast, ptr ibuf, char *olast, ptr obuf)); extern ptr S_string PROTO((const char *s, iptr n)); -extern ptr S_bignum PROTO((iptr n, IBOOL sign)); +extern ptr S_bignum PROTO((ptr tc, iptr n, IBOOL sign)); extern ptr S_code PROTO((ptr tc, iptr type, iptr n)); extern ptr S_relocation_table PROTO((iptr n)); extern ptr S_weak_cons PROTO((ptr car, ptr cdr)); @@ -107,7 +101,7 @@ extern void S_phantom_bytevector_adjust PROTO((ptr ph, uptr new_sz)); /* fasl.c */ extern void S_fasl_init PROTO((void)); -ptr S_fasl_read PROTO((ptr file, IBOOL gzflag, ptr path)); +ptr S_fasl_read PROTO((ptr file, IBOOL gzflag, IFASLCODE situation, ptr path)); ptr S_bv_fasl_read PROTO((ptr bv, int ty, uptr offset, uptr len, ptr path)); /* S_boot_read's f argument is really gzFile, but zlib.h is not included everywhere */ ptr S_boot_read PROTO((glzFile file, const char *path)); @@ -163,6 +157,7 @@ extern void S_set_enable_object_backreferences PROTO((IBOOL eoc)); extern ptr S_object_backreferences PROTO((void)); extern void S_do_gc PROTO((IGEN g, IGEN gtarget)); extern ptr S_locked_objects PROTO((void)); +extern ptr S_unregister_guardian PROTO((ptr tconc)); extern void S_compact_heap PROTO((void)); extern void S_check_heap PROTO((IBOOL aftergc)); @@ -200,6 +195,8 @@ extern wchar_t *S_malloc_wide_pathname PROTO((const char *inpath)); extern IBOOL S_fixedpathp PROTO((const char *inpath)); /* compress-io.c */ +extern INT S_zlib_compress_level PROTO((INT compress_level)); +extern INT S_lz4_compress_level PROTO((INT compress_level)); extern glzFile S_glzdopen_output PROTO((INT fd, INT compress_format, INT compress_level)); extern glzFile S_glzdopen_input PROTO((INT fd)); extern glzFile S_glzopen_input PROTO((const char *path)); @@ -285,13 +282,14 @@ extern iptr S_integer_value PROTO((const char *who, ptr x)); extern I64 S_int64_value PROTO((char *who, ptr x)); extern IBOOL S_big_eq PROTO((ptr x, ptr y)); extern IBOOL S_big_lt PROTO((ptr x, ptr y)); +extern ptr S_big_negate PROTO((ptr x)); extern ptr S_add PROTO((ptr x, ptr y)); extern ptr S_sub PROTO((ptr x, ptr y)); extern ptr S_mul PROTO((ptr x, ptr y)); extern ptr S_div PROTO((ptr x, ptr y)); extern ptr S_rem PROTO((ptr x, ptr y)); extern ptr S_trunc PROTO((ptr x, ptr y)); -extern void S_trunc_rem PROTO((ptr x, ptr y, ptr *q, ptr *r)); +extern void S_trunc_rem PROTO((ptr tc, ptr x, ptr y, ptr *q, ptr *r)); extern ptr S_gcd PROTO((ptr x, ptr y)); extern ptr S_ash PROTO((ptr x, ptr n)); extern ptr S_big_positive_bit_field PROTO((ptr x, ptr fxstart, ptr fxend)); @@ -351,6 +349,8 @@ extern void S_handle_nonprocedure_symbol PROTO((void)); extern void S_handle_values_error PROTO((void)); extern void S_handle_mvlet_error PROTO((void)); extern void S_handle_event_detour PROTO((void)); +extern ptr S_allocate_scheme_signal_queue PROTO((void)); +extern ptr S_dequeue_scheme_signals PROTO((ptr tc)); extern void S_register_scheme_signal PROTO((iptr sig)); extern void S_fire_collector PROTO((void)); extern NORETURN void S_noncontinuable_interrupt PROTO((void)); diff --git a/c/fasl.c b/c/fasl.c index ed625f5fe8..df0061d488 100644 --- a/c/fasl.c +++ b/c/fasl.c @@ -20,10 +20,13 @@ * * -> * * - * -> {header}\0\0\0chez + * -> {header}\0\0\0chez( ...) * - * -> {fasl-size} # size in bytes of following - * + * -> * + * + * -> {fasl-size} # size is the size in bytes of the following + * + * -> {visit}{revisit}{visit-revisit} * * -> {pair}... * @@ -63,7 +66,7 @@ * * -> {library-code} * - * -> {graph} + * -> {graph} * * -> {graph-def} * @@ -212,7 +215,7 @@ typedef struct faslFileObj { static INT uf_read PROTO((unbufFaslFile uf, octet *s, iptr n)); static octet uf_bytein PROTO((unbufFaslFile uf)); static uptr uf_uptrin PROTO((unbufFaslFile uf)); -static ptr fasl_entry PROTO((ptr tc, unbufFaslFile uf)); +static ptr fasl_entry PROTO((ptr tc, IFASLCODE situation, unbufFaslFile uf)); static ptr bv_fasl_entry PROTO((ptr tc, ptr bv, IFASLCODE ty, uptr offset, uptr len, unbufFaslFile uf)); static void fillFaslFile PROTO((faslFile f)); static void bytesin PROTO((octet *s, iptr n, faslFile f)); @@ -288,7 +291,7 @@ void S_fasl_init() { #endif } -ptr S_fasl_read(ptr file, IBOOL gzflag, ptr path) { +ptr S_fasl_read(ptr file, IBOOL gzflag, IFASLCODE situation, ptr path) { ptr tc = get_thread_context(); ptr x; struct unbufFaslFileObj uffo; @@ -302,7 +305,7 @@ ptr S_fasl_read(ptr file, IBOOL gzflag, ptr path) { uffo.type = UFFO_TYPE_FD; uffo.fd = GET_FD(file); } - x = fasl_entry(tc, &uffo); + x = fasl_entry(tc, situation, &uffo); tc_mutex_release() return x; } @@ -327,7 +330,7 @@ ptr S_boot_read(glzFile file, const char *path) { uffo.path = Sstring_utf8(path, -1); uffo.type = UFFO_TYPE_GZ; uffo.file = file; - return fasl_entry(tc, &uffo); + return fasl_entry(tc, fasl_type_visit_revisit, &uffo); } #define GZ_IO_SIZE_T unsigned int @@ -379,11 +382,27 @@ static INT uf_read(unbufFaslFile uf, octet *s, iptr n) { return 0; } + int S_fasl_stream_read(void *stream, octet *dest, iptr n) { return uf_read((unbufFaslFile)stream, dest, n); } +static void uf_skipbytes(unbufFaslFile uf, iptr n) { + switch (uf->type) { + case UFFO_TYPE_GZ: + if (S_glzseek(uf->file, (long)n, SEEK_CUR) == -1) { + S_error1("", "error seeking ~a", uf->path); + } + break; + case UFFO_TYPE_FD: + if (LSEEK(uf->fd, n, SEEK_CUR) == -1) { + S_error1("", "error seeking ~a", uf->path); + } + break; + } +} + static octet uf_bytein(unbufFaslFile uf) { octet buf[1]; if (uf_read(uf, buf, 1) < 0) @@ -429,64 +448,81 @@ char *S_lookup_machine_type(uptr n) { return "unknown"; } -static ptr fasl_entry(ptr tc, unbufFaslFile uf) { +static ptr fasl_entry(ptr tc, IFASLCODE situation, unbufFaslFile uf) { ptr x; ptr strbuf = S_G.null_string; - octet tybuf[1]; IFASLCODE ty; - struct faslFileObj ffo; octet buf[SBUFSIZ]; + octet tybuf[1]; IFASLCODE ty, fmt; iptr size; - if (uf_read(uf, tybuf, 1) < 0) return Seof_object; - ty = tybuf[0]; + for (;;) { + if (uf_read(uf, tybuf, 1) < 0) return Seof_object; + ty = tybuf[0]; - while (ty == fasl_type_header) { - uptr n; ICHAR c; - - /* check for remainder of magic number */ - if (uf_bytein(uf) != 0 || - uf_bytein(uf) != 0 || - uf_bytein(uf) != 0 || - uf_bytein(uf) != 'c' || - uf_bytein(uf) != 'h' || - uf_bytein(uf) != 'e' || - uf_bytein(uf) != 'z') - S_error1("", "malformed fasl-object header found in ~a", uf->path); - - if ((n = uf_uptrin(uf)) != scheme_version) - S_error2("", "incompatible fasl-object version ~a found in ~a", S_string(S_format_scheme_version(n), -1), uf->path); - - if ((n = uf_uptrin(uf)) != machine_type_any && n != machine_type) - S_error2("", "incompatible fasl-object machine-type ~a found in ~a", S_string(S_lookup_machine_type(n), -1), uf->path); - - if (uf_bytein(uf) != '(') - S_error1("", "malformed fasl-object header found in ~a", uf->path); - - while ((c = uf_bytein(uf)) != ')') - if (c < 0) S_error1("", "malformed fasl-object header found in ~a", uf->path); - - ty = uf_bytein(uf); - } - - if ((ty != fasl_type_fasl_size) - && (ty != fasl_type_vfasl_size)) - S_error1("", "malformed fasl-object header found in ~a", uf->path); - - ffo.size = uf_uptrin(uf); - - if (ty == fasl_type_vfasl_size) { - if (S_vfasl_boot_mode == -1) { - S_vfasl_boot_mode = 1; - Scompact_heap(); - } - x = S_vfasl((ptr)0, uf, 0, ffo.size); - } else { - ffo.buf = buf; - ffo.next = ffo.end = ffo.buf; - ffo.uf = uf; + while (ty == fasl_type_header) { + uptr n; ICHAR c; - faslin(tc, &x, S_G.null_vector, &strbuf, &ffo); - } + /* check for remainder of magic number */ + if (uf_bytein(uf) != 0 || + uf_bytein(uf) != 0 || + uf_bytein(uf) != 0 || + uf_bytein(uf) != 'c' || + uf_bytein(uf) != 'h' || + uf_bytein(uf) != 'e' || + uf_bytein(uf) != 'z') + S_error1("", "malformed fasl-object header (missing magic word) found in ~a", uf->path); + + if ((n = uf_uptrin(uf)) != scheme_version) + S_error2("", "incompatible fasl-object version ~a found in ~a", S_string(S_format_scheme_version(n), -1), uf->path); + + if ((n = uf_uptrin(uf)) != machine_type_any && n != machine_type) + S_error2("", "incompatible fasl-object machine-type ~a found in ~a", S_string(S_lookup_machine_type(n), -1), uf->path); + + if (uf_bytein(uf) != '(') + S_error1("", "malformed fasl-object header (missing open paren) found in ~a", uf->path); + + while ((c = uf_bytein(uf)) != ')') + if (c < 0) S_error1("", "malformed fasl-object header (missing close paren) found in ~a", uf->path); + + ty = uf_bytein(uf); + } + + switch (ty) { + case fasl_type_visit: + case fasl_type_revisit: + case fasl_type_visit_revisit: + break; + default: + S_error2("", "malformed fasl-object header (missing situation, got ~s) found in ~a", FIX(ty), uf->path); + return (ptr)0; + } - S_flush_instruction_cache(tc); - return x; + fmt = uf_bytein(uf); + if ((fmt != fasl_type_fasl_size) && (fmt != fasl_type_vfasl_size)) + S_error1("", "malformed fasl-object header (missing fasl-size) found in ~a", uf->path); + + size = uf_uptrin(uf); + + if (ty == situation || situation == fasl_type_visit_revisit || ty == fasl_type_visit_revisit) { + struct faslFileObj ffo; octet buf[SBUFSIZ]; + + ffo.size = size; + + if (fmt == fasl_type_vfasl_size) { + if (S_vfasl_boot_mode == -1) { + S_vfasl_boot_mode = 1; + Scompact_heap(); + } + x = S_vfasl((ptr)0, uf, 0, ffo.size); + } else { + ffo.buf = buf; + ffo.next = ffo.end = ffo.buf; + ffo.uf = uf; + faslin(tc, &x, S_G.null_vector, &strbuf, &ffo); + } + S_flush_instruction_cache(tc); + return x; + } else { + uf_skipbytes(uf, size); + } + } } static ptr bv_fasl_entry(ptr tc, ptr bv, int ty, uptr offset, uptr len, unbufFaslFile uf) { @@ -674,7 +710,6 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { faslin(tc, &EXACTNUM_REAL_PART(*x), t, pstrbuf, f); faslin(tc, &EXACTNUM_IMAG_PART(*x), t, pstrbuf, f); return; - case fasl_type_group: case fasl_type_vector: case fasl_type_immutable_vector: { iptr n; ptr *p; @@ -915,7 +950,7 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { IBOOL sign; iptr n; ptr t; bigit *p; sign = bytein(f); n = uptrin(f); - t = S_bignum(n, sign); + t = S_bignum(tc, n, sign); p = &BIGIT(t, 0); while (n--) *p++ = (bigit)uptrin(f); *x = S_normalize_bignum(t); @@ -1003,18 +1038,6 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { case fasl_type_graph_ref: *x = Svector_ref(t, uptrin(f)); return; - case fasl_type_visit: { - ptr p; - *x = p = Scons(FIX(visit_tag), FIX(0)); - faslin(tc, &INITCDR(p), t, pstrbuf, f); - return; - } - case fasl_type_revisit: { - ptr p; - *x = p = Scons(FIX(revisit_tag), FIX(0)); - faslin(tc, &INITCDR(p), t, pstrbuf, f); - return; - } case fasl_type_begin: { uptr n = uptrin(f) - 1; ptr v; while (n--) diff --git a/c/gc.c b/c/gc.c index 1c06d1038e..f2f69a0cc7 100644 --- a/c/gc.c +++ b/c/gc.c @@ -1536,7 +1536,7 @@ void GCENTRY(ptr tc, IGEN mcg, IGEN tg) { si->next = chunk->unused_segs; chunk->unused_segs = si; #ifdef WIPECLEAN - memset((void *)build_ptr(seg,0), 0xc7, bytes_per_segment); + memset((void *)build_ptr(si->number,0), 0xc7, bytes_per_segment); #endif if ((chunk->nused_segs -= 1) == 0) { if (chunk->bytes != (minimum_segment_request + 1) * bytes_per_segment) { @@ -1609,6 +1609,9 @@ void GCENTRY(ptr tc, IGEN mcg, IGEN tg) { } S_resize_oblist(); + + /* tell profile_release_counters to look for bwp'd counters at least through tg */ + if (S_G.prcgeneration < tg) S_G.prcgeneration = tg; } #define sweep_space(s, body)\ @@ -1891,6 +1894,7 @@ static void sweep_thread(p) ptr p; { /* immediate TIMERTICKS */ /* immediate DISABLE_COUNT */ /* immediate SIGNALINTERRUPTPENDING */ + /* void* SIGNALINTERRUPTQUEUE(tc) */ /* immediate KEYBOARDINTERRUPTPENDING */ relocate(&THREADNO(tc)) relocate(&CURRENTINPUT(tc)) diff --git a/c/gcwrapper.c b/c/gcwrapper.c index bcc64d9409..c7ed817b87 100644 --- a/c/gcwrapper.c +++ b/c/gcwrapper.c @@ -33,6 +33,7 @@ void S_gc_init() { S_checkheap = 0; /* 0 for disabled, 1 for enabled */ S_checkheap_errors = 0; /* count of errors detected by checkheap */ checkheap_noisy = 0; /* 0 for error output only; 1 for more noisy output */ + S_G.prcgeneration = static_generation; if (S_checkheap) { printf(checkheap_noisy ? "NB: check_heap is enabled and noisy\n" : "NB: check_heap_is_enabled\n"); @@ -274,6 +275,33 @@ void Sunlock_object(x) ptr x; { tc_mutex_release() } +ptr s_help_unregister_guardian(ptr *pls, ptr tconc, ptr result) { + ptr rep, ls; + while ((ls = *pls) != Snil) { + if (GUARDIANTCONC(ls) == tconc) { + result = Scons(((rep = GUARDIANREP(ls)) == ftype_guardian_rep ? GUARDIANOBJ(ls) : rep), result); + *pls = ls = GUARDIANNEXT(ls); + } else { + ls = *(pls = &GUARDIANNEXT(ls)); + } + } + return result; +} + +ptr S_unregister_guardian(ptr tconc) { + ptr result, tc; IGEN g; + tc_mutex_acquire() + tc = get_thread_context(); + /* in the interest of thread safety, gather entries only in the current thread, ignoring any others */ + result = s_help_unregister_guardian(&GUARDIANENTRIES(tc), tconc, Snil); + /* plus, of course, any already known to the storage-management system */ + for (g = 0; g <= static_generation; INCRGEN(g)) { + result = s_help_unregister_guardian(&S_G.guardians[g], tconc, result); + } + tc_mutex_release() + return result; +} + #ifndef WIN32 void S_register_child_process(INT child) { tc_mutex_acquire() @@ -824,6 +852,9 @@ void S_do_gc(IGEN mcg, IGEN tg) { } } + /* tell profile_release_counters to scan only through new_g */ + if (S_G.prcgeneration == old_g) S_G.prcgeneration = new_g; + /* finally reset max_nonstatic_generation */ S_G.min_free_gen = S_G.new_min_free_gen; S_G.max_nonstatic_generation = new_g; diff --git a/c/globals.h b/c/globals.h index b42e1c2176..55df219397 100644 --- a/c/globals.h +++ b/c/globals.h @@ -135,6 +135,7 @@ EXTERN struct S_G_struct { ptr countof_names; ptr gcbackreference[static_generation+1]; uptr phantom_sizes[static_generation+1]; + IGEN prcgeneration; /* intern.c */ iptr oblist_length; diff --git a/c/new-io.c b/c/new-io.c index 74ed098b1f..67fef8fefa 100644 --- a/c/new-io.c +++ b/c/new-io.c @@ -28,6 +28,7 @@ #include #include "zlib.h" #include "lz4.h" +#include "lz4hc.h" /* !!! UNLESS you enjoy spending endless days tracking down race conditions !!! involving the garbage collector, please note: DEACTIVATE and @@ -814,6 +815,9 @@ uptr S_bytevector_compress_size(iptr s_count, INT compress_format) { ptr S_bytevector_compress(ptr dest_bv, iptr d_start, iptr d_count, ptr src_bv, iptr s_start, iptr s_count, INT compress_format) { + ptr tc = get_thread_context(); + int compress_level = (INT)UNFIX(COMPRESSLEVEL(tc)); + /* On error, an message-template string with ~s for the bytevector */ switch (compress_format) { case COMPRESS_GZIP: @@ -826,7 +830,7 @@ ptr S_bytevector_compress(ptr dest_bv, iptr d_start, iptr d_count, destLen = (uLong)d_count; - r = compress(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count); + r = compress2(&BVIT(dest_bv, d_start), &destLen, &BVIT(src_bv, s_start), (uLong)s_count, S_zlib_compress_level(compress_level)); if (r == Z_OK) return FIX(destLen); @@ -842,7 +846,11 @@ ptr S_bytevector_compress(ptr dest_bv, iptr d_start, iptr d_count, if (!is_valid_lz4_length(s_count)) return Sstring("source bytevector ~s is too large"); - destLen = LZ4_compress_default((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count); + if (compress_level == COMPRESS_MIN) { + destLen = LZ4_compress_default((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count); + } else { + destLen = LZ4_compress_HC((char *)&BVIT(src_bv, s_start), (char *)&BVIT(dest_bv, d_start), (int)s_count, (int)d_count, S_lz4_compress_level(compress_level)); + } if (destLen > 0) return Sfixnum(destLen); diff --git a/c/number.c b/c/number.c index cabc3e451a..402959d827 100644 --- a/c/number.c +++ b/c/number.c @@ -25,9 +25,10 @@ #include "system.h" /* locally defined functions */ -static ptr copy_normalize PROTO((bigit *p, iptr len, IBOOL sign, ptr clear_w_tc)); + static ptr copy_normalize PROTO((ptr tc, const bigit *p, iptr len, IBOOL sign, IBOOL clear_w)); static IBOOL abs_big_lt PROTO((ptr x, ptr y, iptr xl, iptr yl)); static IBOOL abs_big_eq PROTO((ptr x, ptr y, iptr xl, iptr yl)); +static ptr big_negate PROTO((ptr tc, ptr x)); static ptr big_add_pos PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL sign)); static ptr big_add_neg PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL sign)); static ptr big_add PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, IBOOL ys)); @@ -37,7 +38,7 @@ static void big_trunc PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL qs, I static INT normalize PROTO((bigit *xp, bigit *yp, iptr xl, iptr yl)); static bigit quotient_digit PROTO((bigit *xp, bigit *yp, iptr yl)); static bigit qhat PROTO((bigit *xp, bigit *yp)); -static ptr big_short_gcd PROTO((ptr x, bigit y, iptr xl)); +static ptr big_short_gcd PROTO((ptr tc, ptr x, bigit y, iptr xl)); static ptr big_gcd PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl)); static ptr s_big_ash PROTO((ptr tc, bigit *xp, iptr xl, IBOOL sign, iptr cnt)); static double big_short_floatify PROTO((ptr tc, ptr x, bigit s, iptr xl, IBOOL sign)); @@ -53,27 +54,27 @@ static ptr big_logor PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, IB static ptr big_logxor PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, IBOOL ys)); /* use w/o trailing semicolon */ -#define PREPARE_BIGNUM(x,l)\ - {if (x == FIX(0) || BIGLEN(x) < (l)) x = S_bignum((l)*2, 0);} +#define PREPARE_BIGNUM(tc,x,l)\ + {if (x == FIX(0) || BIGLEN(x) < (l)) x = S_bignum(tc, (l)*2, 0);} #define bigit_mask (~(bigit)0) -#define IBIGIT_TO_BIGNUM(B,x,cnt,sign) {\ +#define IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) {\ ibigit _i_ = x;\ - PREPARE_BIGNUM(B, 1)\ + PREPARE_BIGNUM(tc, B, 1)\ *cnt = 1;\ BIGIT(B,0) = (*sign = (_i_ < 0)) ? -_i_ : _i_;\ } -#define UBIGIT_TO_BIGNUM(B,u,cnt) {\ - PREPARE_BIGNUM(B, 1)\ +#define UBIGIT_TO_BIGNUM(tc,B,u,cnt) {\ + PREPARE_BIGNUM(tc, B, 1)\ *cnt = 1;\ BIGIT(B,0) = u;\ } -#define IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) {\ +#define IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) {\ ibigitbigit _i_ = x; bigitbigit _u_; bigit _b_;\ - PREPARE_BIGNUM(B, 2)\ + PREPARE_BIGNUM(tc, B, 2)\ _u_ = (*sign = (_i_ < 0)) ? -_i_ : _i_;\ if ((_b_ = (_u_ & (bigitbigit)bigit_mask)) == _u_) {\ *cnt = 1;\ @@ -85,9 +86,9 @@ static ptr big_logxor PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, I }\ } -#define UBIGITBIGIT_TO_BIGNUM(B,x,cnt) {\ +#define UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) {\ bigitbigit _u_ = x; bigit _b_;\ - PREPARE_BIGNUM(B, 2)\ + PREPARE_BIGNUM(tc, B, 2)\ if ((_b_ = (_u_ & (bigitbigit)bigit_mask)) == _u_) {\ *cnt = 1;\ BIGIT(B,0) = (bigit)_u_;\ @@ -101,20 +102,20 @@ static ptr big_logxor PROTO((ptr tc, ptr x, ptr y, iptr xl, iptr yl, IBOOL xs, I #define U32_bigits (32 / bigit_bits) #if (U32_bigits == 1) -#define I32_TO_BIGNUM(B,x,cnt,sign) IBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U32_TO_BIGNUM(B,x,cnt) UBIGIT_TO_BIGNUM(B,x,cnt) +#define I32_TO_BIGNUM(tc,B,x,cnt,sign) IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U32_TO_BIGNUM(tc,B,x,cnt) UBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (U32_bigits == 2) -#define I32_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U32_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define I32_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U32_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #define U64_bigits (64 / bigit_bits) #if (U64_bigits == 2) -#define I64_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define U64_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define I64_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define U64_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (U64_bigits == 4) @@ -124,16 +125,16 @@ see v7.4 number.c for U64_TO_BIGNUM w/U64_bigits == 4 #define ptr_bigits (ptr_bits / bigit_bits) #if (ptr_bigits == 1) -#define IPTR_TO_BIGNUM(B,x,cnt,sign) IBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define UPTR_TO_BIGNUM(B,x,cnt) UBIGIT_TO_BIGNUM(B,x,cnt) +#define IPTR_TO_BIGNUM(tc,B,x,cnt,sign) IBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define UPTR_TO_BIGNUM(tc,B,x,cnt) UBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif #if (ptr_bigits == 2) -#define IPTR_TO_BIGNUM(B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(B,x,cnt,sign) -#define UPTR_TO_BIGNUM(B,x,cnt) UBIGITBIGIT_TO_BIGNUM(B,x,cnt) +#define IPTR_TO_BIGNUM(tc,B,x,cnt,sign) IBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt,sign) +#define UPTR_TO_BIGNUM(tc,B,x,cnt) UBIGITBIGIT_TO_BIGNUM(tc,B,x,cnt) #endif -#define FIXNUM_TO_BIGNUM(B,p,cnt,sign) IPTR_TO_BIGNUM(B,UNFIX(p),cnt,sign) +#define FIXNUM_TO_BIGNUM(tc,B,p,cnt,sign) IPTR_TO_BIGNUM(tc,B,UNFIX(p),cnt,sign) ptr S_normalize_bignum(ptr x) { uptr n = BIGIT(x, 0); iptr len = BIGLEN(x); IBOOL sign = BIGSIGN(x); @@ -163,7 +164,7 @@ ptr S_normalize_bignum(ptr x) { return x; } -static ptr copy_normalize(p,len,sign,clear_w_tc) bigit *p; iptr len; IBOOL sign; ptr clear_w_tc; { +static ptr copy_normalize(tc, p, len, sign, clear_w) ptr tc; const bigit *p; iptr len; IBOOL sign, clear_w; { bigit *p1; uptr n; ptr b; for (;;) { @@ -196,11 +197,11 @@ static ptr copy_normalize(p,len,sign,clear_w_tc) bigit *p; iptr len; IBOOL sign; } #endif - b = S_bignum(len, sign); + b = S_bignum(tc, len, sign); for (p1 = &BIGIT(b, 0); len--;) *p1++ = *p++; - if (clear_w_tc) - W(clear_w_tc) = FIX(0); + if (clear_w) + W(tc) = FIX(0); return b; } @@ -341,7 +342,7 @@ ptr Sunsigned(u) uptr u; { /* convert arg to Scheme integer */ return FIX(u); else { ptr x = FIX(0); iptr xl; - UPTR_TO_BIGNUM(x, u, &xl) + UPTR_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -352,7 +353,7 @@ ptr Sinteger(i) iptr i; { /* convert arg to Scheme integer */ return FIX(i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - IPTR_TO_BIGNUM(x, i, &xl, &xs) + IPTR_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -366,7 +367,7 @@ ptr Sunsigned32(u) U32 u; { /* convert arg to Scheme integer */ return FIX((uptr)u); else { ptr x = FIX(0); iptr xl; - U32_TO_BIGNUM(x, u, &xl) + U32_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -381,7 +382,7 @@ ptr Sinteger32(i) I32 i; { /* convert arg to Scheme integer */ return FIX((iptr)i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - I32_TO_BIGNUM(x, i, &xl, &xs) + I32_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -393,7 +394,7 @@ ptr Sunsigned64(u) U64 u; { /* convert arg to Scheme integer */ return FIX((uptr)u); else { ptr x = FIX(0); iptr xl; - U64_TO_BIGNUM(x, u, &xl) + U64_TO_BIGNUM(get_thread_context(), x, u, &xl) SETBIGLENANDSIGN(x, xl, 0); return x; } @@ -404,7 +405,7 @@ ptr Sinteger64(i) I64 i; { /* convert arg to Scheme integer */ return FIX((iptr)i); else { ptr x = FIX(0); iptr xl; IBOOL xs; - I64_TO_BIGNUM(x, i, &xl, &xs) + I64_TO_BIGNUM(get_thread_context(), x, i, &xl, &xs) SETBIGLENANDSIGN(x, xl, xs); return x; } @@ -421,6 +422,11 @@ ptr Sinteger64(i) I64 i; { /* convert arg to Scheme integer */ *(x) = _b_>>_n_ | *(k);\ *(k) = _newk_;} +#define ERSH2(n,x,y,k) { /* undefined when n == 0 */\ + INT _n_ = (INT)(n); bigit _b_ = (x), _newk_ = _b_<<(bigit_bits-_n_);\ + *(y) = _b_>>_n_ | *(k);\ + *(k) = _newk_;} + #define EADDC(a1, a2, sum, k) {\ bigit _tmp1_, _tmp2_, _tmpk_;\ _tmp1_ = (a1);\ @@ -509,13 +515,21 @@ addition/subtraction *** */ +static ptr big_negate(tc, x) ptr tc, x; { + return copy_normalize(tc, &BIGIT(x,0),BIGLEN(x),!BIGSIGN(x),0); +} + +ptr S_big_negate(x) ptr x; { + return big_negate(get_thread_context(), x); +} + /* assumptions: BIGLEN(x) >= BIGLEN(y) */ static ptr big_add_pos(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL sign; { iptr i; bigit *xp, *yp, *zp; bigit k = 0; - PREPARE_BIGNUM(W(tc),xl+1) + PREPARE_BIGNUM(tc, W(tc),xl+1) xp = &BIGIT(x,xl-1); yp = &BIGIT(y,yl-1); zp = &BIGIT(W(tc),xl); @@ -528,7 +542,7 @@ static ptr big_add_pos(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL *zp = k; - return copy_normalize(zp,xl+1,sign,tc); + return copy_normalize(tc, zp,xl+1,sign, 1); } /* assumptions: x >= y */ @@ -537,7 +551,7 @@ static ptr big_add_neg(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL bigit *xp, *yp, *zp; bigit b = 0; - PREPARE_BIGNUM(W(tc),xl) + PREPARE_BIGNUM(tc, W(tc),xl) xp = &BIGIT(x,xl-1); yp = &BIGIT(y,yl-1); zp = &BIGIT(W(tc),xl-1); @@ -548,7 +562,7 @@ static ptr big_add_neg(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL for (; i-- > 0; ) *zp-- = *xp--; - return copy_normalize(zp+1,xl,sign,tc); + return copy_normalize(tc, zp+1,xl,sign, 1); } static ptr big_add(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL xs, ys; { @@ -574,13 +588,13 @@ ptr S_add(x, y) ptr x, y; { return FIXRANGE(n) ? FIX(n) : Sinteger(n); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_add(tc, X(tc), y, xl, BIGLEN(y), xs, BIGSIGN(y)); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_add(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { return big_add(tc, x, y, BIGLEN(x), BIGLEN(y), BIGSIGN(x), BIGSIGN(y)); @@ -598,13 +612,13 @@ ptr S_sub(x, y) ptr x, y; { return FIXRANGE(n) ? FIX(n) : Sinteger(n); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_add(tc, X(tc), y, xl, BIGLEN(y), xs, !BIGSIGN(y)); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_add(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), !ys); } else { return big_add(tc, x, y, BIGLEN(x), BIGLEN(y), BIGSIGN(x), !BIGSIGN(y)); @@ -623,7 +637,7 @@ static ptr big_mul(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL sign bigit *xp, *yp, *zp, *zpa; bigit k, k1, prod; - PREPARE_BIGNUM(W(tc),xl+yl) + PREPARE_BIGNUM(tc, W(tc),xl+yl) for (xi = xl, zp = &BIGIT(W(tc),xl+yl-1); xi-- > 0; ) *zp-- = 0; for (yi=yl,yp= &BIGIT(y,yl-1),zp= &BIGIT(W(tc),xl+yl-1); yi-- > 0; yp--, zp--) @@ -638,7 +652,7 @@ static ptr big_mul(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IBOOL sign *zpa = k; } - return copy_normalize(&BIGIT(W(tc),0),xl+yl,sign,tc); + return copy_normalize(tc, &BIGIT(W(tc),0),xl+yl,sign, 1); } /* SHORTRANGE is -floor(sqrt(most_positive_fixnum))..floor(sqrt(most_positive_fixnum)). @@ -661,17 +675,17 @@ ptr S_mul(x, y) ptr x, y; { if (SHORTRANGE(xn) && SHORTRANGE(yn)) return FIX(xn * yn); else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } } else { if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -688,29 +702,34 @@ division /* arguments must be integers (fixnums or bignums), y must be nonzero */ ptr S_div(x, y) ptr x, y; { - ptr g; + ptr g, n, d; + ptr tc = get_thread_context(); g = S_gcd(x,y); - if (Sfixnump(y) ? UNFIX(y) < 0 : BIGSIGN(y)) g = S_sub(FIX(0),g); - return S_rational(S_trunc(x,g), S_trunc(y,g)); + if (Sfixnump(y) ? UNFIX(y) < 0 : BIGSIGN(y)) { + g = Sfixnump(g) ? Sinteger(-UNFIX(g)) : big_negate(tc, g); + } + + S_trunc_rem(tc, x, g, &n, (ptr *)NULL); + S_trunc_rem(tc, y, g, &d, (ptr *)NULL); + + return S_rational(n, d); } ptr S_trunc(x, y) ptr x, y; { ptr q; - S_trunc_rem(x, y, &q, (ptr *)NULL); + S_trunc_rem(get_thread_context(), x, y, &q, (ptr *)NULL); return q; } ptr S_rem(x, y) ptr x, y; { ptr r; - S_trunc_rem(x, y, (ptr *)NULL, &r); + S_trunc_rem(get_thread_context(), x, y, (ptr *)NULL, &r); return r; } /* arguments must be integers (fixnums or bignums), y must be nonzero */ -void S_trunc_rem(origx, y, q, r) ptr origx, y, *q, *r; { - ptr tc = get_thread_context(); - +void S_trunc_rem(tc, origx, y, q, r) ptr tc, origx, y, *q, *r; { iptr xl, yl; IBOOL xs, ys; ptr x = origx; if (Sfixnump(x)) { @@ -726,13 +745,13 @@ void S_trunc_rem(origx, y, q, r) ptr origx, y, *q, *r; { return; } } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } } else { if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -754,13 +773,13 @@ static void big_short_trunc(ptr tc, ptr x, bigit s, iptr xl, IBOOL qs, IBOOL rs, bigit *xp, *zp; bigit k; - PREPARE_BIGNUM(W(tc),xl) + PREPARE_BIGNUM(tc, W(tc),xl) for (i = xl, k = 0, xp = &BIGIT(x,0), zp = &BIGIT(W(tc),0); i-- > 0; ) EDIV(k, *xp++, s, zp++, &k) - if (q != (ptr *)NULL) *q = copy_normalize(&BIGIT(W(tc),0),xl,qs,0); - if (r != (ptr *)NULL) *r = copy_normalize(&k,1,rs,0); + if (q != (ptr *)NULL) *q = copy_normalize(tc, &BIGIT(W(tc),0),xl,qs, 0); + if (r != (ptr *)NULL) *r = copy_normalize(tc, &k,1,rs, 0); W(tc) = FIX(0); } @@ -773,11 +792,11 @@ static void big_trunc(tc, x, y, xl, yl, qs, rs, q, r) INT d; bigit k; - PREPARE_BIGNUM(U(tc), xl+1) + PREPARE_BIGNUM(tc, U(tc), xl+1) for (i = xl, xp = &BIGIT(U(tc),xl+1), p = &BIGIT(x,xl); i-- > 0;) *--xp = *--p; *--xp = 0; - PREPARE_BIGNUM(V(tc), yl) + PREPARE_BIGNUM(tc, V(tc), yl) for (i = yl, yp = &BIGIT(V(tc),yl), p = &BIGIT(y,yl); i-- > 0;) *--yp = *--p; d = normalize(xp, yp, xl, yl); @@ -785,10 +804,10 @@ static void big_trunc(tc, x, y, xl, yl, qs, rs, q, r) if (q == (ptr *)NULL) { for (i = m; i-- > 0 ; xp++) (void) quotient_digit(xp, yp, yl); } else { - PREPARE_BIGNUM(W(tc),m) + PREPARE_BIGNUM(tc, W(tc),m) p = &BIGIT(W(tc),0); for (i = m; i-- > 0 ; xp++) *p++ = quotient_digit(xp, yp, yl); - *q = copy_normalize(&BIGIT(W(tc),0),m,qs,tc); + *q = copy_normalize(tc, &BIGIT(W(tc),0),m,qs, 1); } if (r != (ptr *)NULL) { @@ -796,7 +815,7 @@ static void big_trunc(tc, x, y, xl, yl, qs, rs, q, r) if (d != 0) { for (i = yl, p = xp, k = 0; i-- > 0; p++) ERSH(d,p,&k) } - *r = copy_normalize(xp, yl, rs, 0); + *r = copy_normalize(tc, xp, yl, rs, 0); } U(tc) = FIX(0); @@ -883,12 +902,12 @@ static ptr uptr_gcd(x, y) uptr x, y; { } /* sparc C compiler barfs w/o full declaration */ -static ptr big_short_gcd(ptr x, bigit y, iptr xl) { +static ptr big_short_gcd(ptr tc, ptr x, bigit y, iptr xl) { bigit *xp; iptr i; bigit r, q; - if (y == 0) return BIGSIGN(x) ? S_sub(FIX(0),x) : x; + if (y == 0) return BIGSIGN(x) ? big_negate(tc, x) : x; for (i = xl, r = 0, xp = &BIGIT(x,0); i-- > 0; ) EDIV(r, *xp++, y, &q, &r) @@ -903,13 +922,13 @@ static ptr big_gcd(tc, x, y, xl, yl) ptr tc, x, y; iptr xl, yl; { ptr ret; /* Copy x to scratch bignum, with a leading zero */ - PREPARE_BIGNUM(U(tc),xl+1) + PREPARE_BIGNUM(tc, U(tc),xl+1) xp = &BIGIT(U(tc),xl+1); for (i = xl, p = &BIGIT(x,xl); i-- > 0; ) *--xp = *--p; *--xp = 0; /* leave xp pointing at leading 0-bigit */ /* Copy y to scratch bignum, with a leading zero */ - PREPARE_BIGNUM(V(tc),yl+1) + PREPARE_BIGNUM(tc, V(tc),yl+1) yp = &BIGIT(V(tc),yl+1); for (i = yl, p = &BIGIT(y,yl); i-- > 0; ) *--yp = *--p; *(yp-1) = 0; /* leave yp pointing just after leading 0-bigit */ @@ -963,7 +982,7 @@ static ptr big_gcd(tc, x, y, xl, yl) ptr tc, x, y; iptr xl, yl; { if (asc != 0) { for (i = xl, p = xp, k = 0; i-- > 0; p++) ERSH(asc,p,&k) } - ret = copy_normalize(xp,xl,0,0); + return copy_normalize(tc, xp,xl,0, 0); } else { bigit d, r; @@ -991,13 +1010,13 @@ ptr S_gcd(x, y) ptr x, y; { uptr_gcd((uptr)xi, (uptr)yi) : uptr_gcd((uptr)yi, (uptr)xi); } else { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) x = X(tc); + FIXNUM_TO_BIGNUM(tc, X(tc),x,&xl,&xs) x = X(tc); yl = BIGLEN(y); ys = BIGSIGN(y); } else if (Sfixnump(y)) { xl = BIGLEN(x); xs = BIGSIGN(x); - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) y = Y(tc); + FIXNUM_TO_BIGNUM(tc, Y(tc),y,&yl,&ys) y = Y(tc); } else { xl = BIGLEN(x); xs = BIGSIGN(x); yl = BIGLEN(y); ys = BIGSIGN(y); @@ -1008,10 +1027,10 @@ ptr S_gcd(x, y) ptr x, y; { uptr xu = BIGIT(x,0), yu = BIGIT(y,0); return xu >= yu ? uptr_gcd(xu, yu) : uptr_gcd(yu, xu); } else - return big_short_gcd(y, BIGIT(x,0), yl); + return big_short_gcd(tc, y, BIGIT(x,0), yl); else if (yl == 1) - return big_short_gcd(x, BIGIT(y,0), xl); + return big_short_gcd(tc, x, BIGIT(y,0), xl); else if (abs_big_lt(x, y, xl, yl)) return big_gcd(tc, y, x, yl, xl); @@ -1082,7 +1101,7 @@ static double big_short_floatify(ptr tc, ptr x, bigit s, iptr xl, IBOOL sign) { bigit *xp, *zp, k; double ret; - PREPARE_BIGNUM(W(tc),enough+1) + PREPARE_BIGNUM(tc, W(tc),enough+1) /* compute only as much of quotient as we need */ for (i = 0, k = 0, xp = &BIGIT(x,0), zp = &BIGIT(W(tc),0); i < enough; i++) @@ -1108,18 +1127,18 @@ static double big_floatify(tc, x, y, xl, yl, sign) ptr tc, x, y; iptr xl, yl; IB /* copy x to U(tc), scaling with added zero bigits as necessary */ ul = xl < yl + enough-1 ? yl + enough-1 : xl; - PREPARE_BIGNUM(U(tc), ul+1) + PREPARE_BIGNUM(tc, U(tc), ul+1) for (i = ul - xl, xp = &BIGIT(U(tc),ul+1); i-- > 0;) *--xp = 0; for (i = xl, p = &BIGIT(x,xl); i-- > 0;) *--xp = *--p; *--xp = 0; /* copy y to V(tc) */ - PREPARE_BIGNUM(V(tc), yl) + PREPARE_BIGNUM(tc, V(tc), yl) for (i = yl, yp = &BIGIT(V(tc),yl), p = &BIGIT(y,yl); i-- > 0;) *--yp = *--p; (void) normalize(xp, yp, ul, yl); - PREPARE_BIGNUM(W(tc),4) + PREPARE_BIGNUM(tc, W(tc),4) p = &BIGIT(W(tc),0); /* compute 'enough' bigits of the quotient */ @@ -1229,7 +1248,7 @@ static double floatify_ratnum(tc, p) ptr tc, p; { /* make sure we are dealing with bignums */ if (Sfixnump(x)) { - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) x = X(tc); } else { xl = BIGLEN(x); @@ -1238,7 +1257,7 @@ static double floatify_ratnum(tc, p) ptr tc, p; { if (Sfixnump(y)) { IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) y = Y(tc); } else { yl = BIGLEN(y); @@ -1291,7 +1310,7 @@ ptr S_decode_float(d) double d; { else { iptr xl; x = FIX(0); - U64_TO_BIGNUM(x, m, &xl) + U64_TO_BIGNUM(get_thread_context(), x, m, &xl) SETBIGLENANDSIGN(x, xl, 0); } @@ -1315,39 +1334,47 @@ static ptr s_big_ash(tc, xp, xl, sign, cnt) ptr tc; bigit *xp; iptr xl; IBOOL si bigit *p1, *p2, k; if (cnt < 0) { /* shift to the right */ - INT bit_bucket = 0; + iptr whole_bigits; + + /* decrement length to shift by whole bigits */ + if ((xl -= (whole_bigits = (cnt = -cnt) / bigit_bits)) <= 0) return sign ? FIX(-1) : FIX(0); + cnt -= whole_bigits * bigit_bits; - cnt = -cnt; - - /* shift by whole bigits by decrementing length */ - while (cnt >= bigit_bits) { - xl -= 1; - if (xl == 0) return sign ? FIX(-1) : FIX(0); - cnt -= bigit_bits; - bit_bucket |= *(xp + xl); - } - - /* copy to scratch bignum */ - PREPARE_BIGNUM(W(tc),xl) - p1 = &BIGIT(W(tc), xl); - for (i = xl, p2 = xp + xl; i-- > 0; ) *--p1 = *--p2; - - /* shift by remaining count */ + /* shift by remaining count to scratch bignum, tracking bits shifted off to the right */ + PREPARE_BIGNUM(tc, W(tc),xl) + p1 = &BIGIT(W(tc), 0); + p2 = xp; k = 0; - if (cnt != 0) { - for (i = xl; i-- > 0; p1++) ERSH(cnt,p1,&k) - } - bit_bucket |= k; - - /* round down negative numbers by incrementing the magnitude if any - one bits dropped into the bit bucket */ - if (sign && bit_bucket) { - p1 = &BIGIT(W(tc), xl - 1); - for (i = xl, k = 1; k != 0 && i-- > 0; p1 -= 1) - EADDC(0, *p1, p1, &k) + i = xl; + if (cnt == 0) { + do { *p1++ = *p2++; } while (--i > 0); + } else { + do { ERSH2(cnt,*p2,p1,&k); p1++; p2++; } while (--i > 0); } - return copy_normalize(&BIGIT(W(tc), 0), xl, sign, tc); + if (sign) { + if (k == 0) { + /* check for one bits in the shifted-off bigits, looking */ + /* from both ends in an attempt to get out more quickly for what */ + /* seem like the most likely patterns. of course, there might */ + /* be no one bits (in which case this won't help) or they might be */ + /* only in the middle (in which case this will be slower) */ + p2 = (p1 = xp + xl) + whole_bigits; + while (p1 != p2) { + if ((k = *p1++) || p1 == p2 || (k = *--p2)) break; + } + } + + /* round down negative numbers by incrementing the magnitude if any + one bits were shifted off to the right */ + if (k) { + p1 = &BIGIT(W(tc), xl - 1); + for (i = xl, k = 1; k != 0 && i-- > 0; p1 -= 1) + EADDC(0, *p1, p1, &k) + } + } + + return copy_normalize(tc, &BIGIT(W(tc), 0), xl, sign, 1); } else { /* shift to the left */ iptr xlplus, newxl; @@ -1361,7 +1388,7 @@ static ptr s_big_ash(tc, xp, xl, sign, cnt) ptr tc; bigit *xp; iptr xl; IBOOL si /* maximum total length includes +1 for shift out of top bigit */ newxl = xl + xlplus + 1; - PREPARE_BIGNUM(W(tc),newxl) + PREPARE_BIGNUM(tc, W(tc),newxl) /* fill bigits to right with zero */ for (i = xlplus, p1 = &BIGIT(W(tc), newxl); i-- > 0; ) *--p1 = 0; @@ -1373,7 +1400,7 @@ static ptr s_big_ash(tc, xp, xl, sign, cnt) ptr tc; bigit *xp; iptr xl; IBOOL si } *--p1 = k; - return copy_normalize(p1, newxl, sign, tc); + return copy_normalize(tc, p1, newxl, sign, 1); } } @@ -1388,7 +1415,7 @@ ptr S_ash(x, n) ptr x, n; { do much here anyway since semantics of signed >> are undefined in C */ iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return s_big_ash(tc, &BIGIT(X(tc),0), xl, xs, cnt); } else return s_big_ash(tc, &BIGIT(x,0), BIGLEN(x), BIGSIGN(x), cnt); @@ -1456,7 +1483,7 @@ ptr S_big_positive_bit_field(ptr x, ptr fxstart, ptr fxend) { } /* copy to scratch bignum */ - PREPARE_BIGNUM(W(tc),wl) + PREPARE_BIGNUM(tc, W(tc),wl) p1 = &BIGIT(W(tc), wl); for (i = wl, p2 = xp + xl; i-- > 0; ) *--p1 = *--p2; @@ -1469,7 +1496,7 @@ ptr S_big_positive_bit_field(ptr x, ptr fxstart, ptr fxend) { for (i = wl; i > 0; i -= 1, p1 += 1) ERSH(start,p1,&k) } - return copy_normalize(&BIGIT(W(tc), 0), wl, 0, tc); + return copy_normalize(tc, &BIGIT(W(tc), 0), wl, 0, 1); } /* logical operations simulate two's complement operations using the @@ -1497,13 +1524,13 @@ ptr S_logand(x, y) ptr x, y; { return (ptr)((iptr)x & (iptr)y); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logand(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logand(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1532,14 +1559,14 @@ static ptr big_logand(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),yl); + PREPARE_BIGNUM(tc, W(tc),yl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl); for (i = yl; i > 0; i -= 1) *--zp = *--xp & *--yp; - return copy_normalize(zp, yl, 0, tc); + return copy_normalize(tc, zp, yl, 0, 1); } else { bigit yb; - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); yb = 1; for (i = yl; i > 0; i -= 1) { @@ -1550,13 +1577,13 @@ static ptr big_logand(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL /* yb must be 0, since high-order bigit >= 1. effectively, this means ~t2 would be all 1's from here on out. */ for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0, tc); + return copy_normalize(tc, zp, xl, 0, 1); } } else { if (ys == 0) { bigit xb; - PREPARE_BIGNUM(W(tc),yl); + PREPARE_BIGNUM(tc, W(tc),yl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl); xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1564,11 +1591,11 @@ static ptr big_logand(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL xb = t2 > t1; *--zp = *--yp & ~t2; } - return copy_normalize(zp, yl, 0, tc); + return copy_normalize(tc, zp, yl, 0, 1); } else { bigit xb, yb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1587,7 +1614,8 @@ static ptr big_logand(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1, tc); + + return copy_normalize(tc, zp, xl+1, 1, 1); } } } @@ -1602,13 +1630,13 @@ ptr S_logtest(x, y) ptr x, y; { return Sboolean((iptr)x & (iptr)y); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logtest(y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logtest(x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1726,7 +1754,7 @@ ptr S_logbit0(k, x) ptr k, x; { } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return big_logbit0(tc, x, n, X(tc), xl, xs); } } else { @@ -1753,7 +1781,7 @@ static ptr big_logbit0(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB /* we'd just be clearing a bit that's already (virtually) cleared */ return origx; } else { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),xl); for (;;) { if (n < bigit_bits) break; @@ -1762,13 +1790,13 @@ static ptr big_logbit0(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB } *--zp = *--xp & ~(1 << n); for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp,xl,0, tc); + return copy_normalize(tc, zp,xl,0, 1); } } else { bigit xb, k, x1, x2, z1, z2; iptr zl = (yl > xl ? yl : xl) + 1; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); k = xb = 1; i = xl; @@ -1788,7 +1816,7 @@ static ptr big_logbit0(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB *--zp = z2; } *--zp = k; - return copy_normalize(zp, zl, 1, tc); + return copy_normalize(tc, zp, zl, 1, 1); } } @@ -1803,7 +1831,7 @@ ptr S_logbit1(k, x) ptr k, x; { } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs); + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs); return big_logbit1(tc, x, n, X(tc), xl, xs); } } else { @@ -1821,7 +1849,7 @@ static ptr big_logbit1(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB bigit x1; iptr zl = yl > xl ? yl : xl; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); i = xl; @@ -1833,7 +1861,7 @@ static ptr big_logbit1(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB } *--zp = x1 | ((U32)1 << n); for (; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, zl, 0, tc); + return copy_normalize(tc, zp, zl, 0, 1); } else if (yl > xl) { /* we'd just be setting a bit that's already (virtually) set */ return origx; @@ -1841,7 +1869,7 @@ static ptr big_logbit1(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB bigit xb, k, x1, x2, z1, z2; iptr zl = xl + 1; - PREPARE_BIGNUM(W(tc),zl); + PREPARE_BIGNUM(tc, W(tc),zl); xp = &BIGIT(x,xl); zp = &BIGIT(W(tc),zl); k = xb = 1; for (;;) { @@ -1862,7 +1890,7 @@ static ptr big_logbit1(tc, origx, n, x, xl, xs) ptr tc, origx, x; iptr n, xl; IB *--zp = z2; } *--zp = k; - return copy_normalize(zp, zl, 1, tc); + return copy_normalize(tc, zp, zl, 1, 1); } } @@ -1874,13 +1902,13 @@ ptr S_logor(x, y) ptr x, y; { return (ptr)((iptr)x | (iptr)(y)); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logor(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logor(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -1909,15 +1937,15 @@ static ptr big_logor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); for (i = yl; i > 0; i -= 1) *--zp = *--xp | *--yp; for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0, tc); + return copy_normalize(tc, zp, xl, 0, 1); } else { bigit yb, k; - PREPARE_BIGNUM(W(tc),yl+1); + PREPARE_BIGNUM(tc, W(tc),yl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl+1); k = yb = 1; for (i = yl; i > 0; i -= 1) { @@ -1928,13 +1956,13 @@ static ptr big_logor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, yl+1, 1, tc); + return copy_normalize(tc, zp, yl+1, 1, 1); } } else { if (ys == 0) { bigit xb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1952,11 +1980,11 @@ static ptr big_logor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1, tc); + return copy_normalize(tc, zp, xl+1, 1, 1); } else { bigit xb, yb, k; - PREPARE_BIGNUM(W(tc),yl+1); + PREPARE_BIGNUM(tc, W(tc),yl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),yl+1); k = yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -1968,7 +1996,7 @@ static ptr big_logor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, yl+1, 1, tc); + return copy_normalize(tc, zp, yl+1, 1, 1); } } } @@ -1981,13 +2009,13 @@ ptr S_logxor(x, y) ptr x, y; { return (ptr)((iptr)x ^ (iptr)(y)); } else { iptr xl; IBOOL xs; - FIXNUM_TO_BIGNUM(X(tc),x,&xl,&xs) + FIXNUM_TO_BIGNUM(tc,X(tc),x,&xl,&xs) return big_logxor(tc, y, X(tc), BIGLEN(y), xl, BIGSIGN(y), xs); } } else { if (Sfixnump(y)) { iptr yl; IBOOL ys; - FIXNUM_TO_BIGNUM(Y(tc),y,&yl,&ys) + FIXNUM_TO_BIGNUM(tc,Y(tc),y,&yl,&ys) return big_logxor(tc, x, Y(tc), BIGLEN(x), yl, BIGSIGN(x), ys); } else { if (BIGLEN(x) >= BIGLEN(y)) @@ -2016,15 +2044,15 @@ static ptr big_logxor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL if (xs == 0) { if (ys == 0) { - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); for (i = yl; i > 0; i -= 1) *--zp = *--xp ^ *--yp; for (i = xl - yl; i > 0; i -= 1) *--zp = *--xp; - return copy_normalize(zp, xl, 0, tc); + return copy_normalize(tc, zp, xl, 0, 1); } else { bigit yb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = yb = 1; for (i = yl; i > 0; i -= 1) { @@ -2041,13 +2069,13 @@ static ptr big_logxor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1, tc); + return copy_normalize(tc, zp, xl+1, 1, 1); } } else { if (ys == 0) { bigit xb, k; - PREPARE_BIGNUM(W(tc),xl+1); + PREPARE_BIGNUM(tc, W(tc),xl+1); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl+1); k = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -2065,11 +2093,11 @@ static ptr big_logxor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL *--zp = z2; } *--zp = k; - return copy_normalize(zp, xl+1, 1, tc); + return copy_normalize(tc, zp, xl+1, 1, 1); } else { bigit xb, yb; - PREPARE_BIGNUM(W(tc),xl); + PREPARE_BIGNUM(tc, W(tc),xl); xp = &BIGIT(x,xl); yp = &BIGIT(y,yl); zp = &BIGIT(W(tc),xl); yb = xb = 1; for (i = yl; i > 0; i -= 1) { @@ -2083,7 +2111,7 @@ static ptr big_logxor(tc, x, y, xl, yl, xs, ys) ptr tc, x, y; iptr xl, yl; IBOOL x1 = *--xp; x2 = x1 - xb; xb = x2 > x1; *--zp = x2; } - return copy_normalize(zp, xl, 0, tc); + return copy_normalize(tc, zp, xl, 0, 1); } } } diff --git a/c/prim.c b/c/prim.c index 2cfd4ce999..8871783217 100644 --- a/c/prim.c +++ b/c/prim.c @@ -190,6 +190,7 @@ void S_prim_init() { Sforeign_symbol("(cs)enable_object_counts", (void *)S_enable_object_counts); Sforeign_symbol("(cs)set_enable_object_counts", (void *)S_set_enable_object_counts); Sforeign_symbol("(cs)object_counts", (void *)S_object_counts); + Sforeign_symbol("(cs)unregister_guardian", (void *)S_unregister_guardian); Sforeign_symbol("(cs)fire_collector", (void *)S_fire_collector); Sforeign_symbol("(cs)enable_object_backreferences", (void *)S_enable_object_backreferences); Sforeign_symbol("(cs)set_enable_object_backreferences", (void *)S_set_enable_object_backreferences); diff --git a/c/prim5.c b/c/prim5.c index 8954b1c867..822e427d21 100644 --- a/c/prim5.c +++ b/c/prim5.c @@ -116,7 +116,7 @@ static ptr s_multibytetowidechar PROTO((unsigned cp, ptr inbv)); static ptr s_widechartomultibyte PROTO((unsigned cp, ptr inbv)); #endif static ptr s_profile_counters PROTO((void)); -static void s_set_profile_counters PROTO((ptr counters)); +static ptr s_profile_release_counters PROTO((void)); #define require(test,who,msg,arg) if (!(test)) S_error1(who, msg, arg) @@ -166,7 +166,7 @@ static iptr s_fxdiv(x, y) iptr x, y; { static ptr s_trunc_rem(x, y) ptr x, y; { ptr q, r; - S_trunc_rem(x, y, &q, &r); + S_trunc_rem(get_thread_context(), x, y, &q, &r); return Scons(q, r); } @@ -1467,8 +1467,25 @@ static ptr s_profile_counters(void) { return S_G.profile_counters; } -static void s_set_profile_counters(ptr counters) { - S_G.profile_counters = counters; +/* s_profile_release_counters assumes and maintains the property that each pair's + tail is not younger than the pair and thereby avoids dirty sets. */ +static ptr s_profile_release_counters(void) { + ptr tossed, *p_keep, *p_toss, ls; + p_keep = &S_G.profile_counters; + p_toss = &tossed; + for (ls = *p_keep; ls != Snil && (MaybeSegInfo(ptr_get_segment(ls)))->generation <= S_G.prcgeneration; ls = Scdr(ls)) { + if (Sbwp_objectp(CAAR(ls))) { + *p_toss = ls; + p_toss = &Scdr(ls); + } else { + *p_keep = ls; + p_keep = &Scdr(ls); + } + } + *p_keep = ls; + *p_toss = Snil; + S_G.prcgeneration = 0; + return tossed; } void S_dump_tc(ptr tc) { @@ -1606,6 +1623,7 @@ void S_prim5_init() { Sforeign_symbol("(cs)lognot", (void *)S_lognot); Sforeign_symbol("(cs)fxmul", (void *)s_fxmul); Sforeign_symbol("(cs)fxdiv", (void *)s_fxdiv); + Sforeign_symbol("(cs)s_big_negate", (void *)S_big_negate); Sforeign_symbol("(cs)add", (void *)S_add); Sforeign_symbol("(cs)gcd", (void *)S_gcd); Sforeign_symbol("(cs)mul", (void *)S_mul); @@ -1641,6 +1659,7 @@ void S_prim5_init() { #else Sforeign_symbol("(cs)directory_list", (void *)S_directory_list); #endif + Sforeign_symbol("(cs)dequeue_scheme_signals", (void *)S_dequeue_scheme_signals); Sforeign_symbol("(cs)register_scheme_signal", (void *)S_register_scheme_signal); Sforeign_symbol("(cs)exp", (void *)s_exp); @@ -1701,7 +1720,7 @@ void S_prim5_init() { Sforeign_symbol("(cs)s_widechartomultibyte", (void *)s_widechartomultibyte); #endif Sforeign_symbol("(cs)s_profile_counters", (void *)s_profile_counters); - Sforeign_symbol("(cs)s_set_profile_counters", (void *)s_set_profile_counters); + Sforeign_symbol("(cs)s_profile_release_counters", (void *)s_profile_release_counters); } static ptr s_get_reloc(co, with_offsets) ptr co; IBOOL with_offsets; { diff --git a/c/print.c b/c/print.c index 45bebd1303..5054582389 100644 --- a/c/print.c +++ b/c/print.c @@ -287,7 +287,7 @@ static void pbignum(x) ptr x; { static void wrint(x) ptr x; { ptr q, r; - S_trunc_rem(x, FIX(10), &q, &r); + S_trunc_rem(get_thread_context(), x, FIX(10), &q, &r); if (q != 0) wrint(q); putchar((INT)UNFIX(r) + '0'); } diff --git a/c/scheme.c b/c/scheme.c index 6594426075..6835e1ccff 100644 --- a/c/scheme.c +++ b/c/scheme.c @@ -576,7 +576,8 @@ static void check_boot_file_state PROTO((const char *who)); static IBOOL find_boot(name, ext, fd, errorp) const char *name, *ext; int fd; IBOOL errorp; { char pathbuf[PATH_MAX], buf[PATH_MAX]; - uptr n; INT c; + uptr n = 0; + INT c; const char *path; #ifdef WIN32 wchar_t *expandedpath; @@ -850,23 +851,11 @@ static INT zgetstr(file, s, max) glzFile file; char *s; iptr max; { static IBOOL loadecho = 0; #define LOADSKIP 0 -static void handle_visit_revisit(tc, p) ptr tc; ptr p; { - ptr a = Scar(p); - - if (a == FIX(visit_tag) || a == FIX(revisit_tag)) { - ptr d = Scdr(p); - if (Sprocedurep(d)) { - S_initframe(tc, 0); - INITCDR(p) = boot_call(tc, d, 0); - } - } -} - static int set_load_binary(iptr n) { - if (SYMVAL(S_G.scheme_version_id) == sunbound) return 0; // set by back.ss + if (!Ssymbolp(SYMVAL(S_G.scheme_version_id))) return 0; // set by back.ss ptr make_load_binary = SYMVAL(S_G.make_load_binary_id); if (Sprocedurep(make_load_binary)) { - S_G.load_binary = Scall3(make_load_binary, Sstring_utf8(bd[n].path, -1), Sstring_to_symbol("load"), Sfalse); + S_G.load_binary = Scall1(make_load_binary, Sstring_utf8(bd[n].path, -1)); return 1; } return 0; @@ -916,12 +905,8 @@ static void load(tc, n, base) ptr tc; iptr n; IBOOL base; { if (Sprocedurep(y)) { S_initframe(tc, 0); INITVECTIT(x, j) = boot_call(tc, y, 0); - } else if (Spairp(y)) { - handle_visit_revisit(tc, y); } } - } else if (Spairp(x)) { - handle_visit_revisit(tc, x); } if (loadecho) { S_prin1(x); @@ -1112,7 +1097,7 @@ extern void Sbuild_heap(kernel, custom_init) const char *kernel; void (*custom_i iptr n; n = strlen(name) - 4; - if (n >= 0 && (strcmp(name + n, ".exe") == 0 || strcmp(name + n, ".EXE") == 0)) { + if (n >= 0 && (_stricmp(name + n, ".exe") == 0)) { strcpy(buf, name); buf[n] = 0; name = buf; diff --git a/c/schsig.c b/c/schsig.c index f99db7e93f..ed7ee883d8 100644 --- a/c/schsig.c +++ b/c/schsig.c @@ -535,16 +535,24 @@ void S_noncontinuable_interrupt() { } #ifdef WIN32 +ptr S_dequeue_scheme_signals(ptr tc) { + return Snil; +} + +ptr S_allocate_scheme_signal_queue() { + return (ptr)0; +} + +void S_register_scheme_signal(sig) iptr sig; { + S_error("register_scheme_signal", "unsupported in this version"); +} + /* code courtesy Bob Burger, burgerrg@sagian.com We cannot call noncontinuable_interrupt, because we are not allowed to perform a longjmp inside a signal handler; instead, we don't handle the signal, which will cause the process to terminate. */ -void S_register_scheme_signal(sig) iptr sig; { - S_error("register_scheme_signal", "unsupported in this version"); -} - static BOOL WINAPI handle_signal(DWORD dwCtrlType) { switch (dwCtrlType) { case CTRL_C_EVENT: @@ -572,6 +580,8 @@ static void init_signal_handlers() { #include static void handle_signal PROTO((INT sig, siginfo_t *si, void *data)); +static IBOOL enqueue_scheme_signal PROTO((ptr tc, INT sig)); +static ptr allocate_scheme_signal_queue PROTO((void)); static void forward_signal_to_scheme PROTO((INT sig)); #define RESET_SIGNAL {\ @@ -581,18 +591,88 @@ static void forward_signal_to_scheme PROTO((INT sig)); sigprocmask(SIG_UNBLOCK,&set,(sigset_t *)0);\ } +/* we buffer up to SIGNALQUEUESIZE - 1 unhandled signals, the start dropping them. */ +#define SIGNALQUEUESIZE 64 +static IBOOL scheme_signals_registered; + +/* we use a simple queue for pending signals. signals are enqueued only by the + C signal handler and dequeued only by the Scheme event handler. since the signal + handler and event handler run in the same thread, there's no need for locks + or write barriers. */ + +struct signal_queue { + INT head; + INT tail; + INT data[SIGNALQUEUESIZE]; +}; + +static IBOOL enqueue_scheme_signal(ptr tc, INT sig) { + struct signal_queue *queue = (struct signal_queue *)(SIGNALINTERRUPTQUEUE(tc)); + /* ignore the signal if we failed to allocate the queue */ + if (queue == NULL) return 0; + INT tail = queue->tail; + INT next_tail = tail + 1; + if (next_tail == SIGNALQUEUESIZE) next_tail = 0; + /* ignore the signal if the queue is full */ + if (next_tail == queue->head) return 0; + queue->data[tail] = sig; + queue->tail = next_tail; + return 1; +} + +ptr S_dequeue_scheme_signals(ptr tc) { + ptr ls = Snil; + struct signal_queue *queue = (struct signal_queue *)(SIGNALINTERRUPTQUEUE(tc)); + if (queue == NULL) return ls; + INT head = queue->head; + INT tail = queue->tail; + INT i = tail; + while (i != head) { + if (i == 0) i = SIGNALQUEUESIZE; + i -= 1; + ls = Scons(Sfixnum(queue->data[i]), ls); + } + queue->head = tail; + return ls; +} + static void forward_signal_to_scheme(sig) INT sig; { ptr tc = get_thread_context(); - SIGNALINTERRUPTPENDING(tc) = Sfixnum(sig); - SOMETHINGPENDING(tc) = Strue; + if (enqueue_scheme_signal(tc, sig)) { + SIGNALINTERRUPTPENDING(tc) = Strue; + SOMETHINGPENDING(tc) = Strue; + } RESET_SIGNAL } +static ptr allocate_scheme_signal_queue() { + /* silently fail to allocate space for signals if malloc returns NULL */ + struct signal_queue *queue = malloc(sizeof(struct signal_queue)); + if (queue != (struct signal_queue *)0) { + queue->head = queue->tail = 0; + } + return (ptr)queue; +} + +ptr S_allocate_scheme_signal_queue() { + return scheme_signals_registered ? allocate_scheme_signal_queue() : (ptr)0; +} + void S_register_scheme_signal(sig) iptr sig; { struct sigaction act; - sigemptyset(&act.sa_mask); + tc_mutex_acquire() + if (!scheme_signals_registered) { + ptr ls; + scheme_signals_registered = 1; + for (ls = S_threads; ls != Snil; ls = Scdr(ls)) { + SIGNALINTERRUPTQUEUE(THREADTC(Scar(ls))) = S_allocate_scheme_signal_queue(); + } + } + tc_mutex_release() + + sigfillset(&act.sa_mask); act.sa_flags = 0; act.sa_handler = forward_signal_to_scheme; sigaction(sig, &act, (struct sigaction *)0); @@ -731,6 +811,8 @@ void S_schsig_init() { S_protect(&S_G.event_and_resume_star_id); S_G.event_and_resume_star_id = S_intern((const unsigned char *)"$event-and-resume*"); + + scheme_signals_registered = 0; } diff --git a/c/thread.c b/c/thread.c index 7a40bccd2a..17ecdfbc49 100644 --- a/c/thread.c +++ b/c/thread.c @@ -97,6 +97,7 @@ ptr S_create_thread_object(who, p_tc) const char *who; ptr p_tc; { TIMERTICKS(tc) = Sfalse; DISABLECOUNT(tc) = Sfixnum(0); SIGNALINTERRUPTPENDING(tc) = Sfalse; + SIGNALINTERRUPTQUEUE(tc) = S_allocate_scheme_signal_queue(); KEYBOARDINTERRUPTPENDING(tc) = Sfalse; TARGETMACHINE(tc) = S_intern((const unsigned char *)MACHINE_TYPE); @@ -229,6 +230,7 @@ static IBOOL destroy_thread(tc) ptr tc; { } if (LZ4OUTBUFFER(tc) != NULL) free(LZ4OUTBUFFER(tc)); + if (SIGNALINTERRUPTQUEUE(tc) != NULL) free(SIGNALINTERRUPTQUEUE(tc)); free((void *)tc); THREADTC(thread) = 0; /* mark it dead */ diff --git a/c/vfasl.c b/c/vfasl.c index ac7e79f581..5b24ca8908 100644 --- a/c/vfasl.c +++ b/c/vfasl.c @@ -747,6 +747,9 @@ IBOOL S_vfasl_can_combinep(ptr v) IBOOL installs; vfasl_info *vfi; + if (IMMEDIATE(v)) + return 1; + fasl_init_entry_tables(); /* Run a "first pass" */ diff --git a/csug/io.stex b/csug/io.stex index 736df4432c..db638736db 100644 --- a/csug/io.stex +++ b/csug/io.stex @@ -1020,7 +1020,7 @@ be significantly smaller. \noindent \scheme{compress-level} determines the amount of effort spent on compression and is thus relevant only for output. -It can be set to one of the symbols \scheme{low}, +It can be set to one of the symbols \scheme{minimum}, \scheme{low}, \scheme{medium}, \scheme{high}, or \scheme{maximum}, which are listed in order from shortest to longest expected compression time and least to greatest expected effectiveness. @@ -1642,11 +1642,17 @@ the buffered input or a portion thereof is returned; otherwise \entryheader \formdef{read-token}{\categoryprocedure}{(read-token)} \formdef{read-token}{\categoryprocedure}{(read-token \var{textual-input-port})} +\formdef{read-token}{\categoryprocedure}{(read-token \var{textual-input-port} \var{sfd} \var{bfp})} \returns see below \listlibraries \endentryheader \noindent +\var{sfd} must be a source-file descriptor. +\var{bfp} must be an exact nonnegative integer and should be the +character position of the next character to be read from +\var{textual-input-port}. + Parsing of a Scheme datum is conceptually performed in two steps. First, the sequence of characters that form the datum are grouped into \scheme{tokens}, such as symbols, numbers, left parentheses, and @@ -1671,13 +1677,18 @@ One token is read from the input port and returned as four values: \item[\var{value}:] the token value, \item[\var{start}:] the position of the first character of the token, -relative to the starting position of the input port, and +relative to the starting position of the input port (or \scheme{#f}, +if the position cannot be determined), and \item[\var{end}:] the first position beyond the token, -relative to the starting position of the input port. +relative to the starting position of the input port (or \scheme{#f}, +if the position cannot be determined). \end{description} \noindent +The input port is left pointing to the first character position beyond +the token. + When the token type fully specifies the token, \scheme{read-token} returns \scheme{#f} for the value. The token types are listed below with the corresponding \var{value} @@ -1715,8 +1726,18 @@ in parentheses. The set of token types is likely to change in future releases of the system; check the release notes for details on such changes. -The input port is left pointing to the first character position beyond -the token, i.e., \var{end} characters from the starting position. +Specifying \var{sfd} and \var{bfp} improves the quality of error messages, +guarantees \var{start} and \var{end} can be determined, +and eliminates the overhead of asking for a file position on each call +to \scheme{read-token}. +In most cases, \var{bfp} should be 0 for the first call +to \scheme{read-token} at the start of a file, +and it should be the fourth return value (\var{end}) of the preceding +call to \scheme{read-token} for each subsequent +call. +This protocol is necessary to handle files containing multiple-byte +characters, since file positions do not necessarily correspond +to character positions. \schemedisplay (define s (open-input-string "(a b c)")) @@ -3358,7 +3379,6 @@ input port, must be used instead. %---------------------------------------------------------------------------- \entryheader \formdef{fasl-write}{\categoryprocedure}{(fasl-write \var{obj} \var{binary-output-port})} -\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port})} \returns unspecified \listlibraries \endentryheader @@ -3370,11 +3390,45 @@ An exception is raised with condition-type \scheme{&assertion} if \var{obj} or any portion of \var{obj} has no external fasl representation, e.g., if \var{obj} is or contains a procedure. +\schemedisplay +(define bop (open-file-output-port "tmp.fsl")) +(fasl-write '(a b c) bop) +(close-port bop) + +(define bip (open-file-input-port "tmp.fsl")) +(fasl-read bip) ;=> (a b c) +(fasl-read bip) ;=> #!eof +(close-port bip) +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port})} +\formdef{fasl-read}{\categoryprocedure}{(fasl-read \var{binary-input-port \var{situation}})} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +If present, \var{situation} must be one of the symbols \scheme{load}, +\scheme{visit}, or \scheme{revisit}. +It defaults to \scheme{load}. + \scheme{fasl-read} reads one object from \var{binary-input-port}, which must be positioned at the front of an object written in fasl format. \scheme{fasl-read} returns the eof object if the file is positioned at the end of file. +If the situation is \scheme{visit}, \scheme{fasl-read} skips over +any revisit (run-time-only) objects, and +if the situation is \scheme{revisit}, \scheme{fasl-read} skips over +any visit (compile-time-only) objects. +It doesn't skip any if the situation is \scheme{load}. +Similarly, objects marked as both visit and revisit (e.g., object code +corresponding to source code within an \scheme{eval-when} form with +situation \scheme{load} or situations \scheme{visit} and \scheme{revisit}) +are never skipped. \schemedisplay (define bop (open-file-output-port "tmp.fsl")) diff --git a/csug/libraries.stex b/csug/libraries.stex index a48f401c70..57bb3a3cb9 100644 --- a/csug/libraries.stex +++ b/csug/libraries.stex @@ -896,6 +896,57 @@ cannot be proven immutable, which inhibits important optimizations such as procedure inlining. This can result in significantly lower run-time performance. +\section{Explicitly invoking libraries\label{SECTLIBRARYINVOCATION}} + +%---------------------------------------------------------------------------- +\noskipentryheader +\formdef{invoke-library}{\categoryprocedure}{(invoke-library \var{libref})} +\returns unspecified +\listlibraries +\endnoskipentryheader + +\var{libref} must be an s-expression in the form of a library reference. +The syntax for library references is given in +Chapter~\ref{TSPL:CHPTLIBRARIES} of {\TSPLFOUR} and in the Revised$^6$ +Report. + +A library is implicitly invoked when or before some expression +outside the library (e.g., in another library or in a top-level +program) evaluates a reference to one of the library's exported +variables. +When the library is invoked, its body expressions (the right-hand-sides +of the library's variable definitions and its initialization +expressions) are evaluated. +Once invoked, the library is not invoked again within the same process, +unless it is first explicitly redefined or reloaded. + +\scheme{invoke-library} explicitly invokes the library specified +by \var{libref} if it has not already been invoked or has since +been redefined or reloaded. +If the library has not yet been loaded, \scheme{invoke-library} +first loads the library via the process described in +Section~\ref{SECTUSELIBRARIES}. + +\scheme{invoke-library} is typically only useful for libraries whose +body expressions have side effects. +It is useful to control when the side effects occur and to force +invocation of a library that has no exported variables. +Invoking a library does not force the compile-time code (macro +transformer expressions and meta definitions) to be loaded or +evaluated, nor does it cause the library's bindings to become +visible. + +It is good practice to avoid externally visible side effects in +library bodies so the library can be used equally well at compile +time and run time. +When feasible, consider moving the side effects of a library body +to an initialization routine and adding a top-level program that +imports the library and calls the initialization routine. +With this structure, calls to \scheme{invoke-library} on the +library can be replaced by calls to +\index{\scheme{load-program}}\scheme{load-program} on the +top-level program. + \section{Library Parameters\label{SECTLIBRARYPARAMETERS}} \index{\scheme{import}}% @@ -915,7 +966,7 @@ The parameter \scheme{library-directories} determines where the files containing library source and object code are located in the file system, and the parameter \scheme{library-extensions} determines the filename extensions for the files holding the code, as described in -section~\ref{SECTUSESCRIPTING}. +section~\ref{SECTUSELIBRARIES}. The values of both parameters are lists of pairs of strings. The first string in each \scheme{library-directories} pair identifies a source-file root directory, and the second identifies the corresponding @@ -974,7 +1025,7 @@ to a procedure that simply calls \scheme{compile-library}) on any imported libra the object file is missing, older than the corresponding source file, older than any source files included (via \index{\scheme{include}}\scheme{include}) when the object file was created, or itself requires a library that has or must -be recompiled, as described in Section~\ref{SECTUSESCRIPTING}. +be recompiled, as described in Section~\ref{SECTUSELIBRARIES}. The default initial value of this parameter is \scheme{#f}. It can be set to \scheme{#t} via the command-line option \index{\scheme{--compile-imported-libraries} command-line option}\scheme{--compile-imported-libraries}. @@ -1056,7 +1107,7 @@ The set of libraries initially defined includes those listed in Section~\ref{SECTBUILTINLIBRARIES} above. %---------------------------------------------------------------------------- -\noskipentryheader +\entryheader \formdef{library-version}{\categoryprocedure}{(library-version \var{libref})} \returns the version of the specified library \formdef{library-exports}{\categoryprocedure}{(library-exports \var{libref})} @@ -1068,7 +1119,7 @@ Section~\ref{SECTBUILTINLIBRARIES} above. \formdef{library-object-filename}{\categoryprocedure}{(library-object-filename \var{libref})} \returns the name of the object file holding the specified library, if any \listlibraries -\endnoskipentryheader +\endentryheader Information can be obtained only for built-in libraries or libraries previously loaded into the system. diff --git a/csug/objects.stex b/csug/objects.stex index d0b66dcd69..910774070c 100644 --- a/csug/objects.stex +++ b/csug/objects.stex @@ -1191,9 +1191,7 @@ the uncompressed size and the compression mode. The result does not include the header that is written by port-based compression using the \scheme{compressed} option. The compression format is determined by the \index{\scheme{compress-format}}\scheme{compress-format} -parameter. -The compression level is fixed to some default determined by the -format; it is not affected by the +parameter, and the compression level is determined by the \index{\scheme{compress-level}}\scheme{compress-level} parameter. diff --git a/csug/smgmt.stex b/csug/smgmt.stex index 713ef16110..604396df78 100644 --- a/csug/smgmt.stex +++ b/csug/smgmt.stex @@ -275,7 +275,12 @@ e.g.: Collection can also be temporarily disabled using \scheme{critical-section}, which prevents any interrupts from -occurring. +being handled. + +In the threaded versions of {\ChezScheme}, the collect-request +handler is invoked by a single thread with all other threads +temporarily suspended. + %---------------------------------------------------------------------------- \entryheader @@ -547,7 +552,6 @@ reference, and that non-weak reference prevents the car field from becoming (bwp-object? (car p)) ;=> #t \endschemedisplay - %---------------------------------------------------------------------------- \entryheader \formdef{make-guardian}{\categoryprocedure}{(make-guardian)} @@ -814,6 +818,86 @@ foreign address as an argument. This would allow the header to be dropped from the Scheme heap as soon as it becomes inaccessible. +Guardians can also be created via +\index{\scheme{ftype-guardian}}\scheme{ftype-guardian}, which +supports reference counting of foreign objects. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{guardian?}{\categoryprocedure}{(guardian? \var{obj})} +\returns \scheme{#t} if obj is a guardian, \scheme{#f} otherwise +\listlibraries +\endentryheader + +\schemedisplay +(guardian? (make-guardian)) ;=> #t +(guardian? (ftype-guardian iptr)) ;=> #t +(guardian? (lambda x x)) ;=> #f +(guardian? "oops") ;=> #f +\endschemedisplay + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{unregister-guardian}{\categoryprocedure}{(unregister-guardian \var{guardian})} +\returns see below +\listlibraries +\endentryheader + +\noindent +\scheme{unregister-guardian} unregisters the +as-yet unresurrected objects currently registered with the guardian, +with one caveat. + +The caveat, which applies only to threaded versions of {\ChezScheme}, +is that objects registered with the guardian by other threads since +the last garbage collection might not be unregistered. +To ensure that all objects are unregistered in a multithreaded +application, a single thread can be used both to register and +unregister objects. +Alternatively, an application can arrange to define a +\index{\scheme{collect-request-handler}}collect-request +handler that calls \scheme{unregister-guardian} after it calls +\scheme{collect}. + +In any case, \scheme{unregister-guardian} returns a list containing each object +(or its representative, if specified) that it unregisters, with +duplicates as appropriate if the same object is registered more +than once with the guardian. +Objects already resurrected but not yet retrieved from the guardian +are not included in the list but remain retrievable from the +guardian. + +In the current implementation, \scheme{unregister-guardian} takes time proportional +to the number of unresurrected objects currently registered with +all guardians rather than those registered just with +the corresponding guardian. + +The example below assumes no collections occur except for those resulting from +explicit calls to \scheme{collect}. + +\schemedisplay +(define g (make-guardian)) +(define x (cons 'a 'b)) +(define y (cons 'c 'd)) +(g x) +(g x) +(g y) +(g y) +(set! y #f) +(collect 0 0) +(unregister-guardian g) ;=> ((a . b) (a . b)) +(g) ;=> (c . d) +(g) ;=> (c . d) +(g) ;=> #f +\endschemedisplay + +\scheme{unregister-guardian} can also be used to unregister ftype +pointers registered with guardians created by +\index{\scheme{ftype-guardian}}\scheme{ftype-guardian} +(Section~\ref{SECTTHREADFTYPEGUARDIANS}). + + \section{Locking Objects\label{SECTSMGMTLOCKING}} All pointers from C variables or data structures to Scheme objects diff --git a/csug/syntax.stex b/csug/syntax.stex index b22950adb6..d3f67ebd15 100644 --- a/csug/syntax.stex +++ b/csug/syntax.stex @@ -1767,7 +1767,7 @@ marked \scheme{profile} are used for profiling. \entryheader \formdef{make-source-object}{\categoryprocedure}{(make-source-object \var{sfd} \var{bfp} \var{efp})} \formdef{make-source-object}{\categoryprocedure}{(make-source-object \var{sfd} \var{bfp} \var{efp} \var{line} \var{column})} -\returns a source-object +\returns a source object \listlibraries \endentryheader @@ -2007,3 +2007,167 @@ Adjust this parameter to control the way that source locations are extracted from source objects, possibly using recorded information, caches, and the filesystem in a way different from \scheme{locate-source-object-object}. + + +\section{Source Tables\label{SECTSYNTAXSOURCETABLES}} + +Source tables provide an efficient way to associate information +with source objects both in memory and on disk, such as the coverage information +saved to \scheme{.covin} files when +\index{\scheme{generate-covin-files}}\scheme{generate-covin-files} is +set to \scheme{#t} +and the profile counts associated with source objects by +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} +(Section~\ref{SECTMISCPROFILE}). + +Source tables are manipulated via hashtable-like accessors and setters +(Section~\ref{SECTMISCHASHTABLES}, {\TSPLFOUR} Section~\ref{TSPL:SECTHASHTABLES}), e.g., +\index{\scheme{source-table-ref}}\scheme{source-table-ref} and \index{\scheme{source-table-set!}}\scheme{source-table-set!}. +They can be saved to files via +\index{\scheme{put-source-table}}\scheme{put-source-table} +and restored via +\index{\scheme{get-source-table!}}\scheme{get-source-table!}. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{make-source-table}{\categoryprocedure}{(make-source-table)} +\returns a source table +\listlibraries +\endentryheader + +A source table contains associations between source objects and arbitrary +values. For purposes of the source-table operations described below, two +source objects are the same if they have the same source-file descriptor, +equal beginning file positions and equal ending file positions. +Two source-file descriptors are the same if they have the same path and +checksum. + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table?}{\categoryprocedure}{(source-table? \var{obj})} +\returns \scheme{#t} if \var{obj} is a source-table; \scheme{#f} otherwise +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-set!}{\categoryprocedure}{(source-table-set! \var{source-table} \var{source-object} \var{obj})} +\returns unspecified +\listlibraries +\endentryheader + +\scheme{source-table-set!} associates \var{source-object} +with \var{obj} in \var{source-table}, replacing the +existing association, if any. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-ref}{\categoryprocedure}{(source-table-ref \var{source-table} \var{source-object} \var{default})} +\returns see below +\listlibraries +\endentryheader + +\noindent +\var{default} may be any Scheme value. + +\scheme{source-table-ref} returns the value +associated with \var{source-object} in \var{source-table}. +If no value is associated with \var{source-object} in \var{source-table}, +\scheme{source-table-ref} returns \var{default}. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-contains?}{\categoryprocedure}{(source-table-contains? \var{source-table} \var{source-object})} +\returns \scheme{#t} if an association for \var{source-object} exists in \var{source-table}, \scheme{#f} otherwise +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-cell}{\categoryprocedure}{(source-table-cell \var{source-table} \var{source-object} \var{default})} +\returns a pair (see below) +\listlibraries +\endentryheader + +\noindent +\var{default} may be any Scheme value. + +If no value is associated with \var{source-object} in \var{source-table}, +\scheme{source-table-cell} modifies \var{source-table} to associate \var{source-object} with +\var{default}. +Regardless, it returns a pair whose car is \var{source-object} and whose cdr is +the associated value. +Changing the cdr of this pair effectively updates the table to +associate \var{source-object} with a new value. +The car field of the pair should not be modified. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-delete!}{\categoryprocedure}{(source-table-delete! \var{source-table} \var{source-object})} +\returns unspecified +\listlibraries +\endentryheader + +\scheme{source-table-delete!} drops the association +for \var{source-object} from \var{source-table}, if +one exists. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-size}{\categoryprocedure}{(source-table-size \var{source-table})} +\returns the number of entries in \var{source-table} +\listlibraries +\endentryheader + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{put-source-table}{\categoryprocedure}{(put-source-table \var{textual-output-port} \var{source-table})} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +This procedure writes a representation of the information stored in \var{source-table} to the port. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{get-source-table!}{\categoryprocedure}{(get-source-table! \var{textual-input-port} \var{source-table})} +\formdef{get-source-table!}{\categoryprocedure}{(get-source-table! \var{textual-input-port} \var{source-table} \var{combine})} +\returns unspecified +\listlibraries +\endentryheader + +The port must be positioned at a representation of source-table +information written by some previous call to \scheme{put-source-table}, +which reads the information and merges it into \scheme{source-table}. + +If present and non-false, \var{combine} must be a procedure and +should accept two arguments. +It is called whenever associations for the same source object are +present both in \var{source-table} and in the information read from +the port. +In this case, \var{combine} is passed two arguments: the associated +value from \var{source-table} and the associated value from the +port (in that order) and must return one value, which is recorded +as the new associated value for the source object in \var{source-table}. + +If \var{combine} is not present, \var{combine} is \scheme{#f}, or +no association for a source object read from the port already exists +in \var{source-table}, the value read from the port is recorded as +the associated value of the source object in \var{source-table}. + +\schemedisplay +(define st (make-source-table)) +(call-with-port (open-input-file "profile.out1") + (lambda (ip) (get-source-table! ip st))) +(call-with-port (open-input-file "profile.out2") + (lambda (ip) (get-source-table! ip st +))) +\endschemedisplay diff --git a/csug/system.stex b/csug/system.stex index 46f8cb74b0..f425ffa019 100644 --- a/csug/system.stex +++ b/csug/system.stex @@ -521,6 +521,8 @@ It is generally not a good idea, therefore, to establish handlers for memory faults, illegal instructions, and the like, since the code that causes the fault or illegal instruction will continue to execute (presumably erroneously) for some time before the handler is invoked. +A finite amount of storage is used to buffer as-yet unhandled +signals, after which additional signals are dropped. \scheme{register-signal-handler} is supported only on Unix-based systems. @@ -979,6 +981,52 @@ The parameter \scheme{source-directories} (Section~\ref{SECTSYSTEMSOURCE}) determines the set of directories searched for source files not identified by absolute path names. +%---------------------------------------------------------------------------- + +\entryheader +\formdef{verify-loadability}{\categoryprocedure}{(verify-loadability \var{situation} \var{input} \dots)} +\returns unspecified +\listlibraries +\endentryheader + +\noindent +\var{situation} must be one of the symbols \scheme{visit}, \scheme{revisit}, or \scheme{load}. +Each \var{input} must be a string pathname or a pair of a string pathname and a library search path. +Each of the pathnames should name a file containing object code for a set of libraries and +top-level programs, such as would be produced by +\index{\scheme{compile-program}}\scheme{compile-program}, +\index{\scheme{compile-library}}\scheme{compile-library}, +\index{\scheme{compile-whole-program}}\scheme{compile-whole-program}, +or +\index{\scheme{compile-whole-library}}\scheme{compile-whole-library}. +A library search path must be a suitable argument for +\index{\scheme{library-directories}}\scheme{library-directories}. + +\scheme{verify-loadability} verifies, without actually loading any +code or definining any libraries, whether the object files named +by the specified pathnames and their library dependencies, direct +or indirect, are present, readable, and mutually compatible. +The type of dependencies for each named object file is determined +by the \var{situation} argument: compile-time dependencies for +\var{visit}, run-time dependencies for \var{revisit} and both for +\var{load}. + +For each input pathname that is paired with a search path, +the \scheme{library-directories} parameter is parameterized to the +library search path during the recursive search for dependencies +of the programs and libraries found in the object file named by the +pathname. + +If \scheme{verify-loadabilty} finds a problem, such as a missing +library dependency or compilation-instance mismatch, it raises an +exception with an appropriate condition. +Otherwise, it returns an unspecified value. + +Since \scheme{verify-loadability} does not load or run any code +from the files it processes, it cannot determine whether errors +unrelated to missing or unreadable files or mutual compatibility +will occur when the files are actually loaded. + %---------------------------------------------------------------------------- \entryheader @@ -996,6 +1044,45 @@ of \var{input-port} as previously created by functions like \scheme{compile-file The return value is the value of the last expression whose compiled form is in \var{input-port}. If \var{input-port} is empty, then the result value is unspecified. +The port is left at end-of-file but is not closed. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{visit-compiled-from-port}{\categoryprocedure}{(visit-compiled-from-port \var{input-port})} +\returns result of the last compiled expression processed +\listlibraries +\endentryheader + +\noindent +\scheme{visit-compiled-from-port} reads and evaluates the object-code contents +of \var{input-port} as previously created by functions like \scheme{compile-file}, +\scheme{compile-script}, \scheme{compile-library}, and +\scheme{compile-to-port}. In the process, it skips any revisit (run-time-only) code. + +The return value is the value of the last expression whose last non-revisit compiled +form is in \var{input-port}. If there are no such forms, then the +result value is unspecified. +The port is left at end-of-file but is not closed. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{revisit-compiled-from-port}{\categoryprocedure}{(revisit-compiled-from-port \var{input-port})} +\returns result of the last compiled expression processed +\listlibraries +\endentryheader + +\noindent +\scheme{revisit-compiled-from-port} reads and evaluates the object-code contents +of \var{input-port} as previously created by functions like \scheme{compile-file}, +\scheme{compile-script}, \scheme{compile-library}, and +\scheme{compile-to-port}. In the process, it skips any visit (compile-time-only) code. + +The return value is the value of the last expression whose last non-visit compiled +form is in \var{input-port}. If there are no such forms, then the +result value is unspecified. +The port is left at end-of-file but is not closed. %---------------------------------------------------------------------------- @@ -1128,6 +1215,7 @@ cp0-outer-unroll-limit generate-inspector-information generate-procedure-source-information compile-profile +generate-covin-files generate-interrupt-trap enable-cross-library-optimization enable-arithmetic-left-associative @@ -1340,7 +1428,23 @@ The libraries incorporated into the resulting object file are visible (for use by \scheme{environment} and \scheme{eval}) if the \var{libs-visible?} argument is supplied and non-false. Any library incorporated into the resulting object file and required by -an object file left to be loaded at run time is also visible. +an object file left to be loaded at run time is also visible, as are any +libraries the object file depends upon, regardless of the value of +\var{libs-visible?}. + +\scheme{compile-whole-program} linearizes the initialization code for the +set of incorporated libraries in a way that respects static +dependencies among the libraries but not necessary dynamic dependencies +deriving from initialization-time uses of \scheme{environment} +or \scheme{eval}. +Additional static dependencies can be added in most cases to force +an ordering that allows the dynamic imports to succeed, +though not in general since a different order might be required each +time the program is run. +Adding a static dependency of one library on a second requires +adding an import of the second in the first as well as a run-time +reference to one of the variables exported by the second in the +body of the first. \var{input-filename} and \var{output-filename} must be strings. \var{input-filename} must identify a wpo file, and a wpo or object @@ -1378,35 +1482,44 @@ all libraries are automatically made visible, and a new wpo file is produced (when \scheme{generate-wpo-files} is \scheme{#t}) as well as an object file for the resulting combination of libraries. +The comment in the description of \scheme{compile-whole-program} +about the effect of initialization-code linearization on dynamic +dependencies applies to \scheme{compile-whole-library} as well. + %---------------------------------------------------------------------------- \entryheader \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port})} \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd})} \formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd} \var{wpo-port})} +\formdef{compile-port}{\categoryprocedure}{(compile-port \var{input-port} \var{output-port} \var{sfd} \var{wpo-port} \var{covop})} \returns unspecified \listlibraries \endentryheader \noindent \var{input-port} must be a textual input port. -\var{output-port} and, if present, \var{wpo-port} must be binary output ports. -If present, \var{sfd} must be a source-file descriptor. +\var{output-port} and, if present and non-false, \var{wpo-port} must be binary output ports. +If present and non-false, \var{sfd} must be a source-file descriptor. +If present and non-false, \var{covop} must be a textual output port. \scheme{compile-port} is like \scheme{compile-file} except that it takes input from an arbitrary textual input port and sends output to an arbitrary binary output port. -If \var{sfd} is present, it is passed to the reader so that source information +If \var{sfd} is supplied, it is passed to the reader so that source information can be associated with the expressions read from \var{input-port}. It is also used to associate block-profiling information with the input file name encapsulated within \var{sfd}. -If \var{wpo-port} is present, it sends whole-program optimization information -to \var{wpo-port} for use by \scheme{compile-whole-program}. +If \var{wpo-port} is supplied, \scheme{compile-port} sends whole-program optimization information +to \var{wpo-port} for use by \scheme{compile-whole-program}, as if +(and regardless of whether) \scheme{generate-wpo-files} is set. +If \var{covop} is supplied, \scheme{compile-port} sends coverage information to +\var{covop}, as if (and regardless of whether) \scheme{generate-covin-files} is set. -None of the ports is closed automatically after compilation; it is assumed -that the program that opens the ports and invokes \scheme{compile-port} +The ports are closed automatically after compilation under the assumption +the program that opens the ports and invokes \scheme{compile-port} will take care of closing the ports. -The output will be compressed only if \var{binary-output-port} is set up -to do compression, e.g., if it was opened with the \scheme{compressed} +Output will be compressed only if an output port is already set up to be +compressed, e.g., if it was opened with the \scheme{compressed} file option. %---------------------------------------------------------------------------- @@ -1414,6 +1527,7 @@ file option. \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port})} \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd})} \formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd} \var{wpo-port})} +\formdef{compile-to-port}{\categoryprocedure}{(compile-to-port \var{obj-list} \var{output-port} \var{sfd} \var{wpo-port} \var{covop})} \returns see below \listlibraries \endentryheader @@ -1433,15 +1547,17 @@ input from a list of objects and sends output to an arbitrary binary output port. \var{sfd} is used to associate block-profiling information with the input file name encapsulated within \var{sfd}. -If \var{wpo-port} is present, it sends whole-program optimization information -to \var{wpo-port} for use by \scheme{compile-whole-program}. +If \var{wpo-port} is present, \var{compile-to-port} sends whole-program optimization information +to \var{wpo-port} for use by \scheme{compile-whole-program}, as if +(and regardless of whether) \scheme{generate-wpo-files} is set. +If \var{covop} is present, \var{compile-to-port} sends coverage information to +\var{covop}, as if (and regardless of whether) \scheme{generate-covin-files} is set. -The output port is not closed automatically after compilation; it is assumed -that the program that opens the port and invokes \scheme{compile-to-port} +The ports are not closed automatically after compilation under the assumption +the program that opens the port and invokes \scheme{compile-to-port} will take care of closing the port. - -The output will be compressed only if \var{binary-output-port} is set up -to do compression, e.g., if it was opened with the \scheme{compressed} +Output will be compressed only if an output port is already set up to be +compressed, e.g., if it was opened with the \scheme{compressed} file option. When \var{obj-list} contains a single list-structured element whose @@ -1479,6 +1595,21 @@ first-element is the symbol \scheme{top-level-program}, program requires at run time, as with \scheme{compile-program}. Otherwise, the return value is unspecified. +%---------------------------------------------------------------------------- +\entryheader +\formdef{concatenate-object-files}{\categoryprocedure}{(concatenate-object-files \var{out-file} \var{in-file_1} \var{in-file_2} \dots)} +\returns unspecified +\listlibraries +\endentryheader + +\var{out-file} and each \var{in-file} must be strings. + +\scheme{concatenate-object-files} combines the header information +contained in the object files named by each \var{in-file}. It then +writes the combined header information to the file named by +\var{out-file}, followed by the remaining object code from each +input file in turn. + %---------------------------------------------------------------------------- \entryheader \formdef{make-boot-file}{\categoryprocedure}{(make-boot-file \var{output-filename} \var{base-boot-list} \var{input-filename} \dots)} @@ -2977,12 +3108,17 @@ With source profiling enabled, the compiler instruments the code it produces to count the number of times each source-code expression is executed. This information can be -displayed in HTML format or packaged in a list for -arbitrary user-defined processing. +displayed in HTML format, or it can be packaged in a list or +source table for arbitrary user-defined processing. It can also be dumped to a file to be loaded subsequently into the compiler's database of profile information for use in source-level optimizations, such as reordering the clauses of a \scheme{case} or \scheme{exclusive-cond} form. +In connection with coverage-information (covin) files generated by the +compiler when +\index{\scheme{generate-covin-files}}\scheme{generate-covin-files} +is \scheme{#t}, profile information can also be used to gauge coverage +of a source-code base by a set of tests. The association between source-code expressions and profile counts is usually established via annotations produced by the reader and @@ -3248,6 +3384,29 @@ counters explicitly via the procedure \index{\scheme{profile-release-counters}}\scheme{profile-release-counters}. +%---------------------------------------------------------------------------- +\entryheader +\formdef{generate-covin-files}{\categorythreadparameter}{generate-covin-files} +\listlibraries +\endentryheader + +When this parameter is set to \scheme{#t}, the compiler generates +``coverage-information'' (covin) files that can be used in connection with +profile information to measure coverage of a source-code base by a +set of tests. +One covin file is created for each object file, with the object-file +extension replaced by the extension \scheme{.covin}. +Each covin file contains the printed representation of a source table +(Section~\ref{SECTSYNTAXSOURCETABLES}), compressed when the parameter +\scheme{compile-compressed} is true, mapping each profiled source +expression found during the compilation of the corresponding source +file to a count of zero. +This information can be read via +\index{\scheme{get-source-table!}}\scheme{get-source-table!} and used +as a universe of source expressions to identify source expressions +that are not evaluated during the running of a set of tests. + + \entryheader \formdef{profile}{\categorysyntax}{(profile \var{source-object})} \returns unspecified @@ -3327,6 +3486,62 @@ descriptors. It might be used, for example, to dump profile information to a fasl file on one machine for subsequent processing on another. +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} +can be used to obtain the same set of counts as a source table. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{with-profile-tracker}{\categoryprocedure}{(with-profile-tracker \var{thunk})} +\formdef{with-profile-tracker}{\categoryprocedure}{(with-profile-tracker \var{preserve-existing?} \var{thunk})} +\returns a source table and the values returned by \var{thunk} +\listlibraries +\endentryheader + +\var{thunk} must be a procedure and should accept zero arguments. +It may return any number of values. + +\scheme{with-profile-tracker} invokes \var{thunk} without arguments. +If \var{thunk} returns $n$ values \scheme{\var{x_1}, \var{x_2}, \dots, \var{x_n}}, \scheme{with-profile-tracker} +returns $n+1$ values \scheme{\var{st}, \var{x_1}, \var{x_2}, \dots, \var{x_n}}, where \var{st} is a +source table associating source objects with profile counts. +If \var{preserve-existing?} is absent or \scheme{#f}, each count +represents the number of times the source expression represented +by the associated source object is evaluated during the invocation +of \var{thunk}. +Otherwise, each count represents the number of times the source +expression represented by the associated source object is evaluated +before or during the invocation of \var{thunk}. + +Profile data otherwise cleared by a call to +\index{\scheme{profile-clear}}\scheme{profile-clear} or +\index{\scheme{profile-release-counters}}\scheme{profile-release-counters} +during the invocation of \var{thunk} is included in the +resulting table. +That is, invoking these procedures while \var{thunk} is running has +no effect on the resulting counts. +On the other hand, profile data cleared before \scheme{with-profile-tracker} +is invoked is not included in the resulting table. + +The idiom \scheme{(with-profile-tracker #t values)} can be used to obtain +the current set of profile counts as a source table. + + +%---------------------------------------------------------------------------- +\entryheader +\formdef{source-table-dump}{\categoryprocedure}{(source-table-dump \var{source-table})} +\returns a list of pairs of source objects and their associated values in \var{source-table} +\listlibraries +\endentryheader + +This procedure can be used to convert a source-table produced by +\index{\scheme{with-profile-tracker}}\scheme{with-profile-tracker} or some other mechanism into the form returned +by \index{\scheme{profile-dump}}\scheme{profile-dump} for use as an argument to +\index{\scheme{profile-dump-html}}\scheme{profile-dump-html}, +\index{\scheme{profile-dump-list}}\scheme{profile-dump-list}, +or +\index{\scheme{profile-dump-data}}\scheme{profile-dump-data}. + %---------------------------------------------------------------------------- \entryheader \formdef{profile-dump-html}{\categoryprocedure}{(profile-dump-html)} diff --git a/csug/threads.stex b/csug/threads.stex index 1ab3ff3f32..e964a78f3d 100644 --- a/csug/threads.stex +++ b/csug/threads.stex @@ -460,6 +460,14 @@ When the count reaches zero, the object is no longer needed and the memory it formerly occupied can be made available for some other purpose. +Ftype guardians are similar to guardians created by +\index{\scheme{make-guardian}}\scheme{make-guardian} +(Section~\ref{SECTGUARDWEAKPAIRS}). +The \index{\scheme{guardian?}}\scheme{guardian?} procedure returns +true for both, and the +\index{\scheme{unregister-guardian}}\scheme{unregister-guardian} +procedure can be used to unregister objects registered with either. + \entryheader \formdef{ftype-guardian}{\categorysyntax}{(ftype-guardian \var{ftype-name})} \returns a new ftype guardian @@ -559,6 +567,7 @@ objects whose reference counts should also be incremented upon allocation of the containing object and decremented upon freeing of the containing object. + \section{Thread Parameters\label{SECTTHREADPARAMETERS}} %---------------------------------------------------------------------------- diff --git a/csug/use.stex b/csug/use.stex index e0fe4f5dbb..521f96ab4d 100644 --- a/csug/use.stex +++ b/csug/use.stex @@ -1538,9 +1538,8 @@ libraries have been built and Scheme source files have been compiled to object code. Although not strictly necessary, we suggest that you concatenate your -object files, if you have more than one, into a single object file. -This may be done on Unix systems simply via the \scheme{cat} -program or on Windows via \scheme{copy}. +object files, if you have more than one, into a single object file +via the \scheme{concatenate-object-files} procedure. Placing all of the object code into a single file simplifies both building and distribution of applications. diff --git a/makefiles/Makefile-workarea.in b/makefiles/Makefile-workarea.in index 8aa0f98882..e330fd7d08 100644 --- a/makefiles/Makefile-workarea.in +++ b/makefiles/Makefile-workarea.in @@ -16,32 +16,48 @@ MAKEFLAGS += --no-print-directory PREFIX= +.PHONY: build build: (cd c && $(MAKE)) (cd s && $(MAKE) bootstrap) +.PHONY: install install: build $(MAKE) -f Mf-install +.PHONY: uninstall uninstall: $(MAKE) -f Mf-install uninstall +.PHONY: test test: build (cd mats && $(MAKE) allx) @echo "test run complete. check $(PREFIX)mats/summary for errors." +.PHONY: coverage +coverage: + rm -f s/bootstrap + (cd c && $(MAKE)) + (cd s && $(MAKE) bootstrap p=t c=t) + (cd mats && $(MAKE) allx c=t) + +.PHONY: bootfiles bootfiles: build $(MAKE) -f Mf-boot -create-bintar: build +.PHONY: bintar +bintar: build (cd bintar && $(MAKE)) -create-rpm: create-bintar +.PHONY: rpm +rpm: bintar (cd rpm && $(MAKE)) -create-pkg: create-bintar +.PHONY: pkg +pkg: bintar (cd pkg && $(MAKE)) +.PHONY: clean clean: rm -f petite.1 scheme.1 (cd s && $(MAKE) clean) diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in index 882e49fb7f..3c4ce64a2f 100644 --- a/makefiles/Makefile.in +++ b/makefiles/Makefile.in @@ -15,50 +15,68 @@ MAKEFLAGS += --no-print-directory +.PHONY: build build: (cd $(workarea) && $(MAKE) build) +.PHONY: run run: env SCHEMEHEAPDIRS=$(workarea)/boot/$(m) $(workarea)/bin/$(m)/scheme +.PHONY: install install: (cd $(workarea) && $(MAKE) install) +.PHONY: uninstall uninstall: (cd $(workarea) && $(MAKE) uninstall) +.PHONY: test test: (cd $(workarea) && $(MAKE) test PREFIX=$(workarea)/) +.PHONY: coverage +coverage: + (cd $(workarea) && $(MAKE) coverage) + +.PHONY: bootfiles bootfiles: (cd $(workarea) && $(MAKE) bootfiles) # Supply XM= to build boot files for +.PHONY: boot boot: build mkdir -p boot/$(XM) (cd $(workarea) && $(MAKE) -f Mf-boot $(XM).boot) # Supply ORIG= to build using existing at +.PHONY: from-orig from-orig: (cd $(m)/s && $(MAKE) -f Mf-cross m=$(m) xm=$(m) base=$(ORIG)/$(m)) $(MAKE) build +.PHONY: docs docs: build (cd csug && $(MAKE) m=$(m)) (cd release_notes && $(MAKE) m=$(m)) -create-bintar: - (cd $(workarea) && $(MAKE) create-bintar) +.PHONY: bintar +bintar: + (cd $(workarea) && $(MAKE) bintar) -create-rpm: - (cd $(workarea) && $(MAKE) create-rpm) +.PHONY: rpm +rpm: + (cd $(workarea) && $(MAKE) rpm) -create-pkg: - (cd $(workarea) && $(MAKE) create-pkg) +.PHONY: pkg +pkg: + (cd $(workarea) && $(MAKE) pkg) +.PHONY: clean clean: (cd $(workarea) && $(MAKE) clean) +.PHONY: distclean distclean: (cd csug && if [ -e Makefile ] ; then $(MAKE) reallyreallyclean ; fi) rm -f csug/Makefile diff --git a/mats/4.ms b/mats/4.ms index a1f983e722..7844eff69f 100644 --- a/mats/4.ms +++ b/mats/4.ms @@ -452,7 +452,7 @@ ; make sure no collection occurs before profile data is dumped (parameterize ([compile-profile #t] [collect-request-handler void]) (load "testfile.ss" compile) - (profile-dump-data "testfile.pd")) + (profile-dump-data "testfile.pd" (remp preexisting-profile-dump-entry? (profile-dump)))) ; make sure collections are restarted (collect))) "(11 10 1 10 0)\n") @@ -467,6 +467,17 @@ (begin (profile-clear-database) #t) + (begin + (profile-load-data "testfile.pd" "testfile.pd") + #t) + (equal? + (with-output-to-string + (lambda () + (load "testfile.ss" compile))) + "(1 11 1 10 0)\n") + (begin + (profile-clear-database) + #t) ) (mat case @@ -560,7 +571,7 @@ (parameterize ([compile-profile #t]) (load "testfile.ss" compile)))) "AAAAAAAAAAB") (begin - (profile-dump-data "testfile.pd") + (profile-dump-data "testfile.pd" (remp preexisting-profile-dump-entry? (profile-dump))) (profile-load-data "testfile.pd") #t) (equal? @@ -4194,8 +4205,53 @@ (let ([v (make-self #f)]) (self-v-set! v v) (check-self-referencing v self-v))) - ) + (parameterize ([collect-request-handler void]) + (define (get-all g) (let ([q (g)]) (if q (cons q (get-all g)) '()))) + (module (insist) + (define ($insist e? expr expected got) + (unless (e? got expected) + (errorf #f "expected ~s to return ~s, got ~s" expr expected got))) + (define-syntax insist + (syntax-rules () + [(_ ?e? ?expr ?expected) + ($insist ?e? '?expr ?expected ?expr)]))) + (let ([g1 (make-guardian)] [g2 (make-guardian)]) + (let ([x (box (cons 'a 'b))] [y (box (cons 'c 'd))]) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (g1 (unbox x)) + (g1 (unbox y)) + (g2 (unbox x)) + (g1 (unbox y)) + (g1 (unbox x)) + (collect 0 0) + (g2 (unbox x)) + (g1 (cons 'e 'f)) + (g2 (unbox x)) + (g1 (unbox x)) + (g2 (cons 'g 'h)) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (let ([q (unregister-guardian g2)]) + (unless (and (= (length q) 4) (equal? (remove '(g . h) q) (list (unbox x) (unbox x) (unbox x)))) + (errorf #f "expected (unregister-guardian g2) to contain x = (a . b), x = (a . b), and (g . h), got ~s" q))) + (insist eq? (unregister-guardian g2) '()) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (collect 0 0) + (insist equal? (get-all g1) '((e . f))) + (insist eq? (get-all g2) '()) + (g2 (unbox x)) + (set-box! x #f) + (collect 0 0) + (insist equal? (get-all g1) '((a . b) (a . b) (a . b))) + (insist equal? (get-all g2) '((a . b))) + (insist equal? (unregister-guardian g1) '((c . d) (c . d))) + (insist eq? (unregister-guardian g2) '()) + (pretty-print (list g1 g2 x y)))) ; keep 'em live + #t) + ) (mat refcount-guardians (error? ; unrecognized ftype @@ -4336,6 +4392,86 @@ (assert (not (regular-g))) (assert (not (g))) #t)) + + (parameterize ([collect-request-handler void]) + (define-ftype A (struct (refcount iptr) (uid int))) + (define (get-all g) + (let ([a (g)]) + (if a + (begin + (unless (eqv? (ftype-ref A (refcount) a) 0) + (errorf 'get-all "nonzero refcount ~s, uid ~s" (ftype-ref A (refcount) a) (ftype-ref A (uid) a))) + (cons a (get-all g))) + '()))) + (module (insist) + (define ($insist e? expr expected got) + (unless (e? got expected) + (errorf #f "expected ~s to return ~s, got ~s" expr expected got))) + (define-syntax insist + (syntax-rules () + [(_ ?e? ?expr ?expected) + ($insist ?e? '?expr ?expected ?expr)]))) + (define (get-uid a) (ftype-ref A (uid) a)) + (define (fritter addr refcount uid) + (let ([a (make-ftype-pointer A addr)]) + (ftype-set! A (refcount) a refcount) + (ftype-set! A (uid) a uid) + (box a))) + (let ([x-addr (foreign-alloc (ftype-sizeof A))] [y-addr (foreign-alloc (ftype-sizeof A))] [z-addr (foreign-alloc (ftype-sizeof A))]) + (let ([x1 (fritter x-addr 6 73)] [x2 (box (make-ftype-pointer A x-addr))] [y (fritter y-addr 2 57)] [z (fritter z-addr 2 91)]) + (let ([g1 (ftype-guardian A)] [g2 (ftype-guardian A)]) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (g1 (unbox x1)) + (g2 (unbox x1)) + (g1 (unbox x1)) + (g1 (unbox x2)) + (g2 (unbox x1)) + (g1 (unbox y)) + (g1 (unbox y)) + (g2 (unbox z)) + (g1 (unbox z)) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (let ([q (unregister-guardian g2)]) + (define (decr-refcount! a) (ftype-locked-decr! A (refcount) a)) + (unless (and (= (length q) 3) (memq (unbox x1) (memq (unbox x1) q)) (memq (unbox z) q)) + (errorf #f "expected (unregister-guardian g2) to contain x/uid 73, x/uid 73, and z/uid 91, got ~s" (map get-uid q))) + (map decr-refcount! q)) + (insist eq? (unregister-guardian g2) '()) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (pretty-print z) ; keep it live + (set-box! z #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(91)) + (insist eq? (get-all g2) '()) + (g2 (unbox x1)) + (pretty-print x1) ; keep it live + (set-box! x1 #f) + (collect 0 0) + (insist eq? (get-all g1) '()) + (insist eq? (get-all g2) '()) + (insist eq? (unregister-guardian g2) '()) + (insist eqv? (ftype-ref A (refcount) (unbox x2)) 1) + (pretty-print x2) ; keep it live + (set-box! x2 #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(73)) + (insist equal? (map get-uid (get-all g2)) '()) + (insist eq? (unregister-guardian g2) '()) + (pretty-print y) ; keep it live + (set-box! y #f) + (collect 0 0) + (insist equal? (map get-uid (get-all g1)) '(57)) + (insist equal? (map get-uid (get-all g2)) '()) + (insist eq? (unregister-guardian g1) '()) + (insist eq? (unregister-guardian g2) '()) + (pretty-print (list g1 g2 x y)))) ; keep 'em live + (foreign-free x-addr) + (foreign-free y-addr) + (foreign-free z-addr)) + #t) ) (mat weak-cons diff --git a/mats/5_3.ms b/mats/5_3.ms index e1b37e629c..2c88eec50c 100644 --- a/mats/5_3.ms +++ b/mats/5_3.ms @@ -3080,6 +3080,107 @@ (eqv? (ash #x-8000000000000000 -31) #x-100000000) (eqv? (ash #x-8000000000000000 -32) #x-80000000) (eqv? (ash #x-8000000000000000 -33) #x-40000000) + (begin + (define ($test-right-shift srl) + (define ($go q x n expected) + (let ([got (srl x n)]) + (unless (eqv? got expected) + (syntax-error q (format "expected ~x, got ~x" expected got))))) + (define-syntax go + (lambda (q) + (syntax-case q () + [(_ x n expected) #`($go #'#,q x n expected)]))) + (let* ([$x (expt 2 1024)] + [$-x (- $x)] + [$x+1 (+ $x 1)] + [$-x-1 (- $x+1)] + [$x-1 (- $x 1)] + [$-x+1 (- $x-1)] + [$x+8 (+ $x 8)] + [$-x-8 (- $x+8)] + [$x+2^31 (+ $x (expt 2 32))] + [$-x-2^31 (- $x+2^31)] + [$x+2^32 (+ $x (expt 2 32))] + [$-x-2^32 (- $x+2^32)] + [$x+2^40 (+ $x (expt 2 40))] + [$-x-2^40 (- $x+2^40)] + [$x+2^63 (+ $x (expt 2 63))] + [$-x-2^63 (- $x+2^63)] + [$x+2^65 (+ $x (expt 2 65))] + [$-x-2^65 (- $x+2^65)] + [$x*3/2 (ash 3 1023)] + [$-x*3/2 (- $x*3/2)] + ; answers + [$2^64 (expt 2 64)] + [$-2^64 (- $2^64)] + [$-2^64-1 (- -1 $2^64)] + [$x>>64 (expt 2 (- 1024 64))] + [$-x>>64 (- $x>>64)] + [$-x>>64-1 (- -1 $x>>64)] + [$x>>64+2 (+ $x>>64 2)] + [$-x>>64-2 (- $x>>64+2 )] + [$x>>80 (expt 2 (- 1024 80))] + [$-x>>80 (- $x>>80)] + [$-x>>80-1 (- -1 $x>>80)] + ) + (go $x 1024 1) + (go $-x 1024 -1) + (go $x 1025 0) + (go $-x 1025 -1) + (go $x+1 1024 1) + (go $-x-1 1024 -2) + (go $x+1 1025 0) + (go $-x-1 1025 -1) + (go $x (- 1024 64) $2^64) + (go $-x (- 1024 64) $-2^64) + (go $x+1 (- 1024 64) $2^64) + (go $-x-1 (- 1024 64) $-2^64-1) + (go $x+8 (- 1024 64) $2^64) + (go $-x-8 (- 1024 64) $-2^64-1) + (go $x+2^32 (- 1024 64) $2^64) + (go $-x-2^32 (- 1024 64) $-2^64-1) + (go $x+2^65 (- 1024 64) $2^64) + (go $-x-2^65 (- 1024 64) $-2^64-1) + (go $x 64 $x>>64) + (go $-x 64 $-x>>64) + (go $x+1 64 $x>>64) + (go $-x-1 64 $-x>>64-1) + (go $x+8 64 $x>>64) + (go $-x-8 64 $-x>>64-1) + (go $x+2^31 64 $x>>64) + (go $-x-2^31 64 $-x>>64-1) + (go $x+2^40 64 $x>>64) + (go $-x-2^40 64 $-x>>64-1) + (go $x+2^63 64 $x>>64) + (go $-x-2^63 64 $-x>>64-1) + (go $x+2^65 64 $x>>64+2) + (go $-x-2^65 64 $-x>>64-2) + (go $x 80 $x>>80) + (go $-x 80 $-x>>80) + (go $x+1 80 $x>>80) + (go $-x-1 80 $-x>>80-1) + (go $x+8 80 $x>>80) + (go $-x-8 80 $-x>>80-1) + (go $x+2^31 80 $x>>80) + (go $-x-2^31 80 $-x>>80-1) + (go $x+2^32 80 $x>>80) + (go $-x-2^32 80 $-x>>80-1) + (go $x+2^40 80 $x>>80) + (go $-x-2^40 80 $-x>>80-1) + (go $x+2^63 80 $x>>80) + (go $-x-2^63 80 $-x>>80-1) + (go $x+2^65 80 $x>>80) + (go $-x-2^65 80 $-x>>80-1) + (go $x*3/2 1023 3) + (go $-x*3/2 1023 -3) + (go $x*3/2 1024 1) + (go $-x*3/2 1024 -2) + (go $x*3/2 1025 0) + (go $-x*3/2 1025 -1) + ) + #t) + #t) + ($test-right-shift (lambda (x n) (ash x (- n)))) ) (mat bitwise-arithmetic-shift @@ -3135,6 +3236,7 @@ (eqv? (bitwise-arithmetic-shift 0 (- (expt 2 100))) 0) (eqv? (bitwise-arithmetic-shift 0 (expt 2 100)) 0) (eqv? (bitwise-arithmetic-shift 0 (expt 2 100)) 0) + ($test-right-shift (lambda (x n) (bitwise-arithmetic-shift x (- n)))) ) (mat bitwise-arithmetic-shift-left/right @@ -3182,6 +3284,7 @@ (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 31) #x-100000000) (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 32) #x-80000000) (eqv? (bitwise-arithmetic-shift-right #x-8000000000000000 33) #x-40000000) + ($test-right-shift (lambda (x n) (bitwise-arithmetic-shift-right x n))) ) (mat bitwise-bit-field @@ -6493,6 +6596,567 @@ (5 . 2/7) (-5 . -2/7) (-5 . 2/7) (5 . -2/7))) ) +(mat special-cases ; test special cases added Feb 2020 + (begin + (define $n 40910371311673474504209841881478505181983799806634563) + (define $-n (- $n)) + (define $q 40910371311673474504209841881478505181983799806634563/7312893582423593745243587) + (define $-q (- $q)) + (define $x 1.499423325079378e100) + (define $-x (- $x)) + (define $ez 3+4i) + (define $-ez (- $ez)) + (define $iz 3.0-4.0i) + (define $-iz (- $iz)) + #t) + (error? ; not a number + (div-and-mod 'bogus 1)) + (error? ; not a number + (div-and-mod 'bogus -1)) + (error? ; domain error + (div-and-mod $n 4+3i)) + (error? ; domain error + (div-and-mod 4+3i $n)) + (error? ; domain error + (div-and-mod 0 0)) + (error? ; domain error + (div-and-mod $n 0)) + (error? ; domain error + (div-and-mod $q 0)) + (error? ; not a number + (div 'bogus 1)) + (error? ; not a number + (div 'bogus -1)) + (error? ; domain error + (div $n 4+3i)) + (error? ; domain error + (div 4+3i $n)) + (error? ; domain error + (div 0 0)) + (error? ; domain error + (div $n 0)) + (error? ; domain error + (div $q 0)) + (error? ; not a number + (mod 'bogus 1)) + (error? ; not a number + (mod 'bogus -1)) + (error? ; domain error + (mod $n 4+3i)) + (error? ; domain error + (mod 4+3i $n)) + (error? ; domain error + (mod 0 0)) + (error? ; domain error + (mod $n 0)) + (error? ; domain error + (mod $q 0)) + (error? ; not a number + (div0-and-mod0 'bogus 1)) + (error? ; not a number + (div0-and-mod0 'bogus -1)) + (error? ; domain error + (div0-and-mod0 $n 4+3i)) + (error? ; domain error + (div0-and-mod0 4+3i $n)) + (error? ; domain error + (div0-and-mod0 0 0)) + (error? ; domain error + (div0-and-mod0 $n 0)) + (error? ; domain error + (div0-and-mod0 $q 0)) + (error? ; not a number + (div0 'bogus 1)) + (error? ; not a number + (div0 'bogus -1)) + (error? ; domain error + (div0 $n 4+3i)) + (error? ; domain error + (div0 4+3i $n)) + (error? ; domain error + (div0 0 0)) + (error? ; domain error + (div0 $n 0)) + (error? ; domain error + (div0 $q 0)) + (error? ; not a number + (mod0 'bogus 1)) + (error? ; not a number + (mod0 'bogus -1)) + (error? ; domain error + (mod0 $n 4+3i)) + (error? ; domain error + (mod0 4+3i $n)) + (error? ; domain error + (mod0 0 0)) + (error? ; domain error + (mod0 $n 0)) + (error? ; domain error + (mod0 $q 0)) + (error? ; not a number + (quotient 'bogus 1)) + (error? ; not a number + (quotient 'bogus -1)) + (error? ; domain error + (quotient $n 4+3i)) + (error? ; domain error + (quotient 4.5 $n)) + (error? ; domain error + (quotient 0 0)) + (error? ; domain error + (quotient $n 0)) + (error? ; domain error + (quotient 4.0 0)) + (error? ; not a number + (remainder 'bogus 1)) + (error? ; not a number + (remainder 'bogus -1)) + (error? ; domain error + (remainder $n 4+3i)) + (error? ; domain error + (remainder 4.5 $n)) + (error? ; domain error + (remainder 0 0)) + (error? ; domain error + (remainder $n 0)) + (error? ; domain error + (remainder 4.0 0)) + (error? ; not a number + (modulo 'bogus 1)) + (error? ; not a number + (modulo 'bogus -1)) + (error? ; domain error + (modulo $n 4+3i)) + (error? ; domain error + (modulo 4.5 $n)) + (error? ; domain error + (modulo 0 0)) + (error? ; domain error + (modulo $n 0)) + (error? ; domain error + (modulo 4.0 0)) + (error? ; not a number + (/ 'bogus 1)) + (error? ; not a number + (/ 'bogus -1)) + (error? ; domain error + (/ 0 0)) + (error? ; domain error + (/ $n 0)) + (error? ; domain error + (/ $q 0)) + (error? ; domain error + (/ $ez 0)) + (error? ; not a number + (* 'bogus 0)) + (error? ; not a number + (* 'bogus 1)) + (error? ; not a number + (* 'bogus -1)) + (error? ; not a number + (* 0 'bogus)) + (error? ; not a number + (* 1 'bogus)) + (error? ; not a number + (* -1 'bogus)) + (error? ; not a number + (+ 'bogus 0)) + (error? ; not a number + (+ 0 'bogus)) + (error? ; not a number + (- 'bogus 0)) + (error? ; not a number + (- 0 'bogus)) + (equal? (call-with-values (lambda () (div-and-mod $n 1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $n -1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $-n 1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div-and-mod $-n -1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div $n 1) (mod $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div $n -1) (mod $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div $-n 1) (mod $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div $-n -1) (mod $n -1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $n 1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $n -1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $-n 1)) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (div0-and-mod0 $-n -1)) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div0 $n 1) (mod0 $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (div0 $n -1) (mod0 $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div0 $-n 1) (mod0 $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (div0 $-n -1) (mod0 $n -1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (quotient $n 1) (remainder $n 1))) cons) `(,$n . 0)) + (equal? (call-with-values (lambda () (values (quotient $n -1) (remainder $n -1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (quotient $-n 1) (remainder $n 1))) cons) `(,$-n . 0)) + (equal? (call-with-values (lambda () (values (quotient $-n -1) (remainder $n -1))) cons) `(,$n . 0)) + (equal? (modulo $n 1) 0) + (equal? (modulo $n -1) 0) + (equal? (modulo $-n 1) 0) + (equal? (modulo $-n -1) 0) + (equal? (/ $n 1) $n) + (equal? (/ $n -1) $-n) + (equal? (/ $-n 1) $-n) + (equal? (/ $-n -1) $n) + (equal? (/ 0 $n) 0) + (equal? (/ 0 $-n) 0) + (equal? (/ $q 1) $q) + (equal? (/ $q -1) $-q) + (equal? (/ $-q 1) $-q) + (equal? (/ $-q -1) $q) + (equal? (/ $x 1) $x) + (equal? (/ $x -1) $-x) + (equal? (/ $-x 1) $-x) + (equal? (/ $-x -1) $x) + (equal? (/ $ez 1) $ez) + (equal? (/ $ez -1) $-ez) + (equal? (/ $-ez 1) $-ez) + (equal? (/ $-ez -1) $ez) + (equal? (/ $iz 1) $iz) + (equal? (/ $iz -1) $-iz) + (equal? (/ $-iz 1) $-iz) + (equal? (/ $-iz -1) $iz) + (equal? (* $n 1) $n) + (equal? (* $n -1) $-n) + (equal? (* $-n 1) $-n) + (equal? (* $-n -1) $n) + (equal? (* $n 0) 0) + (equal? (* $-n 0) 0) + (equal? (* $q 1) $q) + (equal? (* $q -1) $-q) + (equal? (* $-q 1) $-q) + (equal? (* $-q -1) $q) + (equal? (* $q 0) 0) + (equal? (* $-q 0) 0) + (equal? (* $x 1) $x) + (equal? (* $x -1) $-x) + (equal? (* $-x 1) $-x) + (equal? (* $-x -1) $x) + (equal? (* $x 0) 0) + (equal? (* $-x 0) 0) + (equal? (* $ez 1) $ez) + (equal? (* $ez -1) $-ez) + (equal? (* $-ez 1) $-ez) + (equal? (* $-ez -1) $ez) + (equal? (* $ez 0) 0) + (equal? (* $-ez 0) 0) + (equal? (* $iz 1) $iz) + (equal? (* $iz -1) $-iz) + (equal? (* $-iz 1) $-iz) + (equal? (* $-iz -1) $iz) + (equal? (* $iz 0) 0) + (equal? (* $-iz 0) 0) + (equal? (* 1 $n) $n) + (equal? (* -1 $n) $-n) + (equal? (* 1 $-n) $-n) + (equal? (* -1 $-n) $n) + (equal? (* 0 $n) 0) + (equal? (* 0 $-n) 0) + (equal? (* 1 $q) $q) + (equal? (* -1 $q) $-q) + (equal? (* 1 $-q) $-q) + (equal? (* -1 $-q) $q) + (equal? (* 0 $q) 0) + (equal? (* 0 $-q) 0) + (equal? (* 1 $x) $x) + (equal? (* -1 $x) $-x) + (equal? (* 1 $-x) $-x) + (equal? (* -1 $-x) $x) + (equal? (* 0 $x) 0) + (equal? (* 0 $-x) 0) + (equal? (* 1 $ez) $ez) + (equal? (* -1 $ez) $-ez) + (equal? (* 1 $-ez) $-ez) + (equal? (* -1 $-ez) $ez) + (equal? (* 0 $ez) 0) + (equal? (* 0 $-ez) 0) + (equal? (* 1 $iz) $iz) + (equal? (* -1 $iz) $-iz) + (equal? (* 1 $-iz) $-iz) + (equal? (* -1 $-iz) $iz) + (equal? (* 0 $iz) 0) + (equal? (* 0 $-iz) 0) + (equal? (+ $n 0) $n) + (equal? (+ $-n 0) $-n) + (equal? (+ 0 $n) $n) + (equal? (+ 0 $-n) $-n) + (equal? (+ $q 0) $q) + (equal? (+ $-q 0) $-q) + (equal? (+ 0 $q) $q) + (equal? (+ 0 $-q) $-q) + (equal? (+ $x 0) $x) + (equal? (+ $-x 0) $-x) + (equal? (+ 0 $x) $x) + (equal? (+ 0 $-x) $-x) + (equal? (+ $ez 0) $ez) + (equal? (+ $-ez 0) $-ez) + (equal? (+ 0 $ez) $ez) + (equal? (+ 0 $-ez) $-ez) + (equal? (+ $iz 0) $iz) + (equal? (+ $-iz 0) $-iz) + (equal? (+ 0 $iz) $iz) + (equal? (+ 0 $-iz) $-iz) + (equal? (- $n 0) $n) + (equal? (- $-n 0) $-n) + (equal? (- 0 $n) $-n) + (equal? (- 0 $-n) $n) + (equal? (- $q 0) $q) + (equal? (- $-q 0) $-q) + (equal? (- 0 $q) $-q) + (equal? (- 0 $-q) $q) + (equal? (- $x 0) $x) + (equal? (- $-x 0) $-x) + (equal? (- 0 $x) $-x) + (equal? (- 0 $-x) $x) + (equal? (- $ez 0) $ez) + (equal? (- $-ez 0) $-ez) + (equal? (- 0 $ez) $-ez) + (equal? (- 0 $-ez) $ez) + (equal? (- $iz 0) $iz) + (equal? (- $-iz 0) $-iz) + (equal? (- 0 $iz) $-iz) + (equal? (- 0 $-iz) $iz) + (equal? (- 0 (most-negative-fixnum)) (+ (most-positive-fixnum) 1)) +) + +(mat benchmarks + (let () + ; revert to the original values for benchmarking + (define runs 1 #;10) + (define iter 1 #;100000) + (define min-ns 0 #;#e25e7) + + (define time->ns + (lambda (t) + (+ (* (time-second t) 1000000000) (time-nanosecond t)))) + + (define mean + (lambda (ls) + (assert (not (null? ls))) + (/ (apply + ls) (length ls)))) + + (define stddev + (lambda (m ls) + (define (square x) (* x x)) + (sqrt (mean (map (lambda (x) (square (- x m))) ls))))) + + (define ($run-one expr th expected) + (define (do-big-iter) + (collect 0 0) + (let ([t0 (current-time 'time-monotonic)]) + (do ([iter iter (#3%fx- iter 1)] [ans #f (th)]) + ((#3%fx= iter 0) + (let ([t (time-difference t0 (current-time 'time-monotonic))]) + (unless (equal? ans expected) (errorf #f "oops ~s != ~s for ~s" ans expected expr)) + t))))) + (parameterize ([collect-request-handler void]) + (collect (collect-maximum-generation)) + ; warm up and calibrate number of ITERATIONS to at least meet min-ns + (let ([ITER (let loop ([ITER 1] [t (make-time 'time-duration 0 0)]) + (let ([t (time-difference t (do-big-iter))]) + (if (>= (time->ns t) min-ns) + ITER + (loop (fx+ ITER 1) t))))]) + (do ([run runs (#3%fx- run 1)] + [t* '() (cons + (let loop ([ITER ITER] [t (make-time 'time-duration 0 0)]) + (do ([ITER ITER (#3%fx- ITER 1)] + [t (make-time 'time-duration 0 0) (time-difference t (do-big-iter))]) + ((#3%fx= ITER 0) t))) + t*)]) + ((#3%fx= run 0) + (let ([ns* (map time->ns (reverse t*))]) + (let ([m (mean ns*)]) + (printf "~s\n" (vector expr (/ m ITER) (if (= m 0) 0 (/ (stddev m ns*) m)) ITER)) + (flush-output-port)))))))) + + (let () + (define (run sra) + (define-syntax run-one + (lambda (x) + (define prettify + (lambda (x) + (let-values ([(neg? x) (if (< x 0) (values #t (- x)) (values #f x))]) + (let ([s (format "~{~a~^+~}" + (let loop ([x x] [k 0] [ls '()]) + (let ([b (bitwise-first-bit-set x)]) + (if (= b -1) + ls + (let ([k (+ k b)]) + (loop (bitwise-arithmetic-shift-right x (fx+ b 1)) (fx+ k 1) + (cons (if (= k 0) "1" (format "2^~a" k)) ls)))))))]) + (if neg? (format "-(~a)" s) s))))) + (syntax-case x () + [(_ sra x k expected) + (with-syntax ([n (eval (datum x))]) + (with-syntax ([expr (format "(sra ~a ~s)" (prettify (datum n)) (datum k))]) + #'($run-one expr (lambda () (sra n k)) expected)))]))) + (printf "((iter . ~s) (min-ns . ~s))\n" iter min-ns) + (printf "(\n") + (run-one sra 1 1 0) + (run-one sra (ash 1 1024) 1024 1) + (run-one sra (ash 1 1024) 512 (ash 1 512)) + (run-one sra (- (ash 1 1024)) 1024 -1) + (run-one sra (- (ash 1 1024)) 512 (- (ash 1 512))) + (run-one sra (+ (ash 1 1024) 1) 1024 1) + (run-one sra (+ (ash 1 1024) 1) 512 (ash 1 512)) + (run-one sra (- (+ (ash 1 1024) 1)) 1024 -2) + (run-one sra (- (+ (ash 1 1024) 1)) 512 (- -1 (ash 1 512))) + (run-one sra (- (ash 1 1024)) 1024 -1) + (run-one sra (- (ash 1 1024)) 512 (- (ash 1 512))) + (run-one sra (ash 1 1024) 1025 0) + (run-one sra (- (ash 1 1024)) 1025 -1) + (run-one sra (ash 3 1023) 1024 1) + (run-one sra (- (ash 3 1023)) 1024 -2) + (run-one sra (ash 3 1023) 1025 0) + (run-one sra (- (ash 3 1023)) 1025 -1) + (run-one sra (ash 1 1000000) 1000000 1) + (run-one sra (- (ash 1 1000000)) 1000000 -1) + (run-one sra (ash 1 1000000) 1000001 0) + (run-one sra (- (ash 1 1000000)) 1000001 -1) + (run-one sra (ash 3 1000000) 1000001 1) + (run-one sra (- (ash 3 1000000)) 1000001 -2) + (run-one sra (ash 3 1000000) 1000002 0) + (run-one sra (- (ash 3 1000000)) 1000002 -1) + ; worst-case---only shifted-off one bit is in the middle + (run-one sra (- (+ (ash 1 1024) (ash 1 512))) 1024 -2) + ; shift by one bit + (run-one sra (ash 3 1000000) 1 (ash 3 999999)) + (run-one sra (- (ash 3 1000000)) 1 (- (ash 3 999999))) + (printf ")\n")) + + (run bitwise-arithmetic-shift-right) + (run (lambda (x k) (bitwise-arithmetic-shift x (- k)))) + (run (lambda (x k) (ash x (- k))))) + + (let () + (define (run) + (define $x 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789) + (define $y (* (most-positive-fixnum) 2)) + (define-syntax run-one + (syntax-rules () + [(_ expr expected) + ($run-one 'expr (lambda () expr) expected)] + [(_ expr expected ...) + ($run-one 'expr (lambda () (call-with-values (lambda () expr) list)) (list expected ...))])) + (define $2x (* 2 $x)) + (define $x+2 (+ $x 2)) + (define $-x (- $x)) + (define $x^4 (* $x $x $x $x)) + (define $-x^4 (- $x^4)) + (define $2y (* $y 2)) + (define $y+2 (+ $y 2)) + (printf "((iter . ~s) (min-ns . ~s) ($x . ~s) ($y . ~s))\n" iter min-ns $x $y) + (printf "(\n") + (run-one 0 0) + (run-one (* $x 0) 0) + (run-one (* $x^4 0) 0) + (run-one (* $x 1) $x) + (run-one (* $x^4 1) $x^4) + (run-one (* $x -1) $-x) + (run-one (* $x^4 -1) $-x^4) + (run-one (* 1 $x) $x) + (run-one (* 1 $x^4) $x^4) + (run-one (* -1 $x) $-x) + (run-one (* -1 $x^4) $-x^4) + (run-one (/ $x 1) $x) + (run-one (/ $x^4 1) $x^4) + (run-one (/ $x -1) $-x) + (run-one (/ $x^4 -1) $-x^4) + (run-one (+ $x 0) $x) + (run-one (+ $x^4 0) $x^4) + (run-one (- $x 0) $x) + (run-one (- $x^4 0) $x^4) + (run-one (+ 0 $x) $x) + (run-one (+ 0 $x^4) $x^4) + (run-one (- 0 $x) $-x) + (run-one (- 0 $x^4) $-x^4) + (run-one (quotient $x 1) $x) + (run-one (quotient $x^4 1) $x^4) + (run-one (quotient $x -1) $-x) + (run-one (remainder $x 1) 0) + (run-one (remainder $x^4 1) 0) + (run-one (remainder $x -1) 0) + (run-one (div-and-mod $x 1) $x 0) + (run-one (div-and-mod $x^4 1) $x^4 0) + (run-one (div-and-mod $x -1) $-x 0) + (run-one (div0-and-mod0 $x 1) $x 0) + (run-one (div0-and-mod0 $x^4 1) $x^4 0) + (run-one (div0-and-mod0 $x -1) $-x 0) + (run-one (div $x 1) $x) + (run-one (div $x^4 1) $x^4) + (run-one (div $x -1) $-x) + (run-one (div0 $x 1) $x) + (run-one (div0 $x^4 1) $x^4) + (run-one (div0 $x -1) $-x) + (run-one (mod $x 1) 0) + (run-one (mod $x^4 1) 0) + (run-one (mod $x -1) 0) + (run-one (mod0 $x 1) 0) + (run-one (mod0 $x^4 1) 0) + (run-one (mod0 $x -1) 0) + ; these should not improve and we hope not slow down measurably + (run-one (* $y 2) $2y) + (run-one (/ $2y 2) $y) + (run-one (+ $y 2) $y+2) + (run-one (- $y -2) $y+2) + (run-one (quotient $y 2) (ash $y -1)) + (run-one (remainder $y 2) (logand $y 1)) + (run-one (div-and-mod $2y 2) $y 0) + (run-one (div0-and-mod0 $2y 2) $y 0) + (run-one (div $2y 2) $y) + (run-one (div0 $2y 2) $y) + (run-one (mod $2y 2) 0) + (run-one (mod0 $2y 2) 0) + (printf ")\n")) + + (run)) + + ; use with --program to compare results + #;(top-level-program + (import (chezscheme)) + + (unless (= (length (command-line-arguments)) 3) + (fprintf (current-error-port) "usage: ~a: \n" (car (command-line))) + (exit 1)) + + (let ([reportfn (car (command-line-arguments))] + [beforefn (cadr (command-line-arguments))] + [afterfn (caddr (command-line-arguments))]) + (let-values ([(before-info before) (with-input-from-file beforefn (lambda () (let ([info (read)]) (values info (read)))))] + [(after-info after) (with-input-from-file afterfn (lambda () (let ([info (read)]) (values info (read)))))]) + (with-output-to-file reportfn + (lambda () + (unless (equal? before-info after-info) (errorf #f "before info ~s and after info ~s differ" before-info after-info)) + (let ([iter (cond [(assq 'iter before-info) => cdr] [else (errorf #f "expected to find binding for iter in info\n")])]) + (printf "Results ~a\n" (machine-type)) + (printf "

~{~a~^
~}

" (map (lambda (a) (format "~s = ~s" (car a) (cdr a))) before-info)) + (printf "\n" iter iter) + (for-each + (lambda (before after) + (define EXPR 0) + (define MEAN-NS 1) + (define STDDEV 2) + (define ITER 3) + (for-each + (lambda (i) + (unless (equal? (vector-ref before i) (vector-ref after i)) + (errorf #f "comparing apples to oranges: ~s, ~s" before after))) + (list EXPR)) + (printf "\n" + (vector-ref before EXPR) + (* (/ (- (vector-ref before MEAN-NS) (vector-ref after MEAN-NS)) (vector-ref before MEAN-NS)) 100) + (vector-ref before STDDEV) + (vector-ref after STDDEV) + (/ (vector-ref before MEAN-NS) (expt 10 9)) + (/ (vector-ref after MEAN-NS) (expt 10 9)) + (vector-ref before ITER) + (vector-ref after ITER) + )) + before + after) + (printf "
expressionspeedupbefore stddevafter stddevbefore time (x~s)after time (x~s)before iterationsafter iterations
~a~5,2f%~7,4f%~7,4f%~10,8f~10,8f~s~s
\n"))) + 'replace)))) + #t) +) + (mat popcount (error? (fxpopcount #f)) (error? (fxpopcount 1.0)) diff --git a/mats/6.ms b/mats/6.ms index 4b330499fd..72508297f4 100644 --- a/mats/6.ms +++ b/mats/6.ms @@ -727,6 +727,11 @@ (eqv? (read-char x) #\a) (char-ready? x) (eof-object? (read-char x)))) + (parameterize ([current-input-port (open-input-string "a")]) + (and (char-ready?) + (eqv? (read-char) #\a) + (char-ready?) + (eof-object? (read-char)))) ) (mat clear-input-port ; test interactively @@ -1654,25 +1659,24 @@ #t) (error? (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (#%$source-file-descriptor "testfile.ss" ip)] + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] [ip (transcoded-port ip (native-transcoder))]) (dynamic-wind void - (lambda () (read-token ip sfd)) + (lambda () (read-token ip sfd 0)) (lambda () (close-input-port ip))))) (let () (with-output-to-file "testfile.ss" (lambda () (display "\neat\n")) 'replace) #t) - ; $transcoded-source-port is no more - #;(equal? + (equal? (let-values ([vals (let* ([ip (open-file-input-port "testfile.ss")] - [sfd (#%$source-file-descriptor "testfile.ss" ip)] - [ip (#%$transcoded-source-port ip (native-transcoder))]) + [sfd (make-source-file-descriptor "testfile.ss" ip #t)] + [ip (transcoded-port ip (native-transcoder))]) (dynamic-wind void - (lambda () (read-token ip sfd)) + (lambda () (read-token ip sfd 0)) (lambda () (close-input-port ip))))]) vals) '(atomic eat 1 4)) diff --git a/mats/7.ms b/mats/7.ms index 4030213eac..b5dfb909cb 100644 --- a/mats/7.ms +++ b/mats/7.ms @@ -117,7 +117,27 @@ (define-values (o get) (open-bytevector-output-port)) (compile-to-port '((define lcfp1 'worked) 'loaded) o) (eq? 'loaded (load-compiled-from-port (open-bytevector-input-port (get))))) - (eq? 'worked lcfp1) + (begin + (define lcfp-bv + (let-values ([(o get) (open-bytevector-output-port)]) + (compile-to-port + '((printf "revisit\n") + (define-syntax $lcfp-a (begin (printf "visit\n") (lambda (x) 0))) + (eval-when (visit revisit) (printf "visit-revisit\n")) + (eval-when (visit) 'visit-return) + 'revisit-return) + o) + (get))) + #t) + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (load-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "revisit\nvisit\nvisit-revisit\nresult = revisit-return\n") + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (visit-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "visit\nvisit-revisit\nresult = visit-return\n") + (equal? + (with-output-to-string (lambda () (printf "result = ~s\n" (revisit-compiled-from-port (open-bytevector-input-port lcfp-bv))))) + "revisit\nvisit-revisit\nresult = revisit-return\n") ) (mat compile-to-file @@ -1168,7 +1188,7 @@ (define b1 "23.5") (define-syntax b2 (identifier-syntax (cons b1 b1)))) (define c (lambda (x) (import b) (vector b2 x))))) - op #f #f ',(machine-type) hostop)))))) + op #f #f #f ',(machine-type) hostop)))))) "testfile-hop1") (with-output-to-file "testfile-hop2.ss" (lambda () @@ -1979,6 +1999,11 @@ evaluating module init (separate-eval '(load-program "testfile-wpo-prog4-all.so")) "40320\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-prog4-all.so")) + "") + (delete-file "testfile-wpo-c4.so") (error? ; library (testfile-wpo-c4) not found @@ -2094,14 +2119,28 @@ evaluating module init (separate-eval '(load-program "testfile-wpo-prog6-all.so")) "invoke a\ninvoke b\n==== (3 14 17) ======== (3 19 17) ====") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-prog6-all.so")) + "") + (begin + (with-output-to-file "testfile-wpo-aa7.ss" + (lambda () + (pretty-print + '(library (testfile-wpo-aa7) + (export ax) + (import (chezscheme)) + (define ax (gensym)) + (printf "invoking aa\n")))) + 'replace) (with-output-to-file "testfile-wpo-a7.ss" (lambda () (pretty-print '(library (testfile-wpo-a7) (export x) - (import (chezscheme)) - (define x (gensym)) + (import (chezscheme) (testfile-wpo-aa7)) + (define x (cons ax (gensym))) (printf "invoking a\n")))) 'replace) (with-output-to-file "testfile-wpo-b7.ss" @@ -2140,7 +2179,7 @@ evaluating module init (equal? (separate-eval '(load "testfile-wpo-ab7.so")) - "invoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") + "invoking aa\ninvoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") (delete-file "testfile-wpo-c7.ss") (delete-file "testfile-wpo-c7.wpo") @@ -2155,7 +2194,7 @@ evaluating module init (equal? (separate-eval '(load "testfile-wpo-ab7-all.so")) - "invoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") + "invoking aa\ninvoking a\ninvoking c\ninvoking b\n#t\n#t\n#t\n") (begin (with-output-to-file "testfile-wpo-extlib.chezscheme.sls" @@ -2228,6 +2267,275 @@ evaluating module init (lambda (ip) (get-bytevector-n ip (string-length $hash-bang-line)))) (string->utf8 $hash-bang-line)) + + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-wpo-c8-all.so")) + "") + + (begin + (mkfile "testfile-wpo-a9.ss" + '(library (testfile-wpo-a9) + (export x) + (import (chezscheme)) + (define x (eval 'x (environment '(testfile-wpo-a9)))))) + (mkfile "testfile-wpo-b9.ss" + '(import (chezscheme) (testfile-wpo-a9)) + '(printf "x = ~s\n" x)) + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #t] [compile-imported-libraries #t]) + (compile-program x))) + 'wpo-b9) + (separate-compile + '(lambda (x) + (compile-whole-program (format "~a.wpo" x) (format "~a-all.so" x) #t)) + 'wpo-b9) + (separate-compile + '(lambda (x) + (compile-whole-library (format "~a.wpo" x) (format "~a-all.so" x))) + 'wpo-a9) + #t) + + (error? ; invoke cycle + (separate-eval + '(load-library "testfile-wpo-a9.so") + '(let () (import (testfile-wpo-a9)) x))) + + (error? ; invoke cycle + (separate-eval + '(load-library "testfile-wpo-a9-all.so") + '(let () (import (testfile-wpo-a9)) x))) + + (error? ; invoke cycle + (separate-eval + '(load-program "testfile-wpo-b9.so"))) + + (error? ; invoke cycle + (separate-eval + '(load-program "testfile-wpo-b9-all.so"))) + + (begin + (mkfile "testfile-wpo-a10.ss" + '(library (testfile-wpo-a10) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())))) + (mkfile "testfile-wpo-b10.ss" + '(library (testfile-wpo-b10) + (export bx) + (import (chezscheme) (testfile-wpo-a10)) + (define bx (cons 'b ax)))) + (mkfile "testfile-wpo-c10.ss" + '(library (testfile-wpo-c10) + (export cx) + (import (chezscheme) (testfile-wpo-b10)) + (define cx (cons 'c bx)))) + (mkfile "testfile-wpo-d10.ss" + '(import (chezscheme) (testfile-wpo-c10)) + '(printf "d: cx = ~s\n" cx)) + (mkfile "testfile-wpo-e10.ss" + '(import (chezscheme) (testfile-wpo-a10)) + '(printf "e: ax = ~s\n" ax)) + (mkfile "testfile-wpo-f10.ss" + '(import (chezscheme) (testfile-wpo-c10)) + '(printf "f: cx = ~s\n" cx)) + (separate-compile + '(lambda (x) + (parameterize ([generate-wpo-files #t] + [compile-imported-libraries #t]) + (compile-program x))) + 'wpo-d10) + (separate-compile 'compile-program 'wpo-e10) + (separate-compile 'compile-program 'wpo-f10) + #t) + + ; cause b10 to be excluded from the whole program + (delete-file "testfile-wpo-b10.wpo") + + (equal? + (separate-eval + '(compile-whole-program "testfile-wpo-d10.wpo" + "testfile-wpo-d10-all.so" #f)) + "((testfile-wpo-b10))\n") + + (equal? + (separate-eval '(verify-loadability 'visit "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(verify-loadability 'revisit "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(verify-loadability 'load "testfile-wpo-d10-all.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-wpo-d10-all.so")) + "d: cx = (c b a)\n") + + ; library a10 must be visible for (excluded library) + ; b10's benefit, so e10 can reference its export + (equal? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(load-program "testfile-wpo-e10.so")) + "d: cx = (c b a)\ne: ax = (a)\n") + + ; library c10 need not and should not be visible, so f10 + ; shouldn't be able to reference its export. + (error? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(load-program "testfile-wpo-f10.so"))) + + (error? ; testfile-wpo-c10 is not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(import (testfile-wpo-c10)))) + + (equal? + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'visit "testfile-wpo-f10.so")) + "d: cx = (c b a)\n") + + ; verify-loadability should error out trying to invoke + ; c10 because c10 is not visible + (error? ; not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'revisit "testfile-wpo-f10.so"))) + + (error? ; not visible + (separate-eval + '(load-program "testfile-wpo-d10-all.so") + '(verify-loadability 'load "testfile-wpo-f10.so"))) + + (begin + (mkfile "testfile-wpo-a11.ss" + '(library (testfile-wpo-a11) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())) + (printf "invoking a\n"))) + (parameterize ([generate-wpo-files #t]) + (compile-library "testfile-wpo-a11")) + #t) + + (equal? + (compile-whole-library "testfile-wpo-a11.wpo" "testfile-wpo-a11-all.so") + '()) + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11.so")) + "") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11.so") + '(let () (import (testfile-wpo-a11)) ax)) + "invoking a\n(a)\n") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11-all.so")) + "") + + (equal? + (separate-eval + '(load-library "testfile-wpo-a11-all.so") + '(let () (import (testfile-wpo-a11)) ax)) + "invoking a\n(a)\n") + + (begin + (mkfile "testfile-wpo-a12.ss" + '(library (testfile-wpo-a12) + (export ax) + (import (chezscheme)) + (define ax (cons 'a '())))) + (mkfile "testfile-wpo-b12.ss" + '(library (testfile-wpo-b12) + (export bx) + (import (chezscheme) (testfile-wpo-a12)) + (define bx (eval 'cx (environment '(testfile-wpo-c12)))))) + (mkfile "testfile-wpo-c12.ss" + '(library (testfile-wpo-c12) + (export cx) + (import (chezscheme) (testfile-wpo-b12)) + (define cx (cons 'c bx)))) + (mkfile "testfile-wpo-d12.ss" + '(import (chezscheme) (testfile-wpo-c12)) + '(printf "d: cx = ~s\n" cx)) + (parameterize ([generate-wpo-files #t] + [compile-imported-libraries #t]) + (compile-program "testfile-wpo-d12")) + #t) + + (error? ; cyclc + (separate-eval '(load-program "testfile-wpo-d12.so"))) + + ; cause b12 to be excluded from the whole library and program + (delete-file "testfile-wpo-b12.wpo") + + (equal? + (separate-eval + '(compile-whole-library "testfile-wpo-c12.wpo" + "testfile-wpo-c12-all.so")) + "((testfile-wpo-b12))\n") + + (equal? + (separate-eval + '(compile-whole-program "testfile-wpo-d12.wpo" + "testfile-wpo-d12-all.so" #t)) + "((testfile-wpo-b12))\n") + + (equal? + (separate-eval + '(load-library "testfile-wpo-c12-all.so")) + "") + + (error? ; cycle + (separate-eval + '(load-library "testfile-wpo-c12-all.so") + '(let () (import (testfile-wpo-c12)) cx))) + + (error? ; cycle + (separate-eval '(load-program "testfile-wpo-d12-all.so"))) + + ; verify-loadability doesn't catch (dynamic) cycles + (equal? + (separate-eval + '(verify-loadability 'visit "testfile-wpo-c12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'revisit "testfile-wpo-c12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'load "testfile-wpo-c12.so")) + "") + + ; verify-loadability doesn't catch (dynamic) cycles + (equal? + (separate-eval + '(verify-loadability 'visit "testfile-wpo-d12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'revisit "testfile-wpo-d12.so")) + "") + + (equal? + (separate-eval + '(verify-loadability 'load "testfile-wpo-d12.so")) + "") ) (mat compile-whole-library @@ -2284,6 +2592,11 @@ evaluating module init (printf ">~s\n" (y)))) "invoke a\ninvoke b\n>(3 14 17)\n>(3 19 17)\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-b1.so")) + "") + (error? ; library (testfile-cwl-a1) not found (separate-eval '(begin @@ -2363,6 +2676,11 @@ evaluating module init (main))) "3628800\n") + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-b2.so")) + "") + (equal? (separate-compile '(lambda (x) @@ -2710,14 +3028,14 @@ evaluating module init "testfile-cwl-b5") "()\n") - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-c5)) (import (testfile-cwl-b5)) (list (fib+fact 10) (ack+fact 3 4))))) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(eval '(list (fib+fact 10) (ack+fact 3 4)) (environment '(chezscheme) '(testfile-cwl-c5) '(testfile-cwl-b5))))) @@ -2738,7 +3056,7 @@ evaluating module init (separate-compile 'cwl-d5) #t) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(load "testfile-cwl-d5.so"))) (begin @@ -2763,14 +3081,14 @@ evaluating module init (delete-file "testfile-cwl-a5.so") (delete-file "testfile-cwl-a5.wpo") - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-c5)) (import (testfile-cwl-b5)) (list (fib+fact 10) (ack+fact 3 4))))) - (error? ; attempting to re-install run-time part of library (testfile-cwl-a5) with uid #{testfile-cwl-a5 ???} + (error? ; attempting to re-install compile-time (or run-time) part of library (testfile-cwl-a5) (separate-eval '(let () (import (testfile-cwl-b5)) @@ -3871,6 +4189,26 @@ evaluating module init (delete-file (format "testfile-deja-vu-~a.~a" (car stem) (car ext))))) #t) + ; verify compatibility of generate-covin-files and generate-wpo-files + (begin + (mkfile "testfile-cwl-a14.ss" + '(library (testfile-cwl-a14) (export a) (import (scheme)) (define a 123))) + (parameterize ([generate-covin-files #t] + [generate-wpo-files #t]) + (compile-library "testfile-cwl-a14") + (compile-whole-library "testfile-cwl-a14.wpo" "testfile-cwl-a14.library")) + #t) + + (file-exists? "testfile-cwl-a14.covin") + + (eqv? + (let () (import (testfile-cwl-a14)) a) + 123) + + (eqv? + (separate-eval + '(verify-loadability 'load "testfile-cwl-a14.library")) + "") ) (mat maybe-compile-whole @@ -4150,7 +4488,7 @@ evaluating module init "import: found source file \"testfile-lm-a.ss\"\n" "import: found corresponding object file \"testfile-lm-a.so\"\n" "import: object file is not older\n" - "import: loading object file \"testfile-lm-a.so\"\n" + "import: visiting object file \"testfile-lm-a.so\"\n" "ct-a rhs\n" "b = \"odd\"\n")) (equal? @@ -4164,7 +4502,8 @@ evaluating module init "import: found source file \"testfile-lm-a.ss\"\n" "import: found corresponding object file \"testfile-lm-a.so\"\n" "import: object file is not older\n" - "import: loading object file \"testfile-lm-a.so\"\n" + "import: visiting object file \"testfile-lm-a.so\"\n" + "attempting to 'revisit' previously 'visited' \"testfile-lm-a.so\" for library (testfile-lm-a) run-time info\n" "rt-a rhs\n" "c = 456\n")) (equal? @@ -4179,7 +4518,8 @@ evaluating module init "import: found source file \"testfile-lm-c.ss\"\n" "import: found corresponding object file \"testfile-lm-c.so\"\n" "import: object file is not older\n" - "import: loading object file \"testfile-lm-c.so\"\n" + "import: visiting object file \"testfile-lm-c.so\"\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-c.so\" for library (testfile-lm-c) run-time info\n" "import: attempting to 'revisit' previously 'visited' \"testfile-lm-a.so\" for library (testfile-lm-a) run-time info\n" "rt-a rhs\n" "456\n")) @@ -4195,8 +4535,9 @@ evaluating module init "import: found source file \"testfile-lm-b.ss\"\n" "import: found corresponding object file \"testfile-lm-b.so\"\n" "import: object file is not older\n" - "import: loading object file \"testfile-lm-b.so\"\n" + "import: visiting object file \"testfile-lm-b.so\"\n" "import: attempting to 'visit' previously 'revisited' \"testfile-lm-a.so\" for library (testfile-lm-a) compile-time info\n" + "import: attempting to 'revisit' previously 'visited' \"testfile-lm-b.so\" for library (testfile-lm-b) run-time info\n" "\"odd\"\n")) (equal? (separate-eval @@ -4270,6 +4611,647 @@ evaluating module init "\"odd\"\n")) ) +(mat verify-loadability + (error? ; invalid argument + (verify-loadability 'never)) + (error? ; invalid argument + (verify-loadability 'never "hello.so")) + (error? ; invalid argument + (verify-loadability #f "hello.so" "goodbye.so")) + (error? ; invalid argument + (verify-loadability 'load 'hello)) + (error? ; invalid argument + (verify-loadability 'load '(a . "testdir"))) + (error? ; invalid argument + (verify-loadability 'load '#("a" "testdir"))) + (error? ; invalid argument + (verify-loadability 'load "testfile1.so" "testfile2.so" 'hello)) + (error? ; invalid argument + (verify-loadability 'load "testfile1.so" "testfile2.so" '(a . "testdir"))) + (error? ; invalid argument + (verify-loadability 'load '("a" . hello))) + (error? ; invalid argument + (verify-loadability 'load '("a" . ("src" . "obj")))) + (error? ; invalid argument + (verify-loadability 'load '("a" . (("src" "obj"))))) + (error? ; invalid argument + (verify-loadability 'load '("a" . ((("src" "obj")))))) + (begin + (define install + (lambda (dir . fn*) + (for-each + (lambda (fn) + (call-with-port (open-file-input-port fn) + (lambda (ip) + (call-with-port (open-file-output-port (format "~a/~a" dir (path-last fn))) + (lambda (op) + (put-bytevector op (get-bytevector-all ip))))))) + fn*))) + #t) + (eq? (verify-loadability 'visit) (void)) + (eq? (verify-loadability 'revisit) (void)) + (eq? (verify-loadability 'load) (void)) + (error? ; not found + (verify-loadability 'load "probably not found")) + (begin + (mkfile "testfile-clA.ss" + '(import (chezscheme) (testfile-clB) (testfile-clC)) + '(printf "~a, ~a\n" b c)) + (mkfile "testfile-clB.ss" + '(library (testfile-clB) + (export b) + (import (chezscheme) (testfile-clB1)) + (define-syntax go (lambda (x) (datum->syntax #'* (b1)))) + (define b (go)))) + (mkfile "testfile-clB1.ss" + '(library (testfile-clB1) + (export b1) + (import (chezscheme)) + (define b1 (lambda () "hello from B1")))) + (mkfile "testfile-clC.ss" + '(library (testfile-clC) + (export c) + (import (chezscheme) (testfile-clC1)) + (define c (c1)))) + (mkfile "testfile-clC1.ss" + '(library (testfile-clC1) + (export c1) + (import (chezscheme)) + (define-syntax c1 (syntax-rules () [(_) "hello from C1"])))) + (rm-rf "testdir-obj1") + (rm-rf "testdir-obj2") + (mkdir "testdir-obj1") + (mkdir "testdir-obj2") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj1"))] [compile-imported-libraries #t]) + (compile-program "testfile-clA.ss" "testdir-obj1/testfile-clA.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj2"))] [compile-imported-libraries #t]) + (compile-program "testfile-clA.ss" "testdir-obj2/testfile-clA.so"))) + #t) + (begin + (rm-rf "testdir-dist1") + (mkdir "testdir-dist1") + (install "testdir-dist1" "testdir-obj1/testfile-clA.so" "testdir-obj1/testfile-clB.so" "testdir-obj1/testfile-clC.so") + #t) + (eqv? + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clA.so") + (verify-loadability 'revisit "testfile-clA.so") + (verify-loadability 'load "testfile-clA.so"))) + "") + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (load-program "testfile-clA.so"))) + "hello from B1, hello from C1\n") + (error? ; missing B1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clB.so")))) + (error? ; missing B1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'load "testfile-clB.so")))) + (error? ; missing C1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'visit "testfile-clC.so")))) + (error? ; missing C1 + (separate-eval + '(parameterize ([cd "testdir-dist1"]) + (verify-loadability 'load "testfile-clC.so")))) + (begin + (rm-rf "testdir-dist2") + (mkdir "testdir-dist2") + (install "testdir-dist2" "testdir-obj2/testfile-clA.so" "testdir-obj2/testfile-clB.so" "testdir-obj2/testfile-clC.so") + #t) + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist2"]) + (load-program "testfile-clA.so"))) + "hello from B1, hello from C1\n") + (error? ; mismatched compilation instance + (separate-eval + '(verify-loadability 'revisit + '("testdir-dist1/testfile-clA.so" . "testdir-dist1") + '("testdir-dist2/testfile-clA.so" . "testdir-dist2")))) + (error? ; mismatched compilation instance + (separate-eval + '(verify-loadability 'load + '("testdir-dist1/testfile-clA.so" . "testdir-dist1") + '("testdir-dist2/testfile-clA.so" . "testdir-dist2")))) + (begin + (rm-rf "testdir-dist3") + (mkdir "testdir-dist3") + (install "testdir-dist3" "testdir-obj1/testfile-clA.so" "testdir-obj1/testfile-clB.so" "testdir-obj2/testfile-clC.so") + #t) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (load-program "testfile-clA.so")))) + (eqv? ; no compile-time requirements, so no problem + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'visit "testfile-clA.so"))) + "") + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'revisit "testfile-clA.so")))) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (verify-loadability 'load "testfile-clA.so")))) + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (unless (guard (c [else (printf "yes\n")]) (verify-loadability 'load "testfile-clA.so") #f) + (errorf #f "oops"))) + '(parameterize ([cd "testdir-dist1"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(parameterize ([cd "testdir-dist2"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1))))) + '(parameterize ([cd "testdir-dist1"]) + (load-program "testfile-clA.so")) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1)))))) + "yes\n#\n#\n(#f #f #f #f)\nhello from B1, hello from C1\n(#t #f #t #f)\n") + (equal? + (separate-eval + '(parameterize ([cd "testdir-dist3"]) + (unless (guard (c [else (printf "yes\n")]) (verify-loadability 'load "testfile-clA.so") #f) + (errorf #f "oops"))) + '(parameterize ([cd "testdir-dist1"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(parameterize ([cd "testdir-dist2"]) + (printf "~s\n" (verify-loadability 'load "testfile-clA.so"))) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1))))) + '(parameterize ([cd "testdir-dist2"]) + (load-program "testfile-clA.so")) + '(let* ([ls (library-list)] [f (lambda (x) (and (member x ls) #t))]) + (printf "~s\n" (map f '((testfile-clB) (testfile-clB1) (testfile-clC) (testfile-clC1)))))) + "yes\n#\n#\n(#f #f #f #f)\nhello from B1, hello from C1\n(#t #f #t #f)\n") + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([library-directories '(("testdir-dist1" . "testdir-dist1"))]) + (verify-loadability 'load "testdir-dist2/testfile-clA.so")))) + (error? ; mismatched compilation instance + (separate-eval + '(parameterize ([library-directories '(("testdir-dist1" . "testdir-dist1"))]) + (verify-loadability 'load "testdir-dist1/testfile-clA.so" "testdir-dist2/testfile-clA.so")))) + (begin + (mkfile "testfile-clPD.ss" + '(import (chezscheme) (testfile-clD)) + '(printf "~s\n" (make-Q))) + (mkfile "testfile-clPE.ss" + '(import (chezscheme) (testfile-clE)) + '(printf "~s\n" (make-Q 73))) + (mkfile "testfile-clD.ss" + '(library (testfile-clD) (export make-Q Q? Q-x) (import (chezscheme) (testfile-clF)) + (define-record-type Q + (nongenerative Q) + (fields x) + (protocol (lambda (new) (lambda () (new f))))))) + (mkfile "testfile-clE.ss" + '(library (testfile-clE) (export make-Q Q? Q-x) (import (chezscheme) (testfile-clG)) + (define-record-type Q + (nongenerative Q) + (fields x y) + (protocol (lambda (new) (lambda (y) (new g y))))))) + (mkfile "testfile-clF.ss" + '(library (testfile-clF) (export f) (import (chezscheme)) (define f 77))) + (mkfile "testfile-clG.ss" + '(library (testfile-clG) (export g) (import (chezscheme)) (define g 123))) + (rm-rf "testdir-obj") + (mkdir "testdir-obj") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-program "testfile-clPD.ss" "testdir-obj/testfile-clPD.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-program "testfile-clPE.ss" "testdir-obj/testfile-clPE.so"))) + #t) + (begin + (rm-rf "testdir-dist") + (mkdir "testdir-dist") + (install "testdir-dist" "testdir-obj/testfile-clPD.so" "testdir-obj/testfile-clD.so" "testdir-obj/testfile-clF.so") + (install "testdir-dist" "testdir-obj/testfile-clPE.so" "testdir-obj/testfile-clE.so" "testdir-obj/testfile-clG.so") + #t) + (error? ; incompatible record-type Q + (separate-eval + '(cd "testdir-dist") + '(load-program "testfile-clPD.so") + '(load-program "testfile-clPE.so"))) + (equal? + (separate-eval + '(cd "testdir-dist") + '(verify-loadability 'visit "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'visit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'revisit "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'revisit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so") + '(verify-loadability 'load "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so" "testfile-clD.so" "testfile-clE.so" "testfile-clF.so" "testfile-clG.so") + '(load-program "testfile-clPD.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so")) + "#[Q 77]\n") + (equal? + (separate-eval + '(cd "testdir-dist") + '(verify-loadability 'visit "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'visit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'revisit "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'revisit "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clD.so" "testfile-clE.so") + '(verify-loadability 'load "testfile-clF.so" "testfile-clG.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clPE.so" "testfile-clD.so" "testfile-clE.so" "testfile-clF.so" "testfile-clG.so") + '(load-program "testfile-clPE.so") + '(verify-loadability 'load "testfile-clPD.so" "testfile-clE.so")) + "#[Q 123 73]\n") + (begin + (mkfile "testfile-clH0.ss" + '(library (testfile-clH0) (export h0) (import (chezscheme)) + (define h0 (lambda (x) (cons x 'a))))) + (mkfile "testfile-clH1.ss" + '(top-level-program + (import (chezscheme) (testfile-clH0)) + (printf "~s\n" (h0 73)))) + (mkfile "testfile-clH2.ss" + '(include "testfile-clH0.ss") + '(top-level-program + (import (chezscheme) (testfile-clH0)) + (printf "~s\n" (h0 37)))) + (rm-rf "testdir-obj") + (mkdir "testdir-obj") + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-file "testfile-clH1.ss" "testdir-obj/testfile-clH1.so"))) + (separate-eval + '(parameterize ([library-directories '(("." . "testdir-obj"))] [compile-imported-libraries #t]) + (compile-file "testfile-clH2.ss" "testdir-obj/testfile-clH2.so"))) + #t) + (equal? + (separate-eval + '(parameterize ([library-directories '(("testdir-obj" . "testdir-obj"))]) + (revisit "testdir-obj/testfile-clH1.so"))) + "(73 . a)\n") + (equal? + (separate-eval + '(parameterize ([library-directories '(("testdir-obj" . "testdir-obj"))]) + (revisit "testdir-obj/testfile-clH2.so"))) + "(37 . a)\n") + (eqv? + (separate-eval + '(let ([libdirs '(("testdir-obj" . "testdir-obj"))]) + (verify-loadability 'revisit (cons "testdir-obj/testfile-clH1.so" libdirs) (cons "testdir-obj/testfile-clH2.so" libdirs)))) + "") + (error? ; mismatched compilation instance + (separate-eval + '(let ([libdirs '(("testdir-obj" . "testdir-obj"))]) + (verify-loadability 'revisit (cons "testdir-obj/testfile-clH2.so" libdirs) (cons "testdir-obj/testfile-clH1.so" libdirs))))) + + ; make sure verify-loadability respects eval-when forms + (begin + (mkfile "testfile-clI0.ss" + '(library (testfile-clI0) (export x) (import (chezscheme)) (define x 10) (printf "invoking I0\n"))) + (mkfile "testfile-clI1.ss" + '(eval-when (visit) + (top-level-program + (import (chezscheme) (testfile-clI0)) + (printf "running I1, x = ~s\n" x)))) + (separate-eval + '(parameterize ([compile-imported-libraries #t]) + (compile-file "testfile-clI1"))) + #t) + (equal? + (separate-eval '(visit "testfile-clI1.so")) + "invoking I0\nrunning I1, x = 10\n") + (equal? + (separate-eval '(revisit "testfile-clI1.so")) + "") + (equal? + (separate-eval '(load "testfile-clI1.so")) + "invoking I0\nrunning I1, x = 10\n") + (eq? + (verify-loadability 'visit "testfile-clI1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clI1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clI1.so") + (void)) + (delete-file "testfile-clI0.ss") + (delete-file "testfile-clI0.so") + (error? + (verify-loadability 'visit "testfile-clI1.so")) + (eq? + (verify-loadability 'revisit "testfile-clI1.so") + (void)) + (error? + (verify-loadability 'load "testfile-clI1.so")) + + ; make sure compile-whole-program perserves the information verify-loadability needs + (begin + (mkfile "testfile-clJ0.ss" + '(library (testfile-clJ0) (export x0) (import (chezscheme)) (define x0 'eat) (printf "invoking J0\n"))) + (mkfile "testfile-clJ1.ss" + '(library (testfile-clJ1) (export x1) (import (chezscheme) (testfile-clJ0)) (define x1 (list x0 'oats)) (printf "invoking J1\n"))) + (mkfile "testfile-clJ2.ss" + '(library (testfile-clJ2) (export x2) (import (chezscheme) (testfile-clJ1)) (define x2 (cons 'mares x1)) (printf "invoking J2\n"))) + (mkfile "testfile-clJ3.ss" + '(import (chezscheme) (testfile-clJ2)) + '(printf "running J3, x2 = ~s\n" x2)) + (separate-eval + '(parameterize ([compile-imported-libraries #t] [generate-wpo-files #t]) + (compile-program "testfile-clJ3"))) + #t) + + (equal? + (separate-eval '(verify-loadability 'load "testfile-clJ3.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-clJ3.so")) + "invoking J0\ninvoking J1\ninvoking J2\nrunning J3, x2 = (mares eat oats)\n") + + (delete-file "testfile-clJ0.ss") + (delete-file "testfile-clJ0.wpo") + (delete-file "testfile-clJ2.ss") + (delete-file "testfile-clJ2.wpo") + + ((lambda (x ls) (and (member x ls) #t)) + (separate-eval + '(compile-whole-program "testfile-clJ3.wpo" "testfile-clJ3-all.so")) + '("((testfile-clJ0) (testfile-clJ2))\n" + "((testfile-clJ2) (testfile-clJ0))\n")) + + (delete-file "testfile-clJ1.ss") + (delete-file "testfile-clJ1.wpo") + (delete-file "testfile-clJ1.so") + + (equal? + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so")) + "") + + (equal? + (separate-eval '(load-program "testfile-clJ3-all.so")) + "invoking J0\ninvoking J1\ninvoking J2\nrunning J3, x2 = (mares eat oats)\n") + + (eq? + (rename-file "testfile-clJ0.so" "testfile-clJ0.sav") + (void)) + + (error? ; missing testfile-clJ0.so + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so"))) + + (error? ; missing testfile-clJ0.so + (separate-eval '(load-program "testfile-clJ3-all.so"))) + + (eq? + (rename-file "testfile-clJ0.sav" "testfile-clJ0.so") + (void)) + + (delete-file "testfile-clJ2.so") + + (error? ; missing testfile-clJ2.so + (separate-eval '(verify-loadability 'load "testfile-clJ3-all.so"))) + + (error? ; missing testfile-clJ2.so + (separate-eval '(load-program "testfile-clJ3-all.so"))) + + (begin + (mkfile "testfile-clK0.ss" + '(library (testfile-clK0) (export x0) (import (chezscheme)) (define x0 "chocolate") (printf "invoking K0\n"))) + (mkfile "testfile-clK1.ss" + '(library (testfile-clK1) (export x1) (import (chezscheme) (testfile-clK0)) (define x1 (format "~a chip" x0)) (printf "invoking K1\n"))) + (mkfile "testfile-clK2.ss" + '(import (chezscheme) (testfile-clK1)) + '(printf "running K2, x1 = ~s\n" x1)) + (separate-eval + '(parameterize ([compile-imported-libraries #t]) + (compile-program "testfile-clK2"))) + #t) + (eq? + (verify-loadability 'visit "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'visit "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK1.so" "testfile-clK2.so") + (void)) + (eq? + (verify-loadability 'visit "testfile-clK2.so" "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'revisit "testfile-clK2.so" "testfile-clK1.so") + (void)) + (eq? + (verify-loadability 'load "testfile-clK2.so" "testfile-clK1.so") + (void)) + (equal? + (separate-eval + '(visit "testfile-clK1.so") + '(let () (import (testfile-clK1)) x1)) + "invoking K0\ninvoking K1\n\"chocolate chip\"\n") + (equal? + (separate-eval '(revisit "testfile-clK2.so")) + "invoking K0\ninvoking K1\nrunning K2, x1 = \"chocolate chip\"\n") + (eq? + (strip-fasl-file "testfile-clK0.so" "testfile-clK0.so" + (fasl-strip-options compile-time-information)) + (void)) + (error? ; missing compile-time info for K0 + (verify-loadability 'visit "testfile-clK1.so")) + (eq? + (verify-loadability 'revisit "testfile-clK1.so") + (void)) + (error? ; missing compile-time info for K0 + (verify-loadability 'load "testfile-clK1.so")) + (error? ; missing compile-time info + (separate-eval + '(visit "testfile-clK1.so") + '(let () (import (testfile-clK1)) x1))) + (equal? + (separate-eval '(revisit "testfile-clK2.so")) + "invoking K0\ninvoking K1\nrunning K2, x1 = \"chocolate chip\"\n") +) + +(mat concatenate-object-files + (begin + (define install + (lambda (dir . fn*) + (for-each + (lambda (fn) + (call-with-port (open-file-input-port fn) + (lambda (ip) + (call-with-port (open-file-output-port (format "~a/~a" dir (path-last fn))) + (lambda (op) + (put-bytevector op (get-bytevector-all ip))))))) + fn*))) + (define test-isolated-load + (lambda (fn lib val) + (rm-rf "testdir-isolated") + (mkdir "testdir-isolated") + (install "testdir-isolated" fn) + (separate-eval + `(cd "testdir-isolated") + `(load ,fn) + `(let () + (import ,lib) + ,val)))) + #t) + (begin + (mkfile "testfile-catlibA.ss" + '(library (testfile-catlibA) + (export a) + (import (chezscheme)) + (define a 1))) + (mkfile "testfile-catlibB.ss" + '(library (testfile-catlibB) + (export a b) + (import (chezscheme) (testfile-catlibA)) + (define b 2))) + (mkfile "testfile-catlibC.ss" + '(library (testfile-catlibC) + (export c) + (import (chezscheme) (testfile-catlibB)) + (define c (+ a b)))) + (separate-eval + '(compile-library "testfile-catlibA.ss" "testfile-catlibA.so")) + (separate-eval + '(compile-library "testfile-catlibB.ss" "testfile-catlibB.so")) + (separate-eval + '(compile-library "testfile-catlibC.ss" "testfile-catlibC.so")) + #t) + (eqv? + (separate-eval + '(begin + (concatenate-object-files "testfile-catlibAB.so" "testfile-catlibA.so" "testfile-catlibB.so") + (concatenate-object-files "testfile-catlibBC.so" "testfile-catlibB.so" "testfile-catlibC.so") + (concatenate-object-files "testfile-catlibABC.so" "testfile-catlibA.so" "testfile-catlibB.so" "testfile-catlibC.so"))) + "") + (equal? + (test-isolated-load "testfile-catlibA.so" '(testfile-catlibA) 'a) + "1\n") + (error? ; can't find (testfile-catlibA) + (test-isolated-load "testfile-catlibB.so" '(testfile-catlibB) 'b)) + (error? ; can't find (testfile-catlibA) + (test-isolated-load "testfile-catlibBC.so" '(testfile-catlibC) 'c)) + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibA) 'a) + "1\n") + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibB) 'b) + "2\n") + (equal? + (test-isolated-load "testfile-catlibABC.so" '(testfile-catlibC) 'c) + "3\n") + (equal? + (test-isolated-load "testfile-catlibAB.so" '(testfile-catlibB) 'b) + "2\n") + (begin + (mkfile "testfile-cof1A.ss" + '(library (testfile-cof1A) (export a) (import (chezscheme)) + (define-syntax a (identifier-syntax 45)))) + (mkfile "testfile-cof1B.ss" + '(library (testfile-cof1B) (export b) (import (chezscheme) (testfile-cof1A)) + (define b (lambda () (* a 2))))) + (mkfile "testfile-cof1P.ss" + '(import (chezscheme) (testfile-cof1A) (testfile-cof1B)) + '(printf "a = ~s, (b) = ~s\n" a (b))) + (mkfile "testfile-cof1foo.ss" + '(printf "hello from foo!\n")) + (mkfile "testfile-cof1bar.ss" + '(printf "hello from bar!\n")) + (parameterize ([compile-imported-libraries #t]) (compile-program "testfile-cof1P")) + (compile-file "testfile-cof1foo") + (compile-file "testfile-cof1bar") + (let () + (define fake-concatenate-object-files + (lambda (outfn infn . infn*) + (call-with-port (open-file-output-port outfn (file-options compressed replace)) + (lambda (op) + (for-each + (lambda (infn) + (put-bytevector op + (call-with-port (open-file-input-port infn (file-options compressed)) get-bytevector-all))) + (cons infn infn*)))))) + (fake-concatenate-object-files "testfile-cof1fooP.so" "testfile-cof1foo.so" "testfile-cof1P.so") + (fake-concatenate-object-files "testfile-cof1barB.so" "testfile-cof1bar.so" "testfile-cof1B.so")) + #t) + ; using separate-eval since A and B already loaded in the compiling process: + (equal? + (separate-eval '(load "testfile-cof1fooP.so")) + "hello from foo!\na = 45, (b) = 90\n") + (equal? + (separate-eval + '(load "testfile-cof1barB.so") + '(printf "~s\n" (and (member '(testfile-cof1B) (library-list)) 'yes))) + "hello from bar!\nyes\n") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") + (delete-file "testfile-cof1A.so") + ; NB: this should be an error, but isn't because we're using the fake concatenate-object-files + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") ; requires testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") ; doesn't require testfile-cof1A.so + + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (delete-file "testfile-cof1B.so") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so or testfile-cof1B.so + ; NB: this should be an error, but isn't because we're using the fake concatenate-object-files + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; requires testfile-cof1B.so + + ; now with the real concatenate-object-files + (begin + (separate-eval '(parameterize ([compile-imported-libraries #t]) (compile-program "testfile-cof1P"))) + (concatenate-object-files "testfile-cof1fooP.so" "testfile-cof1foo.so" "testfile-cof1P.so") + (concatenate-object-files "testfile-cof1barB.so" "testfile-cof1bar.so" "testfile-cof1B.so") + #t) + ; using separate-eval since A and B already loaded in the compiling process: + (equal? + (separate-eval '(load "testfile-cof1fooP.so")) + "hello from foo!\na = 45, (b) = 90\n") + (equal? + (separate-eval + '(load "testfile-cof1barB.so") + '(printf "~s\n" (and (member '(testfile-cof1B) (library-list)) 'yes))) + "hello from bar!\nyes\n") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so")) "") + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") + (delete-file "testfile-cof1A.so") + (error? (separate-eval '(verify-loadability 'visit "testfile-cof1barB.so"))) ; requires testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1barB.so")) "") ; doesn't require testfile-cof1A.so + + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (equal? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so + (delete-file "testfile-cof1B.so") + (equal? (separate-eval '(verify-loadability 'visit "testfile-cof1fooP.so")) "") ; doesn't require testfile-cof1A.so or testfile-cof1B.so + (error? (separate-eval '(verify-loadability 'revisit "testfile-cof1fooP.so"))) ; requires testfile-cof1B.so +) + ;;; section 7.2: (mat top-level-value-functions diff --git a/mats/8.ms b/mats/8.ms index 08efa6a475..25f3fdea10 100644 --- a/mats/8.ms +++ b/mats/8.ms @@ -8487,7 +8487,7 @@ "inside testfile-a3-9\n") (equal? (with-output-to-string (lambda () (load "testfile-a3-10.so"))) - "outside (testfile-a3-8)\ninside testfile-a3-10\n") + "inside testfile-a3-10\n") ) (mat library4 @@ -8747,6 +8747,105 @@ "revisiting testfile-l6-prog1\n#((10 . 12))\n") ) +(mat library7 + (begin + (mkfile "testfile-l7-a1.ss" + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa)) (define (a x) (+ x (* x x))))) + (mkfile "testfile-l7-b1.ss" + '(library (testfile-l7-b1) (export b) (import (chezscheme) (testfile-l7-a1)) (define (b x) (cons 'b a-macro)))) + (mkfile "testfile-l7-c1.ss" + '(library (testfile-l7-c1) (export c) (import (chezscheme) (testfile-l7-a1)) (define (c x) (cons 'c (a x))))) + (mkfile "testfile-l7-d1.ss" + '(library (testfile-l7-d1) (export d) (import (chezscheme) (testfile-l7-a1)) (define (d x) (list 'd a-macro (a x))))) + (separate-compile + '(lambda (x) (for-each compile-library x)) + '(list "testfile-l7-a1" "testfile-l7-b1" "testfile-l7-c1" "testfile-l7-d1")) + #t) + (equal? + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (begin + (separate-compile + '(lambda (x) (for-each compile-library x)) + '(list "testfile-l7-a1" "testfile-l7-b1" "testfile-l7-c1")) + #t) + (equal? + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (equal? + (separate-eval + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-b1)) (b 7))) + "(d aaa 56)\n(c . 56)\n(b . aaa)\n") + (error? ; expected different compilation instance + (separate-eval + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (error? ; expected different compilation instance + (separate-eval + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (equal? + (separate-eval + '(load-library "testfile-l7-b1.ss") + '(let () (import (testfile-l7-b1)) (b 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-c1)) (c 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (error? ; expected different compilation instance + (separate-eval + '(load-library "testfile-l7-b1.ss") + '(load-library "testfile-l7-c1.ss") + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) + (begin + (delete-file "testfile-l7-a1.so") + #t) + (equal? + (separate-eval + '(parameterize ([compile-imported-libraries #t]) (compile-library "testfile-l7-b1.ss")) + '(let () (import (testfile-l7-b1)) (b 7)) + ; this should reload from source, since dependency is out-of-date + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "compiling testfile-l7-b1.ss with output to testfile-l7-b1.so\ncompiling testfile-l7-a1.ss with output to testfile-l7-a1.so\n(b . aaa)\n(c . 56)\n(d aaa 56)\n") + (begin + (delete-file "testfile-l7-a1.so") + #t) + (error? ; expected different compilation instance + (separate-eval + '(parameterize ([compile-imported-libraries #t]) (compile-library "testfile-l7-b1.ss")) + '(load-library "testfile-l7-c1.so") + '(let () (import (testfile-l7-c1)) (c 7)))) + (equal? + (separate-eval + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa2)) (define (a x) (* x 11))) + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(let () (import (testfile-l7-d1)) (d 7))) + "(b . aaa2)\n(c . 77)\n(d aaa2 77)\n") + (error? ; expected different compilation instance + (separate-eval + '(library (testfile-l7-a1) (export a-macro a) (import (chezscheme)) (define-syntax a-macro (identifier-syntax 'aaa2)) (define (a x) (* x 11))) + '(let () (import (testfile-l7-b1)) (b 7)) + '(let () (import (testfile-l7-c1)) (c 7)) + '(load-library "testfile-l7-d1.so") + '(let () (import (testfile-l7-d1)) (d 7)))) +) + (mat library-regression ; test that failing invoke code does not result in cyclic dependency problem on re-run (equal? @@ -9033,8 +9132,82 @@ (string-append "123\n" "123\n" - "Exception in visit: library (testfile-lr-l4) is not visible\n" - "Exception in visit: library (testfile-lr-l4) is not visible\n")))) + "Exception in environment: attempt to import invisible library (testfile-lr-l4)\n" + "Exception in environment: attempt to import invisible library (testfile-lr-l4)\n")))) + +(mat invoke-library + (error? ; invalid library reference + (invoke-library '(testfile-il1 (<= 3)))) + (error? ; invalid library reference + (invoke-library '(testfile-il1 (what?)))) + (error? ; invalid library reference + (invoke-library '())) + (error? ; invalid library reference + (invoke-library 'hello)) + (error? ; invalid library reference + (invoke-library '(3 2 1))) + (begin + (mkfile "testfile-il1.ss" + '(library (testfile-il1 (2)) (export a) (import (chezscheme)) (define a 3) (printf "invoked (testfile-il1)\n"))) + #t) + (equal? + (separate-eval + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\n3\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1)) + '(printf "hello\n") + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\nhello\n3\n") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a) + '(printf "hello\n") + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n3\nhello\n") + (begin + (separate-eval '(compile-library "testfile-il1")) + #t) + (delete-file "testfile-il1.ss") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\n3\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1)) + '(printf "hello\n") + '(let () (import (testfile-il1)) a)) + "invoked (testfile-il1)\nhello\n3\n") + (equal? + (separate-eval + '(let () (import (testfile-il1)) a) + '(printf "hello\n") + '(invoke-library '(testfile-il1))) + "invoked (testfile-il1)\n3\nhello\n") + (error? ; version mismatch + (separate-eval '(invoke-library '(testfile-il1 (3))))) + (error? ; version mismatch + (separate-eval + '(invoke-library '(testfile-il1 ((>= 3)))))) + (equal? + (separate-eval + '(invoke-library '(testfile-il1 ((>= 2))))) + "invoked (testfile-il1)\n") + (equal? + (separate-eval + '(invoke-library '(testfile-il1 (2)))) + "invoked (testfile-il1)\n") +) (mat cross-library-optimization (begin @@ -9568,6 +9741,16 @@ ) (mat library-directories + (error? ; invalid argument + (library-directories '("a" . hello))) + (error? ; invalid argument + (library-directories '("a" . ("src" . "obj")))) + (error? ; invalid argument + (library-directories '("a" . (("src"))))) + (error? ; invalid argument + (library-directories '("a" . (("src" "obj"))))) + (error? ; invalid argument + (library-directories '("a" . ((("src" "obj")))))) (let ([x (library-directories)]) (and (list? x) (andmap (lambda (x) (and (pair? x) (string? (car x)) (string? (cdr x)))) x))) @@ -9607,6 +9790,14 @@ ) (mat library-extensions + (error? ; invalid argument + (library-extensions '.a1.sls)) + (error? ; invalid argument + (library-extensions '((".foo")))) + (error? ; invalid argument + (library-extensions '((".foo" ".bar")))) + (error? ; invalid argument + (library-extensions '(((".junk"))))) (let ([x (library-extensions)]) (and (list? x) (andmap (lambda (x) (and (pair? x) (string? (car x)) (string? (cdr x)))) x))) @@ -10381,7 +10572,7 @@ (parameterize ([console-output-port (open-output-string)]) (eval '(lambda () (import (testfile-imno2)) y)) (get-output-string (console-output-port))) - "import: did not find source file \"testfile-imno2.chezscheme.sls\"\nimport: found source file \"testfile-imno2.ss\"\nimport: did not find corresponding object file \"testfile-imno2.so\"\nimport: loading source file \"testfile-imno2.ss\"\nimport: did not find source file \"testfile-imno1.chezscheme.sls\"\nimport: found source file \"testfile-imno1.ss\"\nimport: found corresponding object file \"testfile-imno1.so\"\nimport: object file is not older\nimport: loading object file \"testfile-imno1.so\"\n") + "import: did not find source file \"testfile-imno2.chezscheme.sls\"\nimport: found source file \"testfile-imno2.ss\"\nimport: did not find corresponding object file \"testfile-imno2.so\"\nimport: loading source file \"testfile-imno2.ss\"\nimport: did not find source file \"testfile-imno1.chezscheme.sls\"\nimport: found source file \"testfile-imno1.ss\"\nimport: found corresponding object file \"testfile-imno1.so\"\nimport: object file is not older\nimport: visiting object file \"testfile-imno1.so\"\nattempting to 'revisit' previously 'visited' \"testfile-imno1.so\" for library (testfile-imno1) run-time info\n") (eq? (import-notify #f) (void)) ) diff --git a/mats/Mf-base b/mats/Mf-base index f19e650bdc..78a28d3d66 100644 --- a/mats/Mf-base +++ b/mats/Mf-base @@ -106,10 +106,10 @@ cis = $(defaultcis) defaultspi = f spi = $(defaultspi) -# ehc defines the value to which $enable-check-heap is set: -# f for #f, t for #t -defaultehc = f -ehc = $(defaultehc) +# hci defines the value to which heap-check-interval (mat.ss) is set: +# 0 to disable, > 0 to enable +defaulthci = 0 +hci = $(defaulthci) # eoc determines whether object counts are enabled defaulteoc = t @@ -123,8 +123,15 @@ cl = $(defaultcl) defaultecpf = t ecpf = $(defaultecpf) +# c determines whether mat coverage (.covout) files are created +defaultc = f +c = $(defaultc) + +# set of coverage files to load +coverage-files = ../boot/$m/petite.covin ../boot/$m/scheme.covin + # set of mats to run -mats = primvars 3 4 5_1 5_2 5_3 5_4 5_5 bytevector thread\ +mats = primvars 3 4 5_1 5_2 5_3 5_4 5_5 bytevector thread profile\ misc cp0 cptypes 5_6 5_7 5_8 6 io format 7 record hash enum 8 fx fl cfl foreign\ ftype unix windows examples ieee date exceptions oop @@ -140,15 +147,15 @@ src = $(mats:%=%.ms) # prettysrc is src to use for pretty-print test; we leave out mat files # with cycles, e.g., primvars.ms, misc.ms, 4.ms, 5_1.ms, hash.ms -prettysrc = 3.ms 5_3.ms 5_4.ms 5_5.ms bytevector.ms\ - thread.ms 5_6.ms 5_7.ms 5_8.ms 6.ms io.ms format.ms 7.ms record.ms enum.ms 8.ms\ +prettysrc = 3.ms 5_3.ms 5_4.ms 5_5.ms bytevector.ms thread.ms profile.ms\ + 5_6.ms 5_7.ms 5_8.ms 6.ms io.ms format.ms 7.ms record.ms enum.ms 8.ms\ fx.ms fl.ms cfl.ms foreign.ms unix.ms windows.ms examples.ms ieee.ms date.ms\ exceptions.ms $(objdir)/%.mo : %.ms mat.so echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ '(collect-trip-bytes ${ctb})'\ @@ -161,6 +168,7 @@ $(objdir)/%.mo : %.ms mat.so '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ '(time ((mat-file "$(objdir)") "$*"))'\ '(unless (= (#%$$check-heap-errors) 0)'\ ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ @@ -171,7 +179,7 @@ $(objdir)/%.mo : %.ms mat.so %.mo : %.ms mat.so echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ '(collect-trip-bytes ${ctb})'\ @@ -184,6 +192,7 @@ $(objdir)/%.mo : %.ms mat.so '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ '(time ((mat-file ".") "$*"))'\ '(parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ '(unless (= (#%$$check-heap-errors) 0)'\ @@ -225,6 +234,21 @@ fastreport: $(MAKE) doerrors $(MAKE) doreport +docoverage: mat.so + if [ "$c" = "t" ] ; then\ + echo '(reset-handler abort) (combine-coverage-files "$(objdir)/all.covout" (quote ($(mats:%="$(objdir)/%.covout"))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "$(objdir)/all.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "$(objdir)/run.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + fi + +doallcoverage: mat.so + if [ "$c" = "t" ] ; then\ + echo '(reset-handler abort) (combine-coverage-files "all.covout" (map symbol->string (quote ($(shell echo */all.covout)))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "all.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (combine-coverage-files "run.covout" (map symbol->string (quote ($(shell echo */run.covout)))))' | ${Scheme} -q ${patchfile} mat.so ;\ + echo '(reset-handler abort) (coverage-percent "run.covout" ${coverage-files:%="%"})' | ${Scheme} -q ${patchfile} mat.so ;\ + fi + partialx: $(MAKE) allxhelp o=0 $(MAKE) allxhelp o=3 @@ -242,8 +266,9 @@ allx: prettyclean $(MAKE) allxhelp o=3 eval=interpret cl=6 $(MAKE) allxhelp o=0 eval=interpret cp0=t rmg=2 $(MAKE) allxhelp o=3 eval=interpret cp0=t rmg=2 - $(MAKE) allxhelp o=0 eoc=f ehc=t cl=9 - $(MAKE) allxhelp o=3 eval=interpret ehc=t rmg=2 + $(MAKE) allxhelp o=0 eoc=f hci=101 cl=9 + $(MAKE) allxhelp o=3 eval=interpret hci=101 rmg=2 + $(MAKE) doallcoverage just-reports: for EVAL in compile interpret ; do\ @@ -264,16 +289,17 @@ bullyx: bully: -$(MAKE) allxhelpnotall spi=t cp0=f - -$(MAKE) allxhelp spi=f cp0=f cl=9 ctb='(/ (collect-trip-bytes) 64)' ehc=t + -$(MAKE) allxhelp spi=f cp0=f cl=9 ctb='(/ (collect-trip-bytes) 64)' hci=503 -$(MAKE) allxhelp spi=t cp0=f cis=t cmg=1 - -$(MAKE) allxhelp spi=f cp0=f cis=t cmg=6 ehc=t + -$(MAKE) allxhelp spi=f cp0=f cis=t cmg=6 hci=101 -$(MAKE) allxhelp spi=t cp0=t ctb='(/ (collect-trip-bytes) 64)' cgr=6 - -$(MAKE) allxhelp spi=t cp0=f p=t eoc=f ehc=t - -$(MAKE) allxhelp spi=f cp0=t cl=9 p=t ehc=t + -$(MAKE) allxhelp spi=t cp0=f p=t eoc=f hci=101 + -$(MAKE) allxhelp spi=f cp0=t cl=9 p=t hci=101 -$(MAKE) allxhelp eval=interpret spi=f cp0=f -$(MAKE) allxhelp eval=interpret spi=f cp0=t - -$(MAKE) allxhelp eval=interpret spi=t cp0=f ctb='(/ (collect-trip-bytes) 64)' ehc=t - -$(MAKE) allxhelp eval=interpret spi=t cp0=t cgr=2 ehc=t p=t + -$(MAKE) allxhelp eval=interpret spi=t cp0=f ctb='(/ (collect-trip-bytes) 64)' hci=503 + -$(MAKE) allxhelp eval=interpret spi=t cp0=t cgr=2 hci=101 p=t + $(MAKE) doallcoverage allxhelp: $(MAKE) doheader @@ -283,7 +309,7 @@ allxhelp: doheader: printf "%s" "-------- o=$o" >> summary if [ "$(spi)" != "$(defaultspi)" ] ; then printf " spi=$(spi)" >> summary ; fi - if [ "$(ehc)" != "$(defaultehc)" ] ; then printf " ehc=$(ehc)" >> summary ; fi + if [ "$(hci)" != "$(defaulthci)" ] ; then printf " hci=$(hci)" >> summary ; fi if [ "$(ecpf)" != "$(defaultecpf)" ] ; then printf " ecpf(ecpf)" >> summary ; fi if [ "$(cp0)" != "$(defaultcp0)" ] ; then printf " cp0=$(cp0)" >> summary ; fi if [ "$(cis)" != "$(defaultcis)" ] ; then printf " cis=$(cis)" >> summary ; fi @@ -309,23 +335,25 @@ allxhelpnotall: $(MAKE) doheader hdrmsg="not all" -$(MAKE) $(MAKE) dosummary + $(MAKE) docoverage all0: ; $(MAKE) all o=0 all1: ; $(MAKE) all o=1 all2: ; $(MAKE) all o=2 all3: ; $(MAKE) all o=3 -all: makescript$o $(src) oop.ss ht.ss mat.so cat_flush ${fobj} m4test.in m4test.out prettytest.ss ftype.h freq.in freq.out ${patchfile} examples +all: makescript$o $(src) oop.ss ht.ss mat.so cat_flush ${fobj} m4test.in m4test.out prettytest.ss ftype.h freq.in freq.out ${patchfile} build-examples ${Scheme} --verbose -q mat.so ${patchfile} < script.all$o $(MAKE) doerrors $(MAKE) doreport + $(MAKE) docoverage script.all$o: Mf-base script.all$o makescript$o: echo '(optimize-level $o)'\ '(#%$$suppress-primitive-inlining #${spi})'\ - '(#%$$enable-check-heap #${ehc})'\ + '(heap-check-interval ${hci})'\ '(#%$$enable-check-prelex-flags #${ecpf})'\ '(compile-profile #$p)'\ '(collect-trip-bytes ${ctb})'\ @@ -338,12 +366,15 @@ script.all$o makescript$o: '(enable-cp0 #${cp0})'\ '(set! *scheme* "${Scheme}")'\ '(current-eval ${eval})'\ - '(time (for-each (mat-file "$(objdir)")'\ - ' (quote ($(mats:%="%")))))'\ - '(parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ - '(unless (= (#%$$check-heap-errors) 0)'\ - ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ - ' (abort))'\ + '(when #$c (coverage-table (load-coverage-files ${coverage-files:%="%"})))'\ + '(record-run-coverage "$(objdir)/run.covout"'\ + ' (lambda ()'\ + ' (time (for-each (lambda (x) (time ((mat-file "$(objdir)") x)))'\ + ' (quote ($(mats:%="%")))))'\ + ' (parameterize ([source-directories (quote ("." "../s"))]) (when #${pdhtml} (profile-dump-html)))'\ + ' (unless (= (#%$$check-heap-errors) 0)'\ + ' (fprintf (console-error-port) "check heap detected errors---grep standard output for !!!\n")'\ + ' (abort))))'\ > script.all$o source: @@ -373,23 +404,26 @@ bullyprettytest.ss: ${src} mat.so: ${patchfile} foreign.mo ${objdir}/foreign.mo: ${fobj} thread.mo ${objdir}/thread.mo: ${fobj} -examples.mo ${objdir}/examples.mo: m4test.in m4test.out freq.in freq.out examples +examples.mo ${objdir}/examples.mo: m4test.in m4test.out freq.in freq.out build-examples 6.mo ${objdir}/6.mo: prettytest.ss +bytevector.mo ${objdir}/bytevector.mo: prettytest.ss io.mo ${objdir}/io.mo: prettytest.ss unix.mo ${objdir}/unix.mo io.mo ${objdir}/io.mo 6.mo ${objdir}/6.mo: cat_flush oop.mo ${objdir}/oop.mo: oop.ss ftype.mo ${objdir}/ftype.mo: ftype.h hash.mo ${objdir}/hash.mo: ht.ss -examples: +build-examples: ( cd ../examples && ${MAKE} Scheme=${Scheme} ) + touch build-examples prettyclean: - rm -f *.o ${mdclean} *.so *.mo experr* errors* report* summary testfile* testscript\ + rm -f *.o ${mdclean} *.so *.mo *.covout experr* errors* report* summary testfile* testscript\ ${fobj} prettytest.ss cat_flush so_locations\ - script.all? *.html experr*.rej experr*.orig + build-examples script.all? *.html experr*.rej experr*.orig rm -rf testdir* rm -rf output-* + ( cd ../examples && ${MAKE} Scheme=${Scheme} clean ) clean: prettyclean rm -f Make.out diff --git a/mats/bytevector.ms b/mats/bytevector.ms index e018ef2592..ea574b7610 100644 --- a/mats/bytevector.ms +++ b/mats/bytevector.ms @@ -11275,9 +11275,8 @@ (number? (bytevector-ieee-double-native-ref immutable-100-bytevector 0)) ) - (mat bytevector-compress - (parameters [compress-format 'gzip 'lz4]) + (parameters [compress-format 'gzip 'lz4] [compress-level 'minimum 'low 'medium 'high 'maximum]) (error? (bytevector-compress 7)) (error? (bytevector-compress "hello")) (error? (bytevector-uncompress 7)) diff --git a/mats/cp0.ms b/mats/cp0.ms index 3669f36b8f..bc038e72f2 100644 --- a/mats/cp0.ms +++ b/mats/cp0.ms @@ -910,7 +910,7 @@ 'a) ; verify optimization of or pattern (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(lambda (x y) (if (not (or (fx< x y) (fx> y x))) x y)))) '(lambda (x.0 y.1) @@ -918,7 +918,7 @@ y.1 x.0))) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(lambda (x y) (if (or (fx< x y) (fx> y x)) x y)))) '(lambda (x y) (if (if (#2%fx< x y) #t (#3%fx> y x)) x y))) @@ -2845,7 +2845,7 @@ ; does push (make-message-condition y) because it is pure, even though one of the vars (z) is assigned '(lambda (y) (let ([z #f]) (#3%list (lambda () (set! z 15) z) (#3%make-message-condition y))))) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 2] [compile-profile #f]) (expand/optimize '(let () (define-record foo ((immutable boolean x))) @@ -2858,7 +2858,7 @@ #t e2)) (equivalent-expansion? - (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 3]) + (parameterize ([#%$suppress-primitive-inlining #f] [run-cp0 (lambda (cp0 x) (cp0 x))] [optimize-level 3] [compile-profile #f]) (expand/optimize '(let () (define-record foo ((immutable boolean x))) diff --git a/mats/foreign.ms b/mats/foreign.ms index a4bd7ac9df..7e2b7ff552 100644 --- a/mats/foreign.ms +++ b/mats/foreign.ms @@ -2970,8 +2970,8 @@ (check-union [x float 58.0] [y int 0]) (check-union [x double 68.0] [y int 0]) - ;; Check that `__collect_safe` saves a argument and result floating-point registers - ;; while activating and deacttiving a thread + ;; Check that `__collect_safe` saves argument and result floating-point registers + ;; while activating and deactivating a thread (let () (define-ftype T (struct [d double] [i integer-8] [n int])) (define sum_pre_double_double_double_double_double_double_double_double diff --git a/mats/hash.ms b/mats/hash.ms index 4cdfbc54a5..92b8324949 100644 --- a/mats/hash.ms +++ b/mats/hash.ms @@ -3942,19 +3942,20 @@ (with-output-to-file "testfile.ss" (lambda () (pretty-print - '(begin - (define-syntax $feh-ls + '(module ($feh-ls $feh-ht) + (define-syntax ls (let ([ls '(1 2 3)]) (lambda (x) #`(quote #,(datum->syntax #'* ls))))) + (define $feh-ls ls) (define $feh-ht (let () (define-syntax a (let ([ht (make-eq-hashtable)]) (eq-hashtable-set! ht 'q 'p) - (eq-hashtable-set! ht $feh-ls (cdr $feh-ls)) - (eq-hashtable-set! ht (cdr $feh-ls) (cddr $feh-ls)) - (eq-hashtable-set! ht (cddr $feh-ls) $feh-ls) + (eq-hashtable-set! ht ls (cdr ls)) + (eq-hashtable-set! ht (cdr ls) (cddr ls)) + (eq-hashtable-set! ht (cddr ls) ls) (lambda (x) #`(quote #,(datum->syntax #'* ht))))) a))))) 'replace) diff --git a/mats/mat.ss b/mats/mat.ss index 0ce883d717..8c660d2a75 100644 --- a/mats/mat.ss +++ b/mats/mat.ss @@ -40,8 +40,6 @@ (define enable-cp0 (make-parameter #f)) -(define mat-run) -(define mat-file) (define-syntax mat/cf (syntax-rules (testfile) [(_ (testfile ?path) expr ...) @@ -55,9 +53,9 @@ #t)] [(_ expr ...) (mat/cf (testfile "testfile") expr ...)])) -(let () +(define mat-output (make-parameter (current-output-port))) -(define *mat-output* (current-output-port)) +(let () (define mat-load (lambda (in) @@ -74,8 +72,8 @@ (if (warning? c) (raise-continuable c) (begin - (fprintf *mat-output* "Error reading mat input: ") - (display-condition c *mat-output*) + (fprintf (mat-output) "Error reading mat input: ") + (display-condition c (mat-output)) (reset)))) (lambda () (load in)))))))) @@ -174,10 +172,10 @@ (call-with-values (lambda () (#%$locate-source sfd fp #t)) (case-lambda - [() (fprintf *mat-output* "~a at char ~a of ~a~%" msg fp (source-file-descriptor-path sfd))] - [(path line char) (fprintf *mat-output* "~a at line ~a, char ~a of ~a~%" msg line char path)])))) - (fprintf *mat-output* "~a~%" msg)) - (flush-output-port *mat-output*)))) + [() (fprintf (mat-output) "~a at char ~a of ~a~%" msg fp (source-file-descriptor-path sfd))] + [(path line char) (fprintf (mat-output) "~a at line ~a, char ~a of ~a~%" msg line char path)])))) + (fprintf (mat-output) "~a~%" msg)) + (flush-output-port (mat-output))))) (define ununicode ; sanitizer for expected exception messages to make sure we don't end up @@ -192,6 +190,38 @@ [(fx> (char->integer c) 127) (fprintf op "U+~x" (char->integer c)) (f)] [else (write-char c op) (f)])))))) +(define store-coverage + (lambda (universe-ct ct path) + (call-with-port + (open-file-output-port path + (file-options replace compressed) + (buffer-mode block) + (current-transcoder)) + (lambda (op) + (put-source-table op + (if (eq? universe-ct ct) + ct + (let ([new-ct (make-source-table)]) + (for-each + (lambda (p) + (let ([src (car p)] [count (cdr p)]) + (when (source-table-contains? universe-ct src) + (source-table-set! new-ct src count)))) + (source-table-dump ct)) + new-ct))))))) + +(define load-coverage + (lambda (ct) + (lambda (path) + (call-with-port + (open-file-input-port path + (file-options compressed) + (buffer-mode block) + (current-transcoder)) + (lambda (ip) (get-source-table! ip ct +)))))) + +(set! coverage-table (make-parameter #f)) + (set! mat-file (lambda (dir) (unless (string? dir) @@ -199,71 +229,105 @@ (unless (file-exists? dir) (mkdir dir)) (lambda (mat) (unless (string? mat) - (errorf 'mat-file "~s is not a string" fn)) + (errorf 'mat-file "~s is not a string" mat)) (let ([ifn (format "~a.ms" mat)] [ofn (format "~a/~a.mo" dir mat)]) (printf "matting ~a with output to ~a~%" ifn ofn) (delete-file ofn #f) - (fluid-let ([*mat-output* (open-output-file ofn)]) + (parameterize ([mat-output (open-output-file ofn)]) (dynamic-wind (lambda () #f) - (lambda () (mat-load ifn)) - (lambda () (close-output-port *mat-output*)))))))) + (lambda () + (let ([go (lambda () (mat-load ifn))] [universe-ct (coverage-table)]) + (if universe-ct + (let-values ([(ct . ignore) (with-profile-tracker go)]) + (store-coverage universe-ct ct (format "~a/~a.covout" dir mat))) + (go)))) + (lambda () (close-output-port (mat-output))))))))) + +(set! record-run-coverage + (lambda (covout th) + (let ([universe-ct (coverage-table)]) + (if universe-ct + (let-values ([(ct . ignore) (with-profile-tracker #t th)]) + (store-coverage universe-ct ct covout)) + (th))))) + +(set! load-coverage-files + (lambda path* + (let ([ct (make-source-table)]) + (for-each (load-coverage ct) path*) + ct))) + +(set! combine-coverage-files + (lambda (covout covout*) + (let ([ct (make-source-table)]) + (for-each (load-coverage ct) covout*) + (store-coverage ct ct covout)))) + +(set! coverage-percent + (lambda (covout . covin*) + (let ([n (source-table-size (load-coverage-files covout))] + [d (source-table-size (apply load-coverage-files covin*))]) + (printf "~a: covered ~s of ~s source expressions (~s%)\n" + covout n d (round (/ (* n 100) d)))))) (set! mat-run - (case-lambda - [(name) - (fprintf *mat-output* "Warning: empty mat for ~s.~%" name)] - [(name . clauses) - (fprintf *mat-output* "~%Starting mat ~s.~%" name) - (do ([clauses clauses (cdr clauses)] - [count 1 (+ count 1)]) - ((null? clauses) 'done) - (let ([clause (caar clauses)] [source (cadar clauses)]) - (with-exception-handler - (lambda (c) - (if (warning? c) - (raise-continuable c) - (begin - (fprintf *mat-output* "Error printing mat clause: ") - (display-condition c *mat-output*) - (reset)))) - (lambda () - (pretty-print clause *mat-output*) - (flush-output-port *mat-output*))) - (if (and (list? clause) - (= (length clause) 2) - (memq (car clause) '(sanitized-error? error? warning?))) - (let ([expect (case (car clause) [(sanitized-error? error?) 'error] [(warning?) 'warning])]) - (if (and (= (optimize-level) 3) (eq? expect 'error)) - (fprintf *mat-output* "Ignoring error check at optimization level 3.~%") - (let ([ans (mat-one-exp expect (lambda () (eval (cadr clause))) (eq? (car clause) 'sanitized-error?))]) - (cond - [(and (pair? ans) (eq? (car ans) expect)) - (fprintf *mat-output* - "Expected ~s in mat ~s: \"~a\".~%" - expect name (ununicode (cdr ans)))] - [else - (mat-error source "Bug in mat ~s clause ~s" name count)])))) - (let ([ans (mat-one-exp #f (lambda () (eval clause)) #f)]) + (case-lambda + [(name) + (fprintf (mat-output) "Warning: empty mat for ~s.~%" name)] + [(name . clauses) + (fprintf (mat-output) "~%Starting mat ~s.~%" name) + ; release counters for reclaimed code objects between mat groups to reduce gc time + (when (compile-profile) (profile-release-counters)) + (do ([clauses clauses (cdr clauses)] + [count 1 (+ count 1)]) + ((null? clauses) 'done) + (let ([clause (caar clauses)] [source (cadar clauses)]) + (with-exception-handler + (lambda (c) + (if (warning? c) + (raise-continuable c) + (begin + (fprintf (mat-output) "Error printing mat clause: ") + (display-condition c (mat-output)) + (reset)))) + (lambda () + (pretty-print clause (mat-output)) + (flush-output-port (mat-output)))) + (if (and (list? clause) + (= (length clause) 2) + (memq (car clause) '(sanitized-error? error? warning?))) + (let ([expect (case (car clause) [(sanitized-error? error?) 'error] [(warning?) 'warning])]) + (if (and (= (optimize-level) 3) (eq? expect 'error)) + (fprintf (mat-output) "Ignoring error check at optimization level 3.~%") + (let ([ans (mat-one-exp expect (lambda () (eval (cadr clause))) (eq? (car clause) 'sanitized-error?))]) (cond - [(pair? ans) - (mat-error source - "Error in mat ~s clause ~s: \"~a\"" - name - count - (cdr ans))] - [(eq? ans 'false) - (mat-error source - "Bug in mat ~s clause ~s" - name - count)] - [(eq? ans 'true) (void)] - [else - (mat-error source - "Bug (nonboolean, nonstring return value) in mat ~s clause ~s" - name - count)])))))])) - + [(and (pair? ans) (eq? (car ans) expect)) + (fprintf (mat-output) + "Expected ~s in mat ~s: \"~a\".~%" + expect name (ununicode (cdr ans)))] + [else + (mat-error source "Bug in mat ~s clause ~s" name count)])))) + (let ([ans (mat-one-exp #f (lambda () (eval clause)) #f)]) + (cond + [(pair? ans) + (mat-error source + "Error in mat ~s clause ~s: \"~a\"" + name + count + (cdr ans))] + [(eq? ans 'false) + (mat-error source + "Bug in mat ~s clause ~s" + name + count)] + [(eq? ans 'true) (void)] + [else + (mat-error source + "Bug (nonboolean, nonstring return value) in mat ~s clause ~s" + name + count)])))))])) + );let (define equivalent-expansion? @@ -296,8 +360,7 @@ (and (fxvector? y) (fx= (fxvector-length x) (fxvector-length y)) (let f ([i (fx- (fxvector-length x) 1)]) - (if (fx< i 0) - k + (or (fx< i 0) (and (fx= (fxvector-ref x i) (fxvector-ref y i)) (f (fx1- i))))))] [(box? x) (and (box? y) (e? (unbox x) (unbox y)))] @@ -364,7 +427,7 @@ (list->string (subst #\\ #\/ (string->list p))) p))) -(module (separate-eval run-script separate-compile) +(module separate-eval-tools (separate-eval run-script separate-compile) (define (slurp ip) (with-output-to-string (lambda () @@ -383,7 +446,11 @@ (close-port to-stdin) (let* ([stdout-stuff (slurp from-stdout)] [stderr-stuff (slurp from-stderr)]) - (unless (string=? stderr-stuff "") (errorf who "~a" stderr-stuff)) + (when (string=? stderr-stuff "") + (printf "$separate-eval command succeeeded with\nSTDERR:\n~a\nSTDOUT:\n~a\nEND\n" stderr-stuff stdout-stuff)) + (unless (string=? stderr-stuff "") + (printf "$separate-eval command failed with\nSTDERR:\n~a\nSTDOUT:\n~a\nEND\n" stderr-stuff stdout-stuff) + (errorf who "~a" stderr-stuff)) (close-port from-stdout) (close-port from-stderr) stdout-stuff))) @@ -409,6 +476,7 @@ [(x) (separate-compile 'compile-file x)] [(cf x) ($separate-eval 'separate-compile `((,cf ,(if (symbol? x) (format "testfile-~a" x) x))))]))) +(import separate-eval-tools) #;(collect-request-handler (begin @@ -440,12 +508,13 @@ (define test-cp0-expansion (rec test-cp0-expansion (case-lambda - [(expr result) (test-cp0-expansion equivalent-expansion? expr result)] - [(equiv? expr result) - (equiv? - (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) - (expand/optimize `(let () (import scheme) ,expr))) - result)]))) + [(expr expected) (test-cp0-expansion equivalent-expansion? expr expected)] + [(equiv? expr expected) + (let ([actual (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f]) + (expand/optimize `(let () (import scheme) ,expr)))]) + (unless (equiv? actual expected) + (errorf 'test-cp0-expansion "expected ~s for ~s, got ~s\n" expected expr actual)) + #t)]))) (define rm-rf (lambda (path) @@ -474,3 +543,21 @@ (sleep (make-time 'time-duration 1000000 1)) (loop)))) #t)) + +(define preexisting-profile-dump-entry? + (let ([ht (make-eq-hashtable)]) + (for-each (lambda (x) (eq-hashtable-set! ht (car x) #t)) (profile-dump)) + (lambda (x) (eq-hashtable-contains? ht (car x))))) + +(define heap-check-interval (make-parameter 0)) + +(collect-request-handler + (let ([counter 0]) + (lambda () + (parameterize ([#%$enable-check-heap + (let ([interval (heap-check-interval)]) + (and (not (fx= interval 0)) + (let ([n (fxmod (fx+ counter 1) interval)]) + (set! counter n) + (fx= n 0))))]) + (collect))))) diff --git a/mats/misc.ms b/mats/misc.ms index 7bc5ab8d94..7bc101bc82 100644 --- a/mats/misc.ms +++ b/mats/misc.ms @@ -1614,639 +1614,6 @@ 0)) ) -(mat compile-profile - (error? ; invalid argument - (compile-profile 'src)) - (eqv? - (parameterize ([compile-profile #t]) - (compile-profile)) - 'source) - (eqv? - (parameterize ([compile-profile 'source]) - (compile-profile)) - 'source) - (eqv? - (parameterize ([compile-profile 'block]) - (compile-profile)) - 'block) - (error? ; incorrect argument count - (profile-dump '())) - (error? ; incorrect argument count - (profile-clear '())) - (error? ; incorrect argument count - (profile-dump-list #t '() 3)) - (error? ; invalid dump - (profile-dump-list #f 17)) - (error? ; invalid dump - (profile-dump-list #f '(17))) - (error? ; invalid dump - (profile-dump-list #f '((a . 17)))) - (error? ; invalid dump - (profile-dump-list #f `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; incorrect argument count - (profile-dump-html "" '() 3)) - (error? ; not a string - (profile-dump-html '(prefix))) - (error? ; invalid dump - (profile-dump-html "profile" 17)) - (error? ; invalid dump - (profile-dump-html "profile" '(17))) - (error? ; invalid dump - (profile-dump-html "profile" '((a . 17)))) - (error? ; invalid dump - (profile-dump-html "profile" `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; incorrect argument count - (profile-dump-data)) - (error? ; incorrect argument count - (profile-dump-data "profile.data" '() 'q)) - (error? ; not a string - (profile-dump-data #t)) - (error? ; invalid dump - (profile-dump-data "profile.data" 17)) - (error? ; invalid dump - (profile-dump-data "profile.data" '(17))) - (error? ; invalid dump - (profile-dump-data "profile.data" '((a . 17)))) - (error? ; invalid dump - (profile-dump-data "profile.data" `((,(make-source-object (source-file-descriptor "abc" 34) 0 3) . q)))) - (error? ; not a string - (profile-load-data 'what?)) - (eqv? (parameterize ([compile-profile #t]) - (compile - '(let () - (define (f x) (if (= x 0) 1 (* x (f (- x 1))))) - (f 3)))) - 6) - (eqv? (parameterize ([compile-profile #t]) - (compile - '(let () - (define fat+ - (lambda (x y) - (if (zero? y) - x - (fat+ (1+ x) (1- y))))) - (define fatfib - (lambda (x) - (if (< x 2) - 1 - (fat+ (fatfib (1- x)) (fatfib (1- (1- x))))))) - (fatfib 20)))) - 10946) - (equal? - (parameterize ([compile-profile #t]) - (compile - '(let () - (define $values (lambda (n) (lambda () (apply values (make-list n))))) - (define foo - (lambda (n) - (call/cc - (lambda (k) - (with-exception-handler - (lambda (c) (collect) (k 'okay)) - (lambda () - (define f (case-lambda)) - (let ([x (random 10)]) - (call-with-values ($values n) f)))))))) - (list (foo 0) (foo 1) (foo 3) (foo 10) (foo 100) (foo 1000))))) - '(okay okay okay okay okay okay)) - ; no longer recording (useless) profiling information when source file & position aren't available - #;(let ([ls (profile-dump)]) - (and (list? ls) - (not (null? ls)))) - (eqv? (profile-clear) (void)) - (or (eq? (compile-profile) 'source) (andmap zero? (map cdr (profile-dump)))) - (begin (set! cp-fatfib (void)) #t) ; release fatfib - - (begin (define $old-cp (compile-profile)) #t) - ; this collect is here to make it more likely that we won't get a generation 1 - ; collection cementing in place the code that defines cp-fact - (begin (collect 1) #t) - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile 'source)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (eq? (compile-profile) $old-cp) - ; drop code that defines cp-fact so it won't show up in profile-dump-list in - ; hopes of resolving potential issue with comparison to pdl further down - (begin (collect (collect-maximum-generation)) #t) - (= (cp-fact 10) 3628800) - (begin - (define-values (pdl pdl2) - (with-interrupts-disabled - (values - (profile-dump-list #t (profile-dump)) - (profile-dump-list)))) - #t) - (equal? pdl pdl2) - (not (null? pdl)) - (begin - (rm-rf "testdir") - (mkdir "testdir") - (parameterize ([gensym-prefix 0]) (profile-dump-html "testdir/" (profile-dump))) - #t) - (file-exists? "testdir/profile.html") - (file-exists? "testdir/testfile.ss.html") - - (begin (define $old-cp (compile-profile)) #t) - (mat/cf (testfile "testfile-block") - (eval-when (compile) (compile-profile 'block)) - (define (cp-fact-block x) (if (= x 0) 1 (* x (cp-fact-block (- x 1)))))) - (eq? (compile-profile) $old-cp) - (= (cp-fact-block 10) 3628800) - (or (equal? (compile-profile) 'source) (equal? (profile-dump-list) pdl)) - (begin - (profile-dump-html) - #t) - (file-exists? "profile.html") - (file-exists? "testfile.ss.html") - (not (file-exists? "testfile2.ss.html")) - - (eqv? (profile-clear) (void)) - - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile #t)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (= (cp-fact 10) 3628800) - (eqv? (profile-dump-data "testfile1.pd") (void)) - (file-exists? "testfile1.pd") - (eqv? (profile-load-data "testfile1.pd") (void)) - (begin - (define $cp-ip (open-file-input-port "testfile.ss")) - (define $cp-sfd (make-source-file-descriptor "testfile.ss" $cp-ip)) - (define $qw (lambda (bfp efp) (profile-query-weight (make-source-object $cp-sfd bfp efp)))) - #t) - - (eqv? (close-port $cp-ip) (void)) - - (eqv? ($qw 0 0) 0.0) ; bfp, efp combination not in database - (eqv? ; file not in database - (let* ([ip (open-file-input-port "Mf-base")] - [sfd (make-source-file-descriptor "Mf-base" ip)]) - (close-port ip) - (profile-query-weight (make-source-object sfd 0 0))) - #f) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 0 42)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 43 102)) - (eqv? ($qw 63 101) 1.0) - (eqv? ($qw 75 76) (fl/ 1.0 11.0)) - (eqv? ($qw 77 100) (fl/ 10.0 11.0)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0))) #t)) ($qw 103 127)) - (eqv? ($qw 119 126) 0.0) - (eqv? ($qw 120 125) 0.0) - (eqv? (profile-clear) (void)) - (= (cp-fact 5) 120) - (eqv? (profile-dump-data "testfile2.pd") (void)) - (eqv? (profile-load-data "testfile2.pd") (void)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 0 42)) - (eqv? ($qw 21 40) 0.0) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 43 102)) - (eqv? ($qw 63 101) 1.0) - (eqv? ($qw 75 76) (fl/ (fl+ (/ 1.0 11.0) (fl/ 1.0 6.0)) 2.0)) - (eqv? ($qw 77 100) (fl/ (fl+ (fl/ 10.0 11.0) (fl/ 5.0 6.0)) 2.0)) - ((lambda (x) (and (memv x (list 0.0 (/ 1.0 11.0) (fl/ (/ 1.0 11.0) 2.0))) #t)) ($qw 103 127)) - (eqv? ($qw 119 126) 0.0) - (eqv? ($qw 120 125) 0.0) - (eqv? (profile-clear) (void)) - - ; make sure all is well when compiled with source profile info - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile 'block)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (eqv? (profile-dump-data "testfile3.pd") (void)) - (file-exists? "testfile3.pd") - (eqv? (profile-load-data "testfile3.pd") (void)) - ; and again with block profile info - (mat/cf (testfile "testfile") - (eval-when (compile) (compile-profile #f)) - (define (cp-fact x) (if (= x 0) 1 (* x (cp-fact (- x 1)))))) - (= (cp-fact 5) 120) - - (eqv? (profile-clear-database) (void)) - (eqv? ($qw 0 42) #f) - (eqv? ($qw 77 100) #f) - - ; make sure record-ref, record-type, and record-cd are properly handled by - ; find-source in pdhtml - (mat/cf - (eval-when (compile) (compile-profile #t)) - (library (A) (export make-foo foo? foo-x) (import (chezscheme)) (define-record-type foo (fields x))) - (let () - (import (A)) - (define add-foo-xs - (lambda ls - (let f ([ls ls] [sum 0]) - (if (null? ls) sum (f (cdr ls) (+ (foo-x (car ls)) sum)))))) - ; make sure this is still around when we call profile-dump-list - (set! $add-foo-xs add-foo-xs) - (pretty-print (add-foo-xs (make-foo 1) (make-foo 2) (make-foo 3))))) - (not (null? (profile-dump-list))) - (eqv? (profile-clear) (void)) - (begin (set! $add-foo-xs #f) #t) - - (vector? (profile-palette)) - (vector? - (parameterize ([profile-palette (vector-map - (lambda (p) (cons "white" (car p))) - (profile-palette))]) - (profile-palette))) - (parameterize ([profile-palette - '#(("black" . "white") - ("red" . "white") - ("blue" . "black"))]) - (= (vector-length (profile-palette)) 3)) - (error? (profile-palette '#())) - (error? (profile-palette '#(("black" . "white")))) - (error? (profile-palette '#(("black" . "white") ("red" . "white")))) - (error? - (profile-palette - '#(("black" . "white") - #("red" "white") - ("blue" . "black")))) - (error? - (profile-palette - '#(("black" . "white") - ("red" . "white") - ("blue" . black)))) - (error? - (profile-palette - '#(("black" . "white") - ("red" . "white") - (#x0000ff . "black")))) - ; test for proper counts in the presence of control operators - (begin - (define $return) - (define $retry) - (with-output-to-file "testfile-cp1.ss" - (lambda () - (display-string "\ -(define $frumble - (lambda (ls) - (if (null? ls) - 1 - (let ([n (car ls)]) - (if (eqv? n 0) - (call/cc (lambda (k) (set! $retry k) ($return 0))) - (let ([q ($frumble (cdr ls))]) - (add1 (* q n)))))))) -")) - 'replace) - (profile-clear) - (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f] [optimize-level 2] [compile-profile #t]) - (load "testfile-cp1.ss" compile)) - #t) - (eqv? - ($frumble (make-list 100 5)) - 9860761315262647567646607066034827870915080438862787559628486633300781) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp1.ss")) (profile-dump-list)) - '((101 "testfile-cp1.ss" 36 258 3 5) - (101 "testfile-cp1.ss" 40 50 3 9) - (101 "testfile-cp1.ss" 41 46 3 10) - (101 "testfile-cp1.ss" 47 49 3 16) - (100 "testfile-cp1.ss" 69 257 5 9) - (100 "testfile-cp1.ss" 78 86 5 18) - (100 "testfile-cp1.ss" 79 82 5 19) - (100 "testfile-cp1.ss" 83 85 5 23) - (100 "testfile-cp1.ss" 99 256 6 11) - (100 "testfile-cp1.ss" 103 113 6 15) - (100 "testfile-cp1.ss" 104 108 6 16) - (100 "testfile-cp1.ss" 109 110 6 21) - (100 "testfile-cp1.ss" 111 112 6 23) - (100 "testfile-cp1.ss" 193 255 8 15) - (100 "testfile-cp1.ss" 202 221 8 24) - (100 "testfile-cp1.ss" 203 211 8 25) - (100 "testfile-cp1.ss" 212 220 8 34) - (100 "testfile-cp1.ss" 213 216 8 35) - (100 "testfile-cp1.ss" 217 219 8 39) - (100 "testfile-cp1.ss" 240 254 9 17) - (100 "testfile-cp1.ss" 241 245 9 18) - (100 "testfile-cp1.ss" 246 253 9 23) - (100 "testfile-cp1.ss" 247 248 9 24) - (100 "testfile-cp1.ss" 249 250 9 26) - (100 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 0 260 1 1) - (1 "testfile-cp1.ss" 19 259 2 3) - (1 "testfile-cp1.ss" 59 60 4 9) - (0 "testfile-cp1.ss" 128 178 7 15) - (0 "testfile-cp1.ss" 129 136 7 16) - (0 "testfile-cp1.ss" 137 177 7 24) - (0 "testfile-cp1.ss" 149 164 7 36) - (0 "testfile-cp1.ss" 162 163 7 49) - (0 "testfile-cp1.ss" 165 176 7 52) - (0 "testfile-cp1.ss" 166 173 7 53) - (0 "testfile-cp1.ss" 174 175 7 61))) - (eqv? - (call/cc - (lambda (k) - (set! $return k) - (let ([ans ($frumble (append (make-list 50 5) (list 0) (make-list 50 7)))]) - ($return ans)))) - 0) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp1.ss")) (profile-dump-list)) - '((152 "testfile-cp1.ss" 36 258 3 5) - (152 "testfile-cp1.ss" 40 50 3 9) - (152 "testfile-cp1.ss" 41 46 3 10) - (152 "testfile-cp1.ss" 47 49 3 16) - (151 "testfile-cp1.ss" 69 257 5 9) - (151 "testfile-cp1.ss" 78 86 5 18) - (151 "testfile-cp1.ss" 79 82 5 19) - (151 "testfile-cp1.ss" 83 85 5 23) - (151 "testfile-cp1.ss" 99 256 6 11) - (151 "testfile-cp1.ss" 103 113 6 15) - (151 "testfile-cp1.ss" 104 108 6 16) - (151 "testfile-cp1.ss" 109 110 6 21) - (151 "testfile-cp1.ss" 111 112 6 23) - (150 "testfile-cp1.ss" 193 255 8 15) - (150 "testfile-cp1.ss" 202 221 8 24) - (150 "testfile-cp1.ss" 203 211 8 25) - (150 "testfile-cp1.ss" 212 220 8 34) - (150 "testfile-cp1.ss" 213 216 8 35) - (150 "testfile-cp1.ss" 217 219 8 39) - (100 "testfile-cp1.ss" 240 254 9 17) - (100 "testfile-cp1.ss" 241 245 9 18) - (100 "testfile-cp1.ss" 246 253 9 23) - (100 "testfile-cp1.ss" 247 248 9 24) - (100 "testfile-cp1.ss" 249 250 9 26) - (100 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 0 260 1 1) - (1 "testfile-cp1.ss" 19 259 2 3) - (1 "testfile-cp1.ss" 59 60 4 9) - (1 "testfile-cp1.ss" 128 178 7 15) - (1 "testfile-cp1.ss" 129 136 7 16) - (1 "testfile-cp1.ss" 137 177 7 24) - (1 "testfile-cp1.ss" 149 164 7 36) - (1 "testfile-cp1.ss" 162 163 7 49) - (1 "testfile-cp1.ss" 165 176 7 52) - (1 "testfile-cp1.ss" 166 173 7 53) - (1 "testfile-cp1.ss" 174 175 7 61))) - (eqv? - (call/cc - (lambda (k) - (set! $return k) - ($retry 1))) - 111022302462515654042363166809082031) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp1.ss")) (profile-dump-list)) - '((152 "testfile-cp1.ss" 36 258 3 5) - (152 "testfile-cp1.ss" 40 50 3 9) - (152 "testfile-cp1.ss" 41 46 3 10) - (152 "testfile-cp1.ss" 47 49 3 16) - (151 "testfile-cp1.ss" 69 257 5 9) - (151 "testfile-cp1.ss" 78 86 5 18) - (151 "testfile-cp1.ss" 79 82 5 19) - (151 "testfile-cp1.ss" 83 85 5 23) - (151 "testfile-cp1.ss" 99 256 6 11) - (151 "testfile-cp1.ss" 103 113 6 15) - (151 "testfile-cp1.ss" 104 108 6 16) - (151 "testfile-cp1.ss" 109 110 6 21) - (151 "testfile-cp1.ss" 111 112 6 23) - (150 "testfile-cp1.ss" 193 255 8 15) - (150 "testfile-cp1.ss" 202 221 8 24) - (150 "testfile-cp1.ss" 203 211 8 25) - (150 "testfile-cp1.ss" 212 220 8 34) - (150 "testfile-cp1.ss" 213 216 8 35) - (150 "testfile-cp1.ss" 217 219 8 39) - (150 "testfile-cp1.ss" 240 254 9 17) - (150 "testfile-cp1.ss" 241 245 9 18) - (150 "testfile-cp1.ss" 246 253 9 23) - (150 "testfile-cp1.ss" 247 248 9 24) - (150 "testfile-cp1.ss" 249 250 9 26) - (150 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 0 260 1 1) - (1 "testfile-cp1.ss" 19 259 2 3) - (1 "testfile-cp1.ss" 59 60 4 9) - (1 "testfile-cp1.ss" 128 178 7 15) - (1 "testfile-cp1.ss" 129 136 7 16) - (1 "testfile-cp1.ss" 137 177 7 24) - (1 "testfile-cp1.ss" 149 164 7 36) - (1 "testfile-cp1.ss" 162 163 7 49) - (1 "testfile-cp1.ss" 165 176 7 52) - (1 "testfile-cp1.ss" 166 173 7 53) - (1 "testfile-cp1.ss" 174 175 7 61))) - (begin - (collect (collect-maximum-generation)) ; drop code object for the define and lambda - (profile-release-counters) ; drop proile information for the dropped code object - #t) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp1.ss")) (profile-dump-list)) - '((152 "testfile-cp1.ss" 36 258 3 5) - (152 "testfile-cp1.ss" 40 50 3 9) - (152 "testfile-cp1.ss" 41 46 3 10) - (152 "testfile-cp1.ss" 47 49 3 16) - (151 "testfile-cp1.ss" 69 257 5 9) - (151 "testfile-cp1.ss" 78 86 5 18) - (151 "testfile-cp1.ss" 79 82 5 19) - (151 "testfile-cp1.ss" 83 85 5 23) - (151 "testfile-cp1.ss" 99 256 6 11) - (151 "testfile-cp1.ss" 103 113 6 15) - (151 "testfile-cp1.ss" 104 108 6 16) - (151 "testfile-cp1.ss" 109 110 6 21) - (151 "testfile-cp1.ss" 111 112 6 23) - (150 "testfile-cp1.ss" 193 255 8 15) - (150 "testfile-cp1.ss" 202 221 8 24) - (150 "testfile-cp1.ss" 203 211 8 25) - (150 "testfile-cp1.ss" 212 220 8 34) - (150 "testfile-cp1.ss" 213 216 8 35) - (150 "testfile-cp1.ss" 217 219 8 39) - (150 "testfile-cp1.ss" 240 254 9 17) - (150 "testfile-cp1.ss" 241 245 9 18) - (150 "testfile-cp1.ss" 246 253 9 23) - (150 "testfile-cp1.ss" 247 248 9 24) - (150 "testfile-cp1.ss" 249 250 9 26) - (150 "testfile-cp1.ss" 251 252 9 28) - (1 "testfile-cp1.ss" 59 60 4 9) - (1 "testfile-cp1.ss" 128 178 7 15) - (1 "testfile-cp1.ss" 129 136 7 16) - (1 "testfile-cp1.ss" 137 177 7 24) - (1 "testfile-cp1.ss" 149 164 7 36) - (1 "testfile-cp1.ss" 162 163 7 49) - (1 "testfile-cp1.ss" 165 176 7 52) - (1 "testfile-cp1.ss" 166 173 7 53) - (1 "testfile-cp1.ss" 174 175 7 61))) - ; test profiling with compiled files - (begin - (with-output-to-file "testfile-cp2.ss" - (lambda () - (display-string "\ -(define cp2-fib - (rec fib - (lambda (n) - (cond - [(fx= n 0) 1] - [(fx= n 1) 1] - [else (+ (fib (- n 1)) (fib (- n 2)))])))) -")) - 'replace) - (parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f] [optimize-level 2] [compile-profile #t]) - (compile-file "testfile-cp2")) - (profile-clear) - (load "testfile-cp2.so") - #t) - (eqv? (cp2-fib 10) 89) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp2.ss")) (profile-dump-list)) - '((177 "testfile-cp2.ss" 49 146 4 7) - (177 "testfile-cp2.ss" 64 73 5 10) - (177 "testfile-cp2.ss" 65 68 5 11) - (177 "testfile-cp2.ss" 69 70 5 15) - (177 "testfile-cp2.ss" 71 72 5 17) - (143 "testfile-cp2.ss" 86 95 6 10) - (143 "testfile-cp2.ss" 87 90 6 11) - (143 "testfile-cp2.ss" 91 92 6 15) - (143 "testfile-cp2.ss" 93 94 6 17) - (88 "testfile-cp2.ss" 113 144 7 15) - (88 "testfile-cp2.ss" 114 115 7 16) - (88 "testfile-cp2.ss" 116 129 7 18) - (88 "testfile-cp2.ss" 117 120 7 19) - (88 "testfile-cp2.ss" 121 128 7 23) - (88 "testfile-cp2.ss" 122 123 7 24) - (88 "testfile-cp2.ss" 124 125 7 26) - (88 "testfile-cp2.ss" 126 127 7 28) - (88 "testfile-cp2.ss" 130 143 7 32) - (88 "testfile-cp2.ss" 131 134 7 33) - (88 "testfile-cp2.ss" 135 142 7 37) - (88 "testfile-cp2.ss" 136 137 7 38) - (88 "testfile-cp2.ss" 138 139 7 40) - (88 "testfile-cp2.ss" 140 141 7 42) - (55 "testfile-cp2.ss" 96 97 6 20) - (34 "testfile-cp2.ss" 74 75 5 20) - (1 "testfile-cp2.ss" 0 149 1 1) - (1 "testfile-cp2.ss" 18 148 2 3) - (1 "testfile-cp2.ss" 23 26 2 8) - (1 "testfile-cp2.ss" 31 147 3 5))) - (begin - (collect (collect-maximum-generation)) ; drop code object for the define and lambda - (profile-release-counters) ; drop proile information for the dropped code object - #t) - (equal? - (filter (lambda (x) (equal? (cadr x) "testfile-cp2.ss")) (profile-dump-list)) - '((177 "testfile-cp2.ss" 49 146 4 7) - (177 "testfile-cp2.ss" 64 73 5 10) - (177 "testfile-cp2.ss" 65 68 5 11) - (177 "testfile-cp2.ss" 69 70 5 15) - (177 "testfile-cp2.ss" 71 72 5 17) - (143 "testfile-cp2.ss" 86 95 6 10) - (143 "testfile-cp2.ss" 87 90 6 11) - (143 "testfile-cp2.ss" 91 92 6 15) - (143 "testfile-cp2.ss" 93 94 6 17) - (88 "testfile-cp2.ss" 113 144 7 15) - (88 "testfile-cp2.ss" 114 115 7 16) - (88 "testfile-cp2.ss" 116 129 7 18) - (88 "testfile-cp2.ss" 117 120 7 19) - (88 "testfile-cp2.ss" 121 128 7 23) - (88 "testfile-cp2.ss" 122 123 7 24) - (88 "testfile-cp2.ss" 124 125 7 26) - (88 "testfile-cp2.ss" 126 127 7 28) - (88 "testfile-cp2.ss" 130 143 7 32) - (88 "testfile-cp2.ss" 131 134 7 33) - (88 "testfile-cp2.ss" 135 142 7 37) - (88 "testfile-cp2.ss" 136 137 7 38) - (88 "testfile-cp2.ss" 138 139 7 40) - (88 "testfile-cp2.ss" 140 141 7 42) - (55 "testfile-cp2.ss" 96 97 6 20) - (34 "testfile-cp2.ss" 74 75 5 20))) - (eqv? (profile-clear) (void)) - (begin - (with-output-to-file "testfile.ss" - (lambda () - (pretty-print - '(define f (lambda () 0)))) - 'replace) - (parameterize ([compile-profile #t]) (load "testfile.ss" compile)) - #t) - (begin - (with-output-to-file "testfile.ss" - (lambda () - (pretty-print - '(define f (lambda () 1)))) - 'replace) - #t) - (eqv? (f) 0) - (warning? ; unmodified source file not found - (profile-dump-list)) - (warning? ; unmodified source file not found - (profile-dump-list #t)) - (warning? ; unmodified source file not found - (profile-dump-list #t (profile-dump))) - (warning? ; unmodified source file not found - (profile-dump-list #t (profile-dump))) - (guard (c [else #f]) - (profile-dump-list #f) - #t) - (guard (c [else #f]) - (profile-dump-list #f (profile-dump)) - #t) - (eqv? (profile-clear) (void)) -) - -(mat profile-form - (error? ; invalid syntax - (profile)) - (error? ; invalid syntax - (profile 1 2 3)) - (error? ; not a source object - (profile 3)) - (begin - (define str "(ugh (if \x3b2;))") - (define bv (string->utf8 str)) - (define ip (open-bytevector-input-port bv)) - (define sfd (make-source-file-descriptor "foo" ip #t)) - #t) - (eq? (eval `(profile ,(make-source-object sfd 2 3))) (void)) - (begin - (define compile-triv-file - (lambda (ifn ofn) - (define insert-profile-forms - (lambda (x) - (unless (annotation? x) (errorf 'compile-triv-file "expected an annotation, got ~s" x)) - (let ([src (annotation-source x)] [exp (annotation-expression x)]) - `(begin (profile ,src) - ,(syntax-case exp () - [(?do-times n e) - (eq? (annotation-expression #'?do-times) 'do-times) - (let ([n (annotation-expression #'n)]) - `(do ([i ,n (fx- i 1)]) ((fx= i 0)) ,(insert-profile-forms #'e)))] - [(?print string) - (eq? (annotation-expression #'?print) 'print) - `(printf "~a\n" ,(annotation-expression #'string))] - [else (syntax-error exp)]))))) - (define parse - (lambda (ifn) - (let ([ip (open-file-input-port ifn)]) - (let ([sfd (make-source-file-descriptor ifn ip #t)]) - (let ([ip (transcoded-port ip (native-transcoder))]) - (let f ([bfp 0]) - (let-values ([(x bfp) (get-datum/annotations ip sfd bfp)]) - (if (eof-object? x) - (begin (close-port ip) '()) - (cons x (f bfp)))))))))) - (parameterize ([compile-profile 'source] [generate-profile-forms #f]) - (compile-to-file (list `(define (triv) ,@(map insert-profile-forms (parse ifn)))) ofn)))) - #t) - (begin - (with-output-to-file "testfile-triv.ss" - (lambda () - (pretty-print '(do-times 10 (print "hello"))) - (pretty-print '(do-times 5 (print "goodbye")))) - 'replace) - (compile-triv-file "testfile-triv.ss" "testfile-triv.so") - (load "testfile-triv.so") - #t) - (equal? - (with-output-to-string triv) - "hello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\nhello\ngoodbye\ngoodbye\ngoodbye\ngoodbye\ngoodbye\n") - (equal? - (sort - ; sort by bfp - (lambda (x y) (< (list-ref x 2) (list-ref y 2))) - (filter (lambda (x) (equal? (list-ref x 1) "testfile-triv.ss")) (profile-dump-list))) - '((1 "testfile-triv.ss" 0 29 1 1) - (10 "testfile-triv.ss" 13 28 1 14) - (1 "testfile-triv.ss" 30 60 2 1) - (5 "testfile-triv.ss" 42 59 2 13))) - (eqv? (profile-clear) (void)) -) - (mat generate-procedure-source-information (begin (define the-source @@ -2316,11 +1683,12 @@ 'replace) (with-output-to-file "testfile-sff-1c.ss" (lambda () + (pretty-print '(define preexisting-entries (length (profile-dump)))) (pretty-print '(eval-when (compile) (import (add-prefix (testfile-sff-1a) sff-1a-)))) (pretty-print '(eval-when (compile) (import (add-prefix (testfile-sff-1b) sff-1b-)))) (pretty-print '(pretty-print (list (sff-1a-x 3) sff-1b-y))) (pretty-print '(pretty-print (not (((inspect/object sff-1a-x) 'code) 'source)))) - (pretty-print '(pretty-print (null? (profile-dump-list))))) + (pretty-print '(pretty-print (= (length (profile-dump)) preexisting-entries)))) 'replace) (separate-compile '(lambda (x) @@ -2330,65 +1698,50 @@ (compile-file x))) 'sff-1c) #t) + (begin + (define (go) + (separate-eval + '(define preexisting-entries + (with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () (length (profile-dump-list))))) + '(import (testfile-sff-1a)) + '(import (testfile-sff-1b)) + '(define-syntax so? + (lambda (x) + (syntax-case x () + [(_ q) (and (syntax->annotation #'q) #t)]))) + '(list a (b so?) (x 3) y) + '(not (((inspect/object x) 'code) 'source)) + '(define all-entries + (with-exception-handler + (lambda (c) (unless (warning? c) (raise-continuable c))) + (lambda () (length (profile-dump-list))))) + '(= all-entries preexisting-entries))) + #t) (equal? - (separate-eval - '(import (testfile-sff-1a)) - '(import (testfile-sff-1b)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#f\n#f\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options inspector-source)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options inspector-source)) (equal? - (separate-eval - '(import (testfile-sff-1a)) - '(import (testfile-sff-1b)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#t\n#f\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options profile-source)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options profile-source)) (equal? - (separate-eval - '(import (testfile-sff-1b)) - '(import (testfile-sff-1a)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #t 6 24)\n#t\n#t\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options source-annotations)) (strip-and-check "testfile-sff-1b.so" "testfile-sff-1b.so" (fasl-strip-options source-annotations)) (equal? - (separate-eval - '(import (testfile-sff-1b)) - '(import (testfile-sff-1a)) - '(define-syntax so? - (lambda (x) - (syntax-case x () - [(_ q) (and (syntax->annotation #'q) #t)]))) - '(list a (b so?) (x 3) y) - '(not (((inspect/object x) 'code) 'source)) - '(null? (profile-dump-list))) + (go) "(120 #f 6 24)\n#t\n#t\n") (strip-and-check "testfile-sff-1a.so" "testfile-sff-1a.so" (fasl-strip-options compile-time-information)) @@ -2404,8 +1757,8 @@ '(expand 'b) '(load "testfile-sff-1c.so") '(guard (c [else (display-condition c) (newline) #t]) (eval '(import (testfile-sff-1b))))) - "Exception: loading testfile-sff-1b.so did not define compile-time information for library (testfile-sff-1b)\n#t\n\ - Exception: loading testfile-sff-1a.so did not define compile-time information for library (testfile-sff-1a)\n#t\n\ + "Exception: loading testfile-sff-1b.so did not define library (testfile-sff-1b)\n#t\n\ + Exception: loading testfile-sff-1a.so did not define library (testfile-sff-1a)\n#t\n\ a\nb\n\ (6 24)\n#t\n#t\n\ Exception: loading testfile-sff-1b.so did not define compile-time information for library (testfile-sff-1b)\n#t\n\ @@ -2470,6 +1823,53 @@ (strip-fasl-file "testfile-sff-3.so" "testfile-sff-3.so" (fasl-strip-options compile-time-information)) (= (object-file-size "testfile-sff-3.so") n)) + (begin + (mkfile "testfile-sff-4.ss" + '(library (testfile-sff-4) (export a b c) (import (chezscheme)) + (define-syntax a (identifier-syntax 12)) + (define b 13) + (meta define c 14))) + (mkfile "testfile-sff-4p.ss" + '(import (chezscheme) (testfile-sff-4)) + '(write b)) + (separate-compile + '(lambda (x) (parameterize ([compile-imported-libraries #t]) (compile-program x))) + 'sff-4p) + #t) + (equal? + (separate-eval + '(let () + (import (testfile-sff-4)) + (define-syntax cc (lambda (x) c)) + (printf "a = ~s, b = ~s, c = ~s\n" a b cc))) + "a = 12, b = 13, c = 14\n") + (equal? + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval 'a (environment '(testfile-sff-4)))))) + "b = 13, a = 12\n") + (begin + (strip-fasl-file "testfile-sff-4.so" "testfile-sff-4.so" + (fasl-strip-options compile-time-information)) + #t) + (error? ; no compile-time info + (separate-eval + '(let () + (import (testfile-sff-4)) + (list a b)))) + (error? ; no compile-time info + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval 'a (environment '(testfile-sff-4))))))) + (error? ; no compile-time info + (separate-eval + '(let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval '(let () (import (testfile-sff-4)) a)))))) + (error? ; no compile-time info + (separate-eval + '(parameterize ([import-notify #t]) + (let ([x (with-output-to-string (lambda () (load-program "testfile-sff-4p.so")))]) + (printf "b = ~a, a = ~s\n" x (eval '(let () (import (testfile-sff-4)) a))))))) ) (mat $fasl-file-equal? @@ -5458,6 +4858,12 @@ ) +(mat show-allocation + (begin + (#%$show-allocation #t) + #t) +) + (mat current-generate-id (begin (define (make-x-generator) @@ -5658,5 +5064,4 @@ (< (* 0.75 $pre-allocated) (bytes-allocated) (* 1.25 $pre-allocated))) - ) diff --git a/mats/patch-compile-0-f-t-f b/mats/patch-compile-0-f-t-f index 992cff08ab..926e6cef72 100644 --- a/mats/patch-compile-0-f-t-f +++ b/mats/patch-compile-0-f-t-f @@ -1,7 +1,7 @@ -*** errors-compile-0-f-f-f 2019-07-26 13:30:16.000000000 -0400 ---- errors-compile-0-f-t-f 2019-07-26 13:41:01.000000000 -0400 +*** errors-compile-0-f-f-f 2020-02-22 12:22:03.000000000 -0700 +--- errors-compile-0-f-t-f 2020-02-22 12:57:01.000000000 -0700 *************** -*** 125,131 **** +*** 254,260 **** 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable c". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable m". @@ -9,7 +9,7 @@ 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable y". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". ---- 125,131 ---- +--- 254,260 ---- 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable c". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable m". @@ -18,7 +18,7 @@ 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". *************** -*** 144,150 **** +*** 273,279 **** 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable b". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable a". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable g". @@ -26,7 +26,7 @@ 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable f". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable c". 3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x". ---- 144,150 ---- +--- 273,279 ---- 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable b". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable a". 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable g". @@ -35,7 +35,7 @@ 3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable c". 3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x". *************** -*** 191,200 **** +*** 320,329 **** 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -46,7 +46,7 @@ 3.mo:Expected error in mat mrvs: "variable $mrvs-foo is not bound". 3.mo:Expected error in mat mrvs: "attempt to apply non-procedure 17". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". ---- 191,200 ---- +--- 320,329 ---- 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -58,7 +58,7 @@ 3.mo:Expected error in mat mrvs: "attempt to apply non-procedure 17". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". *************** -*** 3741,3747 **** +*** 4080,4086 **** misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar". @@ -66,7 +66,7 @@ misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a". ---- 3741,3747 ---- +--- 4080,4086 ---- misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar". @@ -75,7 +75,7 @@ misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a". *************** -*** 7259,7266 **** +*** 7645,7652 **** 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". 7.mo:Expected error in mat error: "a: hit me!". 7.mo:Expected error in mat error: "f: n is 0". @@ -84,7 +84,7 @@ record.mo:Expected error in mat record2: "invalid value 3 for foreign type double-float". record.mo:Expected error in mat record2: "3 is not of type #". record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)". ---- 7259,7266 ---- +--- 7645,7652 ---- 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". 7.mo:Expected error in mat error: "a: hit me!". 7.mo:Expected error in mat error: "f: n is 0". @@ -94,7 +94,7 @@ record.mo:Expected error in mat record2: "3 is not of type #". record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)". *************** -*** 7268,7282 **** +*** 7654,7668 **** record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)". record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car". record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound". @@ -110,7 +110,7 @@ record.mo:Expected error in mat record9: "record-reader: invalid input #f". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". ---- 7268,7282 ---- +--- 7654,7668 ---- record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)". record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car". record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound". @@ -127,7 +127,7 @@ record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge". *************** -*** 7289,7314 **** +*** 7675,7700 **** record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -154,7 +154,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: 0 is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum". ---- 7289,7314 ---- +--- 7675,7700 ---- record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -182,7 +182,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: is not a positive fixnum". record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum". *************** -*** 7439,7477 **** +*** 7825,7863 **** record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #". @@ -222,7 +222,7 @@ record.mo:Expected error in mat record?: "record?: 4 is not a record type descriptor". record.mo:Expected error in mat record?: "record?: a is not a record type descriptor". record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor". ---- 7439,7477 ---- +--- 7825,7863 ---- record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)". record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #". @@ -263,7 +263,7 @@ record.mo:Expected error in mat record?: "record?: a is not a record type descriptor". record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor". *************** -*** 7486,7542 **** +*** 7872,7928 **** record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: invalid protocol flimflam". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure not-a-procedure". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure spam". @@ -321,7 +321,7 @@ record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent". record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent". record.mo:Expected error in mat r6rs-records-syntactic: "cannot extend define-record-type parent fratrat". ---- 7486,7542 ---- +--- 7872,7928 ---- record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: invalid protocol flimflam". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure not-a-procedure". record.mo:Expected error in mat r6rs-records-procedural: "attempt to apply non-procedure spam". diff --git a/mats/patch-compile-0-t-f-f b/mats/patch-compile-0-t-f-f index 5d4fcc6f83..b4ceacbc13 100644 --- a/mats/patch-compile-0-t-f-f +++ b/mats/patch-compile-0-t-f-f @@ -1,7 +1,7 @@ -*** errors-compile-0-f-f-f 2020-01-06 04:40:07.000000000 -0700 ---- errors-compile-0-t-f-f 2020-01-06 04:59:35.000000000 -0700 +*** errors-compile-0-f-f-f 2020-02-22 12:22:03.000000000 -0700 +--- errors-compile-0-t-f-f 2020-02-22 12:55:46.000000000 -0700 *************** -*** 93,99 **** +*** 222,228 **** 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 4 to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #". @@ -9,7 +9,7 @@ 3.mo:Expected error in mat letrec: "variable f is not bound". 3.mo:Expected error in mat letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat letrec: "attempt to assign undefined variable b". ---- 93,99 ---- +--- 222,228 ---- 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 4 to #". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #". @@ -18,7 +18,7 @@ 3.mo:Expected error in mat letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat letrec: "attempt to assign undefined variable b". *************** -*** 191,202 **** +*** 320,331 **** 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -31,7 +31,7 @@ 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "cdr: a is not a pair". ---- 191,202 ---- +--- 320,331 ---- 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned three values to single value return context". 3.mo:Expected error in mat mrvs: "returned zero values to single value return context". @@ -45,7 +45,7 @@ 3.mo:Expected error in mat mrvs: "returned two values to single value return context". 3.mo:Expected error in mat mrvs: "cdr: a is not a pair". *************** -*** 233,240 **** +*** 362,369 **** 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let-values: duplicate bound identifier x in (let*-values (((...) (...))) (list x w))". @@ -54,7 +54,7 @@ 4.mo:Expected error in mat apply: "apply: 3 is not a proper list". 4.mo:Expected error in mat apply: "apply: 4 is not a proper list". 4.mo:Expected error in mat apply: "apply: (3 4 5 6 7 8 . 9) is not a proper list". ---- 233,240 ---- +--- 362,369 ---- 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let*-values: incorrect number of values from rhs 1". 3.mo:Expected error in mat let*-values: "let-values: duplicate bound identifier x in (let*-values (((...) (...))) (list x w))". @@ -64,7 +64,7 @@ 4.mo:Expected error in mat apply: "apply: 4 is not a proper list". 4.mo:Expected error in mat apply: "apply: (3 4 5 6 7 8 . 9) is not a proper list". *************** -*** 527,549 **** +*** 656,678 **** 4.mo:Expected error in mat dynamic-wind: "variable gook is not bound". 4.mo:Expected error in mat dynamic-wind: "variable gook is not bound". 4.mo:Expected error in mat call/1cc: "attempt to invoke shot one-shot continuation". @@ -88,7 +88,7 @@ 4.mo:Expected error in mat continuation-attachments: "attempt to apply non-procedure something-else". 4.mo:Expected error in mat continuation-attachments: "attempt to apply non-procedure something-else". 4.mo:Expected error in mat continuation-attachments: "attempt to apply non-procedure something-else". ---- 527,549 ---- +--- 656,678 ---- 4.mo:Expected error in mat dynamic-wind: "variable gook is not bound". 4.mo:Expected error in mat dynamic-wind: "variable gook is not bound". 4.mo:Expected error in mat call/1cc: "attempt to invoke shot one-shot continuation". @@ -113,7 +113,7 @@ 4.mo:Expected error in mat continuation-attachments: "attempt to apply non-procedure something-else". 4.mo:Expected error in mat continuation-attachments: "attempt to apply non-procedure something-else". *************** -*** 559,566 **** +*** 688,695 **** 4.mo:Expected error in mat $primitive: "invalid primitive name fubar". 4.mo:Expected error in mat $primitive: "incorrect argument count in call (car (quote a) (quote b))". 4.mo:Expected error in mat $primitive: "car: 3 is not a pair". @@ -122,7 +122,7 @@ 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". ---- 559,566 ---- +--- 688,695 ---- 4.mo:Expected error in mat $primitive: "invalid primitive name fubar". 4.mo:Expected error in mat $primitive: "incorrect argument count in call (car (quote a) (quote b))". 4.mo:Expected error in mat $primitive: "car: 3 is not a pair". @@ -132,7 +132,7 @@ 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". *************** -*** 570,577 **** +*** 699,706 **** 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". @@ -141,7 +141,7 @@ 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". ---- 570,577 ---- +--- 699,706 ---- 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". 5_1.mo:Expected error in mat boolean=?: "boolean=?: 3 is not a boolean". @@ -151,7 +151,7 @@ 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". 5_1.mo:Expected error in mat symbol=?: "symbol=?: 3 is not a symbol". *************** -*** 613,620 **** +*** 742,749 **** 5_2.mo:Expected error in mat c....r-errors: "cddadr: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cdddar: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cddddr: incorrect list structure (a . b)". @@ -160,7 +160,7 @@ 5_2.mo:Expected error in mat list-ref: "list-ref: a is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: (a b . c) is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: index 4 is out of range for list (a b)". ---- 613,620 ---- +--- 742,749 ---- 5_2.mo:Expected error in mat c....r-errors: "cddadr: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cdddar: incorrect list structure (a . b)". 5_2.mo:Expected error in mat c....r-errors: "cddddr: incorrect list structure (a . b)". @@ -170,7 +170,7 @@ 5_2.mo:Expected error in mat list-ref: "list-ref: (a b . c) is not a proper list". 5_2.mo:Expected error in mat list-ref: "list-ref: index 4 is out of range for list (a b)". *************** -*** 701,713 **** +*** 830,842 **** 5_2.mo:Expected error in mat append!: "append!: (b a b a b a ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (c d a b a b ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (a b . c) is not a proper list". @@ -184,7 +184,7 @@ 5_2.mo:Expected error in mat reverse!: "reverse!: a is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b . c) is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b a b a b ...) is circular". ---- 701,713 ---- +--- 830,842 ---- 5_2.mo:Expected error in mat append!: "append!: (b a b a b a ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (c d a b a b ...) is circular". 5_2.mo:Expected error in mat append!: "append!: (a b . c) is not a proper list". @@ -199,7 +199,7 @@ 5_2.mo:Expected error in mat reverse!: "reverse!: (a b . c) is not a proper list". 5_2.mo:Expected error in mat reverse!: "reverse!: (a b a b a b ...) is circular". *************** -*** 720,737 **** +*** 849,866 **** 5_2.mo:Expected error in mat find: "find: improper list (a b . c)". 5_2.mo:Expected error in mat find: "find: improper list (a b c . d)". 5_2.mo:Expected error in mat find: "find: a is not a procedure". @@ -218,7 +218,7 @@ 5_2.mo:Expected error in mat member: "member: improper list a". 5_2.mo:Expected error in mat member: "member: cyclic list (a b a b a b ...)". 5_2.mo:Expected error in mat member: "member: improper list (a b . c)". ---- 720,737 ---- +--- 849,866 ---- 5_2.mo:Expected error in mat find: "find: improper list (a b . c)". 5_2.mo:Expected error in mat find: "find: improper list (a b c . d)". 5_2.mo:Expected error in mat find: "find: a is not a procedure". @@ -238,7 +238,7 @@ 5_2.mo:Expected error in mat member: "member: cyclic list (a b a b a b ...)". 5_2.mo:Expected error in mat member: "member: improper list (a b . c)". *************** -*** 774,783 **** +*** 903,912 **** 5_2.mo:Expected error in mat assv: "assv: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". @@ -249,7 +249,7 @@ 5_2.mo:Expected error in mat sort: "sort: 3 is not a proper list". 5_2.mo:Expected error in mat sort: "sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort: "sort: (1 2 . 3) is not a proper list". ---- 774,783 ---- +--- 903,912 ---- 5_2.mo:Expected error in mat assv: "assv: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". 5_2.mo:Expected error in mat assoc: "assoc: cyclic alist ((a . 1) (b . 2) (3.2 . 3) ("a" . 4) (a . 1) (b . 2) ...)". @@ -261,7 +261,7 @@ 5_2.mo:Expected error in mat sort: "sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort: "sort: (1 2 . 3) is not a proper list". *************** -*** 786,795 **** +*** 915,924 **** 5_2.mo:Expected error in mat sort: "sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat sort: "sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat sort: ">: b is not a real number". @@ -272,7 +272,7 @@ 5_2.mo:Expected error in mat list-sort: "list-sort: 3 is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: (1 2 . 3) is not a proper list". ---- 786,795 ---- +--- 915,924 ---- 5_2.mo:Expected error in mat sort: "sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat sort: "sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat sort: ">: b is not a real number". @@ -284,7 +284,7 @@ 5_2.mo:Expected error in mat list-sort: "list-sort: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat list-sort: "list-sort: (1 2 . 3) is not a proper list". *************** -*** 798,807 **** +*** 927,936 **** 5_2.mo:Expected error in mat list-sort: "list-sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat list-sort: "list-sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat list-sort: ">: b is not a real number". @@ -295,7 +295,7 @@ 5_2.mo:Expected error in mat sort!: "sort!: 3 is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: (1 2 . 3) is not a proper list". ---- 798,807 ---- +--- 927,936 ---- 5_2.mo:Expected error in mat list-sort: "list-sort: (q p a b a b ...) is circular". 5_2.mo:Expected error in mat list-sort: "list-sort: (a b c) is not a procedure". 5_2.mo:Expected error in mat list-sort: ">: b is not a real number". @@ -307,7 +307,7 @@ 5_2.mo:Expected error in mat sort!: "sort!: #(1 2 3) is not a proper list". 5_2.mo:Expected error in mat sort!: "sort!: (1 2 . 3) is not a proper list". *************** -*** 830,847 **** +*** 959,976 **** 5_2.mo:Expected error in mat iota: "iota: -1 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 1000000000000000000000000000000 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 3/4 is not a nonnegative fixnum". @@ -326,7 +326,7 @@ 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a string". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 0 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 37 is not a valid radix". ---- 830,847 ---- +--- 959,976 ---- 5_2.mo:Expected error in mat iota: "iota: -1 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 1000000000000000000000000000000 is not a nonnegative fixnum". 5_2.mo:Expected error in mat iota: "iota: 3/4 is not a nonnegative fixnum". @@ -346,7 +346,7 @@ 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 0 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 37 is not a valid radix". *************** -*** 852,858 **** +*** 981,987 **** 5_3.mo:Expected error in mat r6rs:string->number: "string->number: is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 36 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a valid radix". @@ -354,7 +354,7 @@ 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". ---- 852,858 ---- +--- 981,987 ---- 5_3.mo:Expected error in mat r6rs:string->number: "string->number: is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: 36 is not a valid radix". 5_3.mo:Expected error in mat r6rs:string->number: "string->number: a is not a valid radix". @@ -363,7 +363,7 @@ 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". 5_3.mo:Expected error in mat number->string: "number->string: a is not a number". *************** -*** 888,894 **** +*** 1017,1023 **** 5_3.mo:Expected error in mat r6rs:number->string: "number->string: a precision is specified and radix 16 is not 10". 5_3.mo:Expected error in mat exact?: "exact?: a is not a number". 5_3.mo:Expected error in mat inexact?: "inexact?: () is not a number". @@ -371,7 +371,7 @@ 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". ---- 888,894 ---- +--- 1017,1023 ---- 5_3.mo:Expected error in mat r6rs:number->string: "number->string: a precision is specified and radix 16 is not 10". 5_3.mo:Expected error in mat exact?: "exact?: a is not a number". 5_3.mo:Expected error in mat inexact?: "inexact?: () is not a number". @@ -380,7 +380,7 @@ 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". *************** -*** 897,903 **** +*** 1026,1032 **** 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". @@ -388,7 +388,7 @@ 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". ---- 897,903 ---- +--- 1026,1032 ---- 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". 5_3.mo:Expected error in mat =: "=: a is not a number". @@ -397,7 +397,7 @@ 5_3.mo:Expected error in mat <: "<: a is not a real number". 5_3.mo:Expected error in mat <: "<: a is not a real number". *************** -*** 917,923 **** +*** 1046,1052 **** 5_3.mo:Expected error in mat <: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat <: "<: 3+1i is not a real number". @@ -405,7 +405,7 @@ 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". ---- 917,923 ---- +--- 1046,1052 ---- 5_3.mo:Expected error in mat <: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat <: "<: 3+1i is not a real number". @@ -414,7 +414,7 @@ 5_3.mo:Expected error in mat <=: "<=: a is not a real number". 5_3.mo:Expected error in mat <=: "<=: a is not a real number". *************** -*** 937,943 **** +*** 1066,1072 **** 5_3.mo:Expected error in mat <=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 3+1i is not a real number". @@ -422,7 +422,7 @@ 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". ---- 937,943 ---- +--- 1066,1072 ---- 5_3.mo:Expected error in mat <=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat <=: "<=: 3+1i is not a real number". @@ -431,7 +431,7 @@ 5_3.mo:Expected error in mat >: ">: a is not a real number". 5_3.mo:Expected error in mat >: ">: a is not a real number". *************** -*** 957,963 **** +*** 1086,1092 **** 5_3.mo:Expected error in mat >: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat >: ">: 3+1i is not a real number". @@ -439,7 +439,7 @@ 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". ---- 957,963 ---- +--- 1086,1092 ---- 5_3.mo:Expected error in mat >: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat >: ">: 3+1i is not a real number". @@ -448,7 +448,7 @@ 5_3.mo:Expected error in mat >=: ">=: a is not a real number". 5_3.mo:Expected error in mat >=: ">=: a is not a real number". *************** -*** 977,984 **** +*** 1106,1113 **** 5_3.mo:Expected error in mat >=: ">=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 2+1i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 3+1i is not a real number". @@ -457,7 +457,7 @@ 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". ---- 977,984 ---- +--- 1106,1113 ---- 5_3.mo:Expected error in mat >=: ">=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 2+1i is not a real number". 5_3.mo:Expected error in mat >=: ">=: 3+1i is not a real number". @@ -467,7 +467,7 @@ 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". *************** -*** 986,993 **** +*** 1115,1122 **** 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". @@ -476,7 +476,7 @@ 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". ---- 986,993 ---- +--- 1115,1122 ---- 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". 5_3.mo:Expected error in mat r6rs:=: "=: a is not a number". @@ -486,7 +486,7 @@ 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: a is not a real number". *************** -*** 998,1005 **** +*** 1127,1134 **** 5_3.mo:Expected error in mat r6rs:<: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 3+1i is not a real number". @@ -495,7 +495,7 @@ 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". ---- 998,1005 ---- +--- 1127,1134 ---- 5_3.mo:Expected error in mat r6rs:<: "<: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<: "<: 3+1i is not a real number". @@ -505,7 +505,7 @@ 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: a is not a real number". *************** -*** 1010,1017 **** +*** 1139,1146 **** 5_3.mo:Expected error in mat r6rs:<=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 3+1i is not a real number". @@ -514,7 +514,7 @@ 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". ---- 1010,1017 ---- +--- 1139,1146 ---- 5_3.mo:Expected error in mat r6rs:<=: "<=: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:<=: "<=: 3+1i is not a real number". @@ -524,7 +524,7 @@ 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: a is not a real number". *************** -*** 1022,1029 **** +*** 1151,1158 **** 5_3.mo:Expected error in mat r6rs:>: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 3+1i is not a real number". @@ -533,7 +533,7 @@ 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". ---- 1022,1029 ---- +--- 1151,1158 ---- 5_3.mo:Expected error in mat r6rs:>: ">: 2.0+1.0i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 2+1i is not a real number". 5_3.mo:Expected error in mat r6rs:>: ">: 3+1i is not a real number". @@ -543,7 +543,7 @@ 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". 5_3.mo:Expected error in mat r6rs:>=: ">=: a is not a real number". *************** -*** 1043,1049 **** +*** 1172,1178 **** 5_3.mo:Expected error in mat +: "oops". 5_3.mo:Expected error in mat +: "+: #f is not a number". 5_3.mo:Expected error in mat +: "+: #f is not a number". @@ -551,7 +551,7 @@ 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". ---- 1043,1049 ---- +--- 1172,1178 ---- 5_3.mo:Expected error in mat +: "oops". 5_3.mo:Expected error in mat +: "+: #f is not a number". 5_3.mo:Expected error in mat +: "+: #f is not a number". @@ -560,7 +560,7 @@ 5_3.mo:Expected error in mat -: "-: a is not a number". 5_3.mo:Expected error in mat -: "-: a is not a number". *************** -*** 1056,1062 **** +*** 1185,1191 **** 5_3.mo:Expected error in mat *: "*: a is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". @@ -568,7 +568,7 @@ 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". ---- 1056,1062 ---- +--- 1185,1191 ---- 5_3.mo:Expected error in mat *: "*: a is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". 5_3.mo:Expected error in mat *: "*: #f is not a number". @@ -577,7 +577,7 @@ 5_3.mo:Expected error in mat /: "/: a is not a number". 5_3.mo:Expected error in mat /: "/: a is not a number". *************** -*** 1073,1140 **** +*** 1202,1269 **** 5_3.mo:Expected error in mat infinite?: "infinite?: a is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3+4i is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3.0-0.0i is not a real number". @@ -646,7 +646,7 @@ 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2/5 is not an integer". ---- 1073,1140 ---- +--- 1202,1269 ---- 5_3.mo:Expected error in mat infinite?: "infinite?: a is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3+4i is not a real number". 5_3.mo:Expected error in mat infinite?: "infinite?: 3.0-0.0i is not a real number". @@ -716,7 +716,7 @@ 5_3.mo:Expected error in mat quotient: "quotient: a is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2/5 is not an integer". *************** -*** 1147,1156 **** +*** 1276,1285 **** 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2.0+1.0i is not an integer". @@ -727,7 +727,7 @@ 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2/5 is not an integer". ---- 1147,1156 ---- +--- 1276,1285 ---- 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2+1i is not an integer". 5_3.mo:Expected error in mat quotient: "quotient: 2.0+1.0i is not an integer". @@ -739,7 +739,7 @@ 5_3.mo:Expected error in mat remainder: "remainder: a is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2/5 is not an integer". *************** -*** 1161,1169 **** +*** 1290,1298 **** 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: -3+2i is not an integer". @@ -749,7 +749,7 @@ 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: 3/5 is not an integer". ---- 1161,1169 ---- +--- 1290,1298 ---- 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: 2.5 is not an integer". 5_3.mo:Expected error in mat remainder: "remainder: -3+2i is not an integer". @@ -760,7 +760,7 @@ 5_3.mo:Expected error in mat modulo: "modulo: a is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: 3/5 is not an integer". *************** -*** 1173,1218 **** +*** 1302,1347 **** 5_3.mo:Expected error in mat modulo: "modulo: 3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3+2i is not an integer". @@ -807,7 +807,7 @@ 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". ---- 1173,1218 ---- +--- 1302,1347 ---- 5_3.mo:Expected error in mat modulo: "modulo: 3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3.2 is not an integer". 5_3.mo:Expected error in mat modulo: "modulo: -3+2i is not an integer". @@ -855,7 +855,7 @@ 5_3.mo:Expected error in mat min: "min: a is not a real number". 5_3.mo:Expected error in mat min: "min: a is not a real number". *************** -*** 1271,1279 **** +*** 1400,1408 **** 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". @@ -865,7 +865,7 @@ 5_3.mo:Expected error in mat expt: "expt: a is not a number". 5_3.mo:Expected error in mat expt: "expt: a is not a number". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and -1". ---- 1271,1279 ---- +--- 1400,1408 ---- 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". 5_3.mo:Expected error in mat lcm: "lcm: +nan.0 is not an integer". @@ -876,7 +876,7 @@ 5_3.mo:Expected error in mat expt: "expt: a is not a number". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and -1". *************** -*** 1286,1301 **** +*** 1415,1430 **** 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and +nan.0+3.0i". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and 0+3i". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and -1/2". @@ -893,7 +893,7 @@ 5_3.mo:Expected error in mat random: "random: invalid argument a". 5_3.mo:Expected error in mat random: "random: invalid argument -3". 5_3.mo:Expected error in mat random: "random: invalid argument 0". ---- 1286,1301 ---- +--- 1415,1430 ---- 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and +nan.0+3.0i". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and 0+3i". 5_3.mo:Expected error in mat expt: "expt: undefined for values 0 and -1/2". @@ -911,7 +911,7 @@ 5_3.mo:Expected error in mat random: "random: invalid argument -3". 5_3.mo:Expected error in mat random: "random: invalid argument 0". *************** -*** 1328,1366 **** +*** 1457,1495 **** 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a pseudo-random generator 0". 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a valid pseudo-random generator state vector 0". 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a valid pseudo-random generator state vector #(0 0 0 0 0 0)". @@ -951,7 +951,7 @@ 5_3.mo:Expected error in mat imag-part: "imag-part: a is not a complex number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: a is not a real number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: b is not a real number". ---- 1328,1366 ---- +--- 1457,1495 ---- 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a pseudo-random generator 0". 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a valid pseudo-random generator state vector 0". 5_3.mo:Expected error in mat pseudo-random-generator: "vector->pseudo-random-generator!: not a valid pseudo-random generator state vector #(0 0 0 0 0 0)". @@ -992,7 +992,7 @@ 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: a is not a real number". 5_3.mo:Expected error in mat make-rectangular: "make-rectangular: b is not a real number". *************** -*** 1370,1446 **** +*** 1499,1575 **** 5_3.mo:Expected error in mat make-polar: "make-polar: b is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". @@ -1070,7 +1070,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: 35.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 8.0". ---- 1370,1446 ---- +--- 1499,1575 ---- 5_3.mo:Expected error in mat make-polar: "make-polar: b is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". 5_3.mo:Expected error in mat make-polar: "make-polar: 3.4+0.0i is not a real number". @@ -1149,7 +1149,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 8.0". *************** -*** 1451,1461 **** +*** 1580,1590 **** 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index ". @@ -1161,7 +1161,7 @@ 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: a is not an exact integer". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 2.0". ---- 1451,1461 ---- +--- 1580,1590 ---- 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-bit-field: invalid end index ". @@ -1174,7 +1174,7 @@ 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 2.0". *************** -*** 1468,1478 **** +*** 1597,1607 **** 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". @@ -1186,7 +1186,7 @@ 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: a is not an exact integer". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 2.0". ---- 1468,1478 ---- +--- 1597,1607 ---- 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-copy-bit-field: "bitwise-copy-bit-field: invalid end index ". @@ -1199,7 +1199,7 @@ 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid start index 0.0". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 2.0". *************** -*** 1486,1495 **** +*** 1615,1624 **** 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". @@ -1210,7 +1210,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: 35.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index 8.0". ---- 1486,1495 ---- +--- 1615,1624 ---- 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index 5". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". 5_3.mo:Expected error in mat bitwise-rotate-bit-field: "bitwise-rotate-bit-field: invalid end index ". @@ -1222,7 +1222,7 @@ 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid start index 5.0". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index 8.0". *************** -*** 1500,1523 **** +*** 1629,1652 **** 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index 5 is greater than end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index is greater than end index ". @@ -1247,7 +1247,7 @@ 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: 3.0 is not an exact integer". 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: a is not an exact integer". 5_3.mo:Expected error in mat $quotient-remainder: "incorrect number of arguments 0 to #". ---- 1500,1523 ---- +--- 1629,1652 ---- 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: invalid end index -8". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index 5 is greater than end index 3". 5_3.mo:Expected error in mat bitwise-bit-field: "bitwise-reverse-bit-field: start index is greater than end index ". @@ -1273,7 +1273,7 @@ 5_3.mo:Expected error in mat bitwise-first-bit-set: "bitwise-first-bit-set: a is not an exact integer". 5_3.mo:Expected error in mat $quotient-remainder: "incorrect number of arguments 0 to #". *************** -*** 1643,1698 **** +*** 1772,1827 **** 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.0 is not an exact integer". @@ -1330,7 +1330,7 @@ 5_3.mo:Expected error in mat real->flonum: "real->flonum: a is not a real number". 5_3.mo:Expected error in mat real->flonum: "real->flonum: 3+4i is not a real number". 5_3.mo:Expected error in mat div-and-mod: "div-and-mod: undefined for 0". ---- 1643,1698 ---- +--- 1772,1827 ---- 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.4-2.3i is not an exact integer". 5_3.mo:Expected error in mat bitwise-xor: "bitwise-xor: 3.0 is not an exact integer". @@ -1388,7 +1388,7 @@ 5_3.mo:Expected error in mat real->flonum: "real->flonum: 3+4i is not a real number". 5_3.mo:Expected error in mat div-and-mod: "div-and-mod: undefined for 0". *************** -*** 1738,1898 **** +*** 1946,2106 **** 5_3.mo:Expected error in mat popcount: "fxpopcount16: 1267650600228229401496703205376 is not a 16-bit fixnum". 5_3.mo:Expected error in mat popcount: "fxpopcount16: 1048576 is not a 16-bit fixnum". 5_3.mo:Expected error in mat popcount: "fxpopcount16: -1 is not a 16-bit fixnum". @@ -1550,7 +1550,7 @@ 5_4.mo:Expected error in mat integer->char: "integer->char: a is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #f is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #\a is not a valid unicode scalar value". ---- 1738,1898 ---- +--- 1946,2106 ---- 5_3.mo:Expected error in mat popcount: "fxpopcount16: 1267650600228229401496703205376 is not a 16-bit fixnum". 5_3.mo:Expected error in mat popcount: "fxpopcount16: 1048576 is not a 16-bit fixnum". 5_3.mo:Expected error in mat popcount: "fxpopcount16: -1 is not a 16-bit fixnum". @@ -1713,7 +1713,7 @@ 5_4.mo:Expected error in mat integer->char: "integer->char: #f is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: #\a is not a valid unicode scalar value". *************** -*** 1911,1923 **** +*** 2119,2131 **** 5_4.mo:Expected error in mat integer->char: "integer->char: 1114112 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: 1179648 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: is not a valid unicode scalar value". @@ -1727,7 +1727,7 @@ 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". ---- 1911,1923 ---- +--- 2119,2131 ---- 5_4.mo:Expected error in mat integer->char: "integer->char: 1114112 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: 1179648 is not a valid unicode scalar value". 5_4.mo:Expected error in mat integer->char: "integer->char: is not a valid unicode scalar value". @@ -1742,7 +1742,7 @@ 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". 5_4.mo:Expected error in mat string-for-each: "string-for-each: "" is not a procedure". *************** -*** 1932,2077 **** +*** 2140,2285 **** 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "" and "x" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". @@ -1889,7 +1889,7 @@ 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". ---- 1932,2077 ---- +--- 2140,2285 ---- 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "" and "x" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". 5_4.mo:Expected error in mat string-for-each: "string-for-each: lengths of input string "y" and "" differ". @@ -2037,7 +2037,7 @@ 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". 5_5.mo:Expected error in mat r6rs:string>=?/r6rs:string-ci>=?: "string-ci>=?: a is not a string". *************** -*** 2079,2117 **** +*** 2287,2325 **** 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". @@ -2077,7 +2077,7 @@ 5_5.mo:Expected error in mat string-copy!: "string-copy!: 0 is not a string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: invalid start value -1". ---- 2079,2117 ---- +--- 2287,2325 ---- 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". 5_5.mo:Expected error in mat string: "string: a is not a character". @@ -2118,7 +2118,7 @@ 5_5.mo:Expected error in mat string-copy!: "string-copy!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-copy!: "string-copy!: invalid start value -1". *************** -*** 2135,2143 **** +*** 2343,2351 **** 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 4 + count 1 is beyond the end of "1234"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 0 + count 500 is beyond the end of "abcdefghi"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 500 + count 0 is beyond the end of "abcdefghi"". @@ -2128,7 +2128,7 @@ 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: 0 is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: invalid new length -1 for "abcdefghi"". ---- 2135,2143 ---- +--- 2343,2351 ---- 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 4 + count 1 is beyond the end of "1234"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 0 + count 500 is beyond the end of "abcdefghi"". 5_5.mo:Expected error in mat string-copy!: "string-copy!: index 500 + count 0 is beyond the end of "abcdefghi"". @@ -2139,7 +2139,7 @@ 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: #vu8(1 2 3) is not a mutable string". 5_5.mo:Expected error in mat string-truncate!: "string-truncate!: invalid new length -1 for "abcdefghi"". *************** -*** 2152,2204 **** +*** 2360,2412 **** 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: a is not a string". 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: b is not a string". 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: b is not a string". @@ -2193,7 +2193,7 @@ bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: is not a valid bytevector length". ---- 2152,2204 ---- +--- 2360,2412 ---- 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: a is not a string". 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: b is not a string". 5_5.mo:Expected error in mat string-append-immutable: "string-append-immutable: b is not a string". @@ -2248,7 +2248,7 @@ bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: -1 is not a valid bytevector length". bytevector.mo:Expected error in mat make-bytevector: "make-bytevector: is not a valid bytevector length". *************** -*** 2215,2244 **** +*** 2423,2452 **** bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value -500". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 1e+100". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000". @@ -2279,7 +2279,7 @@ bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: 3 is not a valid index for #vu8(3 4 5)". ---- 2215,2244 ---- +--- 2423,2452 ---- bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value -500". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 1e+100". bytevector.mo:Expected error in mat bytevector: "bytevector: invalid value 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000". @@ -2311,7 +2311,7 @@ bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: 3 is not a valid index for #vu8(3 4 5)". *************** -*** 2247,2256 **** +*** 2455,2464 **** bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value -129". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value 128". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value d". @@ -2322,7 +2322,7 @@ bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: 3 is not a valid index for #vu8(3 4 5)". ---- 2247,2256 ---- +--- 2455,2464 ---- bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value -129". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value 128". bytevector.mo:Expected error in mat bytevector-s8-set!: "bytevector-s8-set!: invalid value d". @@ -2334,7 +2334,7 @@ bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: (3 4 5) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: 3 is not a valid index for #vu8(3 4 5)". *************** -*** 2259,2267 **** +*** 2467,2475 **** bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value 256". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value d". @@ -2344,7 +2344,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2259,2267 ---- +--- 2467,2475 ---- bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value 256". bytevector.mo:Expected error in mat bytevector-u8-set!: "bytevector-u8-set!: invalid value d". @@ -2355,7 +2355,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2269,2277 **** +*** 2477,2485 **** bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2365,7 +2365,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2269,2277 ---- +--- 2477,2485 ---- bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-s16-native-ref: "bytevector-s16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2376,7 +2376,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2279,2288 **** +*** 2487,2496 **** bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2387,7 +2387,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2279,2288 ---- +--- 2487,2496 ---- bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 2 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 3 for bytevector #vu8(3 252 5)". bytevector.mo:Expected error in mat bytevector-u16-native-ref: "bytevector-u16-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5)". @@ -2399,7 +2399,7 @@ bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2296,2305 **** +*** 2504,2513 **** bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value 32768". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value -32769". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value "hello"". @@ -2410,7 +2410,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2296,2305 ---- +--- 2504,2513 ---- bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value 32768". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value -32769". bytevector.mo:Expected error in mat bytevector-s16-native-set!: "bytevector-s16-native-set!: invalid value "hello"". @@ -2422,7 +2422,7 @@ bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2313,2321 **** +*** 2521,2529 **** bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value 65536". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value "hello"". @@ -2432,7 +2432,7 @@ bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2313,2321 ---- +--- 2521,2529 ---- bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value 65536". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u16-native-set!: "bytevector-u16-native-set!: invalid value "hello"". @@ -2443,7 +2443,7 @@ bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2325,2333 **** +*** 2533,2541 **** bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness #t". @@ -2453,7 +2453,7 @@ bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: invalid index -1 for bytevector #vu8(3 252 5)". ---- 2325,2333 ---- +--- 2533,2541 ---- bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-ref: "bytevector-s16-ref: unrecognized endianness #t". @@ -2464,7 +2464,7 @@ bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: #(3 252 5) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: invalid index -1 for bytevector #vu8(3 252 5)". *************** -*** 2337,2346 **** +*** 2545,2554 **** bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness #t". @@ -2475,7 +2475,7 @@ bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2337,2346 ---- +--- 2545,2554 ---- bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-ref: "bytevector-u16-ref: unrecognized endianness #t". @@ -2487,7 +2487,7 @@ bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2356,2365 **** +*** 2564,2573 **** bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness #t". @@ -2498,7 +2498,7 @@ bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2356,2365 ---- +--- 2564,2573 ---- bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s16-set!: "bytevector-s16-set!: unrecognized endianness #t". @@ -2510,7 +2510,7 @@ bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2375,2384 **** +*** 2583,2592 **** bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness #t". @@ -2521,7 +2521,7 @@ bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2375,2384 ---- +--- 2583,2592 ---- bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u16-set!: "bytevector-u16-set!: unrecognized endianness #t". @@ -2533,7 +2533,7 @@ bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2388,2397 **** +*** 2596,2605 **** bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness #t". @@ -2544,7 +2544,7 @@ bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2388,2397 ---- +--- 2596,2605 ---- bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s24-ref: "bytevector-s24-ref: unrecognized endianness #t". @@ -2556,7 +2556,7 @@ bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2401,2411 **** +*** 2609,2619 **** bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness #t". @@ -2568,7 +2568,7 @@ bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2401,2411 ---- +--- 2609,2619 ---- bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u24-ref: "bytevector-u24-ref: unrecognized endianness #t". @@ -2581,7 +2581,7 @@ bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2419,2429 **** +*** 2627,2637 **** bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2593,7 +2593,7 @@ bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2419,2429 ---- +--- 2627,2637 ---- bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s24-set!: "bytevector-s24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2606,7 +2606,7 @@ bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2437,2445 **** +*** 2645,2653 **** bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2616,7 +2616,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2437,2445 ---- +--- 2645,2653 ---- bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u24-set!: "bytevector-u24-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2627,7 +2627,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2451,2459 **** +*** 2659,2667 **** bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2637,7 +2637,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2451,2459 ---- +--- 2659,2667 ---- bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s32-native-ref: "bytevector-s32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2648,7 +2648,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2465,2474 **** +*** 2673,2682 **** bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2659,7 +2659,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2465,2474 ---- +--- 2673,2682 ---- bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 6 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 7 for bytevector #vu8(3 252 5 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u32-native-ref: "bytevector-u32-native-ref: invalid index 4.0 for bytevector #vu8(3 252 5 0 0 0 ...)". @@ -2671,7 +2671,7 @@ bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2495,2504 **** +*** 2703,2712 **** bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value "hello"". @@ -2682,7 +2682,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2495,2504 ---- +--- 2703,2712 ---- bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s32-native-set!: "bytevector-s32-native-set!: invalid value "hello"". @@ -2694,7 +2694,7 @@ bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2525,2534 **** +*** 2733,2742 **** bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value "hello"". @@ -2705,7 +2705,7 @@ bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2525,2534 ---- +--- 2733,2742 ---- bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u32-native-set!: "bytevector-u32-native-set!: invalid value "hello"". @@ -2717,7 +2717,7 @@ bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2538,2547 **** +*** 2746,2755 **** bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness #t". @@ -2728,7 +2728,7 @@ bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2538,2547 ---- +--- 2746,2755 ---- bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s32-ref: "bytevector-s32-ref: unrecognized endianness #t". @@ -2740,7 +2740,7 @@ bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2551,2561 **** +*** 2759,2769 **** bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness #t". @@ -2752,7 +2752,7 @@ bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2551,2561 ---- +--- 2759,2769 ---- bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u32-ref: "bytevector-u32-ref: unrecognized endianness #t". @@ -2765,7 +2765,7 @@ bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2570,2580 **** +*** 2778,2788 **** bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2777,7 +2777,7 @@ bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2570,2580 ---- +--- 2778,2788 ---- bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s32-set!: "bytevector-s32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2790,7 +2790,7 @@ bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2589,2598 **** +*** 2797,2806 **** bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2801,7 +2801,7 @@ bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2589,2598 ---- +--- 2797,2806 ---- bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u32-set!: "bytevector-u32-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2813,7 +2813,7 @@ bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2602,2611 **** +*** 2810,2819 **** bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness #t". @@ -2824,7 +2824,7 @@ bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2602,2611 ---- +--- 2810,2819 ---- bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s40-ref: "bytevector-s40-ref: unrecognized endianness #t". @@ -2836,7 +2836,7 @@ bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2615,2625 **** +*** 2823,2833 **** bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness #t". @@ -2848,7 +2848,7 @@ bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2615,2625 ---- +--- 2823,2833 ---- bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u40-ref: "bytevector-u40-ref: unrecognized endianness #t". @@ -2861,7 +2861,7 @@ bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2633,2643 **** +*** 2841,2851 **** bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2873,7 +2873,7 @@ bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2633,2643 ---- +--- 2841,2851 ---- bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s40-set!: "bytevector-s40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2886,7 +2886,7 @@ bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2651,2660 **** +*** 2859,2868 **** bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2897,7 +2897,7 @@ bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2651,2660 ---- +--- 2859,2868 ---- bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u40-set!: "bytevector-u40-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2909,7 +2909,7 @@ bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2664,2673 **** +*** 2872,2881 **** bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness #t". @@ -2920,7 +2920,7 @@ bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2664,2673 ---- +--- 2872,2881 ---- bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s48-ref: "bytevector-s48-ref: unrecognized endianness #t". @@ -2932,7 +2932,7 @@ bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2677,2687 **** +*** 2885,2895 **** bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness #t". @@ -2944,7 +2944,7 @@ bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2677,2687 ---- +--- 2885,2895 ---- bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u48-ref: "bytevector-u48-ref: unrecognized endianness #t". @@ -2957,7 +2957,7 @@ bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2695,2705 **** +*** 2903,2913 **** bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2969,7 +2969,7 @@ bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2695,2705 ---- +--- 2903,2913 ---- bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s48-set!: "bytevector-s48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2982,7 +2982,7 @@ bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2713,2722 **** +*** 2921,2930 **** bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -2993,7 +2993,7 @@ bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2713,2722 ---- +--- 2921,2930 ---- bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u48-set!: "bytevector-u48-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3005,7 +3005,7 @@ bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2726,2735 **** +*** 2934,2943 **** bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness #t". @@ -3016,7 +3016,7 @@ bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". ---- 2726,2735 ---- +--- 2934,2943 ---- bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-s56-ref: "bytevector-s56-ref: unrecognized endianness #t". @@ -3028,7 +3028,7 @@ bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: invalid index -1 for bytevector #vu8(3 252 5 0 0 0 ...)". *************** -*** 2739,2749 **** +*** 2947,2957 **** bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness #t". @@ -3040,7 +3040,7 @@ bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2739,2749 ---- +--- 2947,2957 ---- bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness bigger". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness "little"". bytevector.mo:Expected error in mat bytevector-u56-ref: "bytevector-u56-ref: unrecognized endianness #t". @@ -3053,7 +3053,7 @@ bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2757,2767 **** +*** 2965,2975 **** bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3065,7 +3065,7 @@ bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2757,2767 ---- +--- 2965,2975 ---- bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-s56-set!: "bytevector-s56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3078,7 +3078,7 @@ bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2775,2783 **** +*** 2983,2991 **** bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3088,7 +3088,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2775,2783 ---- +--- 2983,2991 ---- bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness huge". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness "tiny"". bytevector.mo:Expected error in mat bytevector-u56-set!: "bytevector-u56-set!: unrecognized endianness #vu8(173 173 173 173 173 173 ...)". @@ -3099,7 +3099,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2807,2815 **** +*** 3015,3023 **** bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3109,7 +3109,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2807,2815 ---- +--- 3015,3023 ---- bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-s64-native-ref: "bytevector-s64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3120,7 +3120,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2839,2848 **** +*** 3047,3056 **** bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3131,7 +3131,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2839,2848 ---- +--- 3047,3056 ---- bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 102 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 103 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-u64-native-ref: "bytevector-u64-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3143,7 +3143,7 @@ bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2876,2885 **** +*** 3084,3093 **** bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value "hello"". @@ -3154,7 +3154,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2876,2885 ---- +--- 3084,3093 ---- bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value <-int>". bytevector.mo:Expected error in mat bytevector-s64-native-set!: "bytevector-s64-native-set!: invalid value "hello"". @@ -3166,7 +3166,7 @@ bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2913,2922 **** +*** 3121,3130 **** bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value "hello"". @@ -3177,7 +3177,7 @@ bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2913,2922 ---- +--- 3121,3130 ---- bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value ". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value -1". bytevector.mo:Expected error in mat bytevector-u64-native-set!: "bytevector-u64-native-set!: invalid value "hello"". @@ -3189,7 +3189,7 @@ bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2932,2941 **** +*** 3140,3149 **** bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness 1e+23". @@ -3200,7 +3200,7 @@ bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2932,2941 ---- +--- 3140,3149 ---- bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-s64-ref: "bytevector-s64-ref: unrecognized endianness 1e+23". @@ -3212,7 +3212,7 @@ bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 2951,2961 **** +*** 3159,3169 **** bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness 1e+23". @@ -3224,7 +3224,7 @@ bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2951,2961 ---- +--- 3159,3169 ---- bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness (quote bonkers)". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness get-real". bytevector.mo:Expected error in mat bytevector-u64-ref: "bytevector-u64-ref: unrecognized endianness 1e+23". @@ -3237,7 +3237,7 @@ bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2974,2984 **** +*** 3182,3192 **** bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #t". @@ -3249,7 +3249,7 @@ bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". ---- 2974,2984 ---- +--- 3182,3192 ---- bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-s64-set!: "bytevector-s64-set!: unrecognized endianness #t". @@ -3262,7 +3262,7 @@ bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: #(0 0 0 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: invalid index -1 for bytevector #vu8(173 173 173 173 173 173 ...)". *************** -*** 2997,3005 **** +*** 3205,3213 **** bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #t". @@ -3272,7 +3272,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 2997,3005 ---- +--- 3205,3213 ---- bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness gorgeous". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #(ravenous)". bytevector.mo:Expected error in mat bytevector-u64-set!: "bytevector-u64-set!: unrecognized endianness #t". @@ -3283,7 +3283,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3035,3043 **** +*** 3243,3251 **** bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 38 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 39 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3293,7 +3293,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3035,3043 ---- +--- 3243,3251 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 38 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 39 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-single-native-ref: "bytevector-ieee-single-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3304,7 +3304,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3077,3086 **** +*** 3285,3294 **** bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 70 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 71 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3315,7 +3315,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3077,3086 ---- +--- 3285,3294 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 70 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 71 for bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-ieee-double-native-ref: "bytevector-ieee-double-native-ref: invalid index 4.0 for bytevector #vu8(0 0 0 0 0 0 ...)". @@ -3327,7 +3327,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3114,3123 **** +*** 3322,3331 **** bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: "oops" is not a real number". @@ -3338,7 +3338,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3114,3123 ---- +--- 3322,3331 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-single-native-set!: "bytevector-ieee-single-native-set!: "oops" is not a real number". @@ -3350,7 +3350,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3163,3172 **** +*** 3371,3380 **** bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: "oops" is not a real number". @@ -3361,7 +3361,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: invalid index -1 for bytevector #vu8(0 0 0 0 199 0 ...)". ---- 3163,3172 ---- +--- 3371,3380 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0+0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: 1.0-0.0i is not a real number". bytevector.mo:Expected error in mat bytevector-ieee-double-native-set!: "bytevector-ieee-double-native-set!: "oops" is not a real number". @@ -3373,7 +3373,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: invalid index -1 for bytevector #vu8(0 0 0 0 199 0 ...)". *************** -*** 3178,3187 **** +*** 3386,3395 **** bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness 35". @@ -3384,7 +3384,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3178,3187 ---- +--- 3386,3395 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-single-ref: "bytevector-ieee-single-ref: unrecognized endianness 35". @@ -3396,7 +3396,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3197,3207 **** +*** 3405,3415 **** bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness 35". @@ -3408,7 +3408,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3197,3207 ---- +--- 3405,3415 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness "nuts"". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness crazy". bytevector.mo:Expected error in mat bytevector-ieee-double-ref: "bytevector-ieee-double-ref: unrecognized endianness 35". @@ -3421,7 +3421,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3218,3228 **** +*** 3426,3436 **** bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness #\newline". @@ -3433,7 +3433,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". ---- 3218,3228 ---- +--- 3426,3436 ---- bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-single-set!: "bytevector-ieee-single-set!: unrecognized endianness #\newline". @@ -3446,7 +3446,7 @@ bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: invalid index -1 for bytevector #vu8(235 235 235 235 235 235 ...)". *************** -*** 3243,3253 **** +*** 3451,3461 **** bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness #\newline". @@ -3458,7 +3458,7 @@ bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3243,3253 ---- +--- 3451,3461 ---- bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness "ouch"". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness what?". bytevector.mo:Expected error in mat bytevector-ieee-double-set!: "bytevector-ieee-double-set!: unrecognized endianness #\newline". @@ -3471,7 +3471,7 @@ bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3282,3292 **** +*** 3490,3500 **** bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size byte". @@ -3483,7 +3483,7 @@ bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3282,3292 ---- +--- 3490,3500 ---- bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-ref: "bytevector-sint-ref: invalid size byte". @@ -3496,7 +3496,7 @@ bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: #(3 252 5 0 0 0 ...) is not a bytevector". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3324,3335 **** +*** 3532,3543 **** bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size for bytevector #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size byte". @@ -3509,7 +3509,7 @@ bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3324,3335 ---- +--- 3532,3543 ---- bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size for bytevector #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-ref: "bytevector-uint-ref: invalid size byte". @@ -3523,7 +3523,7 @@ bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3388,3399 **** +*** 3596,3607 **** bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size byte". @@ -3536,7 +3536,7 @@ bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". ---- 3388,3399 ---- +--- 3596,3607 ---- bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-sint-set!: "bytevector-sint-set!: invalid size byte". @@ -3550,7 +3550,7 @@ bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: #(3 252 5 0 0 0 ...) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid index -1 for bytevector #vu8(0 0 0 0 0 0 ...)". *************** -*** 3452,3467 **** +*** 3660,3675 **** bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size byte". @@ -3567,7 +3567,7 @@ bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: 0 is not a bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: #(1 2 3) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: invalid start value -1". ---- 3452,3467 ---- +--- 3660,3675 ---- bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size 0". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size -1". bytevector.mo:Expected error in mat bytevector-uint-set!: "bytevector-uint-set!: invalid size byte". @@ -3585,7 +3585,7 @@ bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: #(1 2 3) is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: invalid start value -1". *************** -*** 3485,3493 **** +*** 3693,3701 **** bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 4 + count 1 is beyond the end of #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 0 + count 500 is beyond the end of #vu8(255 254 253 252 251 250 ...)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 500 + count 0 is beyond the end of #vu8(255 254 253 252 251 250 ...)". @@ -3595,7 +3595,7 @@ bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: 0 is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: "abc" is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length -1 for #vu8(1 2 3 4 5 6 ...)". ---- 3485,3493 ---- +--- 3693,3701 ---- bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 4 + count 1 is beyond the end of #vu8(1 2 3 4)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 0 + count 500 is beyond the end of #vu8(255 254 253 252 251 250 ...)". bytevector.mo:Expected error in mat bytevector-copy!: "bytevector-copy!: index 500 + count 0 is beyond the end of #vu8(255 254 253 252 251 250 ...)". @@ -3606,7 +3606,7 @@ bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: "abc" is not a mutable bytevector". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length -1 for #vu8(1 2 3 4 5 6 ...)". *************** -*** 3495,3535 **** +*** 3703,3743 **** bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length 1000 for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length a for #vu8(1 2 3 4 5 6 ...)". @@ -3648,7 +3648,7 @@ bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: (1 2 . 3) is not a proper list". ---- 3495,3535 ---- +--- 3703,3743 ---- bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length 1000 for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length for #vu8(1 2 3 4 5 6 ...)". bytevector.mo:Expected error in mat bytevector-truncate!: "bytevector-truncate!: invalid new length a for #vu8(1 2 3 4 5 6 ...)". @@ -3691,7 +3691,7 @@ bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: (1 2 . 3) is not a proper list". *************** -*** 3568,3576 **** +*** 3776,3784 **** bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size "oops"". @@ -3701,7 +3701,7 @@ bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: (1 2 . 3) is not a proper list". ---- 3568,3576 ---- +--- 3776,3784 ---- bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat sint-list->bytevector: "sint-list->bytevector: invalid size "oops"". @@ -3712,7 +3712,7 @@ bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: #(a b c) is not a proper list". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: (1 2 . 3) is not a proper list". *************** -*** 3609,3617 **** +*** 3817,3825 **** bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size "oops"". @@ -3722,7 +3722,7 @@ bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: unrecognized endianness spam". ---- 3609,3617 ---- +--- 3817,3825 ---- bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size 1.0". bytevector.mo:Expected error in mat uint-list->bytevector: "uint-list->bytevector: invalid size "oops"". @@ -3733,7 +3733,7 @@ bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: unrecognized endianness spam". *************** -*** 3631,3639 **** +*** 3839,3847 **** bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 50". @@ -3743,7 +3743,7 @@ bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: unrecognized endianness spam". ---- 3631,3639 ---- +--- 3839,3847 ---- bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->sint-list: "bytevector->sint-list: bytevector length 12 is not a multiple of size 50". @@ -3754,7 +3754,7 @@ bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: #(a b c) is not a bytevector". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: unrecognized endianness spam". *************** -*** 3653,3661 **** +*** 3861,3869 **** bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 50". @@ -3764,7 +3764,7 @@ bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: a is not a bytevector". bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: "a" is not a bytevector". bytevector.mo:Expected error in mat tspl/csug-examples: "invalid endianness "spam"". ---- 3653,3661 ---- +--- 3861,3869 ---- bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 10". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 11". bytevector.mo:Expected error in mat bytevector->uint-list: "bytevector->uint-list: bytevector length 12 is not a multiple of size 50". @@ -3775,8 +3775,53 @@ bytevector.mo:Expected error in mat bytevector=?: "bytevector=?: "a" is not a bytevector". bytevector.mo:Expected error in mat tspl/csug-examples: "invalid endianness "spam"". *************** -*** 3706,3717 **** +*** 3969,3989 **** + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: invalid data in source bytevector #vu8(0 0 0 0 0 0 ...)". bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". + profile.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump (quote ()))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-clear (quote ()))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-list #t (quote ()) 3)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-html "" (quote ()) 3)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data)". +! profile.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data "profile.data" (quote ()) (quote q))". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". +--- 3969,3989 ---- + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: invalid data in source bytevector #vu8(0 0 0 0 0 0 ...)". + bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". + profile.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 1 to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 1 to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". + profile.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 0 to #". +! profile.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". + profile.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". +*************** +*** 4005,4016 **** + profile.mo:Expected error in mat profile-form: "profile subform is not a source object 3". misc.mo:Expected error in mat compiler1: "variable i-am-not-bound is not bound". misc.mo:Expected error in mat compiler1: "attempt to apply non-procedure oops". ! misc.mo:Expected error in mat compiler1: "incorrect argument count in call (g (list))". @@ -3788,8 +3833,8 @@ misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2) at line 3, char 19 of testfile.ss". misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2)". misc.mo:Expected error in mat compiler3: "variable goto is not bound". ---- 3706,3717 ---- - bytevector.mo:Expected error in mat bytevector-compress: "bytevector-uncompress: bytevector #vu8(255 255 255 255 255 255 ...) claims invalid uncompressed size ". +--- 4005,4016 ---- + profile.mo:Expected error in mat profile-form: "profile subform is not a source object 3". misc.mo:Expected error in mat compiler1: "variable i-am-not-bound is not bound". misc.mo:Expected error in mat compiler1: "attempt to apply non-procedure oops". ! misc.mo:Expected error in mat compiler1: "incorrect argument count in call (g (($top-level-value (...))))". @@ -3802,69 +3847,24 @@ misc.mo:Expected error in mat compiler3: "incorrect argument count in call (consumer 1 2)". misc.mo:Expected error in mat compiler3: "variable goto is not bound". *************** -*** 3788,3808 **** - misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". - misc.mo:Expected error in mat cpletrec: "attempt to assign undefined variable b". - misc.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump (quote ()))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-clear (quote ()))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-list #t (quote ()) 3)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-html "" (quote ()) 3)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data)". -! misc.mo:Expected error in mat compile-profile: "incorrect argument count in call (profile-dump-data "profile.data" (quote ()) (quote q))". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". ---- 3788,3808 ---- - misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b". - misc.mo:Expected error in mat cpletrec: "attempt to assign undefined variable b". - misc.mo:Expected error in mat compile-profile: "compile-profile: invalid mode src [must be #f, #t, source, or block]". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 1 to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 1 to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-list: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: (prefix) is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump (17)". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((a . 17))". - misc.mo:Expected error in mat compile-profile: "profile-dump-html: invalid dump ((# . q))". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 0 to #". -! misc.mo:Expected error in mat compile-profile: "incorrect number of arguments 3 to #". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: #t is not a string". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump 17". - misc.mo:Expected error in mat compile-profile: "profile-dump-data: invalid dump (17)". -*************** -*** 3835,3841 **** +*** 4103,4109 **** misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". - misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 2". + misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 4". ! misc.mo:Expected error in mat cost-center: "incorrect argument count in call (make-cost-center (quote foo))". misc.mo:Expected error in mat cost-center: "with-cost-center: foo is not a cost center". misc.mo:Expected error in mat cost-center: "with-cost-center: bar is not a procedure". misc.mo:Expected error in mat cost-center: "cost-center-instruction-count: 5 is not a cost center". ---- 3835,3841 ---- +--- 4103,4109 ---- misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: failed for probably-does-not-exist: no such file or directory". - misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 2". + misc.mo:Expected error in mat $fasl-file-equal?: "$fasl-file-equal?: record comparison failed while comparing testfile-fatfib1.so and testfile-fatfib3.so within fasl entry 4". ! misc.mo:Expected error in mat cost-center: "incorrect number of arguments 1 to #". misc.mo:Expected error in mat cost-center: "with-cost-center: foo is not a cost center". misc.mo:Expected error in mat cost-center: "with-cost-center: bar is not a procedure". misc.mo:Expected error in mat cost-center: "cost-center-instruction-count: 5 is not a cost center". *************** -*** 3889,3896 **** +*** 4157,4164 **** misc.mo:Expected error in mat apropos: "apropos: 3 is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos: (hit me) is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos-list: b is not an environment". @@ -3873,7 +3873,7 @@ misc.mo:Expected error in mat apropos: "variable $apropos-unbound1 is not bound". misc.mo:Expected error in mat apropos: "variable $apropos-unbound2 is not bound". misc.mo:Expected error in mat simplify-if: "textual-port?: a is not a port". ---- 3889,3896 ---- +--- 4157,4164 ---- misc.mo:Expected error in mat apropos: "apropos: 3 is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos: (hit me) is not a symbol or string". misc.mo:Expected error in mat apropos: "apropos-list: b is not an environment". @@ -3883,7 +3883,7 @@ misc.mo:Expected error in mat apropos: "variable $apropos-unbound2 is not bound". misc.mo:Expected error in mat simplify-if: "textual-port?: a is not a port". *************** -*** 3905,3920 **** +*** 4173,4188 **** misc.mo:Expected error in mat pariah: "invalid syntax (pariah)". misc.mo:Expected error in mat pariah: "invalid syntax (pariah . 17)". misc.mo:Expected error in mat procedure-arity-mask: "procedure-arity-mask: 17 is not a procedure". @@ -3900,7 +3900,7 @@ misc.mo:Expected error in mat wrapper-procedure: "make-arity-wrapper-procedure: 1 is not a procedure". misc.mo:Expected error in mat wrapper-procedure: "make-arity-wrapper-procedure: not-a-procedure is not a procedure". misc.mo:Expected error in mat wrapper-procedure: "make-arity-wrapper-procedure: not-an-exact-integer is not an arity mask". ---- 3905,3920 ---- +--- 4173,4188 ---- misc.mo:Expected error in mat pariah: "invalid syntax (pariah)". misc.mo:Expected error in mat pariah: "invalid syntax (pariah . 17)". misc.mo:Expected error in mat procedure-arity-mask: "procedure-arity-mask: 17 is not a procedure". @@ -3918,7 +3918,7 @@ misc.mo:Expected error in mat wrapper-procedure: "make-arity-wrapper-procedure: not-a-procedure is not a procedure". misc.mo:Expected error in mat wrapper-procedure: "make-arity-wrapper-procedure: not-an-exact-integer is not an arity mask". *************** -*** 3924,3936 **** +*** 4192,4204 **** misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: 1 is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: # is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: # is not a wrapper procedure". @@ -3932,7 +3932,7 @@ misc.mo:Expected error in mat wrapper-procedure: "set-wrapper-procedure-data!: 1 is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "set-wrapper-procedure-data!: # is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "set-wrapper-procedure-data!: # is not a wrapper procedure". ---- 3924,3936 ---- +--- 4192,4204 ---- misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: 1 is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: # is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "wrapper-procedure-data: # is not a wrapper procedure". @@ -3947,7 +3947,7 @@ misc.mo:Expected error in mat wrapper-procedure: "set-wrapper-procedure-data!: # is not a wrapper procedure". misc.mo:Expected error in mat wrapper-procedure: "set-wrapper-procedure-data!: # is not a wrapper procedure". *************** -*** 3950,3958 **** +*** 4218,4226 **** cp0.mo:Expected error in mat cp0-regression: "condition: #f is not a condition". cp0.mo:Expected error in mat cp0-regression: "apply: 0 is not a proper list". cp0.mo:Expected error in mat cp0-regression: "apply: 2 is not a proper list". @@ -3957,7 +3957,7 @@ cp0.mo:Expected error in mat expand-output: "expand-output: #t is not a textual output port or #f". cp0.mo:Expected error in mat expand-output: "expand-output: # is not a textual output port or #f". cp0.mo:Expected error in mat expand/optimize-output: "expand/optimize-output: #t is not a textual output port or #f". ---- 3950,3958 ---- +--- 4218,4226 ---- cp0.mo:Expected error in mat cp0-regression: "condition: #f is not a condition". cp0.mo:Expected error in mat cp0-regression: "apply: 0 is not a proper list". cp0.mo:Expected error in mat cp0-regression: "apply: 2 is not a proper list". @@ -3968,7 +3968,7 @@ cp0.mo:Expected error in mat expand-output: "expand-output: # is not a textual output port or #f". cp0.mo:Expected error in mat expand/optimize-output: "expand/optimize-output: #t is not a textual output port or #f". *************** -*** 4016,4024 **** +*** 4284,4292 **** 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 . 3) is not a proper list". 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 3 2 3 2 ...) is circular". 5_6.mo:Expected error in mat fxvector->list: "fxvector->list: (a b c) is not an fxvector". @@ -3978,7 +3978,7 @@ 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". ---- 4016,4024 ---- +--- 4284,4292 ---- 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 . 3) is not a proper list". 5_6.mo:Expected error in mat list->fxvector: "list->fxvector: (1 2 3 2 3 2 ...) is circular". 5_6.mo:Expected error in mat fxvector->list: "fxvector->list: (a b c) is not an fxvector". @@ -3989,7 +3989,7 @@ 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". 5_6.mo:Expected error in mat vector-map: "vector-map: #() is not a procedure". *************** -*** 4033,4041 **** +*** 4301,4309 **** 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". @@ -3999,7 +3999,7 @@ 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". ---- 4033,4041 ---- +--- 4301,4309 ---- 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-map: "vector-map: lengths of input vectors #(y) and #() differ". @@ -4010,7 +4010,7 @@ 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: #() is not a procedure". *************** -*** 4050,4067 **** +*** 4318,4335 **** 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". @@ -4029,7 +4029,7 @@ 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: 3 is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: (1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: #(a b c) is not a procedure". ---- 4050,4067 ---- +--- 4318,4335 ---- 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #() and #(x) differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". 5_6.mo:Expected error in mat vector-for-each: "vector-for-each: lengths of input vectors #(y) and #() differ". @@ -4049,7 +4049,7 @@ 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: (1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-sort!: "vector-sort!: #(a b c) is not a procedure". *************** -*** 4072,4080 **** +*** 4340,4348 **** 5_6.mo:Expected error in mat vector->immutable-vector: "vector-sort!: #(1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-set!: #vfx(1 2 3) is not a mutable fxvector". 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-fill!: #vfx(1 2 3) is not a mutable fxvector". @@ -4059,7 +4059,7 @@ 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: 1 is not a mutable vector". 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a valid index for #(4 5 3)". ---- 4072,4080 ---- +--- 4340,4348 ---- 5_6.mo:Expected error in mat vector->immutable-vector: "vector-sort!: #(1 2 3) is not a mutable vector". 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-set!: #vfx(1 2 3) is not a mutable fxvector". 5_6.mo:Expected error in mat fxvector->immutable-fxvector: "fxvector-fill!: #vfx(1 2 3) is not a mutable fxvector". @@ -4070,7 +4070,7 @@ 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a mutable vector". 5_6.mo:Expected error in mat vector-cas!: "vector-cas!: #(4 5 3) is not a valid index for #(4 5 3)". *************** -*** 4131,4138 **** +*** 4399,4406 **** 5_7.mo:Expected error in mat putprop-getprop: "getprop: 3 is not a symbol". 5_7.mo:Expected error in mat putprop-getprop: "putprop: "hi" is not a symbol". 5_7.mo:Expected error in mat putprop-getprop: "property-list: (a b c) is not a symbol". @@ -4079,7 +4079,7 @@ 5_8.mo:Expected error in mat box-cas!: "box-cas!: 1 is not a mutable box". 5_8.mo:Expected error in mat box-cas!: "box-cas!: #&1 is not a mutable box". 6.mo:Expected error in mat port-operations: "open-input-file: failed for nonexistent file: no such file or directory". ---- 4131,4138 ---- +--- 4399,4406 ---- 5_7.mo:Expected error in mat putprop-getprop: "getprop: 3 is not a symbol". 5_7.mo:Expected error in mat putprop-getprop: "putprop: "hi" is not a symbol". 5_7.mo:Expected error in mat putprop-getprop: "property-list: (a b c) is not a symbol". @@ -4089,7 +4089,7 @@ 5_8.mo:Expected error in mat box-cas!: "box-cas!: #&1 is not a mutable box". 6.mo:Expected error in mat port-operations: "open-input-file: failed for nonexistent file: no such file or directory". *************** -*** 4170,4191 **** +*** 4438,4459 **** 6.mo:Expected error in mat port-operations: "clear-output-port: not permitted on closed port #". 6.mo:Expected error in mat port-operations: "current-output-port: a is not a textual output port". 6.mo:Expected error in mat port-operations: "current-input-port: a is not a textual input port". @@ -4106,13 +4106,13 @@ 6.mo:Expected error in mat port-operations: "with-output-to-string: (this too?) is not a procedure". ! 6.mo:Expected error in mat port-operations: "incorrect argument count in call (eof-object #!eof)". 6.mo:Expected error in mat port-operations: "read: unexpected end-of-file reading quote at char 0 of #". - 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) on #". - 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket on #". + 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) before file-position 15 of #; the character position might differ". + 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket before file-position 11 of #; the character position might differ". ! 6.mo:Expected error in mat port-operations1: "incorrect argument count in call (open-input-output-file)". 6.mo:Expected error in mat port-operations1: "open-input-output-file: furball is not a string". 6.mo:Expected error in mat port-operations1: "open-input-output-file: failed for /probably/not/a/good/path: no such file or directory". 6.mo:Expected error in mat port-operations1: "open-input-output-file: invalid option compressed". ---- 4170,4191 ---- +--- 4438,4459 ---- 6.mo:Expected error in mat port-operations: "clear-output-port: not permitted on closed port #". 6.mo:Expected error in mat port-operations: "current-output-port: a is not a textual output port". 6.mo:Expected error in mat port-operations: "current-input-port: a is not a textual input port". @@ -4129,14 +4129,14 @@ 6.mo:Expected error in mat port-operations: "with-output-to-string: (this too?) is not a procedure". ! 6.mo:Expected error in mat port-operations: "incorrect number of arguments 1 to #". 6.mo:Expected error in mat port-operations: "read: unexpected end-of-file reading quote at char 0 of #". - 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) on #". - 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket on #". + 6.mo:Expected error in mat port-operations: "read: more than one item found after dot (.) before file-position 15 of #; the character position might differ". + 6.mo:Expected error in mat port-operations: "read: parenthesized list terminated by bracket before file-position 11 of #; the character position might differ". ! 6.mo:Expected error in mat port-operations1: "incorrect number of arguments 0 to #". 6.mo:Expected error in mat port-operations1: "open-input-output-file: furball is not a string". 6.mo:Expected error in mat port-operations1: "open-input-output-file: failed for /probably/not/a/good/path: no such file or directory". 6.mo:Expected error in mat port-operations1: "open-input-output-file: invalid option compressed". *************** -*** 4194,4200 **** +*** 4462,4468 **** 6.mo:Expected error in mat port-operations1: "truncate-file: all-the-way is not a valid length". 6.mo:Expected error in mat port-operations1: "truncate-file: # is not an output port". 6.mo:Expected error in mat port-operations1: "truncate-file: animal-crackers is not an output port". @@ -4144,7 +4144,7 @@ 6.mo:Expected error in mat port-operations1: "truncate-file: not permitted on closed port #". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". ---- 4194,4200 ---- +--- 4462,4468 ---- 6.mo:Expected error in mat port-operations1: "truncate-file: all-the-way is not a valid length". 6.mo:Expected error in mat port-operations1: "truncate-file: # is not an output port". 6.mo:Expected error in mat port-operations1: "truncate-file: animal-crackers is not an output port". @@ -4153,7 +4153,7 @@ 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". 6.mo:Expected error in mat port-operations1: "get-output-string: # is not a string output port". *************** -*** 4211,4218 **** +*** 4479,4486 **** 6.mo:Expected error in mat string-port-file-position: "file-position: -1 is not a valid position". 6.mo:Expected error in mat fresh-line: "fresh-line: 3 is not a textual output port". 6.mo:Expected error in mat fresh-line: "fresh-line: # is not a textual output port". @@ -4162,7 +4162,7 @@ 6.mo:Expected error in mat pretty-print: "pretty-format: 3 is not a symbol". 6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)". 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format". ---- 4211,4218 ---- +--- 4479,4486 ---- 6.mo:Expected error in mat string-port-file-position: "file-position: -1 is not a valid position". 6.mo:Expected error in mat fresh-line: "fresh-line: 3 is not a textual output port". 6.mo:Expected error in mat fresh-line: "fresh-line: # is not a textual output port". @@ -4172,7 +4172,7 @@ 6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)". 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format". *************** -*** 6696,6727 **** +*** 6964,6995 **** io.mo:Expected error in mat port-operations: "put-u8: not permitted on closed port #". io.mo:Expected error in mat port-operations: "put-bytevector: not permitted on closed port #". io.mo:Expected error in mat port-operations: "flush-output-port: not permitted on closed port #". @@ -4205,7 +4205,7 @@ io.mo:Expected error in mat port-operations1: "open-file-input/output-port: failed for /probably/not/a/good/path: no such file or directory". io.mo:Expected error in mat port-operations1: "invalid file option uncompressed". io.mo:Expected error in mat port-operations1: "invalid file option truncate". ---- 6696,6727 ---- +--- 6964,6995 ---- io.mo:Expected error in mat port-operations: "put-u8: not permitted on closed port #". io.mo:Expected error in mat port-operations: "put-bytevector: not permitted on closed port #". io.mo:Expected error in mat port-operations: "flush-output-port: not permitted on closed port #". @@ -4239,7 +4239,7 @@ io.mo:Expected error in mat port-operations1: "invalid file option uncompressed". io.mo:Expected error in mat port-operations1: "invalid file option truncate". *************** -*** 6732,6738 **** +*** 7000,7006 **** io.mo:Expected error in mat port-operations1: "set-port-length!: all-the-way is not a valid length". io.mo:Expected error in mat port-operations1: "truncate-port: # is not an output port". io.mo:Expected error in mat port-operations1: "truncate-port: animal-crackers is not an output port". @@ -4247,7 +4247,7 @@ io.mo:Expected error in mat port-operations1: "truncate-port: not permitted on closed port #". io.mo:Expected error in mat port-operations3: "file-port?: "not a port" is not a port". io.mo:Expected error in mat port-operations3: "port-file-descriptor: oops is not a port". ---- 6732,6738 ---- +--- 7000,7006 ---- io.mo:Expected error in mat port-operations1: "set-port-length!: all-the-way is not a valid length". io.mo:Expected error in mat port-operations1: "truncate-port: # is not an output port". io.mo:Expected error in mat port-operations1: "truncate-port: animal-crackers is not an output port". @@ -4256,7 +4256,7 @@ io.mo:Expected error in mat port-operations3: "file-port?: "not a port" is not a port". io.mo:Expected error in mat port-operations3: "port-file-descriptor: oops is not a port". *************** -*** 6915,6927 **** +*** 7183,7195 **** io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: #vu8(1 2 3) is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: -1 is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: 6 is not a valid size for #". @@ -4270,7 +4270,7 @@ io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: shoe is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 0 is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: -15 is not a positive fixnum". ---- 6915,6927 ---- +--- 7183,7195 ---- io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: #vu8(1 2 3) is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: -1 is not a valid size for #". io.mo:Expected error in mat low-level-port-operations: "set-binary-port-output-size!: 6 is not a valid size for #". @@ -4285,7 +4285,7 @@ io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: 0 is not a positive fixnum". io.mo:Expected error in mat custom-port-buffer-size: "custom-port-buffer-size: -15 is not a positive fixnum". *************** -*** 6947,6962 **** +*** 7215,7230 **** io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". io.mo:Expected error in mat compression: "port-file-compressed!: # is not a file port". io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". @@ -4302,7 +4302,7 @@ io.mo:Expected error in mat custom-binary-ports: "unget-u8: cannot unget 255 on #". io.mo:Expected error in mat custom-binary-ports: "put-u8: # is not a binary output port". io.mo:Expected error in mat custom-binary-ports: "port-length: # does not support operation". ---- 6947,6962 ---- +--- 7215,7230 ---- io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". io.mo:Expected error in mat compression: "port-file-compressed!: # is not a file port". io.mo:Expected error in mat compression: "port-file-compressed!: cannot compress input/output port #". @@ -4320,7 +4320,7 @@ io.mo:Expected error in mat custom-binary-ports: "put-u8: # is not a binary output port". io.mo:Expected error in mat custom-binary-ports: "port-length: # does not support operation". *************** -*** 7028,7043 **** +*** 7296,7311 **** io.mo:Expected error in mat current-ports: "console-output-port: # is not a textual output port". io.mo:Expected error in mat current-ports: "console-error-port: # is not a textual output port". io.mo:Expected error in mat current-transcoder: "current-transcoder: # is not a transcoder". @@ -4337,7 +4337,7 @@ io.mo:Expected error in mat utf-16-codec: "utf-16-codec: invalid endianness #f". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 0 of #". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 15 of #". ---- 7028,7043 ---- +--- 7296,7311 ---- io.mo:Expected error in mat current-ports: "console-output-port: # is not a textual output port". io.mo:Expected error in mat current-ports: "console-error-port: # is not a textual output port". io.mo:Expected error in mat current-transcoder: "current-transcoder: # is not a transcoder". @@ -4355,26 +4355,26 @@ io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 0 of #". io.mo:Expected error in mat to-fold-or-not-to-fold: "get-datum: invalid character name #\newLine at char 15 of #". *************** -*** 7209,7215 **** +*** 7477,7483 **** 7.mo:Expected error in mat eval-when: "invalid syntax visit-x". 7.mo:Expected error in mat eval-when: "invalid syntax revisit-x". 7.mo:Expected error in mat compile-whole-program: "compile-whole-program: failed for nosuchfile.wpo: no such file or directory". ! 7.mo:Expected error in mat compile-whole-program: "incorrect argument count in call (compile-whole-program "testfile-wpo-ab.wpo")". - 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in visit: library (testfile-wpo-lib) is not visible + 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in environment: attempt to import invisible library (testfile-wpo-lib) 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-a4) not found 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-c4) not found ---- 7209,7215 ---- +--- 7477,7483 ---- 7.mo:Expected error in mat eval-when: "invalid syntax visit-x". 7.mo:Expected error in mat eval-when: "invalid syntax revisit-x". 7.mo:Expected error in mat compile-whole-program: "compile-whole-program: failed for nosuchfile.wpo: no such file or directory". ! 7.mo:Expected error in mat compile-whole-program: "incorrect number of arguments 1 to #". - 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in visit: library (testfile-wpo-lib) is not visible + 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception in environment: attempt to import invisible library (testfile-wpo-lib) 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-a4) not found 7.mo:Expected error in mat compile-whole-program: "separate-eval: Exception: library (testfile-wpo-c4) not found *************** -*** 7225,7251 **** - 7.mo:Expected error in mat compile-whole-library: "separate-compile: Exception in compile-whole-library: encountered visit-only run-time library (testfile-cwl-a9) while processing file "testfile-cwl-a9.wpo" - 7.mo:Expected error in mat compile-whole-library: "separate-eval: Exception in compile-whole-program: encountered library (testfile-deja-vu-one) in testfile-deja-vu-dup.wpo, but had already encountered it in testfile-deja-vu-two.wpo +*** 7543,7569 **** + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1A) + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1B) 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: "hello" is not a symbol". ! 7.mo:Expected error in mat top-level-value-functions: "incorrect argument count in call (top-level-bound?)". 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: 45 is not a symbol". @@ -4400,9 +4400,9 @@ 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: hello is not an environment". 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: # is not a symbol". 7.mo:Expected error in mat top-level-value-functions: "variable i-am-not-bound-i-hope is not bound". ---- 7225,7251 ---- - 7.mo:Expected error in mat compile-whole-library: "separate-compile: Exception in compile-whole-library: encountered visit-only run-time library (testfile-cwl-a9) while processing file "testfile-cwl-a9.wpo" - 7.mo:Expected error in mat compile-whole-library: "separate-eval: Exception in compile-whole-program: encountered library (testfile-deja-vu-one) in testfile-deja-vu-dup.wpo, but had already encountered it in testfile-deja-vu-two.wpo +--- 7543,7569 ---- + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1A) + 7.mo:Expected error in mat concatenate-object-files: "separate-eval: Exception in verify-loadability: cannot find object file for library (testfile-cof1B) 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: "hello" is not a symbol". ! 7.mo:Expected error in mat top-level-value-functions: "incorrect number of arguments 0 to #". 7.mo:Expected error in mat top-level-value-functions: "top-level-bound?: 45 is not a symbol". @@ -4429,7 +4429,7 @@ 7.mo:Expected error in mat top-level-value-functions: "define-top-level-value: # is not a symbol". 7.mo:Expected error in mat top-level-value-functions: "variable i-am-not-bound-i-hope is not bound". *************** -*** 7560,7566 **** +*** 7878,7884 **** record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 1 to #". record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 1 to #". record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 3 to #". @@ -4437,7 +4437,7 @@ record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 4 to #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: record constructor descriptor # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". ---- 7560,7566 ---- +--- 7878,7884 ---- record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 1 to #". record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 1 to #". record.mo:Expected error in mat r6rs-records-procedural: "incorrect number of arguments 3 to #". @@ -4446,7 +4446,7 @@ record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: record constructor descriptor # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". *************** -*** 7650,7764 **** +*** 7968,8082 **** hash.mo:Expected error in mat old-hash-table: "hash-table-for-each: ((a . b)) is not an eq hashtable". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments 2 to #". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments 2 to #". @@ -4562,7 +4562,7 @@ hash.mo:Expected error in mat hashtable-arguments: "hashtable-ephemeron?: (hash . table) is not a hashtable". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value 3.5 for any". ---- 7650,7764 ---- +--- 7968,8082 ---- hash.mo:Expected error in mat old-hash-table: "hash-table-for-each: ((a . b)) is not an eq hashtable". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments 2 to #". hash.mo:Expected error in mat old-hash-table: "incorrect number of arguments 2 to #". @@ -4679,7 +4679,7 @@ hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-ref: invalid hash-function # return value 3.5 for any". *************** -*** 7781,7903 **** +*** 8099,8221 **** hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 3.5 for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 1+2i for any". @@ -4803,7 +4803,7 @@ hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument -1". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #t". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". ---- 7781,7903 ---- +--- 8099,8221 ---- hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value "oops" for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 3.5 for any". hash.mo:Expected error in mat hash-return-value: "hashtable-delete!: invalid hash-function # return value 1+2i for any". @@ -4928,7 +4928,7 @@ hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #t". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". *************** -*** 7905,7920 **** +*** 8223,8238 **** hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". @@ -4945,7 +4945,7 @@ hash.mo:Expected error in mat hash-functions: "string-ci-hash: hello is not a string". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". ---- 7905,7920 ---- +--- 8223,8238 ---- hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". @@ -4963,7 +4963,7 @@ hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". *************** -*** 8030,8037 **** +*** 8348,8355 **** 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -4972,7 +4972,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: improper list structure (a b . c)". 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". ---- 8030,8037 ---- +--- 8348,8355 ---- 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -4982,7 +4982,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". *************** -*** 8627,8642 **** +*** 8966,8981 **** 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -4999,7 +4999,7 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: hello is not an environment". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". ---- 8627,8642 ---- +--- 8966,8981 ---- 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -5017,14 +5017,14 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". *************** -*** 8735,8757 **** +*** 9074,9096 **** fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: <-int> is not a fixnum". ! fx.mo:Expected error in mat fx=?: "incorrect argument count in call (fx=? 1)". - fx.mo:Expected error in mat fx is not a fixnum". - fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". ! fx.mo:Expected error in mat fx?: "fx>?: "hi" is not a fixnum". fx.mo:Expected error in mat fx>?: "fx>?: is not a fixnum". @@ -5041,14 +5041,14 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 1 to #". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". ---- 8735,8757 ---- +--- 9074,9096 ---- fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: is not a fixnum". fx.mo:Expected error in mat fx=?: "fx=?: <-int> is not a fixnum". ! fx.mo:Expected error in mat fx=?: "incorrect number of arguments 1 to #". - fx.mo:Expected error in mat fx is not a fixnum". - fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". + fx.mo:Expected error in mat fx is not a fixnum". ! fx.mo:Expected error in mat fx". fx.mo:Expected error in mat fx>?: "fx>?: "hi" is not a fixnum". fx.mo:Expected error in mat fx>?: "fx>?: is not a fixnum". @@ -5066,7 +5066,7 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". *************** -*** 8783,8795 **** +*** 9122,9134 **** fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -5080,7 +5080,7 @@ fx.mo:Expected error in mat r6rs:fx*: "fx*: is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". ---- 8783,8795 ---- +--- 9122,9134 ---- fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -5095,7 +5095,7 @@ fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". *************** -*** 8839,8851 **** +*** 9178,9190 **** fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -5109,7 +5109,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: a is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". ---- 8839,8851 ---- +--- 9178,9190 ---- fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -5124,7 +5124,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". *************** -*** 8943,8952 **** +*** 9282,9291 **** fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -5135,7 +5135,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 35.0 is not a fixnum". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". ---- 8943,8952 ---- +--- 9282,9291 ---- fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -5147,7 +5147,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". *************** -*** 8960,8993 **** +*** 9299,9332 **** fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -5182,7 +5182,7 @@ fx.mo:Expected error in mat fxif: "fxif: a is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". ---- 8960,8993 ---- +--- 9299,9332 ---- fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -5218,7 +5218,7 @@ fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". *************** -*** 8997,9040 **** +*** 9336,9379 **** fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5263,7 +5263,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: 3.4 is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". ---- 8997,9040 ---- +--- 9336,9379 ---- fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5309,7 +5309,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". *************** -*** 9043,9053 **** +*** 9382,9392 **** fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5321,7 +5321,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". ---- 9043,9053 ---- +--- 9382,9392 ---- fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5334,7 +5334,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". *************** -*** 9107,9116 **** +*** 9446,9455 **** fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5345,7 +5345,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". ---- 9107,9116 ---- +--- 9446,9455 ---- fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5357,7 +5357,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". *************** -*** 9126,9135 **** +*** 9465,9474 **** fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5368,7 +5368,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". ---- 9126,9135 ---- +--- 9465,9474 ---- fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5380,7 +5380,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". *************** -*** 9145,9154 **** +*** 9484,9493 **** fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5391,7 +5391,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". ---- 9145,9154 ---- +--- 9484,9493 ---- fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5403,7 +5403,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". *************** -*** 9164,9174 **** +*** 9503,9513 **** fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5415,7 +5415,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". ---- 9164,9174 ---- +--- 9503,9513 ---- fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5428,7 +5428,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". *************** -*** 9191,9200 **** +*** 9530,9539 **** fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5439,7 +5439,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". ---- 9191,9200 ---- +--- 9530,9539 ---- fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5451,7 +5451,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". *************** -*** 9210,9227 **** +*** 9549,9566 **** fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5470,7 +5470,7 @@ fl.mo:Expected error in mat fl=: "fl=: (a) is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". ---- 9210,9227 ---- +--- 9549,9566 ---- fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5490,7 +5490,7 @@ fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". *************** -*** 9229,9235 **** +*** 9568,9574 **** fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5498,7 +5498,7 @@ fl.mo:Expected error in mat fl<: "fl<: (a) is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". ---- 9229,9235 ---- +--- 9568,9574 ---- fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5507,7 +5507,7 @@ fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". *************** -*** 9237,9243 **** +*** 9576,9582 **** fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5515,7 +5515,7 @@ fl.mo:Expected error in mat fl>: "fl>: (a) is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". ---- 9237,9243 ---- +--- 9576,9582 ---- fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5524,7 +5524,7 @@ fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". *************** -*** 9245,9251 **** +*** 9584,9590 **** fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5532,7 +5532,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: (a) is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". ---- 9245,9251 ---- +--- 9584,9590 ---- fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5541,7 +5541,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". *************** -*** 9253,9259 **** +*** 9592,9598 **** fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5549,7 +5549,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: (a) is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". ---- 9253,9259 ---- +--- 9592,9598 ---- fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5558,7 +5558,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". *************** -*** 9261,9300 **** +*** 9600,9639 **** fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5599,7 +5599,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". ---- 9261,9300 ---- +--- 9600,9639 ---- fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5641,7 +5641,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". *************** -*** 9304,9310 **** +*** 9643,9649 **** fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5649,7 +5649,7 @@ fl.mo:Expected error in mat fl-: "fl-: (a . b) is not a flonum". fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". ---- 9304,9310 ---- +--- 9643,9649 ---- fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5658,7 +5658,7 @@ fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". *************** -*** 9314,9396 **** +*** 9653,9735 **** fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5742,7 +5742,7 @@ fl.mo:Expected error in mat flround: "flround: a is not a flonum". fl.mo:Expected error in mat flround: "flround: 2.0+1.0i is not a flonum". fl.mo:Expected error in mat flround: "flround: 2+1i is not a flonum". ---- 9314,9396 ---- +--- 9653,9735 ---- fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5827,7 +5827,7 @@ fl.mo:Expected error in mat flround: "flround: 2.0+1.0i is not a flonum". fl.mo:Expected error in mat flround: "flround: 2+1i is not a flonum". *************** -*** 9410,9445 **** +*** 9749,9784 **** fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5864,7 +5864,7 @@ fl.mo:Expected error in mat fleven?: "fleven?: a is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". ---- 9410,9445 ---- +--- 9749,9784 ---- fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5902,7 +5902,7 @@ fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". *************** -*** 9447,9454 **** +*** 9786,9793 **** fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". @@ -5911,7 +5911,7 @@ fl.mo:Expected error in mat flodd?: "flodd?: a is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". ---- 9447,9454 ---- +--- 9786,9793 ---- fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". @@ -5921,7 +5921,7 @@ fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". *************** -*** 9456,9462 **** +*** 9795,9801 **** fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". @@ -5929,7 +5929,7 @@ fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". ---- 9456,9462 ---- +--- 9795,9801 ---- fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". @@ -5938,7 +5938,7 @@ fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". *************** -*** 9464,9470 **** +*** 9803,9809 **** fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -5946,7 +5946,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". ---- 9464,9470 ---- +--- 9803,9809 ---- fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -5955,7 +5955,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". *************** -*** 9472,9485 **** +*** 9811,9824 **** fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -5970,7 +5970,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: a is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". ---- 9472,9485 ---- +--- 9811,9824 ---- fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -5986,7 +5986,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". *************** -*** 9525,9531 **** +*** 9864,9870 **** cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -5994,7 +5994,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". ---- 9525,9531 ---- +--- 9864,9870 ---- cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -6003,7 +6003,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". *************** -*** 9535,9548 **** +*** 9874,9887 **** cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -6018,7 +6018,7 @@ foreign.mo:Expected error in mat load-shared-object: "load-shared-object: invalid path 3". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". ---- 9535,9548 ---- +--- 9874,9887 ---- cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -6034,7 +6034,7 @@ foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". *************** -*** 9577,9584 **** +*** 9916,9923 **** foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -6043,7 +6043,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier i-am-not-a-type". foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". ---- 9577,9584 ---- +--- 9916,9923 ---- foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -6053,7 +6053,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". *************** -*** 10076,10088 **** +*** 10415,10427 **** unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -6067,7 +6067,7 @@ windows.mo:Expected error in mat registry: "get-registry: pooh is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". ---- 10076,10088 ---- +--- 10415,10427 ---- unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -6082,7 +6082,7 @@ windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". *************** -*** 10110,10181 **** +*** 10449,10520 **** ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for -inf.0 would be outside of fixnum range". ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for +nan.0 would be outside of fixnum range". ieee.mo:Expected error in mat fllp: "fllp: 3 is not a flonum". @@ -6155,7 +6155,7 @@ date.mo:Expected error in mat time: "time>=?: 3 is not a time record". date.mo:Expected error in mat time: "time>=?: # is not a time record". date.mo:Expected error in mat time: "time>=?: types of