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

11957 commits

Author SHA1 Message Date
Michael Gran
90305ce9e4 Use symbol accessors in scm_gc_mark_dependencies
* libguile/gc-mark.c (scm_gc_mark_dependencies): don't unpack symbols.
  Use symbol accessors.
2009-08-20 22:41:12 -07:00
Michael Gran
832bbc95a2 Use string accessors in scm_basename and scm_dirname
* libguile/filesys.c (basename, dirname): don't unpack strings.
  Use string accessor functions.
2009-08-20 22:40:15 -07:00
Michael Gran
43d5626ce7 Avoid type-limits warning in SCM_TO_TYPE_PROTO
* libguile/conv-uinteger.i.c (SCM_TO_TYPE_PROTO): avoid a comparison
  that is always true due to the limited range of the data type
2009-08-20 21:40:03 -07:00
Michael Gran
68a30f5730 Type-limits error in GC environment initialization
* libguile/gc-malloc.c (scm_gc_init_malloc): GUILE_INIT_MALLOC_LIMIT
  is cast to unsigned then tested as if it were still signed
2009-08-20 21:40:00 -07:00
Michael Gran
0193377d24 Avoid accessing symbol internals in call_dsubr_1 and DEVAL
The symbol's characters are only accessed in case they are needed
for an error message.  This can be avoided by passing the symbol
all the way to a error message function.

* libguile/__scm.h (SCM_WTA_DISPATCH_1_SUBR): new macro

* libguile/error.c (scm_i_wrong_type_arg_symbol): new error function

* libguile/error.h: declaration of scm_i_wrong_type_arg_symbol

* libguile/eval.c (call_dsubr_1): use new macro SCM_WTA_DISPATCH_1_SUBR
  to avoid having to unpack the symbol's chars

* libguile/eval.i.c: use new macro SCM_WTA_DISPATCH_1_SUBR
2009-08-20 21:39:56 -07:00
Michael Gran
7f5946427e Use string and symbol accessors with obarrays and keyword-dash-symbols
* libguile/deprecated.c (intern_obarray_soft): new function
  (scm_intern_obarray_soft, scm_string_to_obarray_symbol): use
  intern_obarray_soft
  (scm_gentemp): don't unpack string chars, use intern_obarray_soft

* libguile/discouraged.c (scm_make_keyword_from_dash_symbol): use
  symbol accessor
2009-08-20 21:39:44 -07:00
Ludovic Courtès
1549532ccb Aggregate `guile-readline' makefiles.
* configure.ac: Don't produce `guile-readline/ice-9/Makefile'.

* guile-readline/Makefile.am (SUBDIRS): Remove.
  (ice9dir, nobase_ice9_DATA): New, formerly under `ice-9'.
  (ETAGS_ARGS, EXTRA_DIST): Augment.
  (DEFS): Move outside of `if'.
  (MKDEP): Remove.

* guile-readline/ice-9/Makefile.am: Remove.
2009-08-21 01:49:42 +02:00
Ludovic Courtès
7a5ab3693c Don't use a sub-configure' for guile-readline'.
* acinclude.m4 (GUILE_READLINE): New macro, based on the former
  `guile-readline/configure.ac'.

* configure.ac: Remove `AC_CONFIG_SUBDIRS' invocation.  Add
  `GUILE_READLINE' invocation.  Produce files under `guile-readline'.

