Julian Graham [Mon, 21 Dec 2009 23:33:12 +0000 (00:33 +0100)]
Complete support for version information in Guile's `module' form.
* module/ice-9/boot-9.scm (try-load-module, try-module-autoload): Check
for version argument and use `find-versioned-module' if present.
* module/ice-9/boot-9.scm (find-versioned-module, version-matches?)
(module-version, set-module-version!, version-matches?): New
functions.
* module/ice-9/boot-9.scm (module-type, make-module, resolve-module)
(try-load-module, process-define-module, make-autoload-interface)
(compile-interface-spec): Add awareness and checking of version
information.
* doc/ref/api-modules.texi (R6RS Version References): New subsubsection.
(General Information about Modules): Explain differences in search
process when version references are used.
(Using Guile Modules) (Creating Guile Modules): Document `#:version'
keyword.
Julian Graham [Thu, 10 Dec 2009 05:29:11 +0000 (00:29 -0500)]
Support for renaming bindings on module export.
* module/ice-9/boot-9.scm (module-export!, module-replace!)
(module-re-export!): Allow members of export list to be pairs, mapping
internal names to external ones.
* doc/ref/api-modules.texi (Creating Guile Modules): Update
documentation for `#:export', `#:export-syntax', `#:replace',
`#:re-export', `#:re-export-syntax', `export', and `re-export' to
reflect new format for arguments.
Julian Graham [Tue, 22 Dec 2009 05:19:56 +0000 (00:19 -0500)]
Improved support for Unicode title case in Guile's string and character APIs.
* doc/ref/api-data.texi (Characters): Documentation for `char-titlecase'.
* doc/ref/api-i18n.texi (Character Case Mapping): Documentation for
`char-locale-titlecase' and `string-locale-titlecase'.
* libguile/chars.c, libguile/chars.h (scm_char_titlecase, scm_c_titlecase): New
functions.
* libguile/i18n.c, libguile/i18n.h (chr_to_case, scm_char_locale_titlecase,
str_to_case, scm_string_locale_titlecase): New functions.
* libguile/i18n.c (scm_char_locale_downcase, scm_char_locale_upcase,
scm_string_locale_downcase, scm_string_locale_upcase): Refactor to share code
via chr_to_case and str_to_case, as appropriate.
* module/ice-9/i18n.scm (char-locale-title-case, string-locale-titlecase): New
functions.
* libguile/srfi-13.c (string_titlecase_x): Use uc_totitle instead of uc_toupper.
* test-suite/tests/chars.test: Tests for `char-titlecase'.
* test-suite/tests/i18n.test: Tests for `char-locale-titlecase' and
`string-locale-titlecase'.
* test-suite/tests/srfi-13.test: Tests for `string-titlecase'.
Andy Wingo [Mon, 21 Dec 2009 23:58:12 +0000 (00:58 +0100)]
untabify boot-9.scm
* module/ice-9/boot-9.scm: Untabify.
Andy Wingo [Mon, 21 Dec 2009 22:13:05 +0000 (23:13 +0100)]
tracing at repl
* module/system/repl/command.scm (option, trace): Integrate tracing (via
,trace or ,tr).
Andy Wingo [Mon, 21 Dec 2009 22:03:43 +0000 (23:03 +0100)]
(system vm trace) sorta working
* module/system/vm/trace.scm: Update to work with the current VM and its
tracing infrastructure.
Andy Wingo [Mon, 21 Dec 2009 21:12:31 +0000 (22:12 +0100)]
don't take string-write mutex in read.c:read_token
* libguile/read.c (read_token): Don't take the string-write mutex when
reading a token into a buffer, because it's assumed that the buffer is
fresh (not seen by other threads), and a soft port can call a
procedure that needs the string-write mutex.
Andy Wingo [Mon, 21 Dec 2009 20:57:20 +0000 (21:57 +0100)]
rework vm tracing
* libguile/vm-engine.c (VM_NAME): Engines take the VM itself (not the
vp), so they can pass the VM to hooks. No more hook args, we dispatch
without them.
* libguile/vm-engine.h (RUN_HOOK): Dispatch the hook if the trace level
is positive (instead of if the hook is there). Don't cache registers
on return from the dispatch.
* libguile/vm.h:
* libguile/vm.c (vm_dispatch_hook): Don't bother with a dynwind; instead
decrement the trace level when going into a hook, and if we have a
nonlocal exit, the trace level never gets incremented again. Worse is
better.
(make_vm, scm_vm_trace_level, scm_set_vm_trace_level_x): New concept,
trace level. If positive, we run the hooks, otherwise we don't. Should
work. Removed scm_vm_trace_frame, I don't think that was the right way
to do it.
* module/system/vm/vm.scm: Replace vm-trace-frame with vm-trace-level
and set-vm-trace-level!; the hooks actually get the frame as an
argument now.
Andy Wingo [Mon, 21 Dec 2009 20:06:27 +0000 (21:06 +0100)]
add scm_call_n, scm_c_run_hookn
* libguile/eval.h:
* libguile/eval.c (scm_call_n): New function, applies a function to an
array of args.
* libguile/hooks.h:
* libguile/hooks.c (scm_c_run_hookn): New function, runs a hook with an
array of args.
Andy Wingo [Mon, 21 Dec 2009 10:54:48 +0000 (11:54 +0100)]
remove "module system quirks" from the manual
* doc/ref/api-modules.texi (Module System Quirks): Remove this outdated
section.
Andy Wingo [Sun, 20 Dec 2009 23:08:18 +0000 (00:08 +0100)]
poor man's statprof integration with the repl: ,pr
* module/system/repl/command.scm (profile): Add a very poor integration
of statprof with the repl.
Andy Wingo [Sun, 20 Dec 2009 22:11:34 +0000 (23:11 +0100)]
add test suites
Andy Wingo [Fri, 18 Dec 2009 12:31:02 +0000 (13:31 +0100)]
integrate guile-lib docs
Andy Wingo [Sun, 20 Dec 2009 22:18:32 +0000 (23:18 +0100)]
texinfo fixes
* module/texinfo.scm (parser-error): Throw to 'parser-error, as ssax's
input-parse does.
(texi-command-depth): Fix docstring so as not to confuse emacs.
(parse-table-args): Fix parser-error call to include port.
Andy Wingo [Sun, 20 Dec 2009 22:17:05 +0000 (23:17 +0100)]
tweaks to statprof
* module/statprof.scm (make-call-data): Change so that call-data holds
the proc, not its name. Remove set-call-data-name!.
(get-call-data): Adapt caller.
(sample-stack-procs): Always sample procedures on the stack, even
anonymous ones.
(profile-signal-handler): Fix stack cutting to work with compiled
statprof.scm.
(count-call): Always count calls, even to anonymous procedures.
(statprof-call-data->stats): Use call-data-printable for printing the
call data.
(statprof-display-anomolies): Fix a couple longstanding bugs caught by
compiler warnings.
Andy Wingo [Sun, 20 Dec 2009 23:01:13 +0000 (00:01 +0100)]
import statprof, sxml, and texinfo from guile-lib
* module/Makefile.am (LIB_SOURCES): Add statprof, sxml, and texinfo to
the build.
(NOCOMP_SOURCES): Reindent, and add the upstream SSAX files.
* module/statprof.scm:
* module/sxml/apply-templates.scm:
* module/sxml/fold.scm:
* module/sxml/simple.scm:
* module/sxml/ssax.scm:
* module/sxml/ssax/input-parse.scm:
* module/sxml/transform.scm:
* module/sxml/upstream/COPYING.SSAX:
* module/sxml/upstream/SSAX.scm:
* module/sxml/upstream/SXML-tree-trans.scm:
* module/sxml/upstream/SXPath-old.scm:
* module/sxml/upstream/assert.scm:
* module/sxml/upstream/input-parse.scm:
* module/sxml/xpath.scm:
* module/texinfo.scm:
* module/texinfo/docbook.scm:
* module/texinfo/html.scm:
* module/texinfo/indexing.scm:
* module/texinfo/plain-text.scm:
* module/texinfo/reflection.scm:
* module/texinfo/serialize.scm:
* module/texinfo/string-utils.scm: Add files from guile-lib to Guile.
It's only Richard, Andreas, Rob, and myself that have copyright on
these, and we have all assigned to the FSF. SSAX itself is in the
public domain.
Andy Wingo [Sun, 20 Dec 2009 22:26:42 +0000 (23:26 +0100)]
version.h depends on config.status
* libguile/Makefile.am (version.h): Depend on config.status, so if we
reconfigure we make sure to regenerate the version.
Andy Wingo [Sun, 20 Dec 2009 22:12:34 +0000 (23:12 +0100)]
handle interrupts in mv-call, return/values
* libguile/vm-i-system.c (mv-call, return/values): Interrupt before
entering and leaving MV frames as well as normal frames.
Andy Wingo [Tue, 15 Dec 2009 10:58:04 +0000 (11:58 +0100)]
remove scm_add_method
* libguile/goops.h:
* libguile/goops.c (scm_add_method): Remove this function. It didn't
work, and even if we fixed it to work it wouldn't be as good as using
Scheme's `add-method!'.
Andy Wingo [Tue, 15 Dec 2009 09:57:59 +0000 (10:57 +0100)]
guile-config depends on config.status
* meta/Makefile.am (guile-config): Depend on config.status, so that if
$prefix changes, guile-config gets rebuilt.
Andy Wingo [Tue, 15 Dec 2009 09:49:22 +0000 (10:49 +0100)]
in the load path, look in library-dir before site-dir
* libguile/load.c (scm_init_load_path): Search first in Guile's
version-specific path (the library path), *then* in the site dir. This
should allow us to import some of Guile-lib's modules into Guile,
perhaps customizing them with Guile-version-specific foo, without
accidentally falling back to system-installed guile-lib in the
sitedir. Also should reduce the number of stats by half, in the common
case.
Andy Wingo [Sun, 20 Dec 2009 14:29:09 +0000 (15:29 +0100)]
psyntax's labels and marks now unique over a read/write boundary
* module/ice-9/psyntax.scm (gen-label, new-mark): Labels and marks need
to be unique across read/write boundaries -- it's not sufficient for
them to simply be unique within a process by virtue of (string #\i)
constructing a new object. This used to mostly work before, because
the collapsing of duplicate constants didn't catch many syntax-object
cases -- but for some reason the attached test case brings out the
problem. So switch to use gensyms. Potentially more costly, but it's
what upstream psyntax does now.
This bug took me fully two days to figure out.
* module/ice-9/psyntax-pp.scm: Regenerated.
* test-suite/tests/syncase.test ("serializable labels and marks"): Add
test case.
Neil Jerram [Sat, 19 Dec 2009 22:37:24 +0000 (22:37 +0000)]
Document need for pkg-config to build Guile
* README: Say that ./configure needs pkg-config; why; and how to work
around it.
Neil Jerram [Fri, 18 Dec 2009 01:11:40 +0000 (01:11 +0000)]
Update and simplify statement about RnRS support
* doc/ref/scheme-intro.texi (Guile Scheme): Mention R6RS as well as
R5RS. Simplify text.
Brian Gough [Tue, 15 Dec 2009 10:28:49 +0000 (10:28 +0000)]
make the use of the 5-argument @xref command consistent
A few of the @xref references to external manuals in the documentation
are using an old 4-argument form that produces an undefined reference
in the printed manual. The following patch makes them consistent with
the 5-argument @xrefs used elsewhere in the manual.
--
Brian Gough
Network Theory Ltd,
Publishing Free Software Manuals --- http://www.network-theory.co.uk/
>From
6ca0417830dc5a98699a15808591dc1f2a90dfac Mon Sep 17 00:00:00 2001
From: Brian Gough <bjg@gnu.org>
Date: Mon, 14 Dec 2009 21:34:59 +0000
Subject: [PATCH] make the use of the 5-argument @xref command consistent
when referring to other manuals.
Ken Raeburn [Mon, 16 Nov 2009 17:16:05 +0000 (12:16 -0500)]
Allow more characters in coding system names in Emacs-style declarations.
* libguile/read.c (scm_i_scan_for_encoding): Allow more punctuation
symbols in coding system names.
Brian Gough [Tue, 15 Dec 2009 10:16:14 +0000 (10:16 +0000)]
more typo fixes
More spelling corrections and fixes for doubled words (e.g. "the the")
--
Brian Gough
Network Theory Ltd,
Publishing Free Software Manuals --- http://www.network-theory.co.uk/
>From
7be02beedc739c32cce2c8ec8f4ac814c994a13f Mon Sep 17 00:00:00 2001
From: Brian Gough <bjg@gnu.org>
Date: Mon, 14 Dec 2009 22:06:22 +0000
Subject: [PATCH] fix various documentation typos (spelling & doubled words)
Brian Gough [Tue, 15 Dec 2009 10:14:48 +0000 (10:14 +0000)]
typo fix
Correction for garbled sentence.
--
Brian Gough
Network Theory Ltd,
Publishing Free Software Manuals --- http://www.network-theory.co.uk/
>From
f819b597a46ad4ed23597e5a81d1acab46f15147 Mon Sep 17 00:00:00 2001
From: Brian Gough <bjg@gnu.org>
Date: Mon, 14 Dec 2009 20:04:34 +0000
Subject: [PATCH] typo fix
Brian Gough [Tue, 15 Dec 2009 10:12:07 +0000 (10:12 +0000)]
added brief introduction about SLIB
This patch adds a short introduction to the SLIB section of the manual
with a link to the SLIB homepage.
--
Brian Gough
Network Theory Ltd,
Publishing Free Software Manuals --- http://www.network-theory.co.uk/
>From
60548b6e039bf57694b7841996cfda011cb8a4bf Mon Sep 17 00:00:00 2001
From: Brian Gough <bjg@gnu.org>
Date: Mon, 14 Dec 2009 20:49:27 +0000
Subject: [PATCH] added brief introduction about SLIB
Brian Gough [Mon, 14 Dec 2009 22:19:32 +0000 (22:19 +0000)]
Hash Table examples - hashq takes different number of arguments
In the "Hash Tables Example" in the manual, hashq needs 2 arguments
instead of 1 (patch below). I've updated the hash table output as
well to match the current version.
--
Brian Gough
Network Theory Ltd,
Publishing Free Software Manuals --- http://www.network-theory.co.uk/
>From
fdb6101d2e064620746ebfc9f9cd28bbdd2470e8 Mon Sep 17 00:00:00 2001
From: Brian Gough <bjg@gnu.org>
Date: Mon, 14 Dec 2009 19:59:32 +0000
Subject: [PATCH] update docs for Hash Table Examples
hashq now takes two arguments
order of elements in hash table is different now
Brian Gough [Wed, 9 Dec 2009 18:04:42 +0000 (18:04 +0000)]
replace ascii figures with scalable ps/pdf versions.
use ascii figures in HTML output, to work around deficiency in makeinfo
where images are not copied to target directory.
Brian Gough [Wed, 9 Dec 2009 17:59:59 +0000 (17:59 +0000)]
use explicit ./scriptname to help novice users
Brian Gough [Wed, 9 Dec 2009 17:53:08 +0000 (17:53 +0000)]
use correct url to ftp.gnu.org
Ludovic Courtès [Tue, 15 Dec 2009 22:45:37 +0000 (23:45 +0100)]
Bump version number for 1.9.6.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
Ludovic Courtès [Tue, 15 Dec 2009 19:20:38 +0000 (20:20 +0100)]
Remove unneeded #include <assert.h>.
* libguile/backtrace.c, libguile/eval.c, libguile/gc.c,
libguile/goops.c, libguile/memoize.c, libguile/threads.c,
libguile/uniform.c, libguile/vm.c,
test-suite/standalone/test-conversion.c,
test-suite/standalone/test-list.c: Don't include <assert.h>.
Ludovic Courtès [Tue, 15 Dec 2009 19:14:02 +0000 (20:14 +0100)]
Use Gnulib's `sys_stat' module; update Gnulib.
* .x-sc_prohibit_S_IS_definition: New file.
* m4/gnulib-cache.m4: Add `sys_stat'.
* libguile/filesys.c: Remove `S_IS*' macro definitions for Ultrix and
MinGW.
Ludovic Courtès [Tue, 15 Dec 2009 18:23:08 +0000 (19:23 +0100)]
Remove obsolete test-suite makefile snippets.
* test-suite/Makefile.am (SCM_TESTS_DIRS): Remove.
(dist-hook): Remove target.
Ludovic Courtès [Tue, 15 Dec 2009 18:22:19 +0000 (19:22 +0100)]
Disable thread-local storage on Solaris 8.
* acinclude.m4 (GUILE_THREAD_LOCAL_STORAGE): Special-case `*solaris2.8'.
Ludovic Courtès [Tue, 15 Dec 2009 18:10:48 +0000 (19:10 +0100)]
Change the Elisp compiler from GPLv2+ to LGPLv3+.
* module/language/elisp/bindings.scm, module/language/elisp/lexer.scm,
module/language/elisp/parser.scm, module/language/elisp/runtime.scm,
module/language/elisp/runtime/function-slot.scm,
module/language/elisp/runtime/macro-slot.scm,
module/language/elisp/runtime/value-slot.scm: Switch from GPLv2+ to
LGPLv3+; fix copyright year.
Ludovic Courtès [Tue, 15 Dec 2009 00:11:01 +0000 (01:11 +0100)]
Use portable shell in `meta/uninstalled-env'.
* meta/uninstalled-env.in: Don't use the `-q' and `-E' options, which are
specific to GNU grep. Don't set-and-export environment variables at
once since this is a GNU Bash extension.
Ludovic Courtès [Tue, 15 Dec 2009 00:00:36 +0000 (01:00 +0100)]
Use the right `grep' command.
* libguile/Makefile.am (.c.i): Use $(GREP), not `grep'.
(check_signals, check_errnos): Use $(EGREP), not `egrep'.
Ludovic Courtès [Mon, 14 Dec 2009 23:59:14 +0000 (00:59 +0100)]
Remove GNU Make-specific function call.
* libguile/Makefile.am (c-tokenize.$(OBJEXT)): Remove use of GNU Make's
`filter-out' function.
Ludovic Courtès [Mon, 14 Dec 2009 23:53:13 +0000 (00:53 +0100)]
Remove extraneous semicolon after `SCM_ARRAY_IMPLEMENTATION' & co.
* libguile/bitvectors.c, libguile/srfi-4.c, libguile/strings.c,
libguile/vectors.c: Remove extraneous semicolon after
`SCM_ARRAY_IMPLEMENTATION' and `SCM_VECTOR_IMPLEMENTATION'
invocations.
Ludovic Courtès [Mon, 14 Dec 2009 23:45:14 +0000 (00:45 +0100)]
Remove extraneous functions from `AC_REPLACE_FUNCS'.
* configure.ac: Remove `inet_aton' and `putenv' from `AC_REPLACE_FUNCS'.
Ludovic Courtès [Mon, 14 Dec 2009 23:43:32 +0000 (00:43 +0100)]
Avoid `SCM_UNPACK ()' in constant expressions.
They made Sun C 5.8 emit a warning such as:
line 71: warning: dead part of constant expression is nonconstant
* libguile/print.c (scm_print_opts): Don't use `SCM_UNPACK ()' here.
* libguile/read.c (scm_read_opts): Likewise.
Ludovic Courtès [Mon, 14 Dec 2009 23:38:50 +0000 (00:38 +0100)]
Remove `return' from `void' function.
* libguile/print.c (scm_print_symbol_name): Remove `return' statement.
Ludovic Courtès [Mon, 14 Dec 2009 22:11:47 +0000 (23:11 +0100)]
Don't use GCC zero-length arrays.
* libguile/frames.c, libguile/objcodes.c, libguile/programs.c,
libguile/vm-engine.c, libguile/vm-i-system.c, libguile/vm.c: Use
`SCM_C_OBJCODE_BASE ()' instead of accessing the `base' field of
`struct scm_objcode'.
* libguile/objcodes.h (struct scm_objcode)[base]: Remove.
Ludovic Courtès [Mon, 14 Dec 2009 14:21:54 +0000 (15:21 +0100)]
Remove uses of the non-standard `__FUNCTION__'.
* libguile/gc.c (scm_gc_sweep): Replace `__FUNCTION__' by `FUNC_NAME'.
* libguile/read.c (scm_read_r6rs_block_comment): Likewise.
Andy Wingo [Mon, 14 Dec 2009 23:20:47 +0000 (00:20 +0100)]
expose frame-previous, once again
* libguile/frames.h:
* libguile/frames.c (scm_frame_previous): Rename from scm_c_frame_prev,
and expose to Scheme. Skip boot frames.
* libguile/stacks.c (stack_depth, narrow_stack, scm_make_stack)
(scm_stack_ref): Adjust for scm_frame_previous skipping boot frames.
Ludovic Courtès [Mon, 14 Dec 2009 09:59:25 +0000 (10:59 +0100)]
Fix test environment issue with ltdl from Libtool 2.2.6b.
Earlier versions of ltdl would look for extensions under $PWD; this
behavior changed in 2.2.6b.
* test-suite/standalone/Makefile.am (TESTS_ENVIRONMENT): Define
$builddir.
* test-suite/standalone/test-asmobs: Specify the full path to
`libtest-asmobs', using $builddir.
* test-suite/standalone/test-extensions: Likewise.
Andy Wingo [Sun, 13 Dec 2009 19:18:50 +0000 (20:18 +0100)]
more NEWS updates
* NEWS: Update some more.
Andy Wingo [Sun, 13 Dec 2009 16:05:10 +0000 (17:05 +0100)]
primitive-eval passes first N args on stack directly, not via apply
* libguile/memoize.c (MAKMEMO_CALL): Memoize in the number of arguments
at the call site.
(memoize, scm_m_cond, memoize_named_let, unmemoize):
* libguile/eval.c (eval): Adapt to changes in call memoization.
* module/ice-9/eval.scm (primitive-eval): For calls, pass the first N
arguments directly on the stack, and only the rest as a consed
argument list to apply. Currently N is 4.
Andy Wingo [Sun, 13 Dec 2009 15:18:39 +0000 (16:18 +0100)]
interpreted closures cons less.
* module/ice-9/eval.scm (primitive-eval): When making a closure with N
formals, actuall return a closure with N formals, if N is less than
*max-static-argument-count*, which currently is 8. If N is greater
than 8, do the arg-parsing loop as we did before. Requires some
macrology, but should reduce unnecessary consing for interpreted
closures.
* test-suite/tests/goops.test:
* test-suite/tests/hooks.test: Now that checks like (thunk? foo) are
going to work as a for interpreted code, remove some (throw
'unresolved).
Andy Wingo [Fri, 11 Dec 2009 23:10:14 +0000 (00:10 +0100)]
commit draft of NEWS
Andy Wingo [Fri, 11 Dec 2009 20:51:02 +0000 (21:51 +0100)]
lame tweak to the inliner
* module/language/tree-il/inline.scm: Tweak to avoid a (if #t #t #f).
Yes, it's lame.
Andy Wingo [Fri, 11 Dec 2009 17:17:01 +0000 (18:17 +0100)]
prepare NEWS for 1.9.6
* NEWS: Prepare NEWS for 1.9.6.
Ludovic Courtès [Fri, 11 Dec 2009 22:27:47 +0000 (23:27 +0100)]
Tweak the "unused modules are removed" test.
* test-suite/tests/gc.test ("gc")["unused modules are removed"]: Add
loop to clean up stale references from the stack.
Ludovic Courtès [Fri, 11 Dec 2009 14:20:12 +0000 (15:20 +0100)]
SRFI-1: Use the built-in optional argument support.
* module/srfi/srfi-1.scm (iota, unfold, unfold-right, alist-delete,
alist-delete!): Use `define*' and optional arguments instead of rest
arguments.
Ludovic Courtès [Fri, 11 Dec 2009 13:56:49 +0000 (14:56 +0100)]
Fix expansion of `(+ 1 x)'.
* module/language/tree-il/primitives.scm (+): Fix typo.
Ludovic Courtès [Fri, 11 Dec 2009 13:32:34 +0000 (14:32 +0100)]
Typo.
* test-suite/Makefile.am (SCM_TESTS): Fix typos:
`.text' -> `.test'.
Ludovic Courtès [Sun, 6 Dec 2009 22:15:18 +0000 (23:15 +0100)]
SRFI-9: Make accessors inlinable.
* module/srfi/srfi-9.scm (define-inlinable): New macro.
(define-record-type): Use it.
Ludovic Courtès [Sun, 6 Dec 2009 00:00:04 +0000 (01:00 +0100)]
SRFI-9: Reimplement in terms of structs, using `syntax-case'.
* module/srfi/srfi-9.scm (define-record-type): Rewrite to use raw
structs instead of records. Use `syntax-case' instead of
`define-macro'.
Ludovic Courtès [Fri, 11 Dec 2009 11:58:06 +0000 (12:58 +0100)]
Add struct & vector benchmarks.
* benchmark-suite/benchmarks/structs.bm,
benchmark-suite/benchmarks/vectors.bm: New files.
* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add.
* benchmark-suite/benchmarks/bytevectors.bm: Fix copyright.
Ludovic Courtès [Fri, 11 Dec 2009 11:44:29 +0000 (12:44 +0100)]
Add opcodes for `struct?', `struct-vtable', and `make-struct'.
* libguile/vm-engine.c (VM_NAME)[vm_error_not_a_struct]: New label.
* libguile/vm-i-scheme.c (VM_VALIDATE_STRUCT): New macro.
(struct_p, struct_vtable, make_struct): New instructions.
* module/language/tree-il/compile-glil.scm (*primcall-ops*): Add
`struct?', `struct-vtable', and `make-struct'.
* module/language/tree-il/primitives.scm (*interesting-primitive-names*,
*effect-free-primitives*): Likewise.
Andy Wingo [Fri, 11 Dec 2009 11:38:47 +0000 (12:38 +0100)]
vm no longer measures bogoclock or times, relies on os for that
* libguile/vm.h (struct scm_vm): Remove "time" and "clock" members. The
time was bogusly measured, and the "clock" measured instructions
retired, which is not a very useful measurement, and it was causing
lots of memory accesses. Not that I have done a proper profile,
though...
(scm_vm_stats): Remove this procedure, which provided access to "time"
and "clock".
* libguile/vm.c:
* libguile/vm-engine.h:
* libguile/vm-engine.c:
* libguile/vm-i-system.c: Adapt to scm_vm changes and scm_vm_stats
removal.
* module/system/repl/command.scm:
* module/system/vm/vm.scm: Adapt to vm-stats removal by removing
vm-stats from <repl>.
Andy Wingo [Fri, 11 Dec 2009 11:20:55 +0000 (12:20 +0100)]
inline calls to (memv foo CONSTANT-LIST)
* module/language/tree-il/primitives.scm
(*interesting-primitive-names*): Recognize memv and memq as well.
* module/language/tree-il/inline.scm (inline!): Inline calls to memq and
memv where the list is a constant.
Andy Wingo [Fri, 11 Dec 2009 11:00:27 +0000 (12:00 +0100)]
rename <conditional> then and else to consequent and alternate
* module/language/tree-il.scm (<tree-il>): Rename the "then" and "else"
clauses of <conditional> to "consequent" and "alternate". More
verbose, yes, but that way we avoid unexpected behavior with "else".
(parse-tree-il, unparse-tree-il, tree-il->scheme, tree-il-fold):
(make-tree-il-folder, post-order!, pre-order!)
* module/language/tree-il/analyze.scm (analyze-lexicals):
* module/language/tree-il/compile-glil.scm (flatten):
* module/language/tree-il/fix-letrec.scm (simple-expression?): Update
callers.
Andy Wingo [Fri, 11 Dec 2009 10:49:14 +0000 (11:49 +0100)]
rename lambda-case-else to lambda-case-alternate
* module/language/tree-il.scm (<tree-il>): Rename the "else" field of
<lambda-case> to "alternate". Conflicts less with the "else" keyword
as used by case, cond, record-case, pmatch, etc.
(parse-tree-il, unparse-tree-il, tree-il->scheme, tree-il-fold)
(make-tree-il-folder, post-order!, pre-order!): Adapt traversal
operators for <lambda-case> change.
* module/language/tree-il/analyze.scm (analyze-lexicals)
(validate-arity):
* module/language/tree-il/compile-glil.scm (flatten):
* module/language/tree-il/inline.scm (inline!): Adapt for <lambda-case>
change.
Andy Wingo [Fri, 11 Dec 2009 10:17:03 +0000 (11:17 +0100)]
vm: handle interrupts on backwards jumps
* libguile/vm-i-system.c (BR, br): Handle interrupts on backwards jumps,
so we can Ctrl-C an endless loop.
Andy Wingo [Fri, 11 Dec 2009 10:15:12 +0000 (11:15 +0100)]
less overhead for handling interrupts in the vm
* libguile/__scm.h (SCM_ASYNC_TICK): Add some branch prediction.
(SCM_ASYNC_TICK_WITH_CODE): New helper for when BUILDING_LIBGUILE,
runs code only if we're going to call async_click().
* libguile/vm-engine.h (VM_HANDLE_INTERRUPTS): New helper, uses
SCM_ASYNC_TICK_WITH_CODE to only save regs if we'll handle an
interrupt.
* libguile/vm-i-system.c (call, goto/args, return): use
VM_HANDLE_INTERRUPTS.
Andreas Rottmann [Fri, 11 Dec 2009 09:51:05 +0000 (10:51 +0100)]
add partial support for tail patterns in syntax-rules/syntax-case
I've prepared a patch that adds partial support for tail patterns.
Things like the the SRFI-34 `guard' macro from [0] are supported, but
you still can't combine dotted patterns with tail patterns, e.g.
(syntax-rules (else)
((foo bar ... (else something) . rest)
<TEMPLATE-HERE>))
will *not* work; there's the issue that one can't just transcribe
the implementation of this feature from the latest version of psyntax,
as I've done for non-dotted tail patterns, as it's implemented using a
dotted pattern like the above. Alas!
[0] <http://article.gmane.org/gmane.lisp.guile.devel/9442>
* module/ice-9/psyntax.scm (syntax-case, $sc-dispatch): Add support for
tail patterns, transcribed from the latest psyntax.
* module/ice-9/psyntax-pp.scm: Regenerated.
* test-suite/tests/syncase.test: Add tests for tail patterns.
Andy Wingo [Fri, 11 Dec 2009 09:21:31 +0000 (10:21 +0100)]
merge from master to elisp
* module/language/elisp/compile-tree-il.scm: Update for changes to
tree-il (lambda-case, mainly).
* module/language/elisp/spec.scm: Update GPL version to 3. Update reader
for new taking a port and environment argument.
* libguile/_scm.h: Bump objcode version.
* libguile/vm-i-system.c: Fix conflicts.
* module/Makefile.am: Fix conflicts, and add elisp modules to the build.
Andy Wingo [Thu, 10 Dec 2009 20:43:47 +0000 (21:43 +0100)]
add ice-9/quasisyntax.scm to NOCOMP_SOURCES
* module/Makefile.am (NOCOMP_SOURCES): Add quasisyntax.scm.
Andy Wingo [Thu, 10 Dec 2009 19:26:54 +0000 (20:26 +0100)]
fix emission of meta procedures
* module/language/glil/compile-assembly.scm: Fix the check for when to
emit a "meta" procedure. Fixes
http://thread.gmane.org/gmane.lisp.guile.user/7469/focus=7470.
Andy Wingo [Thu, 10 Dec 2009 19:26:13 +0000 (20:26 +0100)]
if we have no eval.go, load no .go
* libguile/load.c (scm_init_eval_in_scheme): If we have no eval.go, null
out the load-compiled path so that we load no compiled code. Prevents
partially compiled Guile from turning tail-calls into stack-munching
calls.
Andy Wingo [Thu, 10 Dec 2009 15:03:23 +0000 (16:03 +0100)]
add gbt macro to gdbinit, and fix a bug in program-arity
* gdbinit: Add gbt macro, to make a Guile backtrace whenever you want.
* module/system/vm/program.scm (program-arity): If ip is #f, just take
the first arity.
Andy Wingo [Wed, 9 Dec 2009 09:21:31 +0000 (10:21 +0100)]
fix arbiter compilation with the generic codepath
* libguile/arbiters.c (scm_try_arbiter, scm_release_arbiter): Fix for
the generic case; not sure why it wasn't working.
Andy Wingo [Wed, 9 Dec 2009 09:07:04 +0000 (10:07 +0100)]
fix FUNC_NAME of scm_memoize_variable_access_x
* libguile/memoize.c (scm_memoize_variable_access_x): Fix FUNC_NAME
definition.
Andy Wingo [Tue, 8 Dec 2009 21:53:21 +0000 (22:53 +0100)]
add SCM_SMOB_TYPE_BITS and SCM_SMOB_TYPE_MASK
* libguile/smob.h (SCM_SMOB_TYPE_BITS, SCM_SMOB_TYPE_MASK): New macros,
for when you want to identify a SMOB by type and mask.
* libguile/arrays.c:
* libguile/bitvectors.c:
* libguile/srfi-4.c: Use the new macros.
Andy Wingo [Tue, 8 Dec 2009 20:59:42 +0000 (21:59 +0100)]
fix SCM_CELL macro usage.
* libguile/vm.h (SCM_VM_CONT_DATA): Fix SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:59:01 +0000 (21:59 +0100)]
SCM_CELL in throw.c
* libguile/throw.c (JBACTIVE, ACTIVATEJB, DEACTIVATEJB, JBJMPBUF)
(SETJBJMPBUF, SCM_JBPREUNWIND, SCM_SETJBPREUNWIND)
(pre_unwind_data_print, scm_ithrow): Fix SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:55:20 +0000 (21:55 +0100)]
SCM_VALIDATE_SMOB uses SCM_SMOB_PREDICATE
* libguile/validate.h (SCM_VALIDATE_SMOB): Change to use
SCM_SMOB_PREDICATE instead of SCM_TYP16_PREDICATE.
Andy Wingo [Tue, 8 Dec 2009 20:54:27 +0000 (21:54 +0100)]
SCM_CELL in srfi-4.c
* libguile/srfi-4.c (SCM_UVEC_TYPE, SCM_UVEC_LENGTH, SCM_UVEC_BASE): Fix
SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:53:15 +0000 (21:53 +0100)]
SCM_CELL in srcprop.c
* libguile/srcprop.c (SRCPROPPOS, SRCPROPCOPY, SRCPROPALIST)
(SETSRCPROPPOS, SETSRCPROPCOPY, SETSRCPROPALIST): Fix erroneous
SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:52:15 +0000 (21:52 +0100)]
use the new public metatables from struct.c
* libguile/procs.c (scm_init_procs): No need to lookup the
applicable-struct-with-setter vtable, as it is now exported.
Andy Wingo [Tue, 8 Dec 2009 20:50:40 +0000 (21:50 +0100)]
scm_i_alloc_struct does not take a "what" arg
* libguile/struct.h:
* libguile/struct.c (scm_i_alloc_struct): Change to not take a "what"
argument. Callers changed.
Andy Wingo [Tue, 8 Dec 2009 20:48:33 +0000 (21:48 +0100)]
reserve a vtable flag for smobs.
* libguile/struct.h (SCM_VTABLE_FLAG_SMOB_0): Reserve a vtable flag for
smobs.
Andy Wingo [Tue, 8 Dec 2009 20:47:47 +0000 (21:47 +0100)]
add vtable finalizer and printer setter macros
* libguile/struct.h (SCM_VTABLE_INSTANCE_FINALIZER): Use DATA_REF, not
SLOT_REF.
(SCM_SET_VTABLE_INSTANCE_FINALIZER, SCM_SET_VTABLE_INSTANCE_PRINTER):
New accessor macros.
Andy Wingo [Tue, 8 Dec 2009 20:46:47 +0000 (21:46 +0100)]
make some applicable struct vtable-vtable public to C
* libguile/struct.h (scm_standard_vtable_vtable)
(scm_applicable_struct_vtable_vtable)
(scm_applicable_struct_with_setter_vtable_vtable)
* libguile/struct.c: Make these stock meta-tables public to C.
Andy Wingo [Tue, 8 Dec 2009 20:41:48 +0000 (21:41 +0100)]
SCM_CELL in modules.c
* libguile/modules.c (SCM_F_EVAL_CLOSURE_INTERFACE)
(SCM_EVAL_CLOSURE_INTERFACE_P, scm_standard_interface_eval_closure):
Fix to not use SCM_CELL macros.
Andy Wingo [Tue, 8 Dec 2009 20:38:51 +0000 (21:38 +0100)]
initialize smobs after structs
* libguile/init.c (scm_i_init_guile): Move SMOB prehistory after structs
init. No effect for now.
Andy Wingo [Tue, 8 Dec 2009 20:37:25 +0000 (21:37 +0100)]
SCM_CELL in guardians.c
* libguile/guardians.c (GUARDIAN_DATA): Fix SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:31:42 +0000 (21:31 +0100)]
SCM_CELL in filesys.[ch]
* libguile/filesys.h (SCM_DIR_FLAG_OPEN, SCM_DIR_OPEN_P)
* libguile/filesys.c (scm_readdir, scm_rewinddir, scm_closedir)
(scm_dir_print, scm_dir_free): Fix SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:28:34 +0000 (21:28 +0100)]
SCM_CELL in deprecated.c
* libguile/deprecated.c (scm_smob_free): Fix SCM_CELL macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:27:26 +0000 (21:27 +0100)]
fix SCM_CELL macro usage in continuations.[ch]
* libguile/continuations.h (SCM_CONTREGS):
* libguile/continuations.c (continuation_print): Fix SCM_CELL macro
usage.
Andy Wingo [Tue, 8 Dec 2009 20:25:31 +0000 (21:25 +0100)]
fix SCM_CELL_* macro usage in async.c
* libguile/async.c (ASYNC_GOT_IT, SET_ASYNC_GOT_IT, ASYNC_THUNK): Fix
SCM_CELL_* macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:23:25 +0000 (21:23 +0100)]
fix SCM_CELL_* macro usage in arbiters.c
* libguile/arbiters.c (scm_try_arbiter, scm_release_arbiter): Fix
erroneous SCM_CELL_* macro usage.
Andy Wingo [Tue, 8 Dec 2009 20:21:37 +0000 (21:21 +0100)]
fix erroneous SCM_CELL_* usage in arrays.[ch]
* libguile/arrays.h (SCM_I_ARRAY_FLAG_CONTIGUOUS, SCM_I_ARRAY_NDIM):
(SCM_I_ARRAY_CONTP, SCM_I_ARRAY_MEM):
* libguile/arrays.c (SCM_SET_ARRAY_CONTIGUOUS_FLAG):
(SCM_CLR_ARRAY_CONTIGUOUS_FLAG): Fix macros to use SCM_SMOB macros
instead of SCM_CELL macros.
Andy Wingo [Tue, 8 Dec 2009 21:14:26 +0000 (22:14 +0100)]
clean up smob macro implementation
* libguile/smob.h: Regularize the SCM_SMOB macros, and make them all go
through some generic SMOB accessor macros.
* libguile/smob.c (scm_i_set_smob_flags): Remove, as it is unused.
Andy Wingo [Mon, 7 Dec 2009 10:14:01 +0000 (11:14 +0100)]
add scm_c_make_struct[v]
* libguile/struct.h (scm_c_make_struct, scm_c_make_structv): New
functions with which you can make a struct without consing a rest
list.
* libguile/struct.c (scm_struct_init): Refactor to take an array of init
values, not a list.
(scm_make_struct, scm_make_vtable_vtable): Pull the rest arg out into
a list and pass it down to the new array-taking functions.
* libguile/memoize.c: Remove a neeless #include <alloca>.