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

5993 commits

Author SHA1 Message Date
Michael Gran
b8fc11d287 Missing free in nl-langinfo
This is a regression.

* libguile/i18n.c (scm_nl_langinfo): free c_result
2009-09-25 07:47:56 -07:00
Michael Gran
52642040e2 Fix encoding of strings returned by nl-langinfo
Strings returned by nl-langinfo were always being encoded using the
global setlocale and not the scm_t_locale passed to the function.

* libguile/i18n.c (scm_nl_langinfo): fix encoding of strings
2009-09-25 07:27:11 -07:00
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
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
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
b77afe82a4 Typo fixes 2009-09-21 23:22:32 +01: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
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
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
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
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
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
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
Ludovic Courtès
45f15cac1f Remove scm_enter_guile ()' and scm_leave_guile ()'.
* libguile/threads.c (scm_t_guile_ticket): Remove type.
  (resume, scm_enter_guile, suspend, scm_leave_guile): Remove.
  (scm_i_init_thread_for_guile): Set `t->top' to NULL, which has the
  same effect as calling `scm_enter_guile ()'.
  (scm_leave_guile_cleanup, scm_i_with_guile_and_parent): Remove
  `scm_leave_guile ()' call.
2009-09-11 00:05:49 +02:00
Ludovic Courtès
4cf72f0ba6 Remove unnecessary uses of `scm_{leave,enter}_guile ()'.
* libguile/threads.c (scm_pthread_cond_wait,
  scm_pthread_cond_timedwait): Remove `scm_{leave,enter}_guile ()'
  calls.
2009-09-10 00:21:08 +02:00
Ludovic Courtès
6dc797eee9 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	libguile/gc_os_dep.c
2009-09-09 22:39:49 +02:00
Ludovic Courtès
d66b74dce7 Avoid unneeded `scm_dynwind_free ()'.
* libguile/array-map.c (indices_gc_hint): New variable.
  (scm_ramapc, scm_array_index_map_x): Avoid `scm_dynwind_free ()' using
  `scm_gc_malloc_pointerless ()'.
2009-09-09 19:27:42 +02:00
Michael Gran
f7f4d0477e Make scm_i_from_stringn into API for use with libguilereadline
* libguile/strings.c (scm_i_from_stringn): renamed to scm_from_stringn.
  All callers changed.

* libguile/strings.h: change declaration of scm_i_from_stringn to
  scm_from_stringn

* libguile/strports.c (scm_strport_to_string): scm_i_from_stringn ->
  scm_from_stringn

* guile-readline/readline.c (internal_readline): scm_i_from_stringn ->
  scm_from_stringn
2009-09-09 08:07:53 -07:00
Michael Gran
7519234547 Fix broken interaction between readline and Unicode
This requires separate small fixes.

Readline has internal logic to deal with multi-byte characters, so
it wants bytes, not characters.

scm_c_read gets called by the vm when readline is activated, and it was
truncating multi-byte characters because soft ports didn't have the
UCS-4 capability.

Soft ports need the capability to read UCS-4 characters.  Since soft ports
may have a single byte buffer, full characters need to be stored into the
pushback buffer.

This broke the optimizations in scm_c_read for using an alternate buffer
for single-byte-buffered ports, because the opimization wasn't expecting
anything in the pushback buffer.

* libguile/vports.c (sf_fill_input): store complete chars, not single bytes

* libguile/ports.c (scm_c_read): don't use optimized path for non Latin-1.
  Add debug prints.

* libguile/string.h: make scm_i_from_stringn and scm_i_string_ref public
  so that readline can use them

* guile-readline/readline.c: read bytes, not complete chars, from the
  input port.  Convert output to the output port's locale
2009-09-07 19:12:34 -07:00
Michael Gran
060e305adc Avoid string buffer overrun in scm_scan_for_encoding
* libguile/read.c (scm_scan_for_encoding): possible overrun if
  coding declaration is at end of file
