* 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.
* libguile/strings.c (scm_to_latin1_stringn): Fix for substrings.
* test-suite/standalone/Makefile.am:
* test-suite/standalone/test-scm-to-latin1-string.c: Add test case.
Thanks to David Hansen for the bug report and test case, and Stefan
Israelsson Tampe for the fix.
This is a followup to f9c1b8278d ("Tweak
`statprof.test' for faster machines.").
* test-suite/tests/statprof.test ("statistical sample counts within
expected range"): Compile with `#:partial-eval? #f'.
* 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.
* test-suite/tests/statprof.test ("statistical sample counts within
expected range"): Increase NUM-CALLS and the frequency so that they
are at least a few samples on my new 2.6 GHz laptop.
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.
* doc/ref/match.texi (Pattern Matching): Mention records. Add an
example showing record matching and the `=' pattern. Point users to
`match.upstream.scm'.
* 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!
* libguile/bytevectors.h:
* libguile/bytevectors.c (scm_c_take_gc_bytevector): Rename this
internal function, from scm_c_take_bytevector. This indicates that
unlike the other scm_take_* functions, this one takes GC-managed
memory.
* libguile/objcodes.c (scm_objcode_to_bytecode):
* libguile/vm.c (really_make_boot_program): Use
scm_gc_malloc_pointerless, not scm_malloc. Thanks to Stefan
Israelsson Tampe!
* libguile/r6rs-ports.c:
* libguile/strings.c: Adapt to renames.
* libguile/posix.c (scm_tmpfile): Fix to actually close the new
tmpfile, causing its deletion, while keeping an fd to the file open.
Fixes a leak both in memory and disk space on POSIX systems; MINGW
systems will leak however. A FIXME for later.
* 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.
* libguile/i18n.c (get_current_locale): Hold the locale name in a
GC-managed string, not a mallocated string. Thanks to Stefan
Israelsson Tampe for the report.
* libguile/srfi-1.h:
* libguile/srfi-1.c (scm_srfi1_drop_right, scm_srfi1_take_right): Remove
these internal functions, replacing with Scheme implementations.
* module/srfi/srfi-1.scm (take-right, drop-right): Add these impls from
the reference code. They do the right thing for improper lists,
according to the spec, but they diverge for circular lists. Oh well.
* test-suite/tests/srfi-1.test ("drop-right", "take-right"): Add more
tests.
* module/language/tree-il.scm (tree-il->scheme): Fix incorporation of
`lambda' in a `case-lambda'.
* test-suite/tests/tree-il.test ("tree-il->scheme"): Add a test.
* module/web/http.scm (parse-month, parse-rfc-822-date):
(parse-rfc-850-date, parse-asctime-date, parse-date):
(write-date): Parse and write dates without regard to the current
locale, using a custom parser. Also permits parsing of the deprecated
RFC 850 and asctime() date formats.
* module/srfi/srfi-19.scm (priv:locale-number-separator, priv:locale-am)
(priv:locale-am): Inline definitions.
Strip priv: prefix from module vars, as it's unnecessary, except for
in a couple cases.
* libguile/load.c (search_path): Extract from scm_search_path, to
give the caller the stat buffer of the found path.
(scm_search_path, scm_sys_search_load_path): Adapt accordingly.
(compiled_is_fresh): Take the stat buffers directly.
(scm_primitive_load_path, scm_init_eval_in_scheme): Adapt to
search_path / compiled_is_fresh changes to avoid duplicate states in
search-path.