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

8347 commits

Author SHA1 Message Date
Andy Wingo
b521d265b1 Fix bugs reading long tokens
The commit "don't take string-write mutex in read.c:read_token", from
8b0d7b9d94, had a number of bugs. Not sure
how I missed these before.

* libguile/read.c (read_token): Remove a couple of bogus
  scm_i_string_stop_writing () calls, now that we no longer take the
  string-write mutex.
  (read_complete_token): read_token really needs a fresh buffer, which
  was not the case when we are reading long tokens and thus hit the
  overflow case. Fixes fractions.test.
2009-12-28 17:35:48 +01:00
Michael Gran
b349875146 Incorrect indexing into character name list
When converting a character into a character name, an incorrect
character name could theoretically have been returned.

* libguile/chars.c (scm_i_charname): used wrong index into
  scm_alt_charnames
2009-12-27 18:44:29 -08:00
Neil Jerram
3e5aed1c3b Add support for getsid
* configure.ac: Check availability of getsid() C library call.

* libguile/posix.c (scm_getsid): New primitive.

* libguile/posix.h: Declaration for new primitive.
2009-12-27 16:59:54 +00:00
Julian Graham
0ca3a342d1 Support for Unicode general categories
* libguile/chars.c, libguile/chars.h (scm_char_general_category): New function.
* test-suite/tests/chars.test: Unit tests for `char-general-category'.
* doc/ref/api-data.texi (Characters): Documentation for
  `char-general-category'.
2009-12-24 11:55:47 -05:00
Andy Wingo
f6a8e79197 keyword arg errors throw to 'keyword-argument-error
* libguile/vm-engine.c (VM_NAME): Keyword arg errors are now thrown to
  'keyword-argument-error.

* libguile/vm.c: Define sym_keyword_argument_error, and statically
  allocate some other symbols.

* module/ice-9/optargs.scm (parse-lambda-case): Throw to
  'keyword-argument-error in kwarg error cases.

* module/ice-9/psyntax.scm (build-lambda-case): Remove a couple
  workarounds for the old memoizer. Throw to 'wrong-number-of-args if
  the lambda-case fails to parse.

* module/ice-9/psyntax-pp.scm: Regenerated.

* test-suite/tests/optargs.test: Update expected exceptions.
2009-12-23 22:59:12 +01:00
Julian Graham
820f33aaed Improved support for Unicode title case in Guile's string and character APIs.
* doc/ref/api-data.texi (Characters): Documentation for `char-titlecase'.
* doc/ref/api-i18n.texi (Character Case Mapping): Documentation for
  `char-locale-titlecase' and `string-locale-titlecase'.

* libguile/chars.c, libguile/chars.h (scm_char_titlecase, scm_c_titlecase): New
  functions.

* libguile/i18n.c, libguile/i18n.h (chr_to_case, scm_char_locale_titlecase,
  str_to_case, scm_string_locale_titlecase): New functions.
* libguile/i18n.c (scm_char_locale_downcase, scm_char_locale_upcase,
  scm_string_locale_downcase, scm_string_locale_upcase): Refactor to share code
  via chr_to_case and str_to_case, as appropriate.
* module/ice-9/i18n.scm (char-locale-title-case, string-locale-titlecase): New
  functions.

* libguile/srfi-13.c (string_titlecase_x): Use uc_totitle instead of uc_toupper.

* test-suite/tests/chars.test: Tests for `char-titlecase'.
* test-suite/tests/i18n.test: Tests for `char-locale-titlecase' and
  `string-locale-titlecase'.
* test-suite/tests/srfi-13.test: Tests for `string-titlecase'.
2009-12-22 00:19:56 -05:00
Andy Wingo
8b0d7b9d94 don't take string-write mutex in read.c:read_token
* libguile/read.c (read_token): Don't take the string-write mutex when
  reading a token into a buffer, because it's assumed that the buffer is
  fresh (not seen by other threads), and a soft port can call a
  procedure that needs the string-write mutex.
2009-12-21 22:12:31 +01:00
Andy Wingo
7656f19446 rework vm tracing
* libguile/vm-engine.c (VM_NAME): Engines take the VM itself (not the
  vp), so they can pass the VM to hooks. No more hook args, we dispatch
  without them.

