* module/ice-9/session.scm (procedure-arguments): Arrange to interpret
numbers in the "req" and "opt" positions of an 'arglist as N arguments
with unknown name.
* module/ice-9/eval.scm (primitive-eval): Set 'arglist on "complex"
procedures. Fixes http://bugs.gnu.org/10922.
* test-suite/tests/session.test ("procedure-arguments"): Add a test.
Fixes <http://bugs.gnu.org/10938>.
Based on a patch by Stefan Israelsson Tampe <stefan.itampe@gmail.com>.
* module/ice-9/session.scm (procedure-arguments): When the 'arglist
property is available, emit the `allow-other-keys?' pair. Use
`match-lambda'.
* test-suite/tests/session.test ("procedure-arguments")["aok? is
preserved"]: New test.
* module/ice-9/ftw.scm (scandir): Run the select? procedure on all
items, including subdirs and the `.' and `..' entries. Pass it the
basename of the file in question instead of the full name.
* test-suite/tests/ftw.test ("scandir"): Adapt expectation for the .test
selector. Add test for a selector that rejects everything.
* libguile/strports.c (scm_mkstrport): Remove initialization of
`pt->ilseq_handler'.
* module/ice-9/pretty-print.scm (truncated-print)[ellipsis]: Set
%DEFAULT-PORT-CONVERSION-STRATEGY to 'error.
* test-suite/tests/ports.test ("string
ports")["%default-port-conversion-strategy is honored"]: New test.
["wrong encoding"]: Rename to...
["wrong encoding, error"]: ... this. Explicitly set
%DEFAULT-PORT-CONVERSION-STRATEGY to 'error. Return #f when no
exception is raised.
This commit removes code that was newly deprecated in stable-2.0.
Conflicts:
libguile/deprecated.c
libguile/deprecated.h
libguile/modules.c
module/ice-9/boot-9.scm
module/ice-9/deprecated.scm
* libguile/frames.c (scm_frame_source, scm_frame_previous):
* libguile/stacks.c (scm_make_stack):
* module/ice-9/boot-9.scm (exception-printers):
* module/system/vm/frame.scm (frame-call-representation): Fix more
assumptions that frame-procedure is a program, or even a procedure.
* module/ice-9/vlist.scm (make-block): If we are making a hash table,
allocate it inline with the contents. Otherwise don't even add a
pointer to the block.
(block-hash-table?): New internal accessor.
(block-ref*): Remove. Vhash entries are no longer wrapped.
(block-ref):
(block-hash-table-next-offset):
(block-hash-table-set-next-offset!):
(block-hash-table-ref):
(block-hash-table-set!):
(block-hash-table-add!): Adapt to take content vector explicitly, and
to expect the hash table inline with the contents. Some of these
accessors are new. Adapt callers.
(assert-vlist): New helper.
(vlist-cons): Update comment.
(vhash?): Update scheme to allocate the hash table and chain links
inline with the contents.
(%vhash-fold*, %vhash-assoc): Rewrite to be more performant.
* module/ice-9/vlist.scm (set-block-next-free!): Define this instead of
increment-block-next-free!.
(block-append!): Refactor to take an offset, and only append if the
offset is the next free value, and there is space in the block.
(block-cons): Refactor to not be a loop. The partial evaluator would
have to understand effects analysis in order to be able to unroll it,
and there's at most one recursion.
Recovers the performance loss resulting from the previous commit.
* module/ice-9/vlist.scm: Use define-inlinable instead of define-inline,
to ensure strict argument evaluation. There is a slight performance
penalty, but I hope subsequent hacks make it up.
* module/ice-9/boot-9.scm (default-prompt-tag): Once parameters have
booted, redefine as a parameter.
(make-prompt-tag): Change from a gensym to a list. Thanks to Mark
Weaver for the suggestion.
* doc/ref/api-control.texi (Prompt Primitives): Update docs.
* module/ice-9/boot-9.scm: Refine a comment about low-level port
functions. Move call-with-foo-port, with-input-from-foo, etc later in
the file, and define using `parameterize' instead of `dynamic-wind'.
Somewhat cleaner, and avoids thunk? checks for "swaports" in the old
implementation.
* module/ice-9/psyntax.scm (do, case): Comment out these definitions,
which are never used and immediately replaced by definitions in
boot-9.scm.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/psyntax.scm (subst-rename?, rename-old, rename-new,
rename-marks, make-rename): Remove these unused syntax rules.
Fix description of syntax wraps to match current reality.
* module/ice-9/compile-psyntax.scm: Minimize syntax object literals
embedded in psyntax-pp.scm.
* module/ice-9/psyntax.scm: Rename a few variables so that syntax
objects embedded in macros have no lexical bindings, so that their
minimized syntax objects will have no embedded labels. These labels
were the last remaining gensym counters in psyntax-pp.scm.
* module/ice-9/psyntax-pp.scm: Regenerate. It is now less than one
quarter of its previous size! More importantly, this file no longer
contains any gensym counters, which means that in the future, local
changes to psyntax.scm will usually result in only local changes to
psyntax-pp.scm.
* module/language/tree-il.scm (tree-il->scheme): New implementation that
simply calls 'decompile-tree-il'.
* module/language/scheme/decompile-tree-il.scm (choose-output-names,
do-decompile): New internal procedures.
(decompile-tree-il): New and improved implementation. Print source
identifiers where possible, otherwise add minimal numeric suffixes.
Previously we printed the gensyms. Avoid 'begin' in contexts that
provide an implicit 'begin'. Produce 'cond', 'case', 'and', 'or',
'let*', named let, and internal defines where appropriate. Recognize
keyword arguments in 'opts' to disable the production of these derived
syntactic forms, and to optionally strip numeric suffixes from
variable names.
* module/ice-9/compile-psyntax.scm: Disable partial evaluation, letrec
fixing, and primitive expansion when producing psyntax-pp.scm, in
order to produce output as close to the original source as practical.
Disable production of derived syntactic forms as needed during
bootstrap. Strip numeric suffixes from variable names. Adjust
pretty-printing parameters.
* module/ice-9/psyntax-pp.scm: Regenerate. It is now less than half
of the original size.
* module/ice-9/pretty-print.scm (pretty-print): Add new keyword argument
'#:max-expr-width'.
(generic-write): Add new argument 'max-expr-width'. Previously this
was internally defined to the constant value 50.
* libguile/posix.c (scm_open_process): Rewrite in C, so as to avoid
allocations and other calls that are not async-signal-safe.
(scm_init_popen, scm_init_posix): Register popen extension.
* module/ice-9/popen.scm: Load the popen extension, to get open-process.
* libguile/modules.c: In my current image, there are 1790 bindings in
the root module, which tips over to the next hash vector size, so
declare that to prevent rehashing.
* libguile/srcprop.c (scm_init_srcprop): Don't preallocate a big
source_whash table, as we might not need it (if everything is
compiled, for example).
* module/ice-9/boot-9.scm (make-module): Don't preall-cate big hash
tables for imported bindings. Instead trust that resizing works
correctly.
* module/ice-9/psyntax.scm (decorate-source): Set source properties on
any object that satisfies 'supports-source-properties?'. Previously
we used 'pair?' as the predicate.
(source-annotation): Apply 'source-properties' to _any_ kind of source
expression, where previously only pairs were queried. If the argument
is a syntax-object, apply the source-properties to the syntax-object's
expression.
In the peculiar case of a syntax-object whose expression is also a
syntax-object: previously we would iterate, but with this commit we
now call 'syntax-object-expression' only once.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/psyntax.scm (syntax-violation): Look for source
properties of 'subform' first. If 'subform' has none, 'form' is used.
Previously, the source information of 'form' was used unless 'form'
_itself_ was '#f', in which case 'subform' was used.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/psyntax.scm (rebuild-macro-output): Fix two bugs that
would cause bogus source properties to be added to vectors and
macro-introduced syntax objects. These bugs were masked by the
limitation that only pairs can be decorated with source properties.
Due to a typo, each vector in the macro output was decorated using the
vector itself as its source. Due to accidental variable capture, each
syntax-object introduced by the macro had its expression decorated
with its own wrap-subst.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/boot-9.scm (cond, case): Reimplement using syntax-case,
with improved error messages and support for '=>' within 'case' as
mandated by the R7RS. Add warnings for duplicate case datums and
case datums that cannot be meaningfully compared using 'eqv?'.
* module/system/base/message.scm (%warning-types): Add 'bad-case-datum'
and 'duplicate-case-datum' warning types.
* test-suite/tests/syntax.test (cond, case): Update tests to reflect
improved error reporting. Add tests for '=>' within 'case'.
* test-suite/tests/tree-il.test (partial evaluation): Update tests to
reflect changes in how 'case' is expanded.
* doc/ref/api-control.texi (Conditionals): Document '=>' within 'case'.
This reverts parts of a0919aefee ("i18n:
Use Gnulib's `nl_langinfo' module.").
* module/ice-9/i18n.scm (define-simple-langinfo-mapping): Re-add
`default' parameter, and update users accordingly.
* doc/ref/misc-modules.texi (Formatted Output): Document ~h. Recommend
use of ~h instead of ~:d.
* module/ice-9/format.scm (format): Add support for ~h.
* test-suite/tests/format.test ("~h localized number"): New test prefix.
* test-suite/tests/i18n.test (%american-english-locale-name,
%american-english-locale): New variables.
(under-american-english-locale-or-unresolved): New procedure.
("format ~h"): New test prefix.
* configure.ac: Remove checks for <langinfo.h> and <nl_types.h>, and
`nl_langinfo'.
* libguile/i18n.c: Remove #ifdefs for HAVE_LANGINFO_H, HAVE_NL_TYPES_H,
HAVE_NL_ITEM, and HAVE_LANGINFO_CODESET.
(SCM_VALIDATE_OPTIONAL_LOCALE_COPY): Use `SCM_UNBNDP'.
* m4/gnulib-cache.m4 (gl_MODULES): Add `nl_langinfo'.
* module/ice-9/i18n.scm (define-vector-langinfo-mapping): Remove
`defaults' parameter; assume (provided? 'nl-langinfo) is always true.
Update users accordingly.
(define-simple-langinfo-mapping): Likewise.
(define-monetary-langinfo-mapping): Likewise, but do not assume
LOCAL-ITEM and INTL-ITEM are always defined.