* guile-readline/Makefile.am: Conditionalize the meat under
  `HAVE_READLINE'.
  (INCLUDES): Rename to...
  (AM_CPPFLAGS): this.  Users updates.
  (AM_CFLAGS): New variable.
  (libguilereadline_v_@LIBGUILEREADLINE_MAJOR@_la_LIBADD): Add
  $(READLINE_LIBS).

* guile-readline/readline.c: Include <config.h>.

* guile-readline/configure.ac, guile-readline/autogen.sh: Remove.
2009-08-21 01:49:29 +02:00
Andy Wingo
afe5e6baa7 eval is actually compile
* module/ice-9/boot-9.scm (eval): Here at the tail of boot-9, replace
  the root definition of `eval' with a procedure that will call
  `compile'.

* test-suite/tests/syntax.test ("top-level define"):
  ("internal define"): Run unmemoization tests in the interpreter, using
  primitive-eval.
2009-08-20 18:52:51 +02:00
Andy Wingo
2fb924f64f programs have their own tc7 now
* libguile/tags.h (scm_tc7_program):
* libguile/programs.h: Programs now have their own tc7 code. Fix up the
  macros appropriately.

* libguile/programs.c: Remove smobby bits, leaving marking, printing,
  and application for other parts of Guile.

* libguile/debug.c (scm_procedure_source):
* libguile/eval.c (scm_trampoline_0, scm_trampoline_1)
  (scm_trampoline_2): Add cases for tc7_program.
* libguile/eval.i.c (CEVAL, SCM_APPLY):
* libguile/evalext.c (scm_self_evaluating_p):
* libguile/gc-card.c (scm_i_sweep_card, scm_i_tag_name):
* libguile/gc-mark.c (1):
* libguile/print.c (iprin1):
* libguile/procs.c (scm_procedure_p, scm_thunk_p)
* libguile/vm-i-system.c (make-closure): Adapt to new procedure
  representation.

* libguile/procprop.c (scm_i_procedure_arity): Do the right thing for
  programs.
* test-suite/tests/procprop.test ("procedure-arity"): Arity test now
  succeeds.

* libguile/goops.c (scm_class_of): Programs now belong to the class
  <procedure>, not a smob class.

* libguile/vm.h (struct vm, struct vm_cont):
* libguile/vm-engine.c (vm_engine):
* libguile/frames.h (SCM_FRAME_BYTE_CAST, struct vm_frame):
* libguile/frames.c (scm_c_make_vm_frame): Fix usages of scm_byte_t,
  changing them to scm_t_uint8.
2009-08-20 18:52:51 +02:00
Andy Wingo
cdde57b2f1 eval-elisp uses primitive-eval
* lang/elisp/interface.scm (eval-elisp): Use primitive-eval, as we will
  be switching the evaluator soon.
2009-08-20 18:52:50 +02:00
Andy Wingo
12136c7148 define @bind using syntax-case
* module/ice-9/boot-9.scm (@bind): Define a VM-compatible syntax
  definition for this old evaluator primitive.

* test-suite/tests/dynamic-scope.test: Change the expected error
  messages.
2009-08-20 18:52:50 +02:00
Andy Wingo
32aa211159 use primitive-eval in run-vm-tests.scm
* testsuite/run-vm-tests.scm (run-vm-tests): Use primitive-eval, as
  we'll be changing eval soon.
2009-08-20 18:52:50 +02:00
Andy Wingo
7ea9a0a764 better VM error messages
* libguile/vm-engine.c: Attempt to make error messages more friendly
  and uniform with historical expectation.
2009-08-20 18:52:50 +02:00
Andy Wingo
8274228f79 update docs for calling convention change
* doc/ref/vm.texi: Update.
2009-08-20 18:52:50 +02:00
Andy Wingo
b7946e9ec6 push new frame on stack before procedure & args
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump

* libguile/vm-engine.c (vm_engine): Push a frame corresponding to the
  mv-call.

* libguile/vm-i-system.c: Renumber ops.
  (new-frame): New op, pushes a frame.
  (call, mv-call): No need to shuffle args, though we do need to pop the
  frame in the non-vm call case.
  (goto/args): Inconsequential tweaks.
  (call/cc): Push a frame if needed.

* module/language/tree-il/compile-glil.scm (flatten): Emit `new-frame'
  as appropriate.

* test-suite/tests/tree-il.test: Fix to expect new-frame.
2009-08-20 18:52:50 +02:00
Andy Wingo
03e6c16596 reorder frame layout
* libguile/frames.h: Reorder the frame layout so the return address
  comes below the arguments.working
  (SCM_FRAME_SET_RETURN_ADDRESS, SCM_FRAME_SET_MV_RETURN_ADDRESS): New
  macros.

* libguile/frames.c (scm_vm_frame_arguments): Use the macros to access
  the arguments.

* libguile/vm-engine.c (vm_engine): Fix for new calling convention.

* libguile/vm-engine.h (INIT_FRAME): New macro. Does part of what
  NEW_FRAME used to do.

* libguile/vm-i-system.c (call, mv-call): Shuffle args up to make room
  for the stack, and adapt to new calling convention.
  (goto/args): Shuffling down is easier now.
  (return, return/args): Adapt to new frame layout.

* libguile/vm.c (vm_mark_stack): Adapt to new frame layout, and the
  possibility of there being crap on the stack.
  (really_make_boot_program): Remove extraneous comment.