* libguile/vm-engine.h (RUN_HOOK): Dispatch the hook if the trace level
  is positive (instead of if the hook is there). Don't cache registers
  on return from the dispatch.

* libguile/vm.h:
* libguile/vm.c (vm_dispatch_hook): Don't bother with a dynwind; instead
  decrement the trace level when going into a hook, and if we have a
  nonlocal exit, the trace level never gets incremented again. Worse is
  better.
  (make_vm, scm_vm_trace_level, scm_set_vm_trace_level_x): New concept,
  trace level. If positive, we run the hooks, otherwise we don't. Should
  work. Removed scm_vm_trace_frame, I don't think that was the right way
  to do it.

* module/system/vm/vm.scm: Replace vm-trace-frame with vm-trace-level
  and set-vm-trace-level!; the hooks actually get the frame as an
  argument now.
2009-12-21 21:57:20 +01:00
Andy Wingo
86fd6dff2a add scm_call_n, scm_c_run_hookn
* libguile/eval.h:
* libguile/eval.c (scm_call_n): New function, applies a function to an
  array of args.

* libguile/hooks.h:
* libguile/hooks.c (scm_c_run_hookn): New function, runs a hook with an
  array of args.
2009-12-21 21:06:27 +01:00
Andy Wingo
c66fe8a9a0 version.h depends on config.status
* libguile/Makefile.am (version.h): Depend on config.status, so if we
  reconfigure we make sure to regenerate the version.
2009-12-20 23:26:42 +01:00
Andy Wingo
7d94e4af98 handle interrupts in mv-call, return/values
* libguile/vm-i-system.c (mv-call, return/values): Interrupt before
  entering and leaving MV frames as well as normal frames.
2009-12-20 23:24:39 +01:00
Andy Wingo
d5f9864ffc remove scm_add_method
* libguile/goops.h:
* libguile/goops.c (scm_add_method): Remove this function. It didn't
  work, and even if we fixed it to work it wouldn't be as good as using
  Scheme's `add-method!'.
2009-12-20 15:34:19 +01:00
Andy Wingo
3c98a49cbd in the load path, look in library-dir before site-dir
* libguile/load.c (scm_init_load_path): Search first in Guile's
  version-specific path (the library path), *then* in the site dir. This
  should allow us to import some of Guile-lib's modules into Guile,
  perhaps customizing them with Guile-version-specific foo, without
  accidentally falling back to system-installed guile-lib in the
  sitedir. Also should reduce the number of stats by half, in the common
  case.
2009-12-20 15:34:19 +01:00
Ken Raeburn
6751d6db6b Allow more characters in coding system names in Emacs-style declarations.
* libguile/read.c (scm_i_scan_for_encoding): Allow more punctuation
  symbols in coding system names.
2009-12-17 20:02:35 -05:00
Ludovic Courtès
bc4adf1739 Remove unneeded #include <assert.h>.
* libguile/backtrace.c, libguile/eval.c, libguile/gc.c,
  libguile/goops.c, libguile/memoize.c, libguile/threads.c,
  libguile/uniform.c, libguile/vm.c,
  test-suite/standalone/test-conversion.c,
  test-suite/standalone/test-list.c: Don't include <assert.h>.
2009-12-15 20:20:38 +01:00
Ludovic Courtès
1cd4fffcde Use Gnulib's `sys_stat' module; update Gnulib.
* .x-sc_prohibit_S_IS_definition: New file.

* m4/gnulib-cache.m4: Add `sys_stat'.

* libguile/filesys.c: Remove `S_IS*' macro definitions for Ultrix and
  MinGW.
2009-12-15 20:14:19 +01:00
Ludovic Courtès
5c14636357 Use the right `grep' command.
* libguile/Makefile.am (.c.i): Use $(GREP), not `grep'.
  (check_signals, check_errnos): Use $(EGREP), not `egrep'.
2009-12-15 01:01:17 +01:00
Ludovic Courtès
4ea57d5b48 Remove GNU Make-specific function call.
* libguile/Makefile.am (c-tokenize.$(OBJEXT)): Remove use of GNU Make's
  `filter-out' function.
