1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-06 23:50:18 +02:00
Commit graph

12971 commits

Author SHA1 Message Date
Michael Gran
aafb5062b8 Language-specific case-conversion doesn't honor locale
Libunistring uses a function uc_locale_language to extract the
current language from the locale information.  It does this by calling
setlocale.  This makes incompatible with Guile functions that use the
locale_t thread-specific locale API, because the values returned by the
call to setlocale ignore the locale set by uselocale.

As a workaround, this patch extracts the language from the locale_t
structure's __names field.

A more complete solution is needed.  Perhaps that solution would test
that the __names field exists in the configure step and revert to
!USE_GNU_LOCALE_API in that case.

* libguile/i18n.c (locale_language): new function that performs the
  same job as uc_locale_language but is compatible with uselocale
  (u32_locale_casecoll, u32_locale_tocase): replace uc_locale_language
  with locale_language
2009-09-24 08:15:31 -07:00
Michael Gran
bcccf04158 Tests for locale-specific case conversion
* test-suite/tests/i18n.test: add tests for case conversion of Turkish
  letters 'i' to verify that the language is being honored.
2009-09-24 08:15:25 -07:00
Michael Gran
2c48e4d5b7 Try to adjust i18n for strict aliasing
* libguile/i18n.c (u32_locale_tocase, scm_char_locale_downcase)
  (scm_char_locale_upcase, scm_string_locale_downcase)
  (scm_string_locale_upcase): use the scm_t_uint32 type for buffers
  that are used primarily for libunistring and not for Guile strings.
2009-09-24 08:15:20 -07:00
Ludovic Courtès
76e8a7588c Move "-z relro" out of $LDFLAGS so it's not in `guile-2.0.pc'.
* acinclude.m4 (GUILE_GNU_LD_RELRO): Substitute `GNU_LD_FLAGS'.

* libguile/Makefile.am (libguile_la_LDFLAGS): Add $(GNU_LD_FLAGS).

* srfi/Makefile.am (AM_LDFLAGS): New.
2009-09-24 00:06:54 +02:00
Ludovic Courtès
297273e422 Have guile-config' close over pkg-config' and $(pkgconfigdir).
* meta/Makefile.am (guile-config): New target.
  (EXTRA_DIST): Add `guile-config.in'.

* meta/guile-config.in: New, formerly `guile-config'.  Use the right
  installed `guile', with the right $PKG_CONFIG_PATH.  Disable
  auto-compilation.
  (%pkg-config-program): New variable.
  (pkg-config): Use it.
2009-09-24 00:06:54 +02:00
Ludovic Courtès
d773ba231c Partially revert e5f5113c21.
The intent is to maintain the readability of `pmatch' invocations.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't use wildcards in `pmatch' invocations, even when the matched
  elements are unused.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly.scm (byte-length): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.
