1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 12:20:26 +02:00
Commit graph

15149 commits

Author SHA1 Message Date
Ludovic Courtès
21b6df302f doc: Fix `merge-generics' example.
* doc/ref/goops.texi (Merging Generics): Change (my-module) example to
  use (oop goops) and use the right syntax for #:duplicates.  Reported
  by David Pirotte <david@altosw.be>.
2011-07-06 18:21:07 +02:00
Ludovic Courtès
0adcd1bd93 configure: Build a tar.xz' in addition to tar.gz'.
* configure.ac: Explicitly require Automake 1.11.  Add Automake option
  `dist-xz'.
2011-07-06 16:01:22 +02:00
Ludovic Courtès
37a5970c19 VM: Keep jump table address in a register.
* libguile/vm-engine.c (VM_NAME)[HAVE_LABELS_AS_VALUES]: Rename
  `jump_table' to `jump_table_pointer'.  Add `jump_table' as a local
  variable, initialize it.

* libguile/vm-engine.h (JT_REG): New macro.
2011-07-06 12:50:32 +02:00
Ludovic Courtès
c467c36374 Bump version number for 2.0.2.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
  (LIBGUILE_INTERFACE_CURRENT): Increment to account for new C function
  `scm_peek_byte_or_eof'.
  (LIBGUILE_INTERFACE_AGE): Increment.
2011-07-01 23:54:10 +02:00
Ludovic Courtès
f39779b1be Update `NEWS'. 2011-07-01 22:49:50 +02:00
Ludovic Courtès
4f39f31ea5 Revert "Fix lock ordering in fat_mutex_lock' to match that of do_thread_exit'."
This reverts commit ccb80964cd, which
introduced a race condition, with a small window during which a mutex
could be held by a thread without being part of its `mutexes' list,
thereby violating the invariant tested at line 667.
2011-07-01 22:46:32 +02:00
Ludovic Courtès
231c0e0e61 Update Gnulib to v0.0-5874-g7170ee0. 2011-07-01 22:34:29 +02:00
Ludovic Courtès
97ec95b728 Type-check the OWNER argument of `lock-mutex'.
* libguile/threads.c (scm_lock_mutex_timed): Type-check OWNER.
2011-07-01 19:10:18 +02:00
Ludovic Courtès
4bc95fccad Add type and range checks to the complex generalized vector accessors.
* libguile/bytevectors.c (COMPLEX_ACCESSOR_PROLOGUE, COMPLEX_NATIVE_REF,
  COMPLEX_NATIVE_SET): New macros.
  (bytevector_ref_c32, bytevector_ref_c64): Defined in terms of
  `COMPLEX_NATIVE_REF'.
  (bytevector_set_c32, bytevector_set_c64): Defined in terms of
  `COMPLEX_NATIVE_SET'.
  (bytevector_ref_fns): Make `static'.

* test-suite/tests/srfi-4.test ("c32 vectors")["generalized-vector-ref",
  "generalized-vector-set!", "generalized-vector-ref, out-of-range",
  "generalized-vector-set!, out-of-range"]: New tests.
  ("c64 vectors")["generalized-vector-ref", "generalized-vector-set!",
  "generalized-vector-ref, out-of-range",
  "generalized-vector-set!, out-of-range"]: New tests.
2011-07-01 19:09:29 +02:00
Ludovic Courtès
1e8f939229 Fix unaligned accesses for bytevectors of complex numbers.
* libguile/bytevectors.c (bytevector_ref_c32, bytevector_ref_c64,
  bytevector_set_c32, bytevector_set_c64): Use `memcpy' to avoid
  unaligned accesses.  This fixes SIGBUS on SPARC and possibly other
  alignment-sensitive platforms.
2011-07-01 16:21:21 +02:00
Ludovic Courtès
e780c14fd0 i18n: Don't use `!=' to compare SCMs.
* libguile/i18n.c (install_locale)[!USE_GNU_LOCALE_API]: Use
  `SCM_UNBNDP' instead of `!='.
