1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 20:00:19 +02:00
Commit graph

7322 commits

Author SHA1 Message Date
Andy Wingo
1ad9fdb727 fix scm_object_property_set_x for handles and weak tables
* libguile/objprop.c (scm_object_property_set_x): Use ref and set!
  instead of create-handle and set-cdr!, as it is a weak hash table.
  (scm_set_object_properties_x): Likewise.
2011-05-01 23:01:09 +02:00
Andy Wingo
4466db75da deprecated primitive-properties don't get handles from weak hash tables
* libguile/deprecated.c (scm_primitive_property_ref)
  (scm_primitive_property_set_x): Avoid getting handles to elements in a
  weak hash table, as that's not going to work very well.
2011-05-01 20:55:58 +02:00
Andy Wingo
d1c4720ca3 deprecate scm_whash API
* libguile/deprecated.h:
* libguile/deprecated.c (scm_whash_get_handle, SCM_WHASHFOUNDP)
  (SCM_WHASHREF, SCM_WHASHSET, scm_whash_create_handle)
  (scm_whash_lookup, scm_whash_insert): Deprecate this API.

* libguile/srcprop.c:
* libguile/srcprop.h:
* libguile/read.c (scm_read_sexp): Use the hashq API instead of the
  whash API.
2011-05-01 20:55:50 +02:00
Andy Wingo
ecc9d1b547 fix hash-set! in weak-value table from non-immediate to immediate
* libguile/hashtab.c (set_weak_cdr, scm_hash_fn_set_x): If we have a
  weak-value hash table with a previous non-immediate value for a given
  key, and we are setting an immediate as the new value, we were not
  unregistering the disappearing link.  Fixed.
2011-05-01 18:01:42 +02:00
Andy Wingo
f3a9a51d3e MV truncation in the boot evaluator
* libguile/eval.c (truncate_values): New helper.
  (EVAL1): New macro, does an eval then truncates the values.
  (eval, prepare_boot_closure_env_for_apply)
  (prepare_boot_closure_env_for_eval): Use EVAL1 in appropriate places
  to get multiple-values truncation even here in the boot evaluator.

eval.c fixen
2011-04-29 11:14:54 +02:00
Andy Wingo
501cf7d607 latin1 strings in vm error messages
* libguile/vm-engine.c: Use latin1 strings here for the string
  literals.
2011-04-29 11:07:25 +02:00
Andy Wingo
ad378da975 check for iconveh values at configure-time
* configure.ac: Check for the iconveh values here, instead of relying on
  gen-scmconfig to know them.  That doesn't work in general because
  gen-scmconfig runs on the build machine, not the target machine.

* libguile/Makefile.am (gen-scmconfig.$(OBJEXT)): Revert rule to the
  revision before 533d8212.

* libguile/gen-scmconfig.h.in (SCM_I_GSC_ICONVEH_ERROR):
  (SCM_I_GSC_ICONVEH_QUESTION_MARK):
  (SCM_I_GSC_ICONVEH_ESCAPE_SEQUENCE):
* libguile/gen-scmconfig.c: Use configure-time substitutions to set
  SCM_ICONVEH_ERROR_HANDLER et al.
2011-04-28 22:39:20 +02:00
Ludovic Courtès
a42d79711b Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'.
* libguile/ports.c (get_codepoint): Return EILSEQ when OUTPUT_SIZE == 0.

* test-suite/tests/ports.test ("string ports"): Add 2 tests for
  unterminated sequences.
2011-04-27 20:34:08 +02:00
Ludovic Courtès
fb9cfa83a7 Remove the `sizeof (mpz_t)' check.
* libguile/numbers.c: Remove `sizeof (mpz_t)' check, which wasn't need
  anymore since `make_bignum' doesn't make any such assumption.
2011-04-26 00:03:44 +02:00
Ludovic Courtès
dd7d0148f2 Update Gnulib to v0.0-5158-g7d06b32; remove strcase' and version-etc-fsf'.
* m4/gnulib-cache.m4: Remove `strcase' and `version-etc-fsf'.

