Chris Hanson [Thu, 3 May 2018 06:07:46 +0000 (23:07 -0700)]
Add procedures to generate infinities and a nan.
Chris Hanson [Thu, 3 May 2018 05:52:12 +0000 (22:52 -0700)]
Don't constant-fold an application if it generates an error.
Also fix overlong lines and pages in object.scm.
Chris Hanson [Wed, 2 May 2018 06:45:02 +0000 (23:45 -0700)]
Implement finite?, infinite?, and nan? from R7RS.
Chris Hanson [Wed, 2 May 2018 06:42:45 +0000 (23:42 -0700)]
Fix typo in previous edit.
Chris Hanson [Wed, 2 May 2018 06:36:10 +0000 (23:36 -0700)]
Change rational? to be false for inf/nan.
Chris Hanson [Wed, 2 May 2018 06:35:32 +0000 (23:35 -0700)]
Change printed representation of inf/nan to match R7RS.
Chris Hanson [Wed, 2 May 2018 06:27:57 +0000 (23:27 -0700)]
Add support for C99 floating-point predicates.
Also expose those predicates in Scheme, and implement flo:eqv? properly.
Chris Hanson [Tue, 1 May 2018 06:52:22 +0000 (23:52 -0700)]
Update documentation of booleans.
Chris Hanson [Tue, 1 May 2018 06:48:06 +0000 (23:48 -0700)]
Generalize boolean=? to support multiple arguments.
Chris Hanson [Tue, 1 May 2018 06:26:24 +0000 (23:26 -0700)]
Tweak char and string chapters to be closer to R7RS.
Chris Hanson [Mon, 30 Apr 2018 18:59:57 +0000 (11:59 -0700)]
Eliminate bundle types; original design using predicates is better.
Chris Hanson [Mon, 30 Apr 2018 18:14:36 +0000 (11:14 -0700)]
Convert object hasher to be a bundle.
Chris Hanson [Mon, 30 Apr 2018 17:55:24 +0000 (10:55 -0700)]
Fix thinko as reported by Patric Jonsson.
Incorrectly computed length of result in exact-nonnegative-integer->bytevector.
Chris Hanson [Sun, 29 Apr 2018 22:57:51 +0000 (15:57 -0700)]
Convert metadata tables to be bundles.
Chris Hanson [Sun, 29 Apr 2018 22:50:11 +0000 (15:50 -0700)]
Initialize applicable records much earlier in the cold load.
Chris Hanson [Sun, 29 Apr 2018 21:49:59 +0000 (14:49 -0700)]
Clean up bundle implementation.
Chris Hanson [Sun, 29 Apr 2018 05:41:08 +0000 (22:41 -0700)]
Revert bundle abstraction back to what we are using the in the book.
The previous version didn't really do what I wanted and this one is useful in a
more limited context.
Chris Hanson [Sun, 29 Apr 2018 05:40:42 +0000 (22:40 -0700)]
Fix typo: accidentally discarded initialization in earlier change.
Chris Hanson [Sun, 29 Apr 2018 05:09:56 +0000 (22:09 -0700)]
Integrate applicable records into the procedure abstraction.
Also, don't allow applicable records to be made non-applicable. This sort of
satisfies the idea that predicates aren't time-varying, provided that the record
type's applicator is set immediately after definition.
Chris Hanson [Sun, 29 Apr 2018 03:50:25 +0000 (20:50 -0700)]
Add adapter for hash-object.
Chris Hanson [Sat, 28 Apr 2018 23:56:14 +0000 (16:56 -0700)]
Implement symbol=? for R7RS.
Also fix some symbol procedures that were unsafe.
Chris Hanson [Sat, 28 Apr 2018 05:21:38 +0000 (22:21 -0700)]
Change hash tables to use define-record-type instead of define-structure.
This has the advantage of eliminating the need for nearly all of the calls to
guarantee, which should at worst be a net wash and at best will be slightly
faster. (Not a big deal either way.)
A second advantage is, of course, eliminating the use of define-structure.
Chris Hanson [Sat, 28 Apr 2018 04:59:58 +0000 (21:59 -0700)]
Fix breakage I caused with a previous refactoring.
The procedures hash-table-update! and hash-table/modify! were not equivalent, as
I blindly assumed during the refactor. Changing hash-table-update! to use the
same implementation as hash-table/modify! caused the unit tests to fail, because
that implementation couldn't implement the tested behavior.
Rather than try to fix the implementation, I reverted hash-table-update! to its
previous implementation. The rationale for this is that fixing the implementation
would effectively eliminate its performance advantage, while still being hard to
understand. The older implementation is trivial to understand and eliminates
the restriction that the update procedure not use the hash table.
An additional complication arose because the previous implementation of
hash-table-update! returned an unspecified value, which broke hash-table-intern!
and caused hash-table/modify! to differ from its previous behavior. I fixed
these by rewriting them without using hash-table-update!.
Chris Hanson [Fri, 27 Apr 2018 05:37:04 +0000 (22:37 -0700)]
Deprecate with-values.
Chris Hanson [Fri, 27 Apr 2018 04:51:27 +0000 (21:51 -0700)]
Rename urtrap.scm -> reference-trap.scm.
Chris Hanson [Fri, 27 Apr 2018 04:47:59 +0000 (21:47 -0700)]
Export scode-expression?.
Chris Hanson [Thu, 26 Apr 2018 07:03:07 +0000 (00:03 -0700)]
Eliminate now-deprecated references to hash-table procedures.
Chris Hanson [Thu, 26 Apr 2018 06:48:49 +0000 (23:48 -0700)]
Update hash-table documentation in the reference manual.
Chris Hanson [Thu, 26 Apr 2018 06:48:22 +0000 (23:48 -0700)]
Mark all of the hash-table renames as deprecated.
Chris Hanson [Thu, 26 Apr 2018 06:21:44 +0000 (23:21 -0700)]
Rename hash-table-entry-type:key{/,&}datum-weak.
This makes it consistent with the ephemeron naming.
Chris Hanson [Thu, 26 Apr 2018 06:18:24 +0000 (23:18 -0700)]
Fix missed reference.
Chris Hanson [Wed, 25 Apr 2018 05:56:12 +0000 (22:56 -0700)]
Rewrite the object hashing facility.
* Names have been changed to avoid conflicts with hash tables, and for
consistency. The old names are still available as deprecated renames.
* New implementation is much easier to read.
Chris Hanson [Wed, 25 Apr 2018 05:55:42 +0000 (22:55 -0700)]
Add type and constructors for datum-weak hash tables.
Chris Hanson [Wed, 25 Apr 2018 05:42:41 +0000 (22:42 -0700)]
Fix typo.
Chris Hanson [Wed, 25 Apr 2018 03:50:37 +0000 (20:50 -0700)]
Refactor hash-table to clean up some issues noted in previous change.
* Export former %make-hash-table as make-hash-table*.
* Create new make-hash-table-type* which can create a type given an equality
predicate and some keyword options. If the equality predicate has registered
properties, no additional options may be necessary, except perhaps to choose
the entry type (which is specified by name).
* Change make-hash-table to accept the same options as make-hash-table-type* and
to use the same defaulting.
* Change internal procedure follow-memo-crap to hash-metadata, which more
accurately reflects its purpose: to get a properties table for the primary
hash parameters.
Chris Hanson [Tue, 24 Apr 2018 06:19:40 +0000 (23:19 -0700)]
Rename set-equality-predicate-hasher! -> set-equality-predicate-properties!.
Now has two required arguments: hash-function and rehash-after-gc?.
A rest argument is a keyword list for additional properties.
Chris Hanson [Tue, 24 Apr 2018 06:16:18 +0000 (23:16 -0700)]
Change keyword-option-parser to expect defaults as a thunk.
Chris Hanson [Tue, 24 Apr 2018 06:15:45 +0000 (23:15 -0700)]
Move int:modulo to primitive-arithmetic and export it.
Chris Hanson [Mon, 23 Apr 2018 06:34:31 +0000 (23:34 -0700)]
Standardize hash tables on SRFI-69 names and deprecate others.
Change make-hash-table to be smarter about choosing the appropriate hash
function for a given equality predicate.
Also work around name collisions in rtlopt/rcse*.scm, and tweak the hash-table
implementation to favor SRFI-69.
Some work remains: the code around building hash-table types needs to be
re-thought: it's a little clunky and could usefully take advantage of keyword
arguments. (These keyword arguments should also be supported by
make-hash-table.) The hash function should be optional and use the
equality-predicate default. The older %make-hash-table should be renamed and
exported as it's the right interface when using types.
Chris Hanson [Sun, 22 Apr 2018 06:28:35 +0000 (23:28 -0700)]
Make sure that run-three-stages looks at "build" before "svm".
Chris Hanson [Sun, 22 Apr 2018 05:08:44 +0000 (22:08 -0700)]
Eliminate remaining uses of find-matching-item.
Chris Hanson [Sun, 22 Apr 2018 05:05:07 +0000 (22:05 -0700)]
Eliminate remaining uses of list-search-positive.
Chris Hanson [Sun, 22 Apr 2018 04:58:12 +0000 (21:58 -0700)]
Downcase remaining symbols in the runtime system.
Only remaining such symbols are those that have explicit case.
Chris Hanson [Sun, 22 Apr 2018 01:56:02 +0000 (18:56 -0700)]
Change SVM compiler to use new pop-return instruction.
Chris Hanson [Sat, 21 Apr 2018 06:45:42 +0000 (23:45 -0700)]
Implement new SVM instruction: (pop-return).
Chris Hanson [Thu, 19 Apr 2018 04:21:04 +0000 (21:21 -0700)]
Override definition of filter so that compilation using 9.2 works.
Chris Hanson [Mon, 16 Apr 2018 02:16:56 +0000 (19:16 -0700)]
Implement scode-procedure-arity so that it can be run during cold load.
The lack of this prevented the cold load from running correctly when using
interpreted code, since it depended on a complex scode lambda implementation
that was loaded much later.
Chris Hanson [Mon, 16 Apr 2018 02:16:38 +0000 (19:16 -0700)]
Change guarantee to show context of error.
Chris Hanson [Sun, 15 Apr 2018 08:29:19 +0000 (01:29 -0700)]
Eliminate references to now-deprecated definitions.
Chris Hanson [Sun, 15 Apr 2018 08:29:02 +0000 (01:29 -0700)]
Put back inadvertently-deleted bindings.
Chris Hanson [Sun, 15 Apr 2018 08:19:00 +0000 (01:19 -0700)]
Mark deprecated list procedures and also more SRFI-1 procedures.
Chris Hanson [Sun, 15 Apr 2018 08:16:23 +0000 (01:16 -0700)]
Change find-{,not-}matching-items procedures to call find instead.
Also eliminate find-unique-{,not-}matching-items procedures which aren't used
and aren't documented. These are trivially solved with find-tail and any.
Chris Hanson [Sun, 15 Apr 2018 08:15:53 +0000 (01:15 -0700)]
Tweak indentation.
Chris Hanson [Sun, 15 Apr 2018 07:49:20 +0000 (00:49 -0700)]
Eliminate references to various list filters in favor of SRFI-1.
One unfortunate development is that somewhere in the compiler is some code that
depends on the result of a filtering option being newly allocated, while FILTER
shares the tail of the input list when it can. I modified FILTER to stop doing
that, because it wasn't obvious which of the modified calls in the compiler was
causing the problem.
Chris Hanson [Sun, 15 Apr 2018 00:59:41 +0000 (17:59 -0700)]
Optimize code generated for let*, let*-syntax, and letrec.
Thanks to Patric Jonsson for noticing this.
Chris Hanson [Sat, 14 Apr 2018 06:38:52 +0000 (23:38 -0700)]
Another round of downcasing.
Chris Hanson [Wed, 4 Apr 2018 06:23:23 +0000 (23:23 -0700)]
Downcase a lot more symbols and constants.
Chris Hanson [Tue, 3 Apr 2018 07:25:46 +0000 (00:25 -0700)]
Add program to find symbols that depend on case folding.
Chris Hanson [Mon, 2 Apr 2018 06:56:25 +0000 (23:56 -0700)]
Downcase a lot more symbols and constants.
Chris Hanson [Mon, 2 Apr 2018 04:07:46 +0000 (21:07 -0700)]
Export char-changes-when-X predicates and char sets.
Chris Hanson [Mon, 2 Apr 2018 00:38:03 +0000 (17:38 -0700)]
Downcase more symbols and constants.
Chris Hanson [Mon, 2 Apr 2018 00:02:49 +0000 (17:02 -0700)]
Downcase more symbols and constants.
Chris Hanson [Sun, 1 Apr 2018 23:58:08 +0000 (16:58 -0700)]
Downcase more symbols and constants.
Chris Hanson [Sun, 1 Apr 2018 23:52:10 +0000 (16:52 -0700)]
Downcase more symbols and constants.
Chris Hanson [Sun, 1 Apr 2018 23:42:19 +0000 (16:42 -0700)]
Downcase all symbols and constants.
Chris Hanson [Sun, 1 Apr 2018 23:31:35 +0000 (16:31 -0700)]
Change *parser-canonicalize-symbols?* to affect symbols only.
Chris Hanson [Sun, 1 Apr 2018 23:27:00 +0000 (16:27 -0700)]
Downcase symbols and constants in optiondb.
Chris Hanson [Sun, 1 Apr 2018 23:26:11 +0000 (16:26 -0700)]
Downcase symbols and constants in optiondb.
Chris Hanson [Sun, 1 Apr 2018 07:43:10 +0000 (00:43 -0700)]
Fix bug: mime decoder wasn't properly flushing its output.
Chris Hanson [Sat, 31 Mar 2018 07:02:50 +0000 (00:02 -0700)]
Fix typo in previous change.
Chris Hanson [Fri, 30 Mar 2018 05:59:08 +0000 (22:59 -0700)]
Eliminate define-expr-item-compiler in favor of define-item-compiler.
Not sure what I was thinking when I wrote that code; it was simply wrong.
Chris Hanson [Fri, 30 Mar 2018 05:58:50 +0000 (22:58 -0700)]
Move definition of access entirely into mit-syntax.
Chris Hanson [Fri, 30 Mar 2018 05:57:27 +0000 (22:57 -0700)]
Eliminate redundant code in cons-stream*.
Chris Hanson [Fri, 30 Mar 2018 05:24:02 +0000 (22:24 -0700)]
Reorder definitions in mit-macros into topical groups.
Chris Hanson [Fri, 30 Mar 2018 05:08:39 +0000 (22:08 -0700)]
Change spar-transformer->runtime to provide default environment.
Chris Hanson [Fri, 30 Mar 2018 05:03:25 +0000 (22:03 -0700)]
Rename :FOO syntax names so that they aren't potential keywords.
Chris Hanson [Fri, 30 Mar 2018 04:37:35 +0000 (21:37 -0700)]
Tweak quasiquote implementation to use shorter names.
Also refactor descend-pair slightly for brevity.
Chris Hanson [Fri, 30 Mar 2018 03:55:11 +0000 (20:55 -0700)]
Change and to be defined by syntax-rules.
Also belatedly define the feature full-unicode.
Chris Hanson [Thu, 29 Mar 2018 07:00:51 +0000 (00:00 -0700)]
Rewrite local-declare using syntax-rules.
Chris Hanson [Thu, 29 Mar 2018 06:09:43 +0000 (23:09 -0700)]
Convert define-integrable, fluid-let, and paramaterize to scons-rule.
Chris Hanson [Thu, 29 Mar 2018 06:09:08 +0000 (23:09 -0700)]
Change unsyntaxer:* variables to be parameters and export them.
Chris Hanson [Thu, 29 Mar 2018 05:31:30 +0000 (22:31 -0700)]
Fix broken unsyntaxing of scode sequences.
Also fix over-long lines.
Chris Hanson [Thu, 29 Mar 2018 04:42:19 +0000 (21:42 -0700)]
Make second arg to scons-set! optional.
Chris Hanson [Thu, 29 Mar 2018 04:20:34 +0000 (21:20 -0700)]
Refactor how keywords are matched.
* spar-arg:compare renamed to spar-arg:id=? and second argument is optional,
defaulting to spar-arg:form.
* patterns (noise ...), (noise-keyword ...), and (keyword ...) are eliminated.
* New pattern (ignore-if predicate arg...) ignores a subform if calling the
predicate is satisfied.
* Renamed (value-if ...) to (keep-if ...) with same semantics: keeps a subform
if calling the predicate is satisfied.
* New pattern (value arg) is like (values arg...) but a little clearer.
Chris Hanson [Thu, 29 Mar 2018 04:06:23 +0000 (21:06 -0700)]
Change spar pattern (elt ...) to (subform ...).
Chris Hanson [Thu, 29 Mar 2018 03:48:26 +0000 (20:48 -0700)]
Rename spar*elt* to spar*subform*.
Chris Hanson [Wed, 28 Mar 2018 06:30:54 +0000 (23:30 -0700)]
Change pattern->spar to make * and + operators implicitly listify.
Chris Hanson [Wed, 28 Mar 2018 05:00:16 +0000 (22:00 -0700)]
Eliminate special bindings for constants in pattern->spar.
Also change leading : to $ to avoid making names look like keywords.
Chris Hanson [Wed, 28 Mar 2018 04:41:07 +0000 (21:41 -0700)]
Rewrite patterns as (elt (list ...)) rather than (list (elt ...)).
Chris Hanson [Wed, 28 Mar 2018 04:34:09 +0000 (21:34 -0700)]
Convert and-let* to scons-rule.
Chris Hanson [Wed, 28 Mar 2018 04:33:56 +0000 (21:33 -0700)]
Add some simple optimizations.
Chris Hanson [Wed, 28 Mar 2018 00:17:55 +0000 (17:17 -0700)]
Convert a bunch more macros to scons-rule.
Chris Hanson [Wed, 28 Mar 2018 00:17:36 +0000 (17:17 -0700)]
Use folding to eliminate loops in macros.
Chris Hanson [Tue, 27 Mar 2018 07:29:18 +0000 (00:29 -0700)]
Rewrite COND and DO to use spar rules.
Chris Hanson [Tue, 27 Mar 2018 06:54:01 +0000 (23:54 -0700)]
Change scons-call to not quote its operator.
Instead one must explicitly call scons-close when necessary.
Chris Hanson [Tue, 27 Mar 2018 06:53:18 +0000 (23:53 -0700)]
Add context to items, for errors that happen during item compilation.
Chris Hanson [Tue, 27 Mar 2018 05:07:07 +0000 (22:07 -0700)]
Formalize the context of a syntax error.
Chris Hanson [Mon, 26 Mar 2018 08:32:47 +0000 (01:32 -0700)]
Implement spar-not.
Chris Hanson [Mon, 26 Mar 2018 02:13:33 +0000 (19:13 -0700)]
Rewrite COND-EXPAND to use spar rule.
Chris Hanson [Mon, 26 Mar 2018 00:05:17 +0000 (17:05 -0700)]
Change spars to set up error context when calling out to procedures.