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

10528 commits

Author SHA1 Message Date
Ludovic Courtès
f307fbcec2 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	libguile/gc-card.c
	libguile/gc-mark.c
2009-03-08 23:04:06 +01:00
Ludovic Courtès
6c59f90149 Aggregate Makefile.am' files under lang/'.
* lang/Makefile.am (SUBDIRS): Remove.
  (elisp_sources): Aggregate the value of `elisp_SOURCES' formerly found
  in sub-directories' `Makefile.am'.
2009-03-08 22:16:37 +01:00
Ludovic Courtès
7acc33d7f0 Move `guardians.test' to its own module.
* test-suite/tests/guardians.test: Add `define-module' clause.
2009-03-08 21:56:06 +01:00
Ludovic Courtès
8321ed20f6 Provide a C vararg interface to gsubr invocation.
* libguile/eval.i.c (CEVAL): Update calls to `scm_i_gsubr_apply ()' with
  a fixed number of arguments.  Use `scm_i_gsubr_apply_list ()' for
  calls with a list of arguments of unknown length.
  (SCM_APPLY): Use `scm_i_gsubr_apply_list ()' instead of
  `scm_i_gsubr_apply ()'.

* libguile/gsubr.c (gsubr_apply_raw): New.
  (scm_i_gsubr_apply): Change to take a C vararg list instead of a
  Scheme list.  Use `gsubr_apply_raw ()'.
  (scm_i_gsubr_apply_list): Use `gsubr_apply_raw ()'.

* libguile/gsubr.h (scm_i_gsubr_apply): Update prototype.
  (scm_i_gsubr_apply_list): New declaration.
2009-03-08 16:40:49 +01:00
Ludovic Courtès
d18f4d805e Slightly simplify gsubr invocation in the evaluator.
* libguile/eval.i.c (CEVAL): Remove the `cclon' label; replace jumps to
  `cclon' with `RETURN (scm_i_gsubr_apply (...))'.