* configure.ac (POTENTIAL_GCC_CFLAGS): Remove `-Wundef'.

* libguile/script.c: Don't include <version-etc.h>.
2011-04-25 23:59:37 +02:00
Ludovic Courtès
d0476fa2b0 Compile more file system related procedures when `--disable-posix'.
* libguile/filesys.c (scm_tc16_dir, scm_directory_stream_p, scm_opendir,
  scm_readdir, scm_rewinddir, scm_closedir, scm_dir_print,
  scm_dir_free, scm_lstat): Compile unconditionally.
2011-04-25 22:52:00 +02:00
Ludovic Courtès
d20912e67d Move {total,current}-processor-count' outside of posix.c'.
* libguile/posix.c (scm_total_processor_count,
  scm_current_processor_count): Move to...
* libguile/threads.c: ... here.

* libguile/posix.h (scm_total_processor_count,
  scm_current_processor_count): Move declarations to...
* libguile/threads.h: ... here.

* test-suite/tests/posix.test ("nproc"): Move tests to...
* test-suite/tests/threads.test: ... here.
2011-04-25 22:41:58 +02:00
Ludovic Courtès
bbec460245 Make the `sizeof (mpz_t)' check at compile-time.
* libguile/init.c (scm_i_init_guile): Remove the `sizeof (mpz_t)'
  run-time check.

* libguile/numbers.c: Add a compile-time check for `sizeof (mpz_t)'.
2011-04-25 22:36:30 +02:00
Ludovic Courtès
912308835d Make `scm_i_ensure_signal_delivery_thread' call in Guile mode.
* libguile/threads.c (on_thread_exit): Move
  `scm_i_ensure_signal_delivery_thread' call...
  (do_thread_exit): ... here.
2011-04-25 16:45:22 +02:00
Ludovic Courtès
96128014bf Make sure binary ports pass `binary-port?' regardless of the locale.
* libguile/r6rs-ports.c (make_bip, make_cbip, make_bop, make_cbop):
  Set `c_port->encoding' to NULL.

* test-suite/tests/r6rs-ports.test ("7.2.7 Input
  Ports")["bytevector-input-port is binary"]: New test.
  ("7.2.7 Input Ports")["make-custom-binary-input-port"]: Make sure PORT
  passes `binary-port?' and `input-port?'.
  ("8.2.10 Output ports")["bytevector-output-port is binary"]: New test.
  ["make-custom-binary-output"]: Rename to...
  ["make-custom-binary-output-port"]: ... this.