2009-09-24 00:06:54 +02:00
Ludovic Courtès
ec370c6ffb Reinstate backward-compatible `scm_array_p ()'.
* libguile/generalized-arrays.c (scm_array_p_2): New, formerly
  `scm_array_p ()'.
  (scm_array_p): Add second argument, for compatibility with 1.8 and
  earlier and to match what the doc says and what `SCM_VALIDATE_ARRAY'
  expects.

* libguile/generalized-arrays.h (scm_array_p_2): New.
  (scm_array_p): Adjust.
2009-09-24 00:06:54 +02:00
Michael Gran
27f3413eb8 Modify char and string locale upcase and downcase for Unicode
* libguile/i18n.c (u32_locale_tocase): new helper function
  (scm_char_locale_downcase, scm_char_locale_upcase): add capability
  for UCS-4 characters.
  (scm_string_locale_downcase, scm_string_locale_upcase): modify for
  the new scheme strings.
2009-09-22 21:08:29 -07:00
Neil Jerram
871d85438d Manual link from Guile Initialization' to Initialization'
Thanks to Dale Smith for suggesting this.

* doc/ref/libguile-linking.texi: Add ref to full doc of Guile
  initialisation functions.
2009-09-22 01:03:43 +01:00
Neil Jerram
5904704335 Changes so that benchmark-guile runs successfully
* benchmark-suite/benchmarks/bytevectors.bm: Add "coding: latin1"
  comment where Guile will find it.

* benchmark-suite/benchmarks/chars.bm: Ditto.

* benchmark-suite/benchmarks/srfi-13.bm: Ditto.

* benchmark-suite/benchmarks/read.bm ("read"): Divide numbers of
  iterations by 10, so that the benchmarks complete within a few
  minutes.

* benchmark-suite/lib.scm (benchmark): Use `run-benchmark' in macro
  definition, not `,run-benchmark'.

* benchmark-suite/benchmarks/0-reference.bm,
  benchmark-suite/benchmarks/continuations.bm,
  benchmark-suite/benchmarks/if.bm,
  benchmark-suite/benchmarks/logand.bm: Add define-module.

* benchmark-suite/results/neil-arudy: New file, containing benchmark
  results from my computer.
2009-09-22 00:39:57 +01:00
Neil Jerram
e8e655e21b GDS usability: operation without a mouse
Derek Peschel provided this patch and described it as follows.

"Most of the time I use Terminal in OS X, rather than xterm.  I also don't
bother with the GUI versions of Emacs.  So unfortunately I have no mouse
support in Emacs.  Also the system I'm testing Guile on thinks my terminal
doesn't support color and I haven't fixed it yet.  The attached patch makes
GDS more usable for me.

"With no mouse, the "[click here to show error stack]" design is very
inconvenient.  You added a C-M (return) binding at some point.  I copied
that, but I also changed the message to show it.  And I made the return
work when the cursor is after the right bracket."

* emacs/gds-scheme.el (gds-display-results): Make "click here" message
  more helpful for people without mice.  Also extend text properties
  so that a RET key press works at the end of that line.
2009-09-22 00:39:57 +01:00
Neil Jerram
b77afe82a4 Typo fixes 2009-09-21 23:22:32 +01:00
Neil Jerram
4330956d39 Fix GDB in Emacs incantation 2009-09-21 23:22:13 +01:00
Michael Gran
5fc424379f Tests for record types
* test-suite/tests/records.test: new tests
2009-09-20 20:59:50 -07:00
Michael Gran
fee95176df More tests for strings
* test-suite/tests/vectors.test: test make-vector and interactions between
  strings and vectors

* test-suite/tests/strings.test: test string-null?, string? and backslash
  escapes

* test-suite/tests/srfi-13.test: test null input strings in string-any and
  string-every
2009-09-20 20:59:44 -07:00
Ludovic Courtès
e5f5113c21 Remove unused variables in system/language.
* module/language/assembly.scm (byte-length): Don't match unused
  record slots.

* module/language/tree-il.scm (tree-il->scheme, post-order!,
  pre-order!): Likewise.

* module/language/tree-il/analyze.scm (analyze-lexicals): Likewise.

* module/language/tree-il/compile-glil.scm (flatten): Likewise.

* module/language/assembly/disassemble.scm (disassemble-load-program):
  Don't match unused list elements.

* module/language/glil/decompile-assembly.scm (decompile-toplevel,
  decompile-load-program): Likewise.

* module/system/xref.scm (program-callee-rev-vars): Likewise.

* module/language/assembly/compile-bytecode.scm
  (write-bytecode)[write-sized-loader]: Remove.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Factorize `pad' variables.

* module/language/ecmascript/base.scm (object->value/string,
  object->value/number)[v]: Remove.

* module/language/ecmascript/tokenize.scm (read-slash)[c0]: Remove.

* module/language/objcode/spec.scm (decompile-value)[nargs]: Remove.

* module/system/repl/command.scm (time)[vms-start, vms-end]: Remove.