2011-07-01 15:29:51 +02:00
Andy Wingo
1f7945a768 fix '(a #{.} b)
* libguile/read.c (scm_read_sexp): Don't confuse `#{.}#' with `.' for
  the purpose of reading dotted pairs.  Thanks to CRLF0710 for the
  report.

* test-suite/tests/reader.test ("#{}#"): Add test.
2011-07-01 12:20:52 +02:00
Andy Wingo
d682f703c7 fix r6rs-records-syntactic.test to not shadow a literal
* test-suite/tests/r6rs-records-syntactic.test (*parent-rtd): Fix test
  to not shadow a literal.
2011-07-01 12:01:58 +02:00
Andy Wingo
28d0871b55 defining a smob or port type no longer mucks exports of (oop goops)
* libguile/goops.c (DEFVAR): Remove this helper macro, replacing its
  uses with scm_module_define, but without scm_module_export.
  (create_basic_classes, scm_init_goops_builtins): Update callers.
  (make_class_from_template, make_class_from_symbol): Change to not
  define variables for classes.  This affects ports, struct classes, and
  smob classes.

* module/oop/goops.scm: Explicitly list our exports, so there is no more
  trickery happening in C.
  (find-subclass): Private helper to grub the class hierarchy, so we can
  define bindings for smobs, ports, etc.  Use to define the classes that
  goops.c used to define -- probably a subset, but it's better to have
  them listed.
2011-07-01 11:46:32 +02:00
Ludovic Courtès
b8441577f9 Fix `on_thread_exit' for canceled threads.
* libguile/threads.c (on_thread_exit): Clear `t->guile_mode' upon
  entry.  This fixes a bug whereby `t->base' would be incorrect for
  canceled threads, leading to a misdiagnosed VM stack overflow.
  See <http://lists.gnu.org/archive/html/bug-guile/2011-06/msg00068.html>
  for details.
  (scm_leave_guile_cleanup): Remove because it's unused.
2011-06-30 22:58:07 +02:00
Ludovic Courtès
ea5c9ddceb Add `guile-invoke.texi' to the distribution.
* doc/ref/Makefile.am (guile_TEXINFOS): Add `guile-invoke.texi'.
2011-06-30 16:36:03 +02:00
Andy Wingo
6934d9e75f fix generation of auto-compiled file names on mingw systems
* libguile/load.c (canonical_to_suffix, scm_primitive_load_path):
* module/ice-9/boot-9.scm (load-in-vicinity):
* module/system/base/compile.scm (compiled-file-name): If the canonical
  path of a file is a DOS-style path with a drive letter, turn it into a
  path suffix it by removing the colon and prefixing a "/".

Inspired by a patch from Jan Nieuwenhuizen.
2011-06-30 16:07:17 +02:00
Andy Wingo
26c81c7f40 Merge remote-tracking branch 'origin/lexical-literals'
Conflicts:
	module/ice-9/psyntax-pp.scm
2011-06-30 13:48:43 +02:00
Andy Wingo
8a562c697b Merge remote-tracking branch 'local-2.0/stable-2.0'
Conflicts:
	libguile/deprecated.c
	module/ice-9/psyntax-pp.scm
2011-06-30 13:47:46 +02:00
Mark Harig
94906b7541 better invocation documentation
* doc/ref/guile.texi (Programming in Scheme):
* doc/ref/scheme-scripts.texi (Guile Scripting): Moved "Invoking Guile"
  to its own file.

* doc/ref/guile-invoke.texi (Invoking Guile): Initial revision. This
  file contains the former section "Invoking Guile" that was included in
  the chapter "Programming in Scheme" as a subsection named
  "Command-line Options." It also includes a new subsection "Environment
  Variables," which describes those variables that can be set in the
  operating system before Guile is started and which affect Guile's
  run-time behavior.
2011-06-30 13:19:04 +02:00
Andy Wingo
dcada7d8e7 %load-hook not just for primitive-load
* libguile/load.c (scm_primitive_load_path):
* module/ice-9/boot-9.scm (load-in-vicinity): Call %load-hook as needed.
2011-06-30 12:56:12 +02:00
Andy Wingo
08969a2407 fix --disable-modules build
* configure.ac (HAVE_MODULES): Define HAVE_MODULES iff
  --enable-modules.

* libguile/deprecated.c (scm_dynamic_args_call)
* libguile/extensions.c (load_extension):
* libguile/init.c (scm_i_init_guile): Use HAVE_MODULES in a few places.
2011-06-30 12:26:31 +02:00
Andy Wingo
1fa542989a HAVE_POSIX warning fix
* libguile/filesys.c (scm_dir_free, scm_dir_print): Don't compile when
  not HAVE_POSIX.