* test-suite/tests/ports.test ("string ports")["read-char, wrong
  encoding, error", "read-char, wrong encoding, escape", "read-char,
  wrong encoding, substitute", "peek-char, wrong encoding, error"]: Use
  `set-port-encoding!' instead of `%default-port-encoding' to set the
  encoding of bytevector input ports.

* test-suite/tests/rdelim.test ("read-line")["decoding error", "decoding
  error, substitute"]: Likewise.

* doc/ref/api-io.texi (R6RS Port Manipulation): Document `binary-port?'
  and `textual-port?'.

* doc/ref/r6rs.texi (R6RS Incompatibilities): Mention the soft
  distinction between textual and binary ports.
2011-04-22 23:58:00 +02:00
Andy Wingo
0fbdbe6c84 fix pre-GC_set_start_callback compilation
* libguile/gc.c: Move declaration of run_before_gc_hook up.
2011-04-15 16:41:34 +00:00
Andy Wingo
66b229d56e pre-GC_set_start_callback compatibility
* configure.ac: Add a check for GC_set_start_callback.

* libguile/gc.c (scm_i_gc): If we don't have GC_set_start_callback, run
  the before-gc hook manually here.
  (scm_init_gc): Otherwise set it as a start callback.

* libguile/hashtab.c (weak_gc_callback, weak_gc_hook)
  (weak_gc_finalizer, scm_c_register_weak_gc_callback): Fix to work
  either way, with or without GC_set_start_callback.
2011-04-15 18:31:06 +02:00
Andy Wingo
631e49ed76 weak hash table vacuum on before-gc C hook
* libguile/hashtab.c (weak_gc_callback)
  (scm_c_register_weak_gc_callback): Change implementation to use the
  before-gc C hook instead of the after-gc finalizers.
2011-04-15 18:05:23 +02:00
Andy Wingo
cc3546b027 use gc_start_callback + asyncs for after-gc-hook, instead of finalizers
* libguile/gc.c (run_before_gc_c_hook, scm_storage_prehistory)
  (after_gc_async_thunk, queue_after_gc_hook, scm_init_gc): Instead of
  playing our finalizer trick, connect to the GC start callback, and use
  it to queue an async after-gc-hook.  Seems to fix the after-gc-hook on
  non-threaded builds.  Though this does re-enable the before-gc C hook,
  we don't wire up the Scheme hook because we're in the alloc lock; and
  indeed, a before-GC scheme hook isn't a great idea...
2011-04-15 17:45:52 +02:00
Andy Wingo
1e56cff233 add --fresh-auto-compile
* doc/ref/api-evaluation.texi (Compilation): Add discussion of
  --fresh-auto-compile.
* doc/ref/scheme-scripts.texi (Invoking Guile): Add --fresh-auto-compile
  option.

* NEWS: Add entry.

* libguile/load.c: Define %fresh-auto-compile.
  (scm_primitive_load_path): Use it here.
  (scm_init_load_should_auto_compile): Init from GUILE_AUTO_COMPILE env
  var, with a value of "fresh".

* module/ice-9/boot-9.scm (load-in-vicinity): Auto-compilation cache is
  stale if %fresh-auto-compile is true.

* module/ice-9/command-line.scm (compile-shell-switches): Parse out
  --fresh-auto-compile.
2011-04-15 11:27:27 +02:00
Ludovic Courtès
ee037cee3e Build `filesys.x'.
* libguile/Makefile.am (DOT_X_FILES): Add `filesys.x'.
2011-04-15 09:09:30 +02:00
Ludovic Courtès
073167ef7b Allow compilation with `--disable-posix'.
Reported by Dmitry Dzhus <dima@dzhus.org>.

* configure.ac: Remove `AC_LIBOBJ([filesys])'.  Document
  `--disable-posix' as omitting non-essential POSIX interfaces.

* libguile/Makefile.am (libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES):
  Add `filesys.c'.
  (DOT_DOC_FILES): Add `filesys.doc'.
  (EXTRA_libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES): Remove
  `filesys.c'.

* libguile/posix.c (scm_mkstemp, scm_access): Move to `filesys.c'.
  (scm_init_posix): Move `R_OK' etc. to `filesys.c'.

* libguile/filesys.c (scm_chown, scm_chmod, scm_umask, scm_open_fdes,
  scm_open, scm_close, scm_close_fdes, scm_link, scm_tc16_dir,
  scm_directory_stream_p, scm_opendir, scm_readdir, scm_rewinddir,
  scm_closedir, scm_dir_print, scm_dir_free, scm_chdir, scm_getcwd,
  set_element, fill_select_type, get_element, retrieve_select_type,
  scm_select, scm_fcntl, scm_fsync, scm_symlink, scm_readlink,
  scm_lstat, scm_copy_file): Conditionalize on HAVE_POSIX.
  (scm_mkstemp, scm_access): New functions.
  (scm_init_filesys): Conditionalize `scm_tc16_dir', `O_RDONLY', etc. on
  HAVE_POSIX.  Define `R_OK', `W_OK', etc.

* libguile/fports.c (fport_print): Use `scm_ttyname' only when
  HAVE_POSIX.

* libguile/i18n.c (lock_locale_mutex, unlock_locale_mutex): New
  functions.  Update users of `scm_i_locale_mutex' to use them.

* libguile/init.c (scm_i_init_guile): Always call `scm_init_filesys'.

* meta/guile-tools.in (main): Use `setlocale' only when it is defined.

* module/ice-9/boot-9.scm: Always load `ice-9/posix'.
2011-04-15 00:09:16 +02:00
Ludovic Courtès
22072f2155 Include <sched.h> in `posix.c'.
* configure.ac: Check for <sched.h>.

* libguile/posix.c [HAVE_SCHED_H]: Include <sched.h>, for
  `sched_setaffinity' & co.
  Reported by Marco Maggi <marco.maggi-ipsu@poste.it>.
2011-04-14 23:16:21 +02:00
Andy Wingo
1693983a61 script.c calls out to (ice-9 command-line)
* libguile/script.c (scm_shell_usage): Call (ice-9 command-line)'s
  shell-usage.
  (scm_compile_shell_switches): Likewise, call (ice-9 command-line)'s
  compile-shell-switches.
2011-04-14 16:15:47 +02:00
Andy Wingo
26ac1e3f42 add packager info to %build-info
* libguile/load.c (init_build_info): Add packager, packager-version, and
  packager-bug-reports to %build-info, if they are available.
2011-04-14 16:06:40 +02:00
Andy Wingo
8e76ce94a2 --disable-threads fix
* libguile/threads.c (do_thread_exit_trampoline, on_thread_exit):
  (scm_i_init_thread_for_guile): Only register and unregister threads
  with bdw-gc when we are building with threads support.  Thanks to
  Marijn for the report.
2011-04-13 12:50:36 +02:00
Ian Price
c89b452993 Fix fencepost error in bip_seek
* libguile/r6rs-ports.c (bip_seek): Fix to allow seeking to end of port.

* test-suite/tests/r6rs-ports.test ("bytevector input port can seek to
  very end"): Add tests.
2011-04-11 18:14:18 +02:00
Andy Wingo
2e9fc9fc73 symbols with odd characters print better in #{}#
* libguile/print.c (symbol_has_extended_read_syntax): Use a more
  general, unicode-appropriate algorithm.  Hopefully doesn't cause
  any current #{}# cases to be unescaped.
  (print_extended_symbol): Use more appropriate unicode algorithm, and
  emit unicode hex escapes instead of our own lame escapes.

* test-suite/tests/symbols.test: Add tests.
2011-04-11 13:48:11 +02:00
Andy Wingo
d9527cfafd read-extended-symbol handles backslash better, including r6rs hex escapes
* libguile/read.c (scm_read_extended_symbol): Interpret '\' as an escape
  character.  Due to some historical oddities we have to support '\'
  before any character, but since we never emitted '\' in front of
  "normal" characters like 'x' we can interpret "\x..;" to be an R6RS
  hex escape.

* test-suite/tests/reader.test ("#{}#"): Add tests.
2011-04-11 12:48:06 +02:00
Andy Wingo
15671c6e7f refactor scm_i_print_symbol_name
* libguile/print.c (symbol_has_extended_read_syntax)
  (print_normal_symbol, print_extended_symbol, scm_i_print_symbol_name):
  Factor scm_i_print_symbol_name into separate routines.  Add comments.
  There are a number of bugs here.
2011-04-11 11:52:35 +02:00
Mark H Weaver
882c89636a Fix the R6RS exact-integer-sqrt and import into core guile
* libguile/numbers.c (scm_exact_integer_sqrt): New C procedure to
  compute exact integer square root and remainder.
  (scm_i_exact_integer_sqrt): New Scheme procedure `exact-integer-sqrt'
  from the R6RS, imported into core guile.

* libguile/numbers.h: Add prototypes.

* module/rnrs/base.scm: Remove broken stub implementation, which would
  fail badly when applied to large integers.

* doc/ref/api-data.texi: Add documentation.

* doc/ref/r6rs.texi: Change documentation for `exact-integer-sqrt' to a
  stub that xrefs the core docs, as is done for other operations
  available in core.

* test-suite/tests/numbers.test: Add tests.

* NEWS: Add news entries.
2011-04-09 16:11:49 -04:00
Mark H Weaver
6ebecdeb7d Fix parsing of exact numbers with negative exponents
* libguile/numbers.c (mem2decimal_from_point): Use scm_divide instead of
  scm_divide2real when applying a negative exponent, to preserve
  exactness in case the "#e" forced exactness specifier is present.
  This fixes a bug where numeric literals such as "#e1e-5" yielded
  incorrect fractions.
2011-04-06 18:24:40 -04:00
Mark H Weaver
df941b5b62 Undeprecate read syntax for uniform complex vectors
* libguile/read.c (scm_read_sharp): Move the "#c..." case outside of
  #if SCM_ENABLE_DEPRECATED, and to the same section which handles
  "#s...", "#u..." and "#f...".
  Thanks to Andreas Rottmann <a.rottmann@gmx.at> for the bug report.
2011-04-05 19:42:06 -04:00
Andy Wingo
90fed973ab pthread-threads.h: only redirect to GC_pthread_sigmask if it is present
* configure.ac: Check for pthread_sigmask.
* libguile/gen-scmconfig.c: Create SCM_HAVE_GC_PTHREAD_SIGMASK.
* libguile/pthread-threads.h (scm_i_pthread_sigmask): Only redirect to
  GC_pthread_sigmask if GC_pthread_sigmask is present.
2011-04-03 22:03:56 +02:00
Andy Wingo
c6b08d2194 string->pointer and pointer->string have optional encoding arg
* test-suite/tests/foreign.test ("pointer<->string"): Add test cases.

* libguile/foreign.c (scm_string_to_pointer, scm_pointer_to_string): Add
  optional encoding, and in the pointer->string case, length arguments.

* libguile/foreign.h: Update prototypes of internal functions.
  Shouldn't affect ABI as they are internal.

* doc/ref/api-foreign.texi (Void Pointers and Byte Access): Update
  docs.
2011-04-01 13:31:26 +02:00
Andy Wingo
13a78b0fd7 support loading objcode even if mmap(2) is unavailable
* configure.ac: Check for sys/mman.h.

* libguile/objcodes.c (verify_cookie): Factor cookie verification out to
  a helper function.
  (make_objcode_from_file): Rename from make_objcode_by_mmap.  If mmap
  is unavailable, just read(2) to a bytevector.
2011-04-01 12:34:21 +02:00
Andy Wingo
355dd8cb4b make_objcode_by_mmap uses MAP_PRIVATE, not MAP_SHARED
* libguile/objcodes.c (make_objcode_by_mmap): MAP_PRIVATE, not
  MAP_SHARED -- we don't need to update the underlying file, nor do we
  need to see updates.
2011-04-01 11:23:12 +02:00
Andy Wingo
d050ef66ec latin1 subr and message in internal scm_{encoding,decoding}_error
* libguile/strings.c (scm_encoding_error, scm_decoding_error): Use
  scm_from_latin1_string for the subr and message args, as these are
  internal functions, and we know their callers.
2011-04-01 11:05:37 +02:00
Kevin Fletcher
987b8160f5 fix gc_register_my_thread et al fallback impls
* libguile/threads.c (GC_register_my_thread, GC_get_stack_base): Fix
  fallback impls.
2011-03-31 22:17:50 +02:00
Andy Wingo
8a12aeb919 fix problems detecting coding: in block comments
* libguile/read.c (scm_i_scan_for_encoding): Fix for coding on first
  line #! and for !# immediately following the coding.

* test-suite/Makefile.am:
* test-suite/tests/coding.test: Add tests.
2011-03-31 14:46:21 +02:00
Michael Gran
0f1fd214f1 More descriptive error for dynamic-pointer
* libguile/dynl.c (sysdep_dynl_value): Failure to find a symbol is not
  an error, so raise our own, more appropriate error.

* test-suite/tests/foreign.test ("dynamic-pointer"): Add a test.
2011-03-31 12:34:47 +02:00
Andy Wingo
e309f3bf9e with-continuation-barrier calls exit(3) _after_ unwinding
* libguile/continuations.c (scm_handler, c_handler)
  (scm_c_with_continuation_barrier, scm_with_continuation_barrier):
  Instead of calling scm_handle_by_message_noexit in the pre-unwind
  handler, roll our own exception printing in the pre-unwind, and do to
  exit()-on-quit in the post-unwind handler.  This lets the stack unwind
  at exit-time so that pending dynwinds run.

* test-suite/tests/continuations.test ("continuations"): Add a test.
2011-03-30 12:43:50 +02:00
Michael Gran
653ccd78fa don't GC unregister null thread
GC_unregister_my_thread is only supposed to be called from
a thread other than the main thread, so, it should never be
called when the system is compiled with null threads.

* libguile/threads.c (on_thread_exit)[SCM_USE_NULL_THREADS]: don't
    call GC_unregister_my_thread
2011-03-30 09:32:42 +02:00
Michael Gran
4000d0641f check for GC_allow_register_threads
This is not present in earlier versions of BDW-GC

* configure.ac: check for GC_allow_register_threads
* libguile/threads.c (scm_i_init_thread_for_guile): Only call
  GC_allow_register_threads if it is present.
2011-03-30 09:21:09 +02:00
Ludovic Courtès
443f25dcff Fix procedure->pointer' for functions returning void'.
* libguile/foreign.c (unpack): Handle `FFI_TYPE_VOID'.

* test-suite/tests/foreign.test ("procedure->pointer")["procedures
  returning void"]: New test.  Reported by
  Tristan Colgate <tcolgate@gmail.com>.
2011-03-29 23:35:24 +02:00
Andy Wingo
572eef50c2 fix prompt and abort with the boot evaluator
* libguile/control.h:
* libguile/control.c (scm_i_prompt_pop_abort_args_x): Take a VM instead
  of a prompt, given that it's the VM's registers that record the abort
  arguments, not the prompt registers (which actually point right below
  the abort values).

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Pass the vm instead of a prompt.
2011-03-29 17:41:31 +02:00
Andy Wingo
8cf49d836f fix compilation with libgc 7.0, 7.1
* configure.ac: Check for GC_pthread_exit and GC_pthread_cancel.

* libguile/gen-scmconfig.c: Write HAVE_GC_PTHREAD_CANCEL and
  HAVE_GC_PTHREAD_EXIT into scmconfig.h.

* libguile/pthread-threads.h (scm_i_pthread_exit, scm_i_pthread_cancel):
  Only redefine to their GC_pthread_* variants if we have those
  functions, which is not the case in libgc < 7.2.
2011-03-29 13:21:44 +02:00
Bruno Haible
96c71c589a Update comment about uc_locale_language.
* libguile/i18n.c (locale_language): Update comment.
2011-03-26 23:33:00 +01:00
Andy Wingo
7f22442b2a avoid running GC when SCM_I_CURRENT_THREAD is unset
* libguile/threads.c (guilify_self_1): Prevent finalizers from running
  before SCM_I_CURRENT_THREAD is set.
  (do_thread_exit_trampoline): Leave the thread in the registered state.
  (on_thread_exit): Always unregister the thread here.
2011-03-25 15:35:20 +01:00
Andy Wingo
12c1d8616d threading / with_guile refactor to use more GC_stack_base
* libguile/init.h:
* libguile/init.c (scm_i_init_guile): Change arg to this internal
  function from SCM_STACKITEM* to void*.  Actually it's a
  struct GC_stack_base*.

* libguile/bdw-gc.h: Don't do pthread redirects, because we don't want
  to affect applications' pthread_* bindings.

* libguile/pthread-threads.h (scm_i_pthread_create)
  (scm_i_pthread_detach, scm_i_pthread_exit, scm_i_pthread_cancel)
  (scm_i_pthread_sigmask): Do pthread redirects here, in this internal
  header.

* libguile/threads.h: Remove declaration of internal
  scm_i_with_guile_and_parent.  Remove declaration of undefined
  scm_threads_init_first_thread.  Make declaration of internal
  scm_threads_prehistory actually internal, and take a void* (actually a
  struct GC_stack_base*).

* libguile/threads.c (GC_get_stack_base): Implement a shim if this
  function is unavailable, and fold in the implementations of
  get_thread_stack_base.
  (GC_call_with_stack_base): Actually implement.
  (guilify_self_1): Take a GC_stack_base* as an arg.
  (scm_i_init_thread_for_guile): Likewise, and set up libgc for
  registration of other threads.
  (scm_init_guile): Use GC_get_stack_base instead of our own guesswork.
  (with_guile_and_parent, scm_i_with_guile_and_parent): Rework to
  trampoline through a GC_call_with_stack_base.
  (scm_threads_prehistory): Pass the "base" arg on to guilify_self_1.
2011-03-25 13:01:51 +01:00