* module/system/repl/repl.scm (prompting-meta-read): Use `prompt'.
2009-09-21 00:36:31 +02:00
Ludovic Courtès
a2ca725212 Remove unused variables in ice-9/goops/srfi/scripts.
* module/ice-9/boot-9.scm (scm-style-repl)[-abort]: Remove.

* module/oop/goops.scm (class)[slot-defs]: Remove.
  (compute-slot-accessors)[name]: Remove.
  (compute-get-n-set)[env]: Remove.

* module/oop/goops/active-slot.scm (compute-get-n-set)[env, name]:
  Remove.

* module/oop/goops/dispatch.scm (cache-try-hash!)[max-misses]: Remove.

* module/oop/goops/save.scm (make-mapper)[dims]: Remove.

* module/scripts/autofrisk.scm (>>checks)[prog]: Remove.

* module/srfi/srfi-19.scm (priv:read-directives)[ireaderf, eireader4]:
  Remove.
2009-09-21 00:24:08 +02:00
Ludovic Courtès
f65e2b1ec5 Honor and confine expansion-time side-effects to `current-reader'.
* module/language/scheme/spec.scm (scheme)[#:reader]: Honor the
  compilation environment's `current-reader'.

* module/system/base/compile.scm (*compilation-environment*): New
  fluid.
  (current-compilation-environment): New procedure.
  (make-compilation-module): Provide a fresh `current-reader' fluid.
  (read-and-compile): Set `*compilation-environment*' appropriately.
  (compile): Likewise.

* test-suite/tests/compiler.test (read-and-compile): New.
  ("current-reader"): New test prefix.
2009-09-20 22:29:47 +02:00
Ludovic Courtès
60c6a74095 Fix copyright in `(srfi srfi-4 gnu)'. 2009-09-20 22:29:28 +02:00
Ludovic Courtès
87c595c757 Compile in a fresh module by default.
* module/system/base/compile.scm (make-compilation-module,
  language-default-environment): New procedures.
  (read-and-compile, compile): Have ENV default to
  `(language-default-environment from)'.
  (compile-and-load): Compile in `(current-module)'.

* module/system/repl/common.scm (repl-compile): Explicitly compile in
  the current module so that macro definitions are visible.

* libguile/load.c (kw_env): New variable.
  (do_try_autocompile): Call `compile-file' with `#:env (current-module)'.

* test-suite/tests/compiler.test ("psyntax")["compile uses a fresh module by
  default", "compile-time definitions are isolated"]: New tests.
  ["compile in current module"]: Specify `#:env (current-module)'.
  ["redefinition"]: Adjust.

* test-suite/tests/bytevectors.test (c&e): Explicitly compile in the
  current module so that its imports are visible.
2009-09-20 21:54:41 +02:00
Andy Wingo
f5a51caec1 fix bitvectors after the array handle refactoring
* libguile/uniform.h (scm_array_handle_uniform_element_bit_size): New
  public accessor.

* libguile/uniform.c (scm_array_handle_uniform_element_size): Better
  errors in non-byte-aligned arrays.
  (scm_uniform_vector_element_type, scm_uniform_vector_element_size)
  (scm_c_uniform_vector_ref, scm_c_uniform_vector_set_x):
  (scm_uniform_vector_to_list): Don't require byte-aligned access.

* libguile/bytevectors.c (scm_uniform_array_to_bytevector):
* libguile/arrays.c (scm_from_contiguous_typed_array):  Fix for
  uniform arrays whose element size is not a multiple of the byte size.
2009-09-18 16:27:32 +02:00
Andy Wingo
c5923112fe fix thinko in api-memory.texi 2009-09-18 16:27:32 +02:00
Ludovic Courtès
c543e41eb4 i18n: Remove non-local exists from `u32_locale_casecoll ()'.
* libguile/i18n.c (u32_locale_casecoll): Add RESULT argument.  Return
  zero or ERRNO.
  (compare_u32_strings_ci): Adjust accordingly.
2009-09-18 12:58:54 +02:00
Ludovic Courtès
cdf52ff020 i18n: Always use locale-dependent string collation.
* libguile/i18n.c (compare_u32_strings, compare_u32_strings_ci): Always
  use locale-dependent string collation.

* test-suite/tests/i18n.test: Recoded in UTF-8.
  (%french-utf8-locale-name): New.
  (under-locale-or-unresolved): New.  Don't catch errors on GNU systems.
  (under-french-locale-or-unresolved): Use it.
  (under-french-utf8-locale-or-unresolved): New.
  ("text collation (French)")["string-locale-ci=? (2 args, wide
  strings)", "string-locale-ci=? (3 args, wide strings)",
  "string-locale-ci<>? (wide strings)", "string-locale-ci<>? (wide and
  narrow strings)", "char-locale-ci<>? (wide)"]: New tests.
2009-09-18 12:55:49 +02:00
Ludovic Courtès
df047aa2b1 i18n: Avoid needless heap allocation.
* libguile/i18n.c (SCM_STRING_TO_U32_BUF): Allocate buffers on the stack
  rather on the heap.
  (SCM_U32_BUF_FREE): Remove.  Callers updated.
2009-09-18 12:21:22 +02:00
Ludovic Courtès
12f0c3e547 i18n: Simplify `RUN_IN_LOCALE_SECTION' (GNU version).
* libguile/i18n.c (RUN_IN_LOCALE_SECTION)[USE_GNU_LOCALE_API]: Remove
  extraneous uselocale(3) call.
2009-09-18 12:15:26 +02:00
Ludovic Courtès
d7a2207326 Add the `%host-type' global variable.
* configure.ac: Define `HOST_TYPE'.

* libguile/load.c (sys_host_type): New variable.

* doc/ref/api-options.texi (Build Config): Document `%host-type'.
2009-09-18 11:40:03 +02:00
Michael Gran
5b87844575 Adapt i18n string and char comparison funcs for Unicode
* libguile/i18n.c (RUN_IN_LOCALE_SECTION) [USE_GNU_LOCALE_API]: new
  macro for this define.  Should work the same as the !USE_GNU_LOCAL_API
  version
  (SCM_STRING_TO_U32_BUF, SCM_U32_BUF_FREE): helper macros
  (compare_u32_strings, compare_u32_strings_ci): new functions that
  compare scheme strings in the presence of the locale
  (u32_locale_casecoll): new helper function for compare_u32_strings_ci
  (compare_strings, compare_strings_ci): removed and replaced by
  compare_u32_strings and compare_u32_strings_ci
  (scm_string_locale_lt, scm_string_locale_gt, scm_string_locale_ci_lt)
  (scm_string_locale_ci_gt, scm_string_locale_ci_eq): modified to
  use new compare_u32_strings and compare_u32_strings_ci comparison
  functions
  (scm_char_locale_lt, scm_char_locale_gt, scm_char_locale_ci_lt)
  (scm_char_locale_ci_gt, scm_char_locale_ci_eq): modified to use
  new compare_u32_strings and compare_u32_strings_ci comparison
  functions
2009-09-17 08:22:11 -07:00
Neil Jerram
f564f4784f Remove deprecation warnings from the build
* module/srfi/srfi-35.scm: Remove explicit use of (ice-9 syncase).

* test-suite/tests/r5rs_pitfall.test: Same again.

* test-suite/tests/syncase.test: Remove "(ice-9 syncase) loads" test;
  syncase is always loaded now.
2009-09-17 01:18:14 +01:00
Neil Jerram
93683f9bb1 Convenience for running GDB on Guile in Emacs
* meta/gdb-uninstalled-guile.in: Add (in a comment) an elisp form that
  can be evaluated to run GDB on Guile in Emacs.
2009-09-17 00:19:47 +01:00
Neil Jerram
ba20f78a6c Fix omission of VM frames from backtrace
From the time when a #<program> was a SMOB, really_make_boot_program
in vm.c was still using SCM_SET_SMOB_FLAGS to set the
SCM_F_PROGRAM_IS_BOOT flag - which meant that it was setting flag
1<<32 :-) which obviously was then missed by the SCM_PROGRAM_IS_BOOT
calls in stacks.c.