2011-06-30 11:32:09 +02:00
Ludovic Courtès
ccb80964cd Fix lock ordering in fat_mutex_lock' to match that of do_thread_exit'.
Original Helgrind report:

==14160== Thread #57: lock order "0x47F6B90 before 0x7C25A28" violated
==14160==    at 0x4C27730: pthread_mutex_lock (in /.../valgrind-3.6.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==14160==    by 0x4EFF87E: do_thread_exit (threads.c:664)
==14160==    by 0x4E87B89: c_body (continuations.c:512)
==14160==    by 0x4F16C21: vm_regular_engine (vm-i-system.c:960)
==14160==    by 0x4E90F92: scm_call_4 (eval.c:506)
==14160==    by 0x4E88372: scm_i_with_continuation_barrier (continuations.c:450)
==14160==    by 0x4E88424: scm_c_with_continuation_barrier (continuations.c:546)
==14160==    by 0x51CA3AF: GC_call_with_gc_active (pthread_support.c:1128)
==14160==    by 0x4EFF2E0: with_guile_and_parent (threads.c:206)
==14160==    by 0x51C46B4: GC_call_with_stack_base (misc.c:1505)
==14160==    by 0x4EFF447: scm_with_guile (threads.c:917)
==14160==    by 0x51C46B4: GC_call_with_stack_base (misc.c:1505)
==14160==   Required order was established by acquisition of lock at 0x47F6B90
==14160==    at 0x4C27730: pthread_mutex_lock (in /.../valgrind-3.6.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==14160==    by 0x4F00262: fat_mutex_lock (threads.c:1362)
==14160==    by 0x4F004DA: scm_lock_mutex_timed (threads.c:1462)
==14160==    by 0x4F16C09: vm_regular_engine (vm-i-system.c:898)
==14160==    by 0x4E90F4D: scm_call_3 (eval.c:499)
==14160==    by 0x4EFFA4C: really_launch (threads.c:975)
==14160==    by 0x4E87B89: c_body (continuations.c:512)
==14160==    by 0x4F16C21: vm_regular_engine (vm-i-system.c:960)
==14160==    by 0x4E90F92: scm_call_4 (eval.c:506)
==14160==    by 0x4E88372: scm_i_with_continuation_barrier (continuations.c:450)
==14160==    by 0x4E88424: scm_c_with_continuation_barrier (continuations.c:546)
==14160==    by 0x4EFF289: with_guile_and_parent (threads.c:874)
==14160==   followed by a later acquisition of lock at 0x7C25A28
==14160==    at 0x4C27730: pthread_mutex_lock (in /.../valgrind-3.6.0/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==14160==    by 0x4F00352: fat_mutex_lock (threads.c:1374)
==14160==    by 0x4F004DA: scm_lock_mutex_timed (threads.c:1462)
==14160==    by 0x4F16C09: vm_regular_engine (vm-i-system.c:898)
==14160==    by 0x4E90F4D: scm_call_3 (eval.c:499)
==14160==    by 0x4EFFA4C: really_launch (threads.c:975)
==14160==    by 0x4E87B89: c_body (continuations.c:512)
==14160==    by 0x4F16C21: vm_regular_engine (vm-i-system.c:960)
==14160==    by 0x4E90F92: scm_call_4 (eval.c:506)
==14160==    by 0x4E88372: scm_i_with_continuation_barrier (continuations.c:450)
==14160==    by 0x4E88424: scm_c_with_continuation_barrier (continuations.c:546)
==14160==    by 0x4EFF289: with_guile_and_parent (threads.c:874)

* libguile/threads.c (fat_mutex_lock): In the `m->level == 0' case,
  release M's lock before taking T's `admin_mutex'.
2011-06-28 15:25:22 +02:00
Andy Wingo
3b971a59b5 don't spawn the signal delivery thread in a thread-exit handler
* libguile/threads.c (do_thread_exit): Remove needless spawn of the
  signal delivery thread.
2011-06-23 11:31:10 +02:00
Andy Wingo
43adb591f4 allow gc <= 7.1 to stop the signal delivery thread
* configure.ac: Add a check for GC_get_suspend_signal().
* libguile/scmsigs.c (GC_get_suspend_signal): Define a fallback
  implementation if one isn't available.
  (signal_delivery_thread): Unmask the suspend signal so that GC can
  stop the world.  Fixes test-pthread-create on libgc 7.1 and earlier.
  Thanks to Frank Terbeck <ft@bewatermyfriend.org> for the report.
2011-06-23 11:31:03 +02:00
Stefan Israelsson Tampe
0ed9680fba psyntax: enable dotted tail patterns
* module/ice-9/psyntax.scm (syntax-case): enabled the use of a
  general last cdr instead of just '() in matching with both
  a ellipsis (p ...) and a last rest pattern (. q)

* module/ice-9/psyntax-pp.scm: Regenerated.
2011-06-21 22:41:08 +02:00
Andy Wingo
236f901b0e update stack growth direction check
* configure.ac: Pull stack growth direction check from upstream
  autoconf.  See
  http://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00035.html
  for a discussion.
2011-06-20 10:03:35 +02:00
Ludovic Courtès
134fe52a85 Placate GCC in `test-ffi-lib.c'.
This fixes warnings saying "this decimal constant is unsigned only in
ISO C90".

* test-suite/standalone/test-ffi-lib.c (test_ffi_u32_, test_ffi_u32_u8,
  test_ffi_u32_s64, test_ffi_s64_s64, test_ffi_u64_u8,
  test_ffi_u64_s64): Mark constants as unsigned.
2011-06-20 00:45:18 +02:00
Ian Price
5f09e4ba3c Fix hygiene issues with `define-record-type'
* module/rnrs/records/syntactic.scm (define-record-type0, process-fields):
  Preserve hygiene of record clauses.

* test-suite/tests/r6rs-records-syntactic.test ("record hygiene"):
  Add tests.
2011-06-19 21:41:39 +02:00
Ludovic Courtès
d1f2417102 Comment on the Gnulib `clock-gettime' workaround.
* acinclude.m4: Remove `clock_time.m4' serial.

* configure.ac: Add URL of the discussion about `clock-gettime'.
2011-06-19 16:39:22 +02:00
Ludovic Courtès
10c29ebde5 configure: Factorize code checking for `iconveh_' constants; use the cache.
* configure.ac: Remove code that determines the values of the `iconveh_'
  constants.  Use `GUILE_UNISTRING_ICONVEH_VALUES'. instead.

* acinclude.m4 (GUILE_UNISTRING_CONSTANT,
  GUILE_UNISTRING_ICONVEH_VALUES): New macros.
2011-06-19 16:30:56 +02:00
Andy Wingo
78f0ef20a7 Merge remote-tracking branch 'local-2.0/stable-2.0'
Conflicts:
	module/ice-9/psyntax-pp.scm
	module/language/tree-il/compile-glil.scm
2011-06-18 01:07:20 +02:00
Andy Wingo
25711fa4ca fix tree-il->scheme bug for seq
* module/language/tree-il.scm (tree-il->scheme): Fix bug for `seq'.

* module/ice-9/psyntax-pp.scm: Regenerate correctly.
2011-06-18 00:38:52 +02:00
Andy Wingo
c245d16a5b current-language really defaults to Scheme.
* module/system/base/language.scm (current-language): Default to 'scheme
  here, rather than relying on *current-language* always being bound.

Thanks to 亚光唐 <texnician@gmail.com> for the report.
2011-06-17 19:57:24 +02:00
Andy Wingo
b88fef5519 fix invalid transformation of (values x) -> x, (+ x) -> x, etc
* module/language/tree-il/primitives.scm (+, *, cons*): In the case of
  just one argument (the identity case), expand to (values x) instead of
  just x.  Fixes values truncation in that case.
  (values): Likewise remove (values x) -> x translation, as the compiler
  will do it for us, and this fixes (values (values 1 2)).

* module/language/tree-il/compile-glil.scm (flatten-lambda-case): Handle
  `values' in a push context here.

* test-suite/tests/tree-il.test ("values"): Add some tests.
2011-06-17 19:42:55 +02:00
Andy Wingo
f86f748db2 add -Wformat to %auto-compilation-options
* module/ice-9/boot-9.scm (%auto-compilation-options): Add -Wformat to
  the default warning set.
2011-06-17 19:16:16 +02:00
Andy Wingo
669ea4ebff better messages on failed autocompilation
* libguile/load.c (auto_compile_catch_handler):
* module/ice-9/boot-9.scm (load-in-vicinity): Nicer messages when
  autocompilation fails.
2011-06-17 18:08:06 +02:00
Andy Wingo
0083cb5ec4 fix self tail recursion to different case-lambda clauses
http://savannah.gnu.org/bugs/?33362

* module/language/tree-il/compile-glil.scm (flatten-lambda-case): Rename
  from flatten, as it really just takes a particular case.  Instead of
  iteratively compiling lambda cases through `comp', tail-call through
  flatten-lambda-case.  This allows code to see which case it's being
  compiled in.  Take advantage of that to limit the self-tail-call
  optimization to self-calls to the same case -- otherwise we might be
  jumping to a label without having reserved the right number of
  locals.
  (flatten-lambda): Adapt the caller.

* test-suite/tests/compiler.test ("case-lambda"): Add a test.
2011-06-17 17:08:06 +02:00
Andy Wingo
ad0fedbf82 fix AC_LANG_SOURCE warnings
* configure.ac: Fix annoying AC_LANG_SOURCE warnings.
2011-06-17 11:37:11 +02:00
Andy Wingo
074f39c7bc check for clock_getcpuclockid in gl_CLOCK_TIME
* acinclude.m4 (gl_CLOCK_TIME): It could be that clock_gettime is in
  libc but clock_getcpuclockid is not, so check for that explicitly.
2011-06-17 11:31:12 +02:00
Andreas Rottmann
933c6eb795 Silence warnings for variables created by `generate-temporaries'
* module/ice-9/psyntax.scm (generate-temporaries): Give temporaries the
  current module, so that they may be bound at the top level.

* module/ice-9/psyntax-pp.scm: Regenerate.
2011-06-17 10:43:24 +02:00
Andy Wingo
95643853d7 remove win32-dirent.[ch]
* libguile/win32-dirent.c:
* libguile/win32-dirent.h: Remove these files.  MinGW has opendir and
  readdir support, I hear.

* configure.ac:
* libguile/filesys.c:
* libguile/Makefile.am: Adapt.
2011-06-17 00:20:56 +02:00
Jan Nieuwenhuizen
284019a2a5 mingw: use $APPDATA as a possible root for cachedir.
* libguile/load.c (scm_init_load_path) [MINGW32]: Fall back to using
$LOCALAPPDATA or $APPDATA if $XDG_CACHE_HOME and $HOME aren't set.
2011-06-17 00:01:39 +02:00
Andy Wingo
a67f2fce54 add `rename' gnulib module
This should fix `rename' on mingw32.
2011-06-16 23:43:44 +02:00
Mark H Weaver
7505c6e024 Fix several POSIX functions to use the locale encoding
* libguile/strings.c (scm_i_allocate_string_pointers): Encode strings
  using the current locale.  Previously, Latin-1 was used.  Indirectly,
  this affects the encoding of strings in `system*', `execl', `execlp',
  `execle', `environ', and `dynamic-args-call'.

  (scm_makfromstrs): In header comment, clarify that the C strings are
  interpreted according to the current locale encoding.

* NEWS: Add NEWS entry.
2011-06-16 15:07:30 -04:00
Andy Wingo
99cc1092a8 Merge remote-tracking branch 'local-2.0/stable-2.0' 2011-06-16 20:01:56 +02:00
Andy Wingo
32f94bf258 O_CLOEXEC usage
* libguile/objcodes.c (scm_load_objcode):
* libguile/scmsigs.c (start_signal_delivery_thread):
* libguile/threads.c (guilify_self_1): Use O_CLOEXEC.
2011-06-16 19:47:26 +02:00
Andy Wingo
3d458a81c6 gnulib update
Added pipe2 and open modules, to get O_CLOEXEC.

* libguile/Makefile.am (guile_filter_doc_snarfage$(EXEEXT)): Add gnulib
  here, in the native build case, for rpl_fflush if needed.

foo
2011-06-16 19:47:25 +02:00
Andy Wingo
0b77014f0c fix initial values of reallocated fluids
* libguile/threads.h:
* libguile/threads.c (scm_i_reset_fluid): New internal function, resets
  the binding of a fluid for all threads.  Needed for fluid GC.

* libguile/fluids.c (new_fluid): Call scm_i_reset_fluid here.
2011-06-16 19:39:58 +02:00