2009-08-20 18:52:49 +02:00
Andy Wingo
d94be25f72 remove dead weight from vm-i-system.c
* libguile/vm-i-system.c: Remove mark, list-mark, cons-mark,
  vector-mark, and list-break, as they are no longer used.
  (call, goto/args, mv-call): Remove bits about trampolines, which was
  slower, and VM continuations, which are not used (we use Guile's
  continuations as the applicable objects).

  Renumber ops.

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
2009-08-20 18:52:49 +02:00
Andy Wingo
609edba7ea disable autocompilation in the test suite
* check-guile.in: Disable autocompilation while working in the test
  suite, for now at least. We'll enable it again later.
2009-08-20 18:52:38 +02:00
Andy Wingo
48a0fe4d6b autocompiled files before installation go to a cache dir in the builddir
* libguile/load.c (scm_init_load_path): Append a slash after
  XDG_CACHE_HOME.

* meta/gdb-uninstalled-guile.in:
* meta/guile.in (XDG_CACHE_HOME): Export this var so we write to a cache
  within the build directory. Probably we should have a GUILE_CACHE_DIR
  to be more specific, though.

* Makefile.am (clean-local): Clear the cache when making clean.
2009-08-20 18:52:38 +02:00
Michael Gran
53a468dd8c type limits error in string-tabulate
* libguile/srfi-13.c (scm_string_tabulate): test range of signed integer
  before casting it to unsigned size_t
2009-08-20 08:14:28 -07:00
Ludovic Courtès
78747ac6fb Relax assumptions made in the precise VM stack marking procedure.
* libguile/vm.c (vm_stack_mark): Change assertions into checks to
  determine whether VM points to a sane (initialized) object.  The
  assumption previously was that free-list elements would be zeroed, as
  implied by the comment in <gc/gc_mark.h>, but this doesn't appear to
  be the case.
2009-08-20 12:18:57 +02:00
Michael Gran
f846bd1a8f Update srfi-13 functions for Unicode
* libguile/srfi-13.c (MY_SUBF_VALIDATE_SUBSTRING_SPEC): new macro
  (MY_VALIDATE_SUBSTRING_SPEC_COPY): now unused, removed
  (MY_VALIDATE_SUBSTRING_SPEC_UCOPY): now unused, removed
  (REF_IN_CHARSET): new macro
  (race_error)[0]: unused, removed
  (scm_string_any, scm_string_every, scm_string_tabulate)
  (scm_substring_to_list, scm_reverse_string_to_list)
  (scm_reverse_list_to_string, scm_string_join)
  (s_scm_srfi13_substring_copy, scm_string_copy, scm_string_copy_x)
  (scm_string_pad, scm_string_pad_right, scm_string_trim)
  (scm_string_trim_right, scm_string_trim_both, scm_substring_fill_x):
  (scm_string_compare, scm_string_compare_ci): modified for
  both wide and narrow strings
  (compare_string): new function
  (scm_string_eq, scm_string_neq, scm_string_lt, scm_string_gt)
  (scm_string_le, scm_string_ge, scm_string_ci_eq, scm_string_ci_neq)
  (scm_string_ci_lt, scm-string_ci_gt, scm_string_ci_le, scm_string_ci_gt)
  (scm_substring_hash, scm_string_prefix_length, scm_string_suffix_length)
  (scm_string_prefix_length_ci, scm_string_suffix_length_ci)
  (scm_string_prefix_p, scm_string_prefix_ci_p, scm_string_suffix_p)
  (scm_string_suffix_ci_p, scm_string_index, scm_string_index_right)
  (scm_string_skip, scm_string_skip_right, scm_string_count)
  (scm_string_contains, scm_string_contains_ci, string_upcase_x)
  (scm_substring_upcase_x, scm_substring_upcase, string_downcase_x)
  (scm_string_downcase_x, scm_string_downcase, scm_string_titlecase_x)
  (scm_string_titlecase, scm_string_capitalize, scm_string_reverse)
  (scm_string_reverse_x, scm_string_map, scm_string_map_x)
  (scm_string_fold, scm_string_fold_right, scm_string_unfold)
  (scm_string_unfold_right, scm_xsubstring, scm_string_xcopy_x)
  (scm_string_replace, scm_string_tokenize, scm_string_split)
  (scm_string_filter, scm_string_delete): modified for both wide and
  narrow strings
2009-08-19 23:21:39 -07:00
Michael Gran
1441e6dbd7 Some srfi-13 test with wide strings
* test-suite/tests/srfi-13.test: more tests
2009-08-19 23:21:18 -07:00
Michael Gran
1b9ac4580c Updates to benchmarks for srfi-13
Test more of the positive paths.  Add test for string-prefix-ci?
string-suffix-ci? and string-hash-ci.  Update the counts per test
to give approximately the same bench/interp time for each test for
1.8.7.

