1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-05 15:10:27 +02:00
Commit graph

8602 commits

Author SHA1 Message Date
Andy Wingo
534bbcc168 more -Wundef on darwin fixes
* libguile/threads.c:
* libguile/posix.c: Change a couple #if HAVE_FOO to #ifdef HAVE_FOO to
  pacify -Wundef. Some vars are defined or not, whereas some are always
  defined to 0 or 1. The inconsistency is unfortunate.
2010-10-18 13:35:46 +02:00
Andy Wingo
c1a0ba1cef uninitialized var in scm_read_character
* libguile/read.c (scm_read_character): Fix error condition where
  charname could be uninitialized.
2010-10-18 13:29:58 +02:00
Andy Wingo
ddffdd788d _scm GUILE_USE_64_CALLS compilation warning fix
* libguile/_scm.h: Check that GUILE_USE_64_CALLS is defined. Fixes an
  error on i386-apple-darwin9.8.0.
2010-10-18 13:27:17 +02:00
Ludovic Courtès
3fff6e71ff Update cpp-E.syms' and cpp-SIG.syms'.
* libguile/cpp-E.syms, libguile/cpp-SIG.syms: Update on a Glibc 2.11.1
  system.
2010-10-15 15:56:03 +02:00
Ludovic Courtès
9253d0905d Fix the chknew-E' and chknew-SIG' rules.
* libguile/Makefile.am (chknew-E chknew-SIG): Run gcc without `-undef'
  since otherwise it ends up trying to include headers that are not
  available (e.g., <gnu/stubs-32.h> on an x86_64-linux-gnu system.)
2010-10-15 15:56:01 +02:00
Michael Gran
45dc6b347d Unresolved var errors don't work for top-level vars
* libguile/vm-i-system.c (toplevel_ref, long_toplevel_ref): modified
2010-10-14 18:27:41 -07:00
Michael Gran
4ad7f6cf9f Update charsets to Unicode 6.0.0
* libguile/srfi-14.i.c: regenerated
2010-10-14 18:21:28 -07:00
Andy Wingo
2b41a37b3c fix bug in with-fluids in a non-tail position
* libguile/vm-i-system.c (VM_DEFINE_INSTRUCTION): Drop the stack items
  corresponding the the with-fluids object. Thanks very much to Stefan
  Israelsson Tampe for the fix.
2010-10-13 21:20:23 +02:00
Ludovic Courtès
e78d4bf9a9 Optimize 1+' and 1-' on fixnums.
* libguile/vm-i-scheme.c (INUM_MAX, INUM_MIN): New macros.
  (add1, sub1): Add/subtract without untagging the operand.  This leads
  to a 44% run time improvement compared to the previous
  implementation.

* libguile/vm.c: Include <stdint.h>.

* test-suite/tests/numbers.test ("1+", "1-"): Add tests for
  MOST-POSITIVE-FIXNUM, resp. MOST-NEGATIVE-FIXNUM, for 32-bit and
  34-bit values thereof.

* benchmark-suite/benchmarks/arithmetic.bm: New file.

* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add it.
2010-10-13 01:31:19 +02:00
Ludovic Courtès
03604fcf50 Allocate complex numbers in contiguous pointer-less memory.
* libguile/numbers.h (SCM_COMPLEX_MEM): Remove.
  (SCM_COMPLEX_REAL): Change to just fetch the `real' field of the
  pointed-to `scm_t_complex'.
  (SCM_COMPLEX_IMAG): Likewise.
  (scm_t_complex)[type, pad]: New fields.

* libguile/numbers.c (scm_c_make_rectangular): Allocate the whole
  complex contiguously, with `scm_gc_malloc_pointerless'.
2010-10-13 00:06:30 +02:00
Ludovic Courtès
978c52d108 Allocate inexact numbers in pointer-less memory.
* libguile/numbers.c (scm_from_double): Use `scm_gc_malloc_pointerless'
  instead of `scm_double_cell'.