2009-12-15 01:01:17 +01:00
Ludovic Courtès
f65e0168d5 Remove extraneous semicolon after `SCM_ARRAY_IMPLEMENTATION' & co.
* libguile/bitvectors.c, libguile/srfi-4.c, libguile/strings.c,
  libguile/vectors.c: Remove extraneous semicolon after
  `SCM_ARRAY_IMPLEMENTATION' and `SCM_VECTOR_IMPLEMENTATION'
  invocations.
2009-12-15 01:01:17 +01:00
Ludovic Courtès
62316c7f81 Avoid `SCM_UNPACK ()' in constant expressions.
They made Sun C 5.8 emit a warning such as:

  line 71: warning: dead part of constant expression is nonconstant

* libguile/print.c (scm_print_opts): Don't use `SCM_UNPACK ()' here.

* libguile/read.c (scm_read_opts): Likewise.
2009-12-15 01:01:17 +01:00
Ludovic Courtès
ab33782cb3 Remove return' from void' function.
* libguile/print.c (scm_print_symbol_name): Remove `return' statement.
2009-12-15 01:01:17 +01:00
Ludovic Courtès
3dbbe28dfd Don't use GCC zero-length arrays.
* libguile/frames.c, libguile/objcodes.c, libguile/programs.c,
  libguile/vm-engine.c, libguile/vm-i-system.c, libguile/vm.c: Use
  `SCM_C_OBJCODE_BASE ()' instead of accessing the `base' field of
  `struct scm_objcode'.

* libguile/objcodes.h (struct scm_objcode)[base]: Remove.
2009-12-15 01:01:16 +01:00
Ludovic Courtès
cd169c5a22 Remove uses of the non-standard `__FUNCTION__'.
* libguile/gc.c (scm_gc_sweep): Replace `__FUNCTION__' by `FUNC_NAME'.

* libguile/read.c (scm_read_r6rs_block_comment): Likewise.
2009-12-15 01:01:16 +01:00
Andy Wingo
93dbc31b9a expose frame-previous, once again
* libguile/frames.h:
* libguile/frames.c (scm_frame_previous): Rename from scm_c_frame_prev,
  and expose to Scheme. Skip boot frames.

* libguile/stacks.c (stack_depth, narrow_stack, scm_make_stack)
  (scm_stack_ref): Adjust for scm_frame_previous skipping boot frames.
2009-12-15 00:22:02 +01:00
Andy Wingo
9331f91cc4 primitive-eval passes first N args on stack directly, not via apply
* libguile/memoize.c (MAKMEMO_CALL): Memoize in the number of arguments
  at the call site.
  (memoize, scm_m_cond, memoize_named_let, unmemoize):
* libguile/eval.c (eval): Adapt to changes in call memoization.

* module/ice-9/eval.scm (primitive-eval): For calls, pass the first N
  arguments directly on the stack, and only the rest as a consed
  argument list to apply. Currently N is 4.