2009-09-05 11:10:07 -07:00
Michael Gran
18d8fcd43c Remove locale u8vector functions
Locale u8vector functions deemed harmful.

* libguile/strports.c (scm_strport_to_locale_u8vector)
  (scm_call_with_output_locale_u8vector, scm_open_input_locale_u8vector)
  (scm_get_output_locale_u8vector): removed

* libguile/strports.h: removed declarations for
  scm_strport_to_locale_u8vector,
  scm_call_with_output_u8vector,
  scm_input_locale_u8vector,
  scm_get_output_locale_u8vector

* test-suite/tests/encoding-iso88591.test: display tests removed

* test-suite/tests/encoding-iso88597.test: display tests removed
2009-09-04 07:34:35 -07:00
Michael Gran
25ebc0340d Initialize string ports with UTF-8 encoding
String ports should be able to accept any string characters, regardless
of the current locale.  Setting it to UTF-8 achieves that.

* libguile/strports.c (scm_i_mkstrport): set port's locale to UTF-8
  (scm_mkstrport): convert input string to UTF-8
2009-09-04 07:30:13 -07:00
Michael Gran
3d03f9395e write-char should handle UCS-4 characters
* libguile/print.c (scm_write_char): call UCS-4 printing routine, instead
  of 8-bit primitive
2009-09-04 07:27:14 -07:00
Ken Raeburn
5f5e7a2cd6 Make test-case compilation with -DSCM_DEBUG=1 work.
* gc.h (scm_i_expensive_validation_check): Declare SCM_API.
2009-09-03 16:59:11 -04:00
Michael Gran
bb15a36c25 Update docs and docstrings for Unicode characters
* doc/ref/api-data.texi: more info about characters and codepoints

* libguile/chars.c: replace 'code point' with 'Unicode code point' in
  docstrings
2009-09-03 08:48:23 -07:00
Michael Gran
ba8477ecce Add char-set debugging function
* libguile/srfi-14.c (scm_sys_char_set_dump): new function

* libguile/srfi-14.h: declaration of scm_sys_char_set_dump
2009-09-03 08:29:45 -07:00
Michael Gran
719bb8cd5d Distinguish between all codepoints and designated codepoints in char-sets
* libguile/unidata_to_charset.pl (designated): renamed from full

* libguile/srfi-14.c (scm_char_set_designated): new char-set

* libguile/srfi-14.i.c (cs_designated): renamed from cs_full
2009-09-03 08:23:24 -07:00
Michael Gran
0dcd7e6153 Modify read and print of combining characters
Since combining characters, such as accents, modify the appearance of the
previous letter, it looks awkward in its character literal form (#\name)
since it modified the backslash.  This instead prints the combining
character on a small circle.

* libguile/chars.h (SCM_CODEPOINT_DOTTED_CIRCLE): new #define

* libguile/print.c (iprint1): print combining characters on dotted circles

* libguile/read.c (scm_read_character): parse the combination of combining
  characters and dotted circles
2009-09-03 07:47:26 -07:00
Michael Gran
aa2cba9c88 Remove always-true range checks in scm_i_ucs_range_to_char_set
* libguile/srfi-14.c (scm_i_ucs_range_to_char_set): limits are always
  non-negative due to the type of the variable
2009-09-02 06:45:05 -07:00
Michael Gran
08ed805879 Unreachable code in charset set operator
* libguile/srfi-14.c (scm_i_charset_set): remove unreachable code
  in scm_i_charset_set
2009-09-02 06:28:55 -07:00
Michael Gran
aff31b0f99 Optimize charset union operator
* libguile/srfi-14.c (charsets_union): call scm_i_charset_set_range
  instead of setting characters one-by-one.
2009-09-02 06:28:47 -07:00
Michael Gran
f4cdfe6140 The charset complement operator should not include surrogates
* libguile/srfi-14.c (charsets_complement): skip over surrogates
  when making a charset complement
2009-09-02 06:28:42 -07:00