* libguile/programs.h (SCM_F_PROGRAM_IS_BOOT): Use a less significant
  bit for this flag, now that programs use a tc7 type.

* libguile/vm.c (really_make_boot_program): Don't use
  SCM_SET_SMOB_FLAGS, now that programs aren't SMOBs.
2009-09-17 00:19:47 +01:00
Neil Jerram
931c82f5b0 Fix incorrect stack count warnings
* libguile/stacks.c (stack_depth): Decrement depth count for a
  macro-expansion frame.  (Missing this decrement will cause a "stack
  count incorrect" warning but is actually benign, as it only means
  that scm_make_stack allocates a bit more space for the stack than it
  really needs.)

  (read_frames): Increment count of remaining unused frames, when
  cutting out a macro transformer application frame.  (Missing this
  increment could cause the "stack count incorrect" warning, and could
  make read_frames think it's filled up all the available stack frames
  when there's actually still one frame unused; this wasn't benign,
  because it could cause information to be missing from a stack
  trace.)
2009-09-17 00:19:47 +01:00
Neil Jerram
a29c00447b Remove unhittable else branch for nonexistent type of debug frame
* libguile/stacks.c (stack_depth): Remove unhittable else branch
  apparently catering to a kind of frame that isn't an eval, apply or
  void frame - in fact there are no other kinds of frames.
