* module/ice-9/match.scm (match): Always introduce a lexical binding, to
avoid http://debbugs.gnu.org/9567. Real fix ongoing. Patch and
original report by Stefan Israelsson Tampe.
* test-suite/tests/match.test: Add test.
* module/language/tree-il/optimize.scm (alpha-rename): Rename the
init
expressions of a <lambda-case>.
(peval): Coalesce the <let-values> clauses.
Fix pure-expression? matching of <lambda> clauses.
Loop over and maybe-unconst the inits of a <lambda-case>.
* module/language/tree-il/optimize.scm (peval): Rename `src' to
`lv-src', and `src2' to `src'; pass `make-let-values' the right source
locations. Reindent `let*'.
* module/language/tree-il/primitives.scm (*primitive-constructors*):
Record car, cdr, vector-ref, and struct-ref as "constructors".
Comment to come later.
(*effect-free-primitives*): Update.
* test-suite/tests/tree-il.test ("partial evaluation"): Add tests.
* module/language/tree-il/optimize.scm (peval): Fix comment regarding
alpha-renaming: it's not simply the allocator that needs unique names;
rather, all transformations depend on it.
* module/language/tree-il/optimize.scm (fresh-gensyms): New helper.
(alpha-rename): Name the new gensyms using the old names as templates,
not the old gensyms. This prevents accidental collisions between
gensyms, if #{x 1}# becomes #{x 12}# instead of #{x 2}#.
* module/language/tree-il/optimize.scm (peval): Add support for
let-values. Try to inline the consumer into the body of the producer,
if there is only one return point, and we can figure out how many
values are being returned, and that number is compatible with the
consumer.
* module/language/tree-il/optimize.scm (peval): Add support for fix,
dynwind, dynlet, dynref, module-set, and toplevel-set. (Mutating a
variable directly is similar to calling a function that does so behind
our backs, so this presents no additional problem.)
* module/language/tree-il/optimize.scm (code-contains-calls?): New
procedure.
(peval): Use it and abort inlining if the residual code of a procedure
application contains recursive calls. Suggested by Wingo, Waddell,
and Dybvig. Fixes <http://debbugs.gnu.org/9542>.
* test-suite/tests/tree-il.test ("partial evaluation"): Update 2 tests
that relied on the previous behavior. Add 1 another test.
* module/language/tree-il/optimize.scm (peval)[maybe-unlambda]: New
procedures.
Use it to de-duplicate named lambdas. This fixes the scoping bug
described at <https://lists.gnu.org/archive/html/bug-guile/2011-09/msg00019.html>.
* test-suite/tests/tree-il.test ("partial evaluation"): Add tests to
reproduce the bug.
* module/language/tree-il/optimize.scm (peval): Propagate ARGS to BODY
only when all of ARGS are pure. Change APP to use `maybe-unconst' for
its arguments.
* test-suite/tests/tree-il.test ("partial evaluation"): Add tests for
mutability preservation and non-propagation of non-constant arguments
to lambdas.
* module/language/tree-il/optimize.scm (peval)[make-values]: Distinguish
between 1 or another number of values.
[mutable?, make-value-construction, maybe-unconst]: New procedures.
Use it in <let>, <letrec>, <toplevel-define>, and <lambda-case>.
* test-suite/tests/tree-il.test ("partial evaluation"): Add tests
for mutability preservation.
* module/ice-9/command-line.scm (*usage*): Attempt to suggest that
`--no-debug' doesn't inhibit debugging support.
* doc/ref/guile-invoke.texi (Command-line Options): Make it clear that
`--no-debug' doesn't inhibit debugging support. Reported by Manuel
Serrano.
Thanks to William R. Cook for his excellent tutorial,
<http://softlang.uni-koblenz.de/dsl11/>.
* module/language/tree-il/optimize.scm (optimize!): Call `peval' unless
the #:partial-eval? option asks otherwise.
(peval): New procedure.
* module/language/tree-il/inline.scm: Add comment.
* module/language/tree-il/primitives.scm (*primitive-constructors*): New
variable.
(*effect-free-primitives*): Use it.
(constructor-primitive?): New primitive.
* test-suite/tests/tree-il.test (assert-tree-il->glil): Extend to
support `with-partial-evaluation', `without-partial-evaluation', and
`with-options'.
(peval): New binding.
(pass-if-peval): New macro.
("lexical refs"): Run tests without partial evaluation.
("letrec"): Likewise.
("the or hack"): Likewise.
("conditional"): Likewise, for some tests.
("sequence"): Adjust to new generated code.
("partial evaluation"): New test prefix.
* module/ice-9/match.scm (slot-ref, slot-set!, is-a?): New macros.
* module/ice-9/match.upstream.scm: Update from Chibi-Scheme.
* test-suite/Makefile.am (SCM_TESTS): Add `tests/match.test.upstream'.
* test-suite/tests/match.test (rtd-2-slots, rtd-3-slots): New record
types.
("matches")["records"]: New test prefix.
("doesn't match")["records"]: New test prefix.
Include `match.test.upstream'.
* test-suite/vm/t-match.scm (matches?): Fix `$' example.
* module/oop/goops.scm (extended-by!, not-extended-by!)
(upgrade-accessor, merge-generics): Invalidate the method cache after
munging "extends" or "methods" fields.
(invalidate-method-cache!): A new wrapper around
%invalidate-method-cache!, that will also invalidate the caches of
"extended-by" generics.
(internal-add-method!, remove-class-accessors!): Use the new
invalidate-method-cache!.
* module/ice-9/psyntax.scm (define-syntax-rule): Add this new helper
macro, to define a syntax-rules macro with one clause.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/texinfo/reflection.scm (module-stexi-documentation): Make
#:docs-resolver a keyword argument. Provide back compat with
docs-resolver as an optional argument, though.
* module/texinfo.scm (texi-command-specs, complete-start-command):
Upstream texinfo has aliased `url' to `uref'. Let's do the same.
* test-suite/tests/texinfo.test ("test-texinfo->stexinfo"): Add a test.
* module/scripts/help.scm (show-help, show-summary, show-usage): Grovel
for %synopsis and %help variables as well, and show them
appropriately. Export these routines for other script modules to
use. Needs documentation.
* module/ice-9/boot-9.scm (define-module*): Resolve duplicates handlers
only after importing modules. Fixes a bug in which a module with
#:use-module (oop goops) but whose merge-generics handler got resolved
to noop instead of the real merge-generics handler. I can't think of
an easy way to test this, though.
Thanks to David Pirotte for the report!
* module/srfi/srfi-1.scm (check-arg, wrong-type-arg): Refactor arg type
checkers to be macros, and do the minimal amount of work in the
functions themselves. Use these checkers consistently for all
procedure arguments in this module. This catches user errors early;
see bug 33628.
* module/srfi/srfi-9.scm (define-record-type): Instead of defining the
RTD using make-vtable, use make-struct with the record-type-vtable,
and record the type name and fields names in the vtable. This way
SRFI-9 records are compatible with boot-9 records. Also we use a
generic printer, instead of generating one anew.