2009-03-08 16:40:49 +01:00
Ludovic Courtès
3e414c302f Add new subr invocation benchmarks.
* benchmark-suite/benchmarks/subr.bm (hook1, hook3): New variables.
  ("subr invocation")("generic subr with rest arg", "generic subr with
  rest arg and 3+ parameters"): New benchmarks.
  ("subr application")("generic subr with rest arg", "generic subr with
  rest arg and 3+ parameters"): New benchmarks.
2009-03-08 16:38:51 +01:00
Ludovic Courtès
a5f83fd21d Mark `scm_gsubr_apply ()' as internal.
* libguile/gsubr.h (scm_gsubr_apply): Renamed to...
  (scm_i_gsubr_apply): this.  Marked as `SCM_INTERNAL'.  Callers
  updated.
2009-03-02 00:20:44 +01:00
Ludovic Courtès
54d14084e2 Change `scm_gsubr_apply ()' to take the gsubr as its first argument.
* libguile/gsubr.c (scm_gsubr_apply): Make SELF the first argument
  instead of the first element of ARGS.

* libguile/gsubr.h: Update.

* libguile/eval.i.c (CEVAL): Update.
2009-03-02 00:20:43 +01:00
Ludovic Courtès
e20d7001c3 Remove "compiled closures" ("cclos") in favor of a simpler mechanism.
The idea is to introduce `gsubrs' whose arity is encoded in their type
(more precisely in the sizeof (void *) - 8 MSBs).  This removes the
indirection introduced by cclos and simplifies the code.

* libguile/__scm.h (CCLO): Remove.

* libguile/debug.c (scm_procedure_source, scm_procedure_environment):
  Remove references to `scm_tc7_cclo'.

* libguile/eval.c (scm_trampoline_0, scm_trampoline_1,
  scm_trampoline_2): Replace `scm_tc7_cclo' with `scm_tc7_gsubr'.

* libguile/eval.i.c (CEVAL): Likewise.  No longer make PROC the first
  argument.  Directly invoke `scm_gsubr_apply ()' instead of jump to the
  `evap(N+1)' label or call to `SCM_APPLY ()'.

* libguile/evalext.c (scm_self_evaluating_p): Remove reference to
  `scm_tc7_cclo'.

* libguile/gc-card.c (scm_i_sweep_card, scm_i_tag_name): Likewise.

* libguile/gc-mark.c (scm_gc_mark_dependencies): Likewise.

* libguile/goops.c (scm_class_of): Likewise.

* libguile/print.c (iprin1): Likewise.

* libguile/gsubr.c (create_gsubr): Use `unsigned int's for REQ, OPT and
  RST.  Use `scm_tc7_gsubr' instead of `scm_makcclo ()' in the default
  case.
  (scm_gsubr_apply): Remove calls to `SCM_GSUBR_PROC ()'.
  (scm_f_gsubr_apply): Remove.

* libguile/gsubr.h (SCM_GSUBR_TYPE): New definition.
  (SCM_GSUBR_MAX): Changed to 33.
  (SCM_SET_GSUBR_TYPE, SCM_GSUBR_PROC, SCM_SET_GSUBR_PROC,
  scm_f_gsubr_apply): Remove.

* libguile/procprop.c (scm_i_procedure_arity): Remove reference to
  `scm_tc7_cclo'; add proper handling of `scm_tc7_gsubr'.

* libguile/procs.c (scm_makcclo, scm_make_cclo): Remove.
  (scm_procedure_p): Remove reference to `scm_tc7_cclo'.
  (scm_thunk_p): Likewise, plus add proper `scm_tc7_gsubr' handling.

* libguile/procs.h (SCM_CCLO_LENGTH, SCM_MAKE_CCLO_TAG,
  SCM_SET_CCLO_LENGTH, SCM_CCLO_BASE, SCM_SET_CCLO_BASE, SCM_CCLO_REF,
  SCM_CCLO_SET, SCM_CCLO_SUBR, SCM_SET_CCLO_SUBR, scm_makcclo,
  scm_make_cclo): Remove.

* libguile/stacks.c (read_frames): Remove reference to `scm_f_gsubr_apply'.

* libguile/tags.h (scm_tc7_cclo): Remove.
  (scm_tc7_gsubr): New.
  (scm_tcs_subrs): Add `scm_tc7_gsubr'.
2009-03-02 00:20:43 +01:00
Ludovic Courtès
b786a5bbf8 Add subr invocation benchmark.
* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add `subr.bm'.
2009-03-02 00:18:34 +01:00
Ludovic Courtès
1eefa363bd Move `guardians.test' to its own module.
* test-suite/tests/guardians.test: Add `define-module' clause.
2009-02-28 16:59:05 +01:00
Ludovic Courtès
6a7489ace3 Increase chances that `guardians.test' can be successfully run.
* test-suite/tests/guardians.test: Document overall test sloppiness.
  ("g2-garbage saved"): Document failure.
  ("guarding independent objects")["guarding non-immediate", "guarding
  two non-immediates", "re-guarding non-immediates"]:
  Improve chances to remove references to the dying object left on the
  stack.
  ("guarding weakly referenced objects")["guarded weak vector element
  gets returned from guardian"]: Likewise.
  ("guarding weak containers")["element of guarded weak vector gets
  collected"]: Likewise.
  ("guarding objects more than once")["guarding twice in one guardian",
  "guarding twice in two guardians"]: Likewise.
2009-02-28 16:51:19 +01:00
Ludovic Courtès
5aec3cf407 Add `DEBUG_GUARDIANS' macro for guardian finalization debugging.
* libguile/guardians.c (finalize_guarded): Use `#ifdef DEBUG_GUARDIANS'
  instead of `#if 0'.  Add "  guardian for %p vanished\n" debugging
  statement.
2009-02-28 16:27:19 +01:00
Ludovic Courtès
113e7c253a Add tests for the stack inspection API.
* test-suite/tests/eval.test (stack->frames): New procedure.
  ("stacks"): New test prefix.
2009-02-17 00:11:20 +01:00
Ludovic Courtès
510d7877ff Add new GOOPS tests for built-in types.
* test-suite/tests/goops.test ("classes for built-in types"): New test
  prefix.
2009-02-17 00:07:57 +01:00
Ludovic Courtès
e47096d965 Add test for `procedure-properties'.
* test-suite/Makefile.am (SCM_TESTS): Add `tests/procprop.test'.
2009-02-16 00:35:34 +01:00
Ludovic Courtès
f7a1ab8b94 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	libguile/gc-mark.c
	libguile/procs.c
	libguile/procs.h
	libguile/threads.c
	libguile/threads.h
2009-02-14 17:32:46 +01:00
Ludovic Courtès
fe11efeeba Update `NEWS'. 2009-02-12 00:11:59 +01:00
Ludovic Courtès
e092357058 Small cleanup relative to the use of double cells for subrs.
* libguile/procs.c (scm_c_make_subr): Remove comments about the number
  of subrs, improve formatting.
2009-02-12 00:08:53 +01:00
Ludovic Courtès
ac51e74b95 Use double-cells to store subrs.
* libguile/procs.c (scm_subr_table, scm_subr_table_size,
  scm_subr_table_room, subr_table_gc_hint, scm_init_subr_table,
  scm_mark_subr_table): Remove.
  (scm_c_make_subr): Simply return a double-cell, with the procedure
  name and properties stored in a two-element array.
  (scm_free_subr_entry): Free the meta-info slot.

* libguile/init.c (scm_i_init_guile): Remove call to
  `scm_init_subr_table ()'.

* libguile/procs.h (SCM_SUBR_META_INFO): New macro.
  (SCM_SNAME, SCM_SUBR_PROPS): Use it.
  (SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC):
  Update.
  (scm_t_subr_entry, SCM_SUBR_ENTRY, SCM_SUBRNUM, scm_subr_table,
  scm_mark_subr_table, scm_init_subr_table): Remove.
2009-02-12 00:02:11 +01:00
Ludovic Courtès
feccd2d310 Add SCM_SET_SUBR_GENERIC ()' to replace SCM_SUBR_GENERIC ()' as an lvalue.
* libguile/goops.c (scm_c_extend_primitive_generic): Use
  `SCM_SET_SUBR_GENERIC ()' instead of using `SCM_SUBR_GENERIC ()' as an
  lvalue.

* libguile/procs.c (scm_c_make_subr_with_generic): Use `SCM_SET_SUBR_GENERIC_LOC ()'.

* libguile/procs.h (SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC): New macros.
2009-02-11 23:37:46 +01:00
Ludovic Courtès
cce8b2ce93 Use `SCM_SNAME ()' when requesting the name of a subr.
* libguile/gsubr.c (create_gsubr, create_gsubr_with_generic):
  Use `SCM_SNAME ()' instead of `SCM_SUBR_ENTRY (subr).name'.

* libguile/procs.c (scm_c_define_subr_with_generic, scm_makcclo):
  Likewise.
  (scm_c_make_subr_with_generic): Same with `SCM_SUBR_GENERIC ()'.
2009-02-11 23:37:42 +01:00
Neil Jerram
4c9e29ec38 Clean lib-version.texi
* doc/ref/Makefile.am (CLEANFILES): Add lib-version.texi.
2009-02-09 21:51:31 +00:00
Neil Jerram
ad5f5ada1d Allow @ to work with (ice-9 syncase)
(Reported by Panicz Maciej Godek.)

* test-suite/tests/syncase.test ("@ works with syncase"): New test.

* ice-9/syncase.scm (guile-macro): When a Guile macro transformer
  produces a variable, don't pass it through sc-expand.
2009-02-08 21:45:31 +00:00
Neil Jerram
95a040cd2b Fix build when compiled with -Wundef -Werror
(Reported by David Fang)

* libguile/inline.h: Check if __APPLE_CC__ is defined before testing
  its value.
2009-02-08 21:45:24 +00:00
Ludovic Courtès
6290d3f109 GOOPS: Statically allocate the PORT class array.
* libguile/goops.c (scm_port_class): Statically allocate it.
  (create_port_classes): Don't use `scm_calloc ()'.

* libguile/goops.h (scm_port_class): Update declaration.

* libguile/ports.c (scm_make_port_type): When checking whether
  GOOPS is initialized, check whether the first element of
  SCM_PORT_CLASS is non-zero.
2009-02-03 00:03:09 +01:00
Ludovic Courtès
5bb2d903b9 Publish the maximum number of port types as `SCM_I_MAX_PORT_TYPE_COUNT'.
* libguile/goops.c (create_port_classes): Use
  `SCM_I_MAX_PORT_TYPE_COUNT' instead of a hard-wired 256.

* libguile/objects.h (SCM_OUT_PCLASS_INDEX, SCM_INOUT_PCLASS_INDEX):
  Likewise.

* libguile/ports.c (scm_make_port_type): Likewise.

* libguile/ports.h (SCM_I_MAX_PORT_TYPE_COUNT): New macro.
2009-02-03 00:02:59 +01:00
Ludovic Courtès
04795a1cb2 GOOPS: Statically allocate the SMOB class array.
* libguile/goops.c (scm_smob_class): Statically allocate it.
  (create_smob_classes): Don't malloc(3) `scm_smob_class'.

* libguile/goops.h (scm_smob_class): Update declaration.

* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): When
  checking whether GOOPS is initialized, check whether the first element
  of SCM_SMOB_CLASS is non-zero.
2009-02-03 00:02:50 +01:00
Ludovic Courtès
202271f291 Publish the maximum number of SMOB types as `SCM_I_MAX_SMOB_TYPE_COUNT'.
* libguile/goops.c (create_smob_classes): Refer to
  `SCM_I_MAX_SMOB_TYPE_COUNT' rather than 255 (which is wrong) or 256.

* libguile/smob.c (MAX_SMOB_COUNT): Alias for `SCM_I_MAX_SMOB_TYPE_COUNT'.

* libguile/smob.h (SCM_I_MAX_SMOB_TYPE_COUNT): New macro.
2009-02-03 00:02:36 +01:00
Julian Graham
c010924a71 Update SRFI-11 docs to use correct name for let*-values.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2009-02-02 21:57:11 +01:00
Andy Wingo
53d81399be cleanups to value and help help handlers
* ice-9/session.scm (*value-help-handlers*): Define object-documentation
  as the default value help handler.
  (remove-value-help-handler!, add-name-help-handler!)
  (remove-name-help-handler!): Fix docs.
  (help, help-doc): Fix so that we try object-documentation through
  try-value-help, and we obey the docs regarding what happens with return
  values.
2009-01-28 11:56:21 +01:00
Andy Wingo
4f7a0504aa merge in from guile-lib: add some extensibility to `help'
* ice-9/session.scm (add-value-help-handler!)
  (remove-value-help-handler!, add-name-help-handler!)
  (remove-name-help-handler!): New public interfaces, to allow some basic
  extensibility of the help interface. Merged in from guile-lib's (scheme
  session).
2009-01-27 13:43:07 +01:00
Neil Jerram
ab878b0f8e Fix build when scm_t_timespec is different from struct timespec
Reported by Roland Haeder.  The declaration and definition of
scm_pthread_cond_timedwait were using possibly different types for the
third arg.

* THANKS: Added Roland Haeder.

* libguile/threads.h (scm_pthread_cond_timedwait): Use scm_t_timespec
  for third arg rather than struct timespec, for consistency with the
  function implementation.
2009-01-23 01:26:16 +00:00
Neil Jerram
cbee5075d6 Fix MinGW HAVE_STRUCT_TIMESPEC build problem
Reported by Carlo Bramini.  See the comment in _scm.h.

* THANKS: Add Carlo Bramini.

* libguile/_scm.h: Undefine HAVE_STRUCT_TIMESPEC.
2009-01-23 01:05:19 +00:00
Ludovic Courtès
32a2609de0 Remove useless cooperative multi-threading source files. 2009-01-18 21:05:02 +01:00
Ludovic Courtès
e95d11110b Make variables related to the subr table size private and unsigned.
* libguile/procs.c (scm_subr_table_size, scm_subr_table_room): Made
  `static' and `unsigned'.
  (scm_c_make_subr)[entry]: Made `unsigned'.

* libguile/procs.h (scm_subr_table_size, scm_subr_table_room): Remove
  declarations.
2009-01-18 21:04:39 +01:00
Ludovic Courtès
63385df2fd GOOPS: Statically allocate the PORT class array.
* libguile/goops.c (scm_port_class): Statically allocate it.
  (create_port_classes): Don't use `scm_calloc ()'.

* libguile/goops.h (scm_port_class): Update declaration.

* libguile/ports.c (scm_make_port_type): When checking whether
  GOOPS is initialized, check whether the first element of
  SCM_PORT_CLASS is non-zero.
2009-01-18 20:21:44 +01:00
Ludovic Courtès
0953b54946 Publish the maximum number of port types as `SCM_I_MAX_PORT_TYPE_COUNT'.
* libguile/goops.c (create_port_classes): Use
  `SCM_I_MAX_PORT_TYPE_COUNT' instead of a hard-wired 256.

* libguile/objects.h (SCM_OUT_PCLASS_INDEX, SCM_INOUT_PCLASS_INDEX):
  Likewise.

* libguile/ports.c (scm_make_port_type): Likewise.

* libguile/ports.h (SCM_I_MAX_PORT_TYPE_COUNT): New macro.
2009-01-18 18:47:20 +01:00
Ludovic Courtès
474554694f GOOPS: Statically allocate the SMOB class array.
* libguile/goops.c (scm_smob_class): Statically allocate it.
  (create_smob_classes): Don't malloc(3) `scm_smob_class'.

* libguile/goops.h (scm_smob_class): Update declaration.

* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): When
  checking whether GOOPS is initialized, check whether the first element
  of SCM_SMOB_CLASS is non-zero.
2009-01-18 16:53:01 +01:00
Ludovic Courtès
c891a40e9f Publish the maximum number of SMOB types as `SCM_I_MAX_SMOB_TYPE_COUNT'.
* libguile/goops.c (create_smob_classes): Refer to
  `SCM_I_MAX_SMOB_TYPE_COUNT' rather than 255 (which is wrong) or 256.

* libguile/smob.c (MAX_SMOB_COUNT): Alias for `SCM_I_MAX_SMOB_TYPE_COUNT'.

* libguile/smob.h (SCM_I_MAX_SMOB_TYPE_COUNT): New macro.
2009-01-18 16:42:17 +01:00
Ludovic Courtès
d0cad2492c Use scm_gc_malloc ()' when allocating GOOPS t_extension' objects.
* libguile/goops.c (extension_gc_hint): New.
  (scm_c_extend_primitive_generic): Use `scm_gc_malloc ()' instead of
  `scm_malloc ()'.
  (setup_extended_primitive_generics): Don't call `free(3)' when
  removing a `t_extension' object.
2009-01-18 16:30:36 +01:00
Ludovic Courtès
1a531c80b2 Use `scm_gc_malloc ()' when allocating hook entries.
* libguile/hooks.c (hook_entry_gc_hint): New.
  (scm_c_hook_add): Use `scm_gc_malloc ()' instead of `scm_malloc ()'.
  (scm_c_hook_remove): Don't explicitly free(3) the entry, let the GC do
  its job.
2009-01-18 16:13:31 +01:00
Ludovic Courtès
2a77682322 Use scm_gc malloc_pointerless ()' in scm_i allocate_string_pointers ()'.
* libguile/dynl.c (free_string_pointers): Remove.
  (scm_dynamic_args_call): Remove reference to `free_string_pointers ()'
  and remove dynwind.

* libguile/posix.c (free_string_pointers): Remove.
  (scm_execl, scm_execlp, scm_execle, scm_environ): Remove references
  to `free_string_pointers ()'.

* libguile/simpos.c (free_string_pointers): Remove.
  (scm_system_star): Remove reference to `free_string_pointers ()',
  remove enclosing dynwind.

* libguile/strings.c (scm_i_allocate_string_pointers): Use
  `scm_gc_malloc_pointerless ()' and `scm_gc_malloc ()'
  instead of `scm_malloc ()' and `scm_to_locale_string ()',
  so that the result is automatically GC'd when no longer
  referenced.  Remove unneeded dynwind.
  (scm_i_free_string_pointers): Remove.

* libguile/strings.h (scm_i_free_string_pointers): Remove declaration.
2009-01-18 16:02:04 +01:00
Ludovic Courtès
33ed7a1644 Use `scm_gc_malloc ()' when allocating the allocated fluid vector.
* libguile/fluids.c (next_fluid_num): Use `scm_gc_malloc ()'.  Don't
  explicitly free the previously allocated array.
2009-01-18 13:01:16 +01:00
Ludovic Courtès
6bf4c3f9c1 Remove useless cooperative multi-threading source files. 2009-01-18 12:53:01 +01:00
Ludovic Courtès
0208ec4013 Use `scm_gc_malloc ()' and friends when allocating the subr table.
* libguile/procs.c (subr_table_gc_hint): New.
  (scm_c_make_subr): Use `scm_gc_realloc ()' instead of `scm_realloc ()'.
  (scm_init_subr_table): Use `scm_gc_malloc ()' instead of `scm_malloc ()'.
2009-01-18 12:50:18 +01:00
Ludovic Courtès
f48393a99b Make variables related to the subr table size private and unsigned.
* libguile/procs.c (scm_subr_table_size, scm_subr_table_room): Made
  `static' and `unsigned'.
  (scm_c_make_subr)[entry]: Made `unsigned'.

* libguile/procs.h (scm_subr_table_size, scm_subr_table_room): Remove
  declarations.
2009-01-18 12:44:15 +01:00
Ludovic Courtès
81ba12d74d Don't use `scm_immutable_cell ()' for subrs.
* libguile/procs.c (scm_c_make_subr): Use `scm_cell ()' instead of
  `scm_immutable_cell ()' since subr cells can be mutated, e.g., via
  `SCM_SUBR_GENERIC ()' as in `scm_c_extend_primitive_generic ()' (this
  doesn't make any difference in practice as of libgc 7.1, though).
2009-01-18 12:19:41 +01:00
Neil Jerram
752be95a47 Remove `INSTALL'
* INSTALL: Removed.
2009-01-17 22:37:14 +00:00
Ludovic Courtès
2b807ea75c Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	lib/Makefile.am
	m4/gnulib-cache.m4
	m4/gnulib-comp.m4
2009-01-17 22:44:05 +01:00