2009-09-17 00:19:47 +01:00
Andy Wingo
eb350124a8 add the libdir to the ltdl lib search path
* libguile/Makefile.am (libpath.h): Fix pkgdatadir, pkglibdir, and
  pkgincludedir entries. Add a new define, SCM_LIB_DIR.

* libguile/dynl.c (sysdep_dynl_init): Add the libdir to the libltdl
  search path. Should fix
  http://thread.gmane.org/gmane.lisp.guile.bugs/4289/focus=4296 -- that
  is, it should allow guile to be invoked from whereever it is
  installed, without munging LTDL_LIBRARY_PATH or the like variables.

  There is a trick though -- during the build, we don't want to be
  looking in the $libdir for loadable modules. So as with
  GUILE_SYSTEM_PATH, we have GUILE_SYSTEM_LTDL_PATH.

* meta/uninstalled-env.in: Set GUILE_SYSTEM_LTDL_PATH to "" when
  building.
2009-09-16 18:10:19 +02:00
Ludovic Courtès
db723980a4 Bump version number for 1.9.3.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
2009-09-15 23:54:09 +02:00
Ludovic Courtès
dddacb233b Use fixnums for int32 when the native word size of greater than 4 bytes.
This should also fix "condition is always true" warnings.

* libguile/vm-i-scheme.c (bv_u32_native_ref, bv_s32_native_ref,
  bv_u32_native_set, bv_s32_native_set): Conditionalize use of
  `BV_FIXABLE_INT_REF' vs. `BV_INT_REF' based on `SIZEOF_VOID_P'.
2009-09-15 23:48:01 +02:00
Ludovic Courtès
238f9a4f72 Keep the weak pair API internal.
* libguile/weaks.h (scm_weak_car_pair, scm_weak_cdr_pair,
  scm_doubly_weak_pair): Make them internal.
2009-09-15 23:12:39 +02:00
Ludovic Courtès
a0faf7ddf9 Fix bug #27450 ("Fat mutexes not GC'd until their owner dies").
* libguile/threads.c (do_thread_exit): Deal with `t->mutexes' being a
  weak list.
  (fat_mutex_lock): Use weak-car pairs when building up `t->mutexes'.