2010-10-13 00:06:29 +02:00
Ludovic Courtès
e9bac3be61 Allow arbitrary code in ASSOC procedures for weak hash tables (bug #29616).
* libguile/hashtab.c (struct t_assoc_args, do_weak_bucket_assoc):
  Remove.
  (struct t_fixup_args): New type.
  (do_weak_bucket_fixup): New function.
  (weak_bucket_assoc): Use it.  Keep strong references to BUCKET's
  entries in STRONG_REFS.  Call ASSOC once the alloc lock has been
  released.  This fixes bug #29616.

* test-suite/tests/weaks.test ("assoc can do anything"): New test.
2010-10-11 15:38:06 +02:00
Ludovic Courtès
dff58577d8 Fix a bug in weak hash table bucket fixup.
* libguile/hashtab.c (scm_fixup_weak_alist): Keep the value of PREV
  unchanged after a nullified pair is deleted; this fixes a bug whereby
  if several successive nullified pairs were encountered, not all of them
  would be removed, and the assertion in `weak_bucket_assoc' would be
  hit.  In addition, remove the `scm_is_pair (pair)' test.
2010-10-11 15:14:55 +02:00
Andy Wingo
a531e76a74 add --listen command line argument.
* libguile/script.c (scm_shell_usage, scm_compile_shell_switches): Add a
  --listen argument to spawn a REPL server, possibly specifying the port
  or path to listen on. The goal is for this to be the default way to
  allow debugging via Emacs or simply using netcat.
2010-10-10 12:56:53 +02:00
Andy Wingo
b2456dd434 fix segfaults when closing the current input port
* libguile/ports.c (scm_char_ready_p, scm_peek_char, scm_unread_char)
  (scm_unread_string): Always validate the port, even in the case that
  we get it the default current-input-port. Otherwise the following
  causes a segfault:

    (begin (close-port (current-input-port)) (peek-char))
2010-10-10 12:13:04 +02:00
Andy Wingo
41e826492a interrupted syscalls run asyncs before throwing syserror
* libguile/error.c (scm_syserror, scm_syserror_msg): Run pending pending
  asyncs before throwing the error, as one of the asyncs might be a
  signal handler. But there is unfortunately a race here, as noted in a
  comment.
2010-10-10 11:25:50 +02:00
Ludovic Courtès
7f593bc7f9 SRFI-1: Rewrite split-at' and split-at!' in Scheme.
This partially reverts commit bb560b9c16
(Tue Mar 15 2005).

* module/srfi/srfi-1.scm (out-of-range, split-at, split-at!): New
  procedures.

* libguile/srfi-1.c (scm_srfi1_split_at, scm_srfi1_split_at_x): Remove.
* libguile/srfi-1.h (scm_srfi1_split_at, scm_srfi1_split_at_x): Ditto.
2010-10-08 15:25:56 +02:00
Ludovic Courtès
58ee1beabe SRFI-1: Rewrite `filter-map' in Scheme.
This partially reverts commit c16359466b
(Thu Mar 17 2005).

* libguile/srfi-1.c (scm_srfi1_filter_map): Remove.
* libguile/srfi-1.h (scm_srfi1_filter_map): Ditto.

* module/srfi/srfi-1.scm (filter-map): New procedure.
2010-10-08 15:25:56 +02:00
Ludovic Courtès
c00623281b Register `scm_init_r6rs_ports' as an extension.
* libguile/r6rs-ports.c (scm_register_r6rs_ports): New function.
* libguile/r6rs-ports.h (scm_register_r6rs_ports): New declaration.

* libguile/init.c (scm_i_init_guile): Call it.
2010-10-08 15:25:56 +02:00
Andy Wingo
b262b74b51 add program-sources-pre-retire to core and define frame-next-source
* libguile/programs.h:
* libguile/programs.c (scm_program_source): Add an optional arg, the
  sources table to traverse. Defaults to the result of
  scm_program_sources.

* module/system/vm/program.scm (program-sources-pre-retire): Move
  definition here from (system vm traps), and export.

* module/system/vm/traps.scm: Adapt.

* module/system/vm/frame.scm (frame-next-source): New exported binding,
  returns the source line corresponding to the next instruction instead
  of the previous instruction.
2010-10-08 12:31:56 +02:00
Andy Wingo
cf45ff030c inline symbol? and vector? to opcodes, and a psyntax inlining tweak
* libguile/vm-i-scheme.c (symbol?, vector?): New
  instructions. Renumbered the rest.
* libguile/vm-i-system.c: Renumber instructions.
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* module/ice-9/psyntax.scm (binding-type, binding-value): Define using
  macros so that we inline to car and cdr opcodes. Oh, for an inliner :)

* module/language/tree-il/compile-glil.scm (*primcall-ops*)
* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*, *effect-free-primitives*)
  (*effect+exception-free-primitives*): Add symbol? and vector?
  inlines.
2010-10-08 12:31:56 +02:00
Andy Wingo
b95d76fcf2 c stack overflow checked for, once more
* libguile/stackchk.h: Include private-options.h if we are building
  guile.

* libguile/vm.c (scm_c_vm_run): Check for C stack overflow before
  entering the engine.
2010-10-01 16:47:39 +02:00
Andy Wingo
138bf22d82 scm_report_stack_overflow eventually resets scm_stack_checking_enabled_p
* libguile/stackchk.c (scm_report_stack_overflow): Surround in a
  dynwind, so that scm_stack_checking_enabled_p is reset when the error
  throws.
