* libguile/frames.h:
* libguile/frames.c (scm_frame_stack_pointer): New function.
* module/system/repl/debug.scm (print-registers): New function, prints
out registers.
* module/system/repl/command.scm (registers): New debugging
meta-command.
(inspect): Not a stack-command, a normal meta-command.
* libguile/script.c (scm_compile_shell_switches): Select the debugging
VM in the cases that we previously would select deval -- when running
interactively without --no-debug, or otherwise with --debug.
* libguile/vm.c: Default to the regular engine.
(scm_c_set_vm_engine_x): Remove requirement for the VM to have no
pending computations.
Patch accepted upstream:
<http://lists.gnu.org/archive/html/guile-devel/2010-09/threads.html#00114>.
* module/ice-9/match.upstream.scm (match-two): Add support for `..1'.
* test-suite/tests/match.test ("matches")["list ..1", "list ..1, with
predicate"]: New tests.
("doesn't match")["list ..1", "list ..1, with predicate"]: New tests.
* module/srfi/srfi-27.scm: New file; implementation of SRFI 27 in terms
of the existing random number generator.
* module/Makefile.am (SRFI_SOURCES): Add srfi/srfi-27.scm.
* test-suite/tests/srfi-27.test: New file; minimal test suite for SRFI 27.
* test-suite/Makefile.am (SCM_TESTS): Add tests/srfi-27.test.
* doc/ref/srfi-modules.texi: Add subsection on SRFI-27 based
on the specification.
* libguile/vm.h (scm_c_vm_run): Make internal.
* libguile/vm.c (vm_default_engine): New static global variable.
(make_vm): Set vp->engine based on
(scm_vm_apply): Remove in favor of call-with-vm.
(scm_thread_vm, scm_set_thread_vm_x): Remove these, as they did not
have a well-defined meaning, and were dangerous to call on other
threads.
(scm_the_vm): Reinstate previous definition.
(symbol_to_vm_engine, vm_engine_to_symbol)
(vm_has_pending_computation): New helpers.
(scm_vm_engine, scm_set_vm_engine_x, scm_c_set_vm_engine_x): New
accessors for VM engines.
(scm_c_set_default_vm_engine_x, scm_set_default_vm_engine_x): New
setters for the default VM engine.
(scm_call_with_vm): New function, applies a procedure to arguments in
a context in which a given VM is current.
* libguile/eval.c (eval, scm_apply): VM dispatch goes through
scm_call_with_vm.
* test-suite/tests/control.test ("the-vm"):
* module/system/vm/coverage.scm (with-code-coverage): Use call-with-vm.
* module/system/vm/vm.scm: Update exports.
* test-suite/vm/run-vm-tests.scm (run-vm-program):
* test-suite/tests/compiler.test ("current-reader"): Just rely on the
result of make-program being an applicable.
* test-suite/tests/eval.test ("stack overflow"): Add a note that this
test does not test what it should.
The `mpz_t' associated with a bignum would never be freed, so an
expression like `(while #t (expt 2 5000))' would quickly lead to memory
exhaustion.
* libguile/numbers.c (finalize_bignum): New function.
(make_bignum): Register it as a finalizer for P.
* libguile/numbers.c (make_bignum): New function.
(scm_i_mkbig, scm_i_long2big, scm_i_ulong2big, scm_i_clonebig,
scm_i_dbl2big, scm_i_mpz2num): Use it.
* libguile/_scm.h (scm_aligned_cell, scm_t_aligned_cell): Remove. The
whole approach was misguided as the compiler can't guarantee absolute
alignment on the stack.
* libguile/vm.c (vm_dispatch_hook): Take care of FRAME's alignment
explicitly so that it's correct even if the current stack frame isn't
8-byte aligned (as can be the case on i686--the SysV i386 ABI just
says that the stack is word-aligned.)
The characters U+0007 to U+000D have non-hex forms for their
escapes when in written strings.
* libguile/print.c (write_character): use non-hex escapes
* test-suite/tests/reader.test (write R6RS string escapes): adjust test
* doc/ref/goops.texi (Defining New Classes): Remove "fixme" text
(saying we should have something that we in fact already have). A
few minor edits throughout.
(Basic Class Definition): Move content up into `Defining New
Classes'.
(Class Options): Move after `Slot Options' (because slot options are
more important). Remove doc of the #:environment option, since I
believe it's now fictitious.
(Slot Options): Reorder the options so that the most commonly used
ones come first.
* doc/ref/goops.texi (Metaobjects and the Metaobject Protocol): Remove
para about GOOPS classes belonging to the usual Scheme namespace.
Interest doesn't justify the space that it takes.
* doc/ref/goops.texi (Introductory Remarks): Node deleted, with
material moved to...
(The Metaobject Protocol): ...here.
(MOP Specification): Moved to become a subnode of `The Metaobject
Protocol'.
It is with a sigh that I do this. Farewell, old friend GDS; your bits
will live on, reclaimed and reused in the new debugger.
* module/Makefile.am:
* module/ice-9/gds-client.scm:
* module/ice-9/gds-server.scm: Remove these; we favor Geiser now.
* emacs/Makefile.am:
* emacs/gds-faq.txt:
* emacs/gds-scheme.el:
* emacs/gds-server.el:
* emacs/gds-test.el:
* emacs/gds-test.sh:
* emacs/gds-test.stdin:
* emacs/gds-tutorial.txt:
* emacs/gds.el: Remove GDS files. The docs are still around, as they
need to be folded into the docmentation of the new debugger.
* module/ice-9/debugger.scm:
* module/ice-9/debugger/command-loop.scm:
* module/ice-9/debugger/commands.scm:
* module/ice-9/debugger/state.scm:
* module/ice-9/debugger/trc.scm:
* module/ice-9/debugger/utils.scm:
* module/ice-9/debugging/breakpoints.scm:
* module/ice-9/debugging/example-fns.scm:
* module/ice-9/debugging/ice-9-debugger-extensions.scm:
* module/ice-9/debugging/load-hooks.scm:
* module/ice-9/debugging/steps.scm:
* module/ice-9/debugging/trace.scm:
* module/ice-9/debugging/traps.scm:
* module/ice-9/debugging/trc.scm: Remove these files, as we will favor
the REPL's implementation of a debugger, and (system vm traps) and
(system vm trap-state). But these old files will continue to inspire
the rest of the new debugger interface.
* libguile/eval.c: Mark "breakpoints", "trace", and "procnames" debug
options as obsolete. There is lots of work left to do here, though.
* libguile/srcprop.h (scm_sym_breakpoint)
(scm_c_source_property_breakpoint_p, SRCBRKP): Remove these
definitions, without replacements.
* libguile/srcprop.c: Remove all code that has to do with breakpoints.
* module/system/vm/coverage.scm (with-code-coverage): Switch current
thread to VM, using `set-thread-vm!'.
* test-suite/tests/coverage.test ("procedure-execution-count")["called
from C"]: New test.
* module/system/vm/traps.scm (frame-matcher): New helper.
(trap-at-procedure-call, trap-in-procedure, trap-in-dynamic-extent)
(trap-calls-in-dynamic-extent, trap-instructions-in-dynamic-extent)
(trap-instructions-in-procedure, trap-at-procedure-ip-in-range): Add
ability to trap on procedures that are closures.
(trap-at-source-location): Check source-closures first, to catch
source locations that are in nested procedures.
* module/system/xref.scm (*closure-sources-db*): New global, like
*sources-db* but for nested procedures. It's a separate map because
these procs need to be treated differently in trap handlers -- you
match on the bytecode, not on the program object.
(add-source, forget-source): Take the db as an argument (the normal db
or the closures db).
(add-sources, forget-sources): Record sources for nested procedures to
in *closures-db*.
(untaint-sources, ensure-sources-db): Adapt for new closures db.
(lookup-source-procedures): Factored out.
(source-closures): New exported procedure, returns closures at the
given source location.
Reported by Göran Weinholt <goran@weinholt.se>.
* libguile/r6rs-ports.c (scm_lookahead_u8): Return an unsigned byte.
* test-suite/tests/r6rs-ports.test ("7.2.8 Binary Input")["lookahead-u8:
result is unsigned"]: New test.
* test-suite/tests/weaks.test: Enclose in a module.
(valid?): New procedure.
("weak-hash")["weak-key dies, "weak-value dies", "double-weak dies"]:
Check that all the values are `valid?', in addition to checking that
at least one of them is #f.
* libguile/hashtab.c (scm_hash_fn_set_x): Register a disappearing link
to VAL when TABLE is weak-value.
* test-suite/tests/weaks.test ("weak-hash")["weak-key dies", "weak-value
dies", "doubly-weak dies"]: Use `hash-set!' and `hash-ref', not
`hashq-set!' and `hashq-ref', otherwise these tests would always
succeed because (eq? "this" "this") => #f.
["lives"]: Use `hash-ref' and `hash-set!' too for consistency.
* module/system/vm/trap-state.scm (add-trap-at-source-location!): New
proc.
* module/system/repl/command.scm (break-at-source): New repl
meta-command. Doesn't work as well as it could now because it doesn't
know about nested functions, but that's coming.
* module/system/vm/trap-state.scm (list-traps): Just return the integers
identifying the traps; people can use trap-name to get the names.
* module/system/repl/command.scm (traps): Adapt.