Andy Wingo [Fri, 18 Nov 2011 10:31:52 +0000 (11:31 +0100)]
Scheme standard-vtable-fields binding
* libguile/struct.c (scm_init_struct): Export standard-vtable-fields to
Scheme.
Andy Wingo [Fri, 18 Nov 2011 10:15:43 +0000 (11:15 +0100)]
add Scheme binding for scm_standard_vtable_vtable
* libguile/struct.c (scm_init_struct): Export <standard-vtable> to
Scheme.
Andy Wingo [Fri, 18 Nov 2011 09:50:35 +0000 (10:50 +0100)]
simplify scm_init_print
* libguile/print.c (scm_init_print): Simplify creation of print-state
vtable.
Andy Wingo [Fri, 6 Jul 2012 16:12:59 +0000 (18:12 +0200)]
deprecate struct-vtable-tag
* libguile/deprecated.c:
* libguile/deprecated.h:
* libguile/struct.c:
* libguile/struct.h:
* doc/ref/api-compound.texi: Deprecate struct-vtable-tag.
Andy Wingo [Fri, 6 Jul 2012 15:45:23 +0000 (17:45 +0200)]
disable some uri tests if --disable-networking
* test-suite/tests/web-uri.test: Disable some tests if we don't have
inet-pton.
Andy Wingo [Fri, 6 Jul 2012 14:13:57 +0000 (16:13 +0200)]
add --match pattern to git-version-gen
* configure.ac: Add --match pattern so we only get v2.0.x tagx.
Andy Wingo [Fri, 6 Jul 2012 13:51:05 +0000 (15:51 +0200)]
git-version-gen: add --match argument
* build-aux/git-version-gen (Options): Add --match argument.
(v_from_git): Remove path without --match.
Andy Wingo [Fri, 6 Jul 2012 13:17:07 +0000 (15:17 +0200)]
update git-version-gen from gnulib
* build-aux/git-version-gen: Import from gnulib.
Daniel Krueger [Wed, 28 Mar 2012 16:25:15 +0000 (18:25 +0200)]
fixed repl command ,describe to also handle syntax
Dagobert Michelsen [Mon, 6 Feb 2012 08:45:41 +0000 (09:45 +0100)]
Add alignment for Sun Studio 12
Andy Wingo [Fri, 6 Jul 2012 11:13:19 +0000 (13:13 +0200)]
more uri-related ipv6 fixes
* module/web/uri.scm (ipv6-regexp): IPv6 numeric addresses do not have
brackets. It's only in URIs that they have them.
(ipv6-host-pat, authority-regexp, parse-authority): Refactor ipv6
detection to fix a bug with |, and to extract IPv6 hosts from their
brackets. This way we can pass the uri-host directly to inet-pton.
(uri->string): If the host contains a `:', assume it is ipv6 and add
brackets.
* test-suite/tests/web-uri.test ("build-uri"): Adapt tests to assume
that the address returned by uri-host and passed to build-uri #:host
does not have brackets.
Daniel Hartwig [Fri, 30 Dec 2011 16:16:42 +0000 (00:16 +0800)]
enhance IPv6 support
* module/web/uri.scm (valid-host?): Support dotted-quad notation
in IPv6 addresses.
(parse-authority): Support IPv6 literals.
* test-suite/tests/web-uri.test: Add and fix tests.
Daniel Hartwig [Fri, 30 Dec 2011 09:49:37 +0000 (17:49 +0800)]
support URIs with domain names starting with numbers
* module/web/uri.scm (valid-host?): Fix regexp to support
domain names starting with numbers.
* test-suite/tests/web-uri.scm: Add tests for above and
IP literals.
Andy Wingo [Fri, 6 Jul 2012 10:23:39 +0000 (12:23 +0200)]
fix typo in web.texi
* doc/ref/web.texi (HTTP Headers): Fix typo in example. Fixes
http://bugs.gnu.org/10890.
Andy Wingo [Fri, 6 Jul 2012 10:19:12 +0000 (12:19 +0200)]
better procedure-arguments for interpreted procs with opt, rest, kwargs
* 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.
Andy Wingo [Fri, 6 Jul 2012 09:01:51 +0000 (11:01 +0200)]
add check for fchmod
* configure.ac: Add a check for fchmod.
* libguile/filesys.c (scm_chmod): Guard the fchmod case with
HAVE_FCHMOD.
Andy Wingo [Fri, 6 Jul 2012 08:56:02 +0000 (10:56 +0200)]
remove mkdir alias in filesys.c for mingw
* libguile/filesys.c (mkdir): Remove alias, as gnulib handles this for
us.
Andy Wingo [Fri, 6 Jul 2012 08:50:31 +0000 (10:50 +0200)]
fix warnings in mingw in expand.c
* libguile/expand.c (VOID_, CONST_): Add trailing underscores to avoid
name conflicts on MinGW.
Andy Wingo [Fri, 6 Jul 2012 08:43:29 +0000 (10:43 +0200)]
fix warning about vsnprintf on mingw
* libguile/deprecation.c: Remove a vsnprintf alias for mingw, now that
gnulib handles it correctly.
Andy Wingo [Fri, 6 Jul 2012 08:43:02 +0000 (10:43 +0200)]
be sure to include time.h for struct timespec
* libguile/gen-scmconfig.c: The GNU libc manual says that struct
timespec is defined in time.h. So, just include both sys/time.h and
time.h, if they are available.
Andy Wingo [Thu, 5 Jul 2012 21:26:38 +0000 (23:26 +0200)]
fix `vector' instruction emission for big vectors
* module/language/glil/compile-assembly.scm (dump-constants): Only use
the `vector' instruction for vectors whose length can fit in 16 bits.
Fixes http://bugs.gnu.org/11087.
Andy Wingo [Thu, 5 Jul 2012 18:40:56 +0000 (20:40 +0200)]
fix-letrec uses effects.scm for effects analysis
* module/language/tree-il/fix-letrec.scm: Use effects.scm for effects
analysis, instead of primitives.scm.
(simple-expression?, partition-vars): Adapt.
Andy Wingo [Thu, 5 Jul 2012 18:39:16 +0000 (20:39 +0200)]
simplify one kind of degenerate prompt
* module/language/tree-il/peval.scm (<operand>): Instead of having a
`residualize?' field, have it be a use count.
(peval): Adapt to <operand> change. Add function to kill uses of an
operand. Use it in the <prompt> inliner. Add another kind of
degenerate prompt to elide. We should really switch to CPS though, as
that will allow us to contify more aggressively.
* test-suite/tests/peval.test ("partial evaluation"): Adapt (while #t
#t) test, which was sensitive to how far the recursive inlining got.
Add a test for the degenerate prompt elision.
Andy Wingo [Thu, 5 Jul 2012 18:34:28 +0000 (20:34 +0200)]
fix bugs in effects analysis of "effect+exception-free-primitives"
* module/language/tree-il/effects.scm (make-effects-analyzer): Be more
precise regarding the effects of the so-called
effect+exception-free-primitives: now we check their arities.
* test-suite/tests/cse.test ("cse"): Add a test that we don't
elide (cons 1 2 3) in effect context.
Andy Wingo [Thu, 5 Jul 2012 18:30:18 +0000 (20:30 +0200)]
optimize (apply foo 0 (list 1 2)) => (foo 0 1 2)
* module/language/tree-il/peval.scm (peval): Inline applications where
we know the contents of the tail.
* test-suite/tests/peval.test ("partial evaluation"): Add tests.
Andy Wingo [Thu, 5 Jul 2012 09:06:29 +0000 (11:06 +0200)]
compile ecmascript's `return' as an abort
* module/language/ecmascript/compile-tree-il.scm (current-return-tag):
(with-return-prompt, comp): Compile `return' as an abort instead of a
primcall to `return'. Fixes beta-reduction by the optimizer -- it
doesn't make sense for `return' to move from one function to another!
Andy Wingo [Thu, 5 Jul 2012 08:15:02 +0000 (10:15 +0200)]
fix goops compilation when current language is not scheme
* module/oop/goops/dispatch.scm (compute-dispatch-procedure): Set source
language to Scheme, not (current-language).
Andy Wingo [Wed, 4 Jul 2012 15:54:57 +0000 (17:54 +0200)]
add scm_c_nvalues to news
* NEWS: Add scm_c_nvalues.
Andy Wingo [Wed, 4 Jul 2012 15:48:06 +0000 (17:48 +0200)]
add scm_c_nvalues with docs; also, docs for scm_c_values
* libguile/values.h:
* libguile/values.c (scm_c_nvalues): New function.
* doc/ref/api-control.texi (Multiple Values): Add docs for scm_c_values
and scm_c_nvalues.
Fixes http://bugs.gnu.org/11764.
Andy Wingo [Wed, 4 Jul 2012 15:43:53 +0000 (17:43 +0200)]
add scm_{to,from}_pointer docs
* doc/ref/api-foreign.texi: Add documentation for scm_to_pointer and
scm_from_pointer.
Andy Wingo [Mon, 2 Jul 2012 21:02:08 +0000 (23:02 +0200)]
update NEWS
* NEWS: Update.
Andy Wingo [Mon, 2 Jul 2012 21:01:21 +0000 (23:01 +0200)]
dead code elimination
* module/ice-9/psyntax.scm: Remove commented-out definitions of `do' and
`case'.
Andy Wingo [Mon, 2 Jul 2012 21:00:49 +0000 (23:00 +0200)]
remove docs for smob-call instruction
* doc/ref/vm.texi (Trampoline Instructions): Remove docs for smob-call.
Andy Wingo [Fri, 29 Jun 2012 09:55:40 +0000 (11:55 +0200)]
typo fix in web.texi
* doc/ref/web.texi (URIs): Fix a typo/thinko.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
Have `procedure-arguments' always return the `allow-other-keys?' pair.
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.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
Add tests for `procedure-arguments'.
* test-suite/tests/session.test ("procedure-arguments"): New test
prefix.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
Update `THANKS'.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
Remove backward-compatible `GC_PTR' definition.
Fixes <http://bugs.gnu.org/11500>.
Reported by Kevin J. Fletcher <dev@kjfletch.co.uk>.
* libguile/bdw-gc.h (GC_PTR)[(defined GC_VERSION_MAJOR)
&& (GC_VERSION_MAJOR >= 7)]: Remove.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
Use `void *' instead of `GC_PTR' internally.
* libguile/finalizers.c, libguile/foreign.c, libguile/guardians.c,
libguile/hashtab.c, libguile/numbers.c, libguile/ports.c,
libguile/smob.c, libguile/struct.c, libguile/vectors.c,
libguile/weaks.c: Use `void *' instead of `GC_PTR'.
Ludovic Courtès [Sun, 1 Jul 2012 15:32:03 +0000 (17:32 +0200)]
doc: Remove reference to `closure?', now deprecated.
Fixed <http://bugs.gnu.org/11611>.
* doc/ref/api-procedures.texi (Procedure Properties): Remove reference
to `closure?'. Suggested by David Jaquay <djaquay@gmail.com>.
Andy Wingo [Fri, 22 Jun 2012 10:30:39 +0000 (12:30 +0200)]
add char->integer, number->string etc to interesting primitives
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*effect-free-primitives*): Add string->number, number->string,
integer->char, and char->integer to allow for constant folding and
better effects analysis.
Andy Wingo [Fri, 22 Jun 2012 10:29:08 +0000 (12:29 +0200)]
update version-etc copyright year
* module/ice-9/command-line.scm (version-etc): Update copyright year to
2012.
Andy Wingo [Fri, 22 Jun 2012 10:25:34 +0000 (12:25 +0200)]
cse: expressions evaluated for effect do not provide predicates
* module/language/tree-il/cse.scm (cse): When trying to fold
conditionals, only look at entries in the database that were added in
test context.
* test-suite/tests/cse.test ("cse"): Add a test case.
Andy Wingo [Mon, 11 Jun 2012 10:25:24 +0000 (12:25 +0200)]
scandir: select? takes basenames, operates on (sub)dirs also
* 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.
Ludovic Courtès [Wed, 20 Jun 2012 20:56:11 +0000 (22:56 +0200)]
Fix possible deadlock upon `encoding-error' in `open-input-string'.
Partly addresses <http://bugs.gnu.org/11197>.
* libguile/strports.c (scm_mkstrport): Call `scm_port_non_buffer', set
Z's cell type and stream, and release `scm_i_port_table_mutex' early.
Reacquire `scm_i_port_table_mutex' once BUF, C_BUF, and STR_LEN are
initialized.
* test-suite/tests/ports.test ("string ports")["encoding failure leads
to exception"]: New test.
Ludovic Courtès [Wed, 20 Jun 2012 13:49:42 +0000 (15:49 +0200)]
Make SRFI-6 string ports Unicode-capable.
Partly addresses <http://bugs.gnu.org/11197>.
Reported by Klaus Stehle <klaus.stehle@uni-tuebingen.de>.
* module/srfi/srfi-6.scm (open-input-string, open-output-string): New
procedures.
* test-suite/tests/srfi-6.test ("open-input-string")["read-char,
Unicode"]: New test.
("open-output-string")["λ"]: New test.
Ludovic Courtès [Wed, 20 Jun 2012 13:44:29 +0000 (15:44 +0200)]
Update `THANKS'.
Ludovic Courtès [Tue, 19 Jun 2012 23:11:44 +0000 (01:11 +0200)]
Fix cross-compilation of GOOPS-using code.
Fixes <http://bugs.gnu.org/11645>.
Reported by Bogdan A. Marinescu <bogdan.a.marinescu@intel.com>.
* module/oop/goops/dispatch.scm (compute-dispatch-procedure)[comp]:
Wrap `compile' call in (with-target %host-type ...).
Sjoerd van Leent [Sat, 9 Jun 2012 01:21:08 +0000 (21:21 -0400)]
Fix unbound variables and unbound values
* module/language/ecmascript/base.scm: fix two wrong variable names and a wrong
number of arguments in a function call.
Ludovic Courtès [Fri, 8 Jun 2012 10:44:07 +0000 (12:44 +0200)]
Fix invalid use of `SCM' as a Boolean.
* libguile/deprecated.c (scm_sym2var): Check `scm_is_true (definep)'.
Ludovic Courtès [Fri, 8 Jun 2012 10:42:08 +0000 (12:42 +0200)]
Update (ice-9 match) from Chibi-Scheme.
Fixes <http://bugs.gnu.org/10651>.
* module/ice-9/match.upstream.scm: Update.
Ludovic Courtès [Thu, 31 May 2012 13:53:06 +0000 (15:53 +0200)]
Make `substitute' conversion strategy test portable.
* test-suite/tests/foreign.test ("pointer<->string")["%default-port-conversion-strategy
is soft"]: Split into the following tests.
["%default-port-conversion-strategy is escape",
"%default-port-conversion-strategy is substitute"]: New tests. In the
latter, add the escape form returned on FreeBSD 8.2 and Darwin 10.8.0.
Ludovic Courtès [Thu, 31 May 2012 12:29:25 +0000 (14:29 +0200)]
Fix port test that assumed string ports use the `error' conversion strategy.
This is a followup to
9f6e3f5a997f484548bd03e7e7573c38a95c8d09 ("Have
string ports honor `%default-port-conversion-strategy'.").
* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
Output")["put-bytevector with wrong-encoding string port"]: Set
%DEFAULT-PORT-CONVERSION-STRATEGY to 'error. Return #f when no
exception is raised.
("8.2.6 Input and output ports")["transcoded-port [error handling
mode = raise]"]: Return #f when no exception is raised.
Ludovic Courtès [Tue, 29 May 2012 21:39:05 +0000 (23:39 +0200)]
Have string ports honor `%default-port-conversion-strategy'.
* 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.
Ludovic Courtès [Tue, 29 May 2012 21:39:05 +0000 (23:39 +0200)]
Add the `%default-port-conversion-strategy' fluid.
Fixes <http://bugs.gnu.org/11468>.
* libguile/ports.c (scm_conversion_strategy): Remove.
(default_conversion_strategy_var, sym_error, sym_substitute,
sym_escape): New variables.
(scm_i_get_conversion_strategy, scm_i_set_conversion_strategy_x):
Remove.
(scm_i_default_port_conversion_handler,
scm_i_set_default_port_conversion_handler): New functions.
(scm_port_conversion_strategy): Use
`scm_i_default_port_conversion_handler' when PORT is #f.
(scm_set_port_conversion_strategy_x): Use SYM_ERROR, SYM_SUBSTITUTE,
and SYM_ESCAPE. Use `scm_i_set_default_port_conversion_handler' when
PORT is #f.
(scm_init_ports): Initialize DEFAULT_CONVERSION_STRATEGY_VAR.
* libguile/ports.h: Update declarations accordingly.
* libguile/foreign.c: Change
`scm_i_get_conversion_strategy (SCM_BOOL_F)' to
`scm_i_default_port_conversion_handler ()'.
* libguile/strings.c: Likewise.
* test-suite/tests/ports.test ("%default-port-conversion-strategy"): New
test prefix.
* test-suite/tests/foreign.test ("pointer<->string")["%default-port-conversion-strategy
is error", "%default-port-conversion-strategy is soft"]: New tests.
* test-suite/test-suite/lib.scm (exception:encoding-error): Allow the
regexp to match `scm_to_stringn' error messages.
* doc/ref/api-io.texi (Ports): Document `%default-port-conversion-strategy'.
Ludovic Courtès [Tue, 29 May 2012 21:39:05 +0000 (23:39 +0200)]
Access `pt->ilseq_handler' directly when needed.
* libguile/print.c (PORT_CONVERSION_HANDLER): New macro.
(print_extended_symbol, iprin1, write_character, scm_write_char): Use
it instead of `scm_i_get_conversion_strategy'.
* libguile/strports.c (scm_mkstrport): Assign `pt->ilseq_handler'
directly instead of via `scm_i_set_conversion_strategy_x'.
Ludovic Courtès [Tue, 15 May 2012 22:04:07 +0000 (00:04 +0200)]
coverage: Add test for applicable structs.
* test-suite/tests/coverage.test ("procedure-execution-count")["applicable
struct"]: New test.
Andy Wingo [Wed, 23 May 2012 10:11:08 +0000 (12:11 +0200)]
finish deprecating eval closures
* libguile/deprecated.h:
* libguile/deprecated.c (scm_eval_closure_lookup)
(scm_standard_eval_closure, scm_standard_interface_eval_closure)
(scm_eval_closure_module): Deprecate these, as they are unused.
* libguile/modules.h:
* libguile/modules.c: Remove deprecated code.
* module/oop/goops/util.scm (top-level-env, top-level-env?): Deprecate.
* module/ice-9/deprecated.scm (set-system-module!): Deprecate.
(module-eval-closure): Deprecate, by overriding the core definition to
return a fresh eval closure.
* module/ice-9/boot-9.scm (make-module): Don't set an eval closure on
the module.
(the-root-module, the-scm-module): Don't call set-system-module!.
Andy Wingo [Wed, 23 May 2012 10:00:23 +0000 (12:00 +0200)]
deprecate lookup closures
* libguile/deprecated.h (SCM_TOP_LEVEL_LOOKUP_CLOSURE):
* libguile/deprecated.c (scm_lookup_closure_module):
(scm_module_lookup_closure):
(scm_current_module_lookup_closure): Deprecate this part of the eval
closure interface. It was unused internally, after the scm_sym2var
refactor.
* libguile/eval.h:
* libguile/modules.c:
* libguile/modules.h: Remove deprecated code.
* libguile/goops.c (scm_ensure_accessor): Use scm_module_variable
instead of calling the lookup closure. However I'm not sure that this
code is used at all.
Andy Wingo [Wed, 23 May 2012 09:46:30 +0000 (11:46 +0200)]
deprecate scm_sym2var
* libguile/deprecated.h:
* libguile/deprecated.c (scm_sym2var): Deprecate this function.
* libguile/modules.h:
* libguile/modules.c (scm_module_ensure_local_variable): New public
function, replacing scm_sym2var with a true definep, without going
through eval closures (which are deprecated).
(scm_current_module): Rework to do something sensible before modules
are booted.
(scm_module_lookup, scm_lookup): Refactor to use scm_module_variable.
(scm_module_define, scm_define): Refactor to use
scm_module_ensure_local_variable.
* libguile/vm-i-system.c (define!): Use scm_define.
* libguile/vm.c (resolve_variable): Use scm_module_lookup.
* libguile/macros.c (scm_make_syntax_transformer): Use
scm_module_variable.
* libguile/gdbint.c (gdb_binding): Use scm_define.
* doc/ref/api-modules.texi (Accessing Modules from C): Add docs for
scm_module_ensure_local_variable.
Andy Wingo [Mon, 21 May 2012 16:06:34 +0000 (18:06 +0200)]
fix arity check for applicable structs
* module/language/tree-il/analyze.scm (validate-arity): Fix for
applicable structs. Applicable structs are procedures, but not every
struct has a first slot, and not every struct with a procedure in its
first slot is applicable. Besides, the approach in this patch gives
better errors.
Andy Wingo [Mon, 21 May 2012 15:48:45 +0000 (17:48 +0200)]
rearrange scheme compilation order
* module/Makefile.am (SOURCES): Move vlists, srfi-1, peval, and cse up
in the compilation order. These are exercised a lot in the compiler.
Andy Wingo [Mon, 21 May 2012 15:31:58 +0000 (17:31 +0200)]
vm.c: remove a useless check
* libguile/vm.c: Remove a check for modules being booted. If the module
passed in is true, that is guaranteed to have been the case. Passes a
fresh bootstrap.
Ludovic Courtès [Tue, 15 May 2012 17:12:39 +0000 (19:12 +0200)]
Add more `%file-port-name-canonicalization' tests.
* test-suite/tests/ports.test ("%file-port-name-canonicalization")["relative
canonicalization with /", "relative canonicalization from ice-9",
"absolute canonicalization from ice-9"]: New tests.
Ludovic Courtès [Tue, 15 May 2012 17:05:37 +0000 (19:05 +0200)]
Fix relative file name canonicalization with empty %LOAD-PATH entries.
* libguile/filesys.c (scm_i_relativize_path): Don't attempt to
canonicalize when encountering an entry of IN_PATH that is the empty
string.
* test-suite/tests/ports.test (with-load-path): New macro.
("%file-port-name-canonicalization"): New test prefix.
Andy Wingo [Tue, 15 May 2012 15:37:57 +0000 (17:37 +0200)]
fix the cse tests
* test-suite/tests/cse.test (pass-if-cse): Fix-letrec and canonicalize
the output, so that unreferenced failure continuations get trimmed.
("cse"): Fix the two tests regarding bailout info.
Andy Wingo [Tue, 15 May 2012 15:23:06 +0000 (17:23 +0200)]
cse passes a lookup procedure to the effects analyzer
* module/language/tree-il/cse.scm (cse): Arrange to pass a lookup
procedure to compute-effects, for better effects analysis.
Andy Wingo [Tue, 15 May 2012 15:22:05 +0000 (17:22 +0200)]
better effects analysis for calls to lexically bound procedures
* module/language/tree-il/effects.scm (make-effects-analyzer): The
analyzer will take an optional second argument, a lookup procedure of
type sym -> exp. This can let the analyzer dig into calls to
lexically bound procedures.
Andy Wingo [Tue, 15 May 2012 15:20:57 +0000 (17:20 +0200)]
fix-letrec tweak
* module/language/tree-il/fix-letrec.scm (make-sequence*, fix-letrec!):
When turning unreferenced bindings into sequences, don't bother
emitting trivially constant expressions in effect position.
Andy Wingo [Tue, 15 May 2012 15:20:01 +0000 (17:20 +0200)]
CSE in tail position
* module/language/tree-il/cse.scm (singly-valued-expression?, cse):
Allow CSE to propagate lexicals to tail positions, if the expression
is singly-valued.
Andy Wingo [Tue, 15 May 2012 10:21:57 +0000 (12:21 +0200)]
stronger conditional optimization
* module/language/tree-il/peval.scm (peval): If we can lift one common
test, see if we can lift others as well.
* test-suite/tests/peval.test: Add a test.
Andy Wingo [Tue, 15 May 2012 10:18:30 +0000 (12:18 +0200)]
optimization for chain of if expressions with common tests
* module/language/tree-il/peval.scm (peval): Optimize common tests in
chains of "if" expressions, like those generated by matchers.
* test-suite/tests/peval.test ("partial evaluation"): Add a test.
Andy Wingo [Tue, 15 May 2012 10:14:22 +0000 (12:14 +0200)]
mvoe tree-il=? and tree-il-hash to tree-il.scm
* module/language/tree-il.scm (tree-il=?, tree-il-hash): Move these
helpers here, from cse.scm. Export them.
* module/language/tree-il/cse.scm (cse): Adapt accordingly.
Ludovic Courtès [Mon, 14 May 2012 17:21:35 +0000 (19:21 +0200)]
Honor $(program_transform_name) for the `guile-tools' symlink.
Fixes <http://bugs.gnu.org/11451>.
Reported by Cyprien Nicolas <c.nicolas@gmail.com>.
* meta/Makefile.am (install-data-hook): Honor $(program_transform_name).
Ludovic Courtès [Sat, 12 May 2012 14:11:51 +0000 (16:11 +0200)]
Have `-Wformat' remain quiet for any procedure called `_' or `N_'.
* module/language/tree-il/analyze.scm (proc-ref?)[special?]: New
procedure.
Return #t for any toplevel-ref of `_'.
* test-suite/tests/tree-il.test ("warnings")["format"]("non-literal
format string using gettext as top-level _"): New test.
Ludovic Courtès [Sat, 12 May 2012 13:58:23 +0000 (15:58 +0200)]
Have `-Warity-mismatch' handle applicable structs.
* module/language/tree-il/analyze.scm (arity-analysis): Honor applicable
structs.
* test-suite/tests/tree-il.test ("warnings")["arity
mismatch"]("top-level applicable struct", "top-level applicable struct
with wrong arguments"): New tests.
Ludovic Courtès [Sat, 12 May 2012 13:31:28 +0000 (15:31 +0200)]
Improve special-casing of `_' in `-Wformat'.
* module/language/tree-il/analyze.scm (proc-ref?): Check for
SPECIAL-NAME in the <module-ref> and <lexical-ref> cases too.
* test-suite/tests/tree-il.test ("warnings")["format"]("non-literal
format string using gettext as module-ref _", "non-literal format
string using gettext as lexical _"): New tests.
Andy Wingo [Fri, 11 May 2012 12:30:43 +0000 (14:30 +0200)]
fix more assumptions that the frame-procedure is a procedure
* 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.
Andy Wingo [Thu, 10 May 2012 13:55:25 +0000 (15:55 +0200)]
Merge remote-tracking branch 'origin/stable-2.0' into stable-2.0
Andy Wingo [Thu, 10 May 2012 10:43:33 +0000 (12:43 +0200)]
refactor vm application of non-programs; boot continuation refactor
* libguile/frames.c (scm_frame_instruction_pointer):
* module/system/vm/frame.scm (frame-bindings):
(frame-next-source, frame-call-representation): Fix a few locations
that thought that the frame-procedure will always be a VM
procedure. This will not not be the case when traversing the stack of
an application of a non-procedure.
* libguile/vm-i-system.c (call, tail-call, mv-call): Instead of
special-casing structs and smobs at these call sites, just set up the
stack, and jump to a generic apply loop if the proc is not a program.
* libguile/vm-engine.c: The generic apply loop is here. Also, the boot
program is now simply a boot continuation, and can handle any number
of arguments.
* libguile/vm.c (make_boot_program): Update the code that makes the boot
continuation.
Ludovic Courtès [Tue, 8 May 2012 10:43:06 +0000 (12:43 +0200)]
Add missing `SCM_API' for `scm_take_from_input_buffers'.
* libguile/ports.h (scm_take_from_input_buffers): Add `SCM_API'.
Ludovic Courtès [Tue, 8 May 2012 10:43:06 +0000 (12:43 +0200)]
Fix `setvbuf' to leave the line/column number unchanged.
* libguile/fports.c (scm_setvbuf): Use `scm_take_from_input_buffers'
directly instead of `scm_drain_input'; use `scm_unget_byte' instead of
`scm_unread_string' to put the drained input back to PORT. This
leaves PORT's line/column numbers unchanged, whereas they'd previously
be decreased by the `scm_unread_string' call.
* libguile/ports.c (scm_take_from_input_buffers): Update description and
variable names to refer to "bytes", not "chars".
* test-suite/tests/ports.test ("setvbuf"): New test prefix.
Andy Wingo [Tue, 8 May 2012 14:03:54 +0000 (16:03 +0200)]
docbook->texi fix
* module/texinfo/docbook.scm (*sdocbook->stexi-rules*): Only convert
ulink to uref if there is a URL attribute.
Andy Wingo [Mon, 7 May 2012 18:39:14 +0000 (20:39 +0200)]
(texinfo docbook) support for @acronym
* module/texinfo/docbook.scm (*sdocbook->stexi-rules*): Recognize
"acronym" as parsing to the @acronym texinfo command.
Andy Wingo [Mon, 7 May 2012 18:18:56 +0000 (20:18 +0200)]
add support for texinfo parsed arguments, like @acronym
* module/texinfo.scm (texi-command-specs): Add a new kind of texinfo
command, inline-text-args, a sort of a cross between inline-args,
which are unparsed, and inline-text, which is. Perhaps this should
supersede inline-args at some point. In any case, add acronym as an
inline-text-args element.
(inline-content?, arguments->attlist, complete-start-command)
(parse-inline-text-args, make-dom-parser): Adapt for
inline-text-args.
* module/texinfo/serialize.scm (inline-text-args): Add serialization for
@acronym.
* test-suite/tests/texinfo.test ("test-texinfo->stexinfo"): Add some
tests.
Andy Wingo [Wed, 2 May 2012 10:59:11 +0000 (12:59 +0200)]
Add a missing SYNC_ALL in variable-ref
* libguile/vm-i-system.c (variable-ref): Add a missing SYNC_ALL.
Ludovic Courtès [Sun, 6 May 2012 22:32:01 +0000 (00:32 +0200)]
Optimize `scm_read_string'.
According to the new benchmarks, this leads a 5% speed improvement when
reading small strings, and a 27% improvement when reading large strings.
* libguile/read.c (READER_STRING_BUFFER_SIZE): Change to 128; update
comment to mention codepoints.
(scm_read_string): Make `str' a list of strings, instead of a string.
Store characters read in buffer `c_str'. Cons to STR when C_STR is
full, and concatenate/reverse at the end.
* benchmark-suite/benchmarks/read.bm (small, large): New variables.
Set %DEFAULT-PORT-ENCODING to "UTF-8".
("read")["small strings", "large strings"]: New benchmarks.
Ludovic Courtès [Sun, 6 May 2012 20:24:47 +0000 (22:24 +0200)]
Make `scm_unget_byte' public.
* libguile/ports.h (scm_unget_byte): Make `SCM_API' instead of
`SCM_INTERNAL'.
Ludovic Courtès [Sun, 6 May 2012 20:23:58 +0000 (22:23 +0200)]
read: Avoid `void *' pointer arithmetic.
* libguile/read.c (read_complete_token): Make `new_buf' a `char *' to
avoid pointer arithmetic on `void *'.
Ludovic Courtès [Sun, 6 May 2012 20:23:12 +0000 (22:23 +0200)]
Build with `-Wpointer-arith' when available.
* configure.ac (POTENTIAL_GCC_CFLAGS): Add `-Wpointer-arith'.
Ludovic Courtès [Fri, 4 May 2012 22:44:54 +0000 (00:44 +0200)]
Correct typing of assertion in the `wind' instruction.
* libguile/vm-i-system.c (wind): Check `scm_to_bool (scm_thunk_p (x))'
instead of `scm_thunk_p'.
Ludovic Courtès [Fri, 4 May 2012 20:36:27 +0000 (22:36 +0200)]
Simplify the reader's `read_complete_token'.
* libguile/read.c (read_token): Remove unneeded `const' before `size_t'.
(read_complete_token): Remove `overflow_buffer' parameter; return
`char *' instead of `int'. Allocate the overflow buffer with
`scm_gc_malloc_pointerless' instead of `scm_malloc'. Return either
the overflow buffer or BUFFER.
(scm_read_number, scm_read_mixed_case_symbol,
scm_read_number_and_radix): Rename `buffer' to `local_buffer', and
`overflow_buffer' to `buffer'. Remove `overflow'. Adjust code to new
`read_complete_token'.
Andy Wingo [Mon, 30 Apr 2012 18:25:53 +0000 (20:25 +0200)]
push error handlers out of line in the vm
* libguile/vm.c:
(vm_error):
(vm_error_bad_instruction):
(vm_error_unbound):
(vm_error_unbound_fluid):
(vm_error_not_a_variable):
(vm_error_not_a_thunk):
(vm_error_apply_to_non_list):
(vm_error_kwargs_length_not_even):
(vm_error_kwargs_invalid_keyword):
(vm_error_kwargs_unrecognized_keyword):
(vm_error_too_many_args):
(vm_error_wrong_num_args):
(vm_error_wrong_type_apply):
(vm_error_stack_overflow):
(vm_error_stack_underflow):
(vm_error_improper_list):
(vm_error_not_a_pair):
(vm_error_not_a_bytevector):
(vm_error_not_a_struct):
(vm_error_no_values):
(vm_error_not_enough_values):
(vm_error_continuation_not_rewindable):
(vm_error_bad_wide_string_length):
(vm_error_invalid_address):
(vm_error_object):
(vm_error_free_variable): New internal helpers, implementing VM error
handling.
* libguile/vm-engine.h (VM_ASSERT): New helper macro.
(ASSERT, CHECK_OBJECT, CHECK_FREE_VARIABLE):
(PRE_CHECK_UNDERFLOW, PUSH_LIST): Use the new helper.
* libguile/vm-i-loader.c:
* libguile/vm-i-scheme.c:
* libguile/vm-i-system.c: Use VM_ASSERT and the out-of-line error
handlers.
* libguile/vm-engine.c (vm_engine): Remove inline error handlers, and
remove a couple of local vars. Use VM_ASSERT. Have halt handle the
return itself.
Andy Wingo [Mon, 30 Apr 2012 17:51:06 +0000 (19:51 +0200)]
add internal SCM_NOINLINE definition
* libguile/_scm.h (SCM_NOINLINE): New internal define, for things that
we definitely don't want the compiler to inline.
Andy Wingo [Mon, 30 Apr 2012 17:40:52 +0000 (19:40 +0200)]
add scm_c_values helper
* libguile/values.h:
* libguile/values.c (scm_c_values): New public helper.
Andy Wingo [Mon, 23 Apr 2012 19:42:40 +0000 (21:42 +0200)]
vlist performance improvements; allocate vhash data inline
* 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.
Andy Wingo [Mon, 23 Apr 2012 15:56:28 +0000 (17:56 +0200)]
avoid emitting degenerate aliases in peval
* module/language/tree-il/peval.scm (<operand>, make-operand)
(make-bound-operands, peval): Avoid emitting needless aliases in
degenerate cases of let.
(visit-operand): If we visit an operand with a fresh counter and have
to abort, record that fact.
* test-suite/tests/peval.test ("partial evaluation"): Add a test.
Andy Wingo [Mon, 23 Apr 2012 11:07:34 +0000 (13:07 +0200)]
vlist-cons micro-optimizations
* 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.
Andy Wingo [Mon, 23 Apr 2012 09:43:01 +0000 (11:43 +0200)]
slight vlist refactor
* 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.
Andy Wingo [Mon, 16 Apr 2012 23:25:19 +0000 (16:25 -0700)]
fix replacement of CSE with lexical-ref
* module/language/tree-il/cse.scm (cse): Fix dominator unrolling for
lexical propagation.
* test-suite/tests/cse.test ("cse"): Add test.