* test-suite/tests/threads.test ("mutex-ownership")["mutex with owner
  not retained (bug #27450)"]: New test.
2009-09-15 23:05:24 +02:00
Ludovic Courtès
aef9e3bd01 Fix the (currently unused) weak pair accessors.
* libguile/weaks.h (SCM_WEAK_PAIR_WORD): Fixed; changed to return
  `SCM_UNDEFINED' when the word has been nullified.
2009-09-15 22:33:03 +02:00
Ludovic Courtès
0a9a6d1422 "Document" the `set-module-eval-closure!' weak hash table glitch.
* module/ice-9/boot-9.scm (set-module-eval-closure!): Add link to an
  explanation.

* test-suite/tests/gc.test ("gc")["Unused modules are removed"]:
  Increase the `cleanup' loop.
2009-09-15 22:31:45 +02:00
Ludovic Courtès
4c0fc00702 Nitpick in `srfi-14.c'.
* libguile/srfi-14.c (scm_i_ucs_range_to_char_set): Fix warning about
  the position of BASE_CS.
2009-09-15 00:40:44 +02:00
Ludovic Courtès
8071c4907f Make the precise stack mark procedure more robust.
* libguile/vm.c (vm_stack_mark): Return if VM is NULL.
2009-09-15 00:40:00 +02:00
Ludovic Courtès
c058db8a5d Use GC-robust queues/lists in `threads.c'.
* libguile/threads.c (remqueue, dequeue, on_thread_exit): Initialize the
  "next" link of the item returned/removed.
2009-09-15 00:39:04 +02:00
Ludovic Courtès
706846f667 Remove explicit thread/condvar/mutex finalization.
* libguile/threads.c (fat_mutex_free): Remove explicit `scm_gc_free ()'
  call.
  (fat_cond_free, thread_free): Remove.
  (scm_threads_prehistory): Adjust accordingly.
2009-09-15 00:00:18 +02:00
Ludovic Courtès
d3a6162490 Update `NEWS'. 2009-09-14 00:42:25 +02:00
Ludovic Courtès
756e8a3acf Merge libguile-i18n' into libguile'.
* GUILE-VERSION (LIBGUILE_I18N_MAJOR, LIBGUILE_I18N_INTERFACE_CURRENT,
  LIBGUILE_I18N_INTERFACE_REVISION, LIBGUILE_I18N_INTERFACE_AGE,
  LIBGUILE_I18N_INTERFACE): Remove.

* doc/ref/api-i18n.texi (i18n Introduction): Don't mention
  `libguile-i18n'.

* libguile.h: Include "libguile/i18n.h".

* libguile/Makefile.am (lib_LTLIBRARIES): Remove `libguile-i18n-v*'.
  (libguile_la_SOURCES): Add `i18n.c'.
  (libguile_i18n_v_*_SOURCES, libguile_i18n_v_*_CFLAGS,
  libguile_i18n_v_*_LIBADD, libguile_i18n_v_*_LDFLAGS): Remove.

* libguile/i18n.c (scm_bootstrap_i18n): New function.

* libguile/i18n.h (scm_nl_langinfo, scm_init_i18n): Made internal.
  (scm_bootstrap_i18n): New declaration.

* libguile/init.c (scm_i_init_guile): Invoke `scm_bootstrap_i18n ()'.

* module/ice-9/i18n.scm: Load from `libguile' instead of
  `libguile-i18n-v-0'.
2009-09-14 00:42:25 +02:00
Ludovic Courtès
a5229ee822 Switch the `encoding*.test' files to LGPLv3+.
* test-suite/tests/encoding-escapes.test,
  test-suite/tests/encoding-iso88591.test,
  test-suite/tests/encoding-iso88597.test,
  test-suite/tests/encoding-utf8.test: Switch to LGPLv3+ for the sake of
  consistency.
2009-09-14 00:42:25 +02:00
Ludovic Courtès
d3d6614791 Update `scm_without_guile ()' documentation.
* doc/ref/api-scheduling.texi (Blocking): Mention that
  `scm_without_guile ()' & co. aren't needed any longer.
2009-09-14 00:42:25 +02:00
Ludovic Courtès
1c44468d77 Rename "boehm-gc.h" to "bdw-gc.h"; add to the distribution.
* libguile/Makefile.am (modinclude_HEADERS): Add `bdw-gc.h'.

* libguile/bdw-gc.h: Rename from "boehm-gc.h"; users updated.  Update to
  LGPLv3+.
2009-09-14 00:42:25 +02:00
Ludovic Courtès
b8e18ac25d Remove unused IA64 macro.
* libguile/threads.c (SCM_MARK_BACKING_STORE): Remove.
2009-09-14 00:42:25 +02:00