* benchmark-suite/benchmarks/srfi-13.bm: update benchmarks
2009-08-19 22:16:04 -07:00
Michael Gran
06b961904d Avoid possible mutex hang on error message output
Avoid possible mutex hang when scm_lfwrite_substr is used in error
message output and when an error has caused the stringbuf write
mutex to not be unlocked.  scm_lfwrite_substr makes a substring:
making a substring requires that mutex.

Hopefully, all cases of non-local jumps when the stringbuf write
lock is held have been eliminated anyway, making this O.B.E.

* libguile/ports.c (scm_lfwrite_str): include functionality in this
  function instead of making this a special case of scm_lfwrite_substr
2009-08-19 22:15:41 -07:00
Michael Gran
2759c092d0 Add VM exception in strings.test
* test-suite/tests/strings.test (exception:wrong-type-arg): change regex
2009-08-19 22:15:36 -07:00
Michael Gran
9aa27c1a30 Try to optimize scm_string for speed
* libguile/strings.c (scm_string): optimize for speed
2009-08-19 22:15:32 -07:00
Michael Gran
f8ba2bb911 Rename string-width to string-bytes-per-char
* libguile/strings.h: rename scm_string_width to scm_string_bytes_per_char

* libguile/strings.c (scm_string_width): renamed to scm_string_bytes_per_char
  (scm_string_bytes_per_char): renamed from scm_string_width

* module/language/assembly/compile-bytecode.scm (write-bytecode): string-width
  -> string-bytes-per-char

* module/language/glil/compile-assembly.scm (dump-object): string-width
  -> string-bytes-per-char
2009-08-19 22:15:22 -07:00
Michael Gran
1c7b216f84 Misleading error message text in scm_i_string_writable_wide_chars
* libguile/strings.c (scm_i_string_writable_wide_chars): change error text
2009-08-19 22:15:16 -07:00
Ludovic Courtès
e3eb628d88 Implement precise marking of the VM stack.
Suggested by Andy Wingo.

* libguile/vm.c (VM_ENABLE_PRECISE_STACK_GC_SCAN): New macro.
  (vm_stack_gc_kind): New variable.
  (make_vm)[VM_ENABLE_PRECISE_STACK_GC_SCAN]: Use `GC_generic_malloc ()'
  to allocate the stack.
  (vm_stack_mark): New function.
  (scm_bootstrap_vm)[VM_ENABLE_PRECISE_STACK_GC_SCAN]: Initialize
  `vm_stack_gc_kind'.
2009-08-20 01:56:47 +02:00
Ludovic Courtès
75d315e1fb Fix bogus computation of `vm->stack_limit'.
* libguile/vm.c (make_vm): Remove bogus "- 3" when computing
  `stack_size'.

* libguile/vm-engine.h (CHECK_OVERFLOW): Change accordingly.
2009-08-20 01:20:58 +02:00
Ludovic Courtès
1f7de76940 Simplify the creation of the SMOB GC "kind".
* libguile/smob.c (smob_freelist): Remove.
  (scm_smob_prehistory): Adjust accordingly.
2009-08-20 01:16:38 +02:00
Ludovic Courtès
aec3d99bcd Include "scmconfig.h" in <libguile/boehm-gc.h>.
* libguile/boehm-gc.h: Use "scmconfig.h".  Check for
  `SCM_USE_PTHREAD_THREADS', not `SCM_I_GSC_USE_PTHREAD_THREADS'.
2009-08-20 01:14:14 +02:00
Andy Wingo
2a0db0e326 procedure-documentation works on vm procedures
* libguile/procs.c (scm_procedure_documentation): Add a hack so that
  this function works for compiled procedures too.
2009-08-19 12:20:58 +02:00
Michael Gran
6234ff203d Display wide strings using escapes
* libguile/print.c (iprin1): for now, display wide strings
  as escaped strings
2009-08-18 22:32:08 -07:00
Michael Gran
f59cf9981a Avoid double-casts of stringbuf
Conversion from char to scm_t_wchar require an intermediate cast to
unsigned char.  By changing the return type of SCM_STRINGBUF_INLINE_CHARS
to unsigned char *, doublecasts in the code can be avoided.  Also,
some clarification of return types.