2009-12-13 17:19:59 +01:00
Ludovic Courtès
bd91ecce14 Add opcodes for struct?', struct-vtable', and `make-struct'.
* libguile/vm-engine.c (VM_NAME)[vm_error_not_a_struct]: New label.

* libguile/vm-i-scheme.c (VM_VALIDATE_STRUCT): New macro.
  (struct_p, struct_vtable, make_struct): New instructions.

* module/language/tree-il/compile-glil.scm (*primcall-ops*): Add
  `struct?', `struct-vtable', and `make-struct'.

* module/language/tree-il/primitives.scm (*interesting-primitive-names*,
  *effect-free-primitives*): Likewise.
2009-12-11 13:03:45 +01:00
Andy Wingo
6c20a0b34b vm no longer measures bogoclock or times, relies on os for that
* libguile/vm.h (struct scm_vm): Remove "time" and "clock" members. The
  time was bogusly measured, and the "clock" measured instructions
  retired, which is not a very useful measurement, and it was causing
  lots of memory accesses. Not that I have done a proper profile,
  though...
  (scm_vm_stats): Remove this procedure, which provided access to "time"
  and "clock".

* libguile/vm.c:
* libguile/vm-engine.h:
* libguile/vm-engine.c:
* libguile/vm-i-system.c: Adapt to scm_vm changes and scm_vm_stats
  removal.

* module/system/repl/command.scm:
* module/system/vm/vm.scm: Adapt to vm-stats removal by removing
  vm-stats from <repl>.
2009-12-11 12:39:02 +01:00
Andy Wingo
5b09b37f81 vm: handle interrupts on backwards jumps
* libguile/vm-i-system.c (BR, br): Handle interrupts on backwards jumps,
  so we can Ctrl-C an endless loop.
2009-12-11 11:17:03 +01:00
Andy Wingo
e8c3777214 less overhead for handling interrupts in the vm
* libguile/__scm.h (SCM_ASYNC_TICK): Add some branch prediction.
  (SCM_ASYNC_TICK_WITH_CODE): New helper for when BUILDING_LIBGUILE,
  runs code only if we're going to call async_click().
* libguile/vm-engine.h (VM_HANDLE_INTERRUPTS): New helper, uses
  SCM_ASYNC_TICK_WITH_CODE to only save regs if we'll handle an
  interrupt.
* libguile/vm-i-system.c (call, goto/args, return): use
  VM_HANDLE_INTERRUPTS.
2009-12-11 11:15:12 +01:00
Andy Wingo
e42573315b merge from master to elisp
* module/language/elisp/compile-tree-il.scm: Update for changes to
  tree-il (lambda-case, mainly).

* module/language/elisp/spec.scm: Update GPL version to 3. Update reader
  for new taking a port and environment argument.

* libguile/_scm.h: Bump objcode version.

* libguile/vm-i-system.c: Fix conflicts.

* module/Makefile.am: Fix conflicts, and add elisp modules to the build.
2009-12-11 10:45:18 +01:00
Andy Wingo
ed1bf2c85c if we have no eval.go, load no .go
* libguile/load.c (scm_init_eval_in_scheme): If we have no eval.go, null
  out the load-compiled path so that we load no compiled code. Prevents
  partially compiled Guile from turning tail-calls into stack-munching
  calls.
2009-12-10 20:26:13 +01:00
Andy Wingo
393301c519 fix arbiter compilation with the generic codepath
* libguile/arbiters.c (scm_try_arbiter, scm_release_arbiter): Fix for
  the generic case; not sure why it wasn't working.
2009-12-09 10:21:31 +01:00
Andy Wingo
7230aaf961 fix FUNC_NAME of scm_memoize_variable_access_x
* libguile/memoize.c (scm_memoize_variable_access_x): Fix FUNC_NAME
  definition.
2009-12-09 10:07:04 +01:00
Andy Wingo
735bcfe579 add SCM_SMOB_TYPE_BITS and SCM_SMOB_TYPE_MASK
* libguile/smob.h (SCM_SMOB_TYPE_BITS, SCM_SMOB_TYPE_MASK): New macros,
  for when you want to identify a SMOB by type and mask.

* libguile/arrays.c:
* libguile/bitvectors.c:
* libguile/srfi-4.c: Use the new macros.
2009-12-08 23:13:21 +01:00
Andy Wingo
75a029aa25 fix SCM_CELL macro usage.
* libguile/vm.h (SCM_VM_CONT_DATA): Fix SCM_CELL macro usage.
2009-12-08 23:13:21 +01:00
Andy Wingo
0b1733c7d1 SCM_CELL in throw.c
* libguile/throw.c (JBACTIVE, ACTIVATEJB, DEACTIVATEJB, JBJMPBUF)
  (SETJBJMPBUF, SCM_JBPREUNWIND, SCM_SETJBPREUNWIND)
  (pre_unwind_data_print, scm_ithrow): Fix SCM_CELL macro usage.
2009-12-08 23:13:20 +01:00
Andy Wingo
0e163c06f2 SCM_VALIDATE_SMOB uses SCM_SMOB_PREDICATE
* libguile/validate.h (SCM_VALIDATE_SMOB): Change to use
  SCM_SMOB_PREDICATE instead of SCM_TYP16_PREDICATE.
2009-12-08 23:13:20 +01:00
Andy Wingo
00f8b368ca SCM_CELL in srfi-4.c
* libguile/srfi-4.c (SCM_UVEC_TYPE, SCM_UVEC_LENGTH, SCM_UVEC_BASE): Fix
  SCM_CELL macro usage.
2009-12-08 23:13:20 +01:00
Andy Wingo
9e9e54eb19 SCM_CELL in srcprop.c
* libguile/srcprop.c (SRCPROPPOS, SRCPROPCOPY, SRCPROPALIST)
  (SETSRCPROPPOS, SETSRCPROPCOPY, SETSRCPROPALIST): Fix erroneous
  SCM_CELL macro usage.
2009-12-08 23:13:20 +01:00
Andy Wingo
bbd41a6a21 use the new public metatables from struct.c
* libguile/procs.c (scm_init_procs): No need to lookup the
  applicable-struct-with-setter vtable, as it is now exported.
2009-12-08 23:13:20 +01:00
Andy Wingo
96a44c1cab scm_i_alloc_struct does not take a "what" arg
* libguile/struct.h:
* libguile/struct.c (scm_i_alloc_struct): Change to not take a "what"
  argument. Callers changed.
2009-12-08 23:13:20 +01:00
Andy Wingo
485d13670b reserve a vtable flag for smobs.
* libguile/struct.h (SCM_VTABLE_FLAG_SMOB_0): Reserve a vtable flag for
  smobs.
2009-12-08 23:13:20 +01:00
Andy Wingo
72ab4b2e2b add vtable finalizer and printer setter macros
* libguile/struct.h (SCM_VTABLE_INSTANCE_FINALIZER): Use DATA_REF, not
  SLOT_REF.
  (SCM_SET_VTABLE_INSTANCE_FINALIZER, SCM_SET_VTABLE_INSTANCE_PRINTER):
  New accessor macros.
2009-12-08 23:13:20 +01:00
Andy Wingo
db5ed68588 make some applicable struct vtable-vtable public to C
* libguile/struct.h (scm_standard_vtable_vtable)
  (scm_applicable_struct_vtable_vtable)
  (scm_applicable_struct_with_setter_vtable_vtable)
* libguile/struct.c: Make these stock meta-tables public to C.
2009-12-08 23:13:13 +01:00
Andy Wingo
34dfef5135 SCM_CELL in modules.c
* libguile/modules.c (SCM_F_EVAL_CLOSURE_INTERFACE)
  (SCM_EVAL_CLOSURE_INTERFACE_P, scm_standard_interface_eval_closure):
  Fix to not use SCM_CELL macros.
2009-12-08 23:13:13 +01:00
Andy Wingo
4afe4ab42a initialize smobs after structs
* libguile/init.c (scm_i_init_guile): Move SMOB prehistory after structs
  init. No effect for now.
2009-12-08 23:13:13 +01:00
Andy Wingo
4834078b07 SCM_CELL in guardians.c
* libguile/guardians.c (GUARDIAN_DATA): Fix SCM_CELL macro usage.
2009-12-08 23:13:13 +01:00
Andy Wingo
b9ef8e66ee SCM_CELL in filesys.[ch]
* libguile/filesys.h (SCM_DIR_FLAG_OPEN, SCM_DIR_OPEN_P)
* libguile/filesys.c (scm_readdir, scm_rewinddir, scm_closedir)
  (scm_dir_print, scm_dir_free): Fix SCM_CELL macro usage.
2009-12-08 23:13:07 +01:00
Andy Wingo
4dc2165b35 SCM_CELL in deprecated.c
* libguile/deprecated.c (scm_smob_free): Fix SCM_CELL macro usage.
2009-12-08 23:13:07 +01:00
Andy Wingo
0236bc683d fix SCM_CELL macro usage in continuations.[ch]
* libguile/continuations.h (SCM_CONTREGS):
* libguile/continuations.c (continuation_print): Fix SCM_CELL macro
  usage.
2009-12-08 23:13:07 +01:00