2010-10-01 16:36:34 +02:00
Andy Wingo
e2e2631d75 deprecate turn-on-debugging, it is obsolete
* libguile/script.c (scm_compile_shell_switches): Don't generate calls
  to turn-on-debugging.

* module/ice-9/boot-9.scm (turn-on-debugging): Remove.

* module/ice-9/deprecated.scm (turn-on-debugging): Add deprecated shim.
2010-10-01 13:17:44 +02:00
Andy Wingo
ab9c9100d2 scm_debug_opts to debug.c, backtrace on by default, scm_*_opts internal linkage
* libguile/eval.c:
* libguile/debug.c (scm_debug_opts): Move here, from eval.c. Change
  SCM_BACKTRACE_P to 1, initially.

* libguile/private-options.h: Make all options vars private.
2010-10-01 13:11:51 +02:00
Andy Wingo
24259edb8b remove elisp-strings and elisp-vectors read options
* libguile/private-options.h (SCM_ELISP_VECTORS_P, SCM_ESCAPED_PARENS_P):
* libguile/read.c (scm_read_opts): Remove unused elisp-vectors option,
  and the elisp-strings option (which allowed \( and \) escapes in
  strings).
  (scm_read_string): Remove the elisp-strings case.

* doc/ref/api-options.texi (Reader options): Update, and update wording
  of the case-insensitive bit.