* libguile/strings.c (STRINGBUF_OUTLINE_CHARS)
(STRINGBUF_INLINE_CHARS): now returns unsigned char *; all callers changed.
2009-08-18 21:14:56 -07:00
Michael Gran
8ef6962953 Avoid compilation warnings in SCM_MAKE_CHAR
* libguile/chars.h (SCM_MAKE_CHAR): change inequality
2009-08-18 21:13:38 -07:00
Michael Gran
3dd11c9b13 Benchmarks for common character and string procedures
* benchmark-suite/benchmarks/chars.bm: new benchmarks

* benchmark-suite/benchmarks/srfi-13.bm: new benchmarks
2009-08-18 21:11:58 -07:00
Ludovic Courtès
512c359507 Remove unneeded `scm_without_guile ()' call.
* libguile/scmsigs.c (read_without_guile_data, do_read_without_guile,
  read_without_guile): Remove.
  (signal_delivery_thread): Use read(2) instead of `read_without_guile ()'.
2009-08-19 00:13:55 +02:00
Ludovic Courtès
3c13664ebe Reinstate missing IA64 helper functions.
* libguile/threads.c (scm_ia64_register_backing_store_base,
  scm_ia64_ar_bsp): New, formerly in `gc.c', which was removed in the
  BDW-GC branch.
2009-08-19 00:06:14 +02:00
Ludovic Courtès
05762e724b Use `scm_gc_malloc_pointerless ()' for bytevectors.
* libguile/bytevectors.c (make_bytevector): Use
  `scm_gc_malloc_pointerless ()' for the buffer itself.

* libguile/r6rs-ports.c (scm_get_bytevector_some,
  scm_get_bytevector_all, bop_buffer_grow): Likewise.
2009-08-18 22:12:31 +02:00
Andy Wingo
7f171dbfa0 remove (ice-9 lineio)'s dependency on (ice-9 readline)
* module/ice-9/lineio.scm: Use (ice-9 rdelim) instead of (ice-9
  readline) to remove readline dependency.
2009-08-18 17:52:46 +02:00
Andy Wingo
9591a2b016 `load' autocompiles
* libguile/load.h:
* libguile/load.c (scm_sys_warn_autocompilation_enabled): New primitive,
  not exported. Since `load' autocompiles now, it should warn in the
  same way that the bits hardcoded into C warn.
  (scm_try_autocompile): Use scm_sys_warn_autocompilation_enabled.

* module/ice-9/boot-9.scm (autocompiled-file-name): New helper.
  (load): Try autocompiling the argument, if appropriate. Will
  autocompile files passed on Guile's command line. `primitive-load' is
  unaffected.
2009-08-18 11:06:04 +02:00
Ludovic Courtès
3b882d69fb Remove unneeded SMOB mark/free procedures.
* libguile/bytevectors.c (free_bytevector): Remove.
  (scm_bootstrap_bytevectors): Update accordingly.

* libguile/r6rs-ports.c (bip_mark, cbp_mark, bop_free, bop_proc_mark):
  Remove.
  (initialize_bytevector_input_ports,
  initialize_custom_binary_input_ports,
  initialize_bytevector_output_ports,
  initialize_custom_binary_output_ports): Update accordingly.
2009-08-18 00:31:32 +02:00
Ludovic Courtès
1ac8a47f01 Fix malloc/scm_c_take_bytevector mismatch.
* libguile/bytevectors.c (STRING_TO_UTF): Use `make_bytevector ()'
  instead of `scm_c_take_bytevector ().
  (scm_string_to_utf8): Likewise.
2009-08-18 00:09:26 +02:00
Ludovic Courtès
fbb857a472 Merge branch 'master' into boehm-demers-weiser-gc
Conflicts:
	lib/Makefile.am
	libguile/Makefile.am
	libguile/frames.c
	libguile/gc-card.c
	libguile/gc-freelist.c
	libguile/gc-mark.c
	libguile/gc-segment.c
	libguile/gc_os_dep.c
	libguile/load.c
	libguile/macros.c
	libguile/objcodes.c
	libguile/programs.c
	libguile/strings.c
	libguile/vm.c
	m4/gnulib-cache.m4
	m4/gnulib-comp.m4
	m4/inline.m4
2009-08-18 00:06:45 +02:00
Ludovic Courtès
e33a910dd0 Thanks, Mike. 2009-08-17 23:06:49 +02:00
Ludovic Courtès
9957b1c707 Update `NEWS' for commit d8dd381fa7. 2009-08-17 23:05:50 +02:00
Ludovic Courtès
a9b8b7b02f Bump version number for 1.9.2.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
2009-08-15 14:41:46 +02:00