2010-10-01 10:20:54 +02:00
Andy Wingo
edca9d6ef4 (foo-options 'full) displays options doc in correct order
* libguile/options.c (get_documented_option_setting): Reverse options
  interface list before returning, so that they are in the original
  order.
2010-10-01 10:07:47 +02:00
Andy Wingo
4272304761 remove unused print-options
* libguile/private-options.h (SCM_PRINT_CLOSURE, SCM_PRINT_SOURCE_P):
* libguile/print.c (scm_print_opts):
* doc/ref/api-options.texi (Printing options): Remove source and
  closure-hook print options.
2010-10-01 09:56:15 +02:00
Andy Wingo
542f975e60 add ,registers
* 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.
2010-09-30 21:29:20 +02:00
Andy Wingo
97b18a6640 default to regular vm for noninteractive use
* 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.
2010-09-28 09:22:38 +02:00
Andy Wingo
ea9f4f4b15 add call-with-vm; remove thread-vm bits; remove vm-apply; engines settable.
* 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.
2010-09-27 21:12:29 +02:00
Ludovic Courtès
864e7d424e Fix bignum memory leak.
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.
2010-09-27 11:20:14 +02:00
Ludovic Courtès
d017fcdfcb Allocate bignums in pointer-less memory.
* 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.
2010-09-27 11:10:01 +02:00
Ludovic Courtès
99765ed172 Remove `scm_t_aligned_cell'.
* 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.
2010-09-27 01:28:49 +02:00
Ludovic Courtès
8e4c60ff29 Fix argument passing in VM hooks.
* 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.)
2010-09-27 01:25:45 +02:00
Ludovic Courtès
8684029d21 Have `@abort' honor VM changes by winds.
* libguile/control.c (scm_c_abort): Update VM after the `scm_dowinds'
  call.

* test-suite/tests/control.test ("the-vm"): New test prefix.
2010-09-27 01:07:21 +02:00
Michael Gran
c03ef352bc Favor non-hex string escapes over hex escapes when writing strings
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
2010-09-26 12:25:18 -07:00
Michael Gran
23295dc35c Incorrect parsing of NaN complex numbers
* libguile/numbers.c (mem2complex): modified
* test-suite/tests/reader.test: new complex NaN reader test
2010-09-25 09:07:21 -07:00
Andy Wingo
038cb3428f remove vm-version, vm options
* libguile/vm.h (struct scm_vm): Remove "options" member.
* libguile/vm.c (scm_vm_version, scm_vm_option, scm_set_vm_option_x):
  Remove.

* module/system/vm/vm.scm (vm-version, vm-option, set-vm-option!):
  Remove.
  (vms:time, vms:clock): Remove these unused definitions.
  (vm-load): Remove. "Load" should be reserved for things that exist on
  disk, methinks.
2010-09-25 12:16:05 +02:00
Andy Wingo
3932bdb3af remove a number of debug options
* libguile/private-options.h (SCM_BREAKPOINTS_P, SCM_TRACE_P)
  (SCM_REC_PROCNAMES_P, SCM_BACKTRACE_INDENT, SCM_N_FRAMES)
  (SCM_BACKTRACE_MAXDEPTH, SCM_DEVAL_P): Remove these internal names.

* libguile/eval.c (scm_debug_opts): Remove the corresponding debug
  options -- breakpoints, trace, procnames, indent, frames, maxdepth,
  and debug.

* libguile/debug.c (scm_debug_options): Remove SCM_N_FRAMES check.

* test-suite/lib.scm (with-debugging-evaluator*):
* module/scripts/summarize-guile-TODO.scm:
* module/statprof.scm (statprof-reset):
* module/ice-9/boot-9.scm (turn-on-debugging): Remove useless
  debug-enable 'debug calls.

* module/ice-9/deprecated.scm (debug-enable): As it seems that 'debug is
  a particulatly common option that we just removed, add a deprecation
  shim.

* doc/ref/api-options.texi (Debugger options): Update the set of debug
  options.
2010-09-24 20:57:01 +02:00
Andy Wingo
925c1bae1f remove evaluator-traps-interface
* libguile/debug.h:
* libguile/debug.c (scm_with_traps):
* libguile/eval.c (scm_evaluator_traps, scm_evaluator_trap_table):
  Remove these procedures. Note that scm_evaluator_traps was known in
  Scheme as `evaluator-traps-interface'.

* libguile/private-options.h (SCM_TRAPS_P, SCM_ENTER_FRAME_P)
  (SCM_APPLY_FRAME_P, SCM_EXIT_FRAME_P, SCM_ENTER_FRAME_HDLR)
  (SCM_APPLY_FRAME_HDLR, SCM_EXIT_FRAME_HDLR, SCM_MEMOIZE_P)
  (SCM_MEMOIZE_HDLR): Remove these private interfaces.

* module/ice-9/boot-9.scm (traps, trap-enable, trap-disable, trap-set!):
  Remove.

* module/ice-9/scm-style-repl.scm (error-catching-loop): Remove
  with-traps wrap.

* doc/ref/api-options.texi (Low level options interfaces):
  (User level options interfaces, Evaluator trap options)
* doc/ref/api-evaluation.texi (Evaluator Behavior): Remove references to
  the evaluator traps interface.
2010-09-24 18:44:21 +02:00
Andy Wingo
3b494f511a remove eval-options
* libguile/eval.c:
* libguile/private-options.h (scm_eval_opts, scm_eval_options_interface)
  (SCM_EVAL_STACK): Remove these private interfaces.

* module/ice-9/boot-9.scm (eval-options, eval-enable, eval-disable)
  (eval-set!): Remove these procedures.

* doc/ref/api-evaluation.texi:
* doc/ref/api-options.texi: Remove references to eval options.
2010-09-24 18:11:27 +02:00
Andy Wingo
8cbcaaa0ae remove srcprop.[ch] things that have to do with breakpoints
* 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.
2010-09-24 17:33:17 +02:00
Ludovic Courtès
ede3d96bd6 Remove unused declarations.
* libguile/vm.h (scm_vm_option_ref, scm_vm_option_set_x): Remove.
2010-09-24 15:39:47 +02:00
Ludovic Courtès
271c3d3196 Add thread-vm' and set-thread-vm!'.
* libguile/vm.c (thread_vm, scm_thread_vm, scm_set_thread_vm_x): New
  functions.
  (scm_the_vm): Add docstring.  Use `thread_vm'.

* libguile/vm.h (scm_thread_vm, scm_set_thread_vm_x): New declarations.

* module/system/vm/vm.scm: Export `thread-vm' and `set-thread-vm!'.
2010-09-24 15:39:47 +02:00
Ludovic Courtès
3fa882203a Fix bug #31081 (`lookahead-u8' returns an s8.)
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.
2010-09-23 22:34:31 +02:00
Ludovic Courtès
5a99a574e4 Fix weak-value hash tables.
* 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.
2010-09-23 22:02:11 +02:00
Ludovic Courtès
cb2d8076ef Define `equal?' for pointer objects.
* libguile/eq.c (scm_equal_p): Handle pointer objects.

* test-suite/tests/foreign.test ("make-pointer")["equal?", "equal?
  modulo finalizer", "not equal?"]: New tests.
2010-09-23 21:55:21 +02:00
Andy Wingo
2e30f3989c add scm_frame_address / frame-address
* libguile/frames.h:
* libguile/frames.c (scm_frame_address): New accessor, returns a frame's
  fp.
2010-09-23 13:19:49 +02:00
Ludovic Courtès
194865d2f7 SRFI-1: Rewrite `alist-copy' in Scheme.
This partially reverts commit b1fff4e793
(Sat Apr 2 2005).

* libguile/srfi-1.c (scm_srfi1_alist_copy): Remove.
* libguile/srfi-1.h (scm_srfi1_alist_copy): Remove declaration.

* module/srfi/srfi-1.scm (alist-copy): New procedure.
2010-09-20 00:01:23 +02:00