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

19998 commits

Author SHA1 Message Date
Mark H Weaver
45c0878b86 Peeks do not consume EOFs.
Fixes <http://bugs.gnu.org/12216>.

* libguile/ports-internal.h (struct scm_port_internal): Add
  'pending_eof' flag.

* libguile/ports.c (scm_i_set_pending_eof, scm_i_clear_pending_eof): New
  static functions.
  (scm_new_port_table_entry): Initialize 'pending_eof'.
  (scm_i_fill_input): Check for 'pending_eof'.
  (scm_i_peek_byte_or_eof): Set 'pending_eof' flag before returning EOF.
  (scm_end_input, scm_unget_byte, scm_seek, scm_truncate): Clear
  'pending_eof'.
  (scm_peek_char): Set 'pending_eof' flag before returning EOF.

* test-suite/tests/ports.test ("pending EOF behavior"): Add tests.
2013-04-04 17:48:37 -04:00
Mark H Weaver
0426b3f8f8 Nicer docstring syntax for case-lambda.
* module/ice-9/psyntax.scm (case-lambda, case-lambda*): Allow a
  docstring to be placed immediately after the 'case-lambda' or
  'case-lambda*'.

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

* doc/ref/api-procedures.texi (Case-lambda): Update docs.

* test-suite/tests/optargs.test ("case-lambda", "case-lambda*"):
  Add tests.
2013-04-04 15:22:18 -04:00
Mark H Weaver
71539c1cd3 Cross reference 'SRFI-9 Records' directly instead of 'SRFI-9'.
* doc/ref/api-compound.texi (Record Overview, Records):
  doc/ref/api-modules.texi (Included Guile Modules):
  doc/ref/r6rs.texi (R6RS Records): Cross reference 'SRFI-9 Records'
  directly instead of 'SRFI-9'.
2013-04-04 03:21:40 -04:00
Mark H Weaver
4120539225 Preserve the case of the user-specified port encoding string.
* libguile/ports.c (scm_i_set_port_encoding_x): Always copy the
  user-provided port encoding string, so that its case will be preserved
  and returned exactly by subsequent calls to 'port-encoding'.
2013-04-03 16:07:34 -04:00
Daniel Llorens
c3e3ef6eb6 Remove double indirection for 1st arg of array-for-each
* libguile/array-map.c: (rafe): factor GVREF out of rank-1 loop for ra0.
2013-04-03 21:46:27 +02:00
Ludovic Courtès
3220b08049 tests: Add `array-for-each' tests for one-dimensional traversals.
* test-suite/tests/ramap.test ("array-for-each")["1 source"]: New test
  prefix.
2013-04-03 21:46:27 +02:00
Ludovic Courtès
0d7f3a6d95 tests: Use `pass-if-equal' in ramap.test.
* test-suite/tests/ramap.test ("array-for-each"): Use `pass-if-equal'
  instead of `(pass-if ... (equal? ...))'.
2013-04-03 21:46:27 +02:00
Daniel Llorens
51a1763f65 Remove double indirection in array-map! with <2 args
* libguile/array-map.c: (ramap): factor GVSET/GVREF out of rank-1 loop
  for ra0 and the first element of ras.
2013-04-03 21:46:27 +02:00
Daniel Llorens
9a68d7b388 Avoid per-element cons for 1-arg case of array-map!
* libguile/array-map.c: (ramap): special case when ras is a 1-element list.
2013-04-03 21:46:27 +02:00
Daniel Llorens
75a1b26c5d Deprecate dead code in array-map.c
* libguile/array-map.c, libguile/array-map.h: deprecate scm_ra_eqp,
  scm_ra_lessp, scm_ra_leqp, scm_ra_grp, scm_ra_greqp, scm_ra_sum,
  scm_ra_product, scm_ra_difference, scm_ra_divide, scm_array_identity.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2013-04-03 21:46:27 +02:00
Mark H Weaver
7290de89fb Use 'strcasecmp' to compare encoding names.
Reported by Ludovic Courtès <ludo@gnu.org>.

* libguile/ports.c (scm_new_port_table_entry,
  scm_i_set_default_port_encoding, scm_i_set_port_encoding_x):
  libguile/read.c (scm_i_scan_for_encoding): Use 'strcasecmp' to compare
  encoding names.
2013-04-03 13:31:51 -04:00
Daniel Llorens
72e2b5923a Remove double indirection in element access in array-copy!
* libguile/array-map.c: (racp): factor scm_generalized_vector_ref,
  scm_generalized_vector_set_x out of the rank-1 loop.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2013-04-03 14:21:49 +02:00
Mark H Weaver
9a31a54561 Remove BOM tests that depend on GNU iconv behavior.
* test-suite/tests/ports.test ("unicode byte-order marks (BOMs)"):
  Remove tests that depend on GNU iconv behavior.  We will add them back
  when we have portable BOM support.
2013-04-02 20:47:30 -04:00
Mark H Weaver
e00793d7a9 Rename 'scm_i_get_byte_or_eof' et al; mark them as SCM_API.
* libguile/ports.c (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof):
  Rename to 'scm_slow_get_byte_or_eof' and 'scm_slow_peek_byte_or_eof',
  respectively.

* libguile/ports.h (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof):
  Rename to 'scm_slow_get_byte_or_eof' and 'scm_slow_peek_byte_or_eof',
  respectively, and mark them as SCM_API.

* libguile/inline.h (scm_get_byte_or_eof, scm_peek_byte_or_eof): Adjust
  to use the new names.
2013-04-02 19:35:43 -04:00
Mark H Weaver
1fa89aaf61 Remove uses of GC_PTR in 'finalize_iconv_descriptors'.
* libguile/ports.c (finalize_iconv_descriptors): Change GC_PTR to
  (void *) in parameter types.
2013-04-02 18:02:56 -04:00
Mark H Weaver
1ee237d9a1 Rewrite get_iconv_codepoint to fix a bug involving byte-order marks.
* libguile/ports.c (get_iconv_codepoint): Rewrite to fix a bug and
  improve efficiency and clarity.  Previously, it incorrectly assumed
  that iconv would never consume input without producing output, which
  led to a buffer overrun and subsequent assertion failure.  This
  happens when a byte-order mark is consumed by iconv at the beginning
  of the stream when using the UTF-16 or UTF-32 encodings.

* test-suite/tests/ports.test (unicode byte-order marks (BOMs)):
  Add tests.
2013-04-02 17:45:50 -04:00
Mark H Weaver
8a2b596579 Move slow path out of 'scm_get_byte_or_eof' et al.
Suggested by Andy Wingo.

* libguile/inline.h (scm_get_byte_or_eof, scm_peek_byte_or_eof): Keep
  only the fast path here, with fallback to 'scm_i_get_byte_or_eof' and
  'scm_i_peek_byte_or_eof'.

* libguile/ports.c (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof):
  New internal functions.

* libguile/ports.h (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof): Add
  prototypes.
2013-04-02 13:43:20 -04:00
Mark H Weaver
187fa0b9e7 Add a static version of 'scm_fill_input' to ports.c.
* libguile/ports.c (scm_i_fill_input): New static function, containing
  the code that was previously in 'scm_fill_input'.
  (scm_fill_input): Simply call 'scm_i_fill_input'.
  (scm_c_read): Use 'scm_i_fill_input'.
2013-04-02 13:43:04 -04:00
Mark H Weaver
05d7f76296 Move the port alist from the hash table to the internal port structure.
* libguile/ports-internal.h (struct scm_port_internal): Add 'alist'
  member.

* libguile/ports.c (scm_i_port_alist, scm_i_set_port_alist_x): New
  internal functions.
  (scm_i_port_weak_hash): Update comment: the hash table is no longer
  used to store the port's alist.
  (scm_new_port_table_entry): Initialize 'alist'.  Store SCM_BOOL_F in
  the port weak hash, not SCM_EOL.

* libguile/ports.h (scm_i_port_alist, scm_i_set_port_alist_x): Add
  protoypes.

* libguile/read.c (set_port_read_option, init_read_options): Access the
  port's alist via 'scm_i_port_alist' and 'scm_i_set_port_alist_x'.
2013-04-01 17:09:17 -04:00
Mark H Weaver
21bbe22a14 Optimize 'get-bytevector-some'; it may now read less than possible.
* libguile/r6rs-ports.c (scm_get_bytevector_some): Rewrite to
  efficiently take the contents of the read/putback buffers.  In the
  docstring, clarify that it might not return all available bytes.

* doc/ref/api-io.texi (R6RS Binary Input): Clarify that
  'get-bytevector-some' might not return all available bytes.

* test-suite/tests/r6rs-ports.test ("get-bytevector-some [only-some]"):
  Remove bogus test, which requires more than the R6RS requires.
2013-04-01 16:46:25 -04:00
Mark H Weaver
337edc591f Refactor port encoding modes: utf-8 and iconv
Based on 6c98257f2e by Andy Wingo.

* libguile/ports-internal.h (struct scm_port_internal): Add a flag
  for the port encoding mode: UTF8 or iconv.  The iconv descriptors
  are now in a separate structure so that we can avoid attaching
  finalizers to the ports themselves in the future.
  (enum scm_port_encoding_mode): New enum.
  (struct scm_iconv_descriptors): New struct.
  (scm_i_port_iconv_descriptors): Add prototype.

* libguile/ports.c (finalize_port): Don't close iconv descriptors here.
  (scm_new_port_table_entry): Adapt to the iconv descriptors being
  moved.  Initialize 'encoding_mode'.
  (scm_i_remove_port): Adapt to call 'close_iconv_descriptors'.
  (close_iconv_descriptors): New static function.
  (get_iconv_codepoint): Use 'scm_i_port_iconv_descriptors'.
  (get_codepoint): Check the port 'encoding_mode'.
  (finalize_iconv_descriptors, open_iconv_descriptors,
  close_iconv_descriptors, scm_i_port_iconv_descriptors): New static
  functions.
  (scm_i_set_port_encoding_x): Adapt to iconv descriptors being moved
  to separate structure, to set the 'encoding_mode' flag, and to use
  'open_iconv_descriptors' and 'close_iconv_descriptors'.

* libguile/print.c (display_string_using_iconv): Use
  'scm_i_port_iconv_descriptors'.
  (display_string): Use 'encoding_mode' flag.
2013-04-01 16:23:26 -04:00
Mark H Weaver
e459855936 Add internal-only port structure and move iconv descriptors there.
* libguile/ports-internal.h: New file.

* libguile/Makefile.am (noinst_HEADERS): Add ports-internal.h.

* libguile/ports.h (scm_t_port): Add a comment mentioning that the
  'input_cd' and 'output_cd' fields of the public structure are no
  longer what they seem to be.

* libguile/ports.c: Include ports-internal.h.

  (finalize_port, scm_i_remove_port, get_iconv_codepoint, get_codepoint,
  scm_i_set_port_encoding_x): Access 'input_cd' and 'output_cd' via the
  new internal port structure.

  (scm_new_port_table_entry): Allocate and initialize the internal port
  structure.

* libguile/print.c: Include ports-internal.h.

  (display_string_using_iconv, display_string): Access 'input_cd' and
  'output_cd' via 'internal' pointer.
2013-04-01 16:13:47 -04:00
Mark H Weaver
663780bb1c Add 'scm_gc_typed_calloc' macro.
* libguile/gc.h (scm_gc_typed_calloc): New macro.
2013-04-01 16:09:57 -04:00
Mark H Weaver
369294866d Fix broken texinfo markup in (ice-9 iconv) docs.
* doc/ref/api-data.texi (Representing Strings as Bytes): Fix broken
  @deffn syntax.
2013-04-01 12:35:24 -04:00
Mark H Weaver
1e05106562 Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
	libguile/r6rs-ports.c
2013-04-01 05:42:31 -04:00
Mark H Weaver
de2bc673bb scm_string_join: properly sequence operations in ADD_TO_APPEND_LIST
* libguile/srfi-13.c (scm_string_join): Properly sequence operations in
  ADD_TO_APPEND_LIST macro.
2013-04-01 05:31:08 -04:00
Mark H Weaver
786ab4258f Optimize 'string-join'.
* libguile/srfi-13.c (string-join): Rewrite to call 'scm_string_append'
  only once.
2013-04-01 03:47:29 -04:00
Mark H Weaver
2f13a46672 Make 'string-append' more efficient and robust.
* libguile/strings.c (scm_string_append): Check for numerical overflow
  while computing the length of the result.  Double-check that we don't
  overflow the result string, and that it is the correct length in the
  end (in case another thread changed the list).  When copying a narrow
  string to a wide result, avoid calling 'scm_i_string_length' and
  'scm_i_string_chars' on each character.
2013-04-01 03:47:09 -04:00
Mark H Weaver
3b80c35852 Fix typos in 'string-join' docs: 'string-infix' -> 'strict-infix'.
* doc/ref/api-data.texi (String Constructors): In definition of
  'string-join', change 'string-infix' -> 'strict-infix'.

* libguile/srfi-13.c (scm_string_join): In docstring, change
  'string-infix' -> 'strict-infix'.
2013-04-01 01:21:30 -04:00
Mark H Weaver
47f2bce5ae Avoid unnecessary peeks for EOF in r6rs-ports.
* libguile/r6rs-ports.c (scm_get_bytevector_n, scm_get_bytevector_n_x,
  scm_get_bytevector_some, scm_get_bytevector_all): Avoid peeking for
  EOF when we already know.
2013-03-31 21:12:31 -04:00
Mark H Weaver
86cf4773ff Merge remote-tracking branch 'origin/stable-2.0' 2013-03-30 22:56:27 -04:00
Mark H Weaver
b05257b923 Add -C command-line option to adjust %load-compiled-path.
* module/ice-9/command-line.scm (compile-shell-switches):
  Implement -C option.
  (*usage*): Add -C option.

* doc/ref/guile-invoke.texi (Command-line Options): Add docs.
2013-03-30 22:49:46 -04:00
Ludovic Courtès
beac49b8e1 Augment `.gitignore'. 2013-03-29 19:20:01 +01:00
Ludovic Courtès
df3d365a99 build: Build and check (ice-9 popen) only when --enable-posix and HAVE_FORK.
Fixes <http://bugs.gnu.org/13848>.
Reported by Jan Schukat <shookie@email.de>.

* configure.ac: Rename `HAVE_FORK' conditional to `BUILD_ICE_9_POPEN'.
  Set it when both $enable_posix and $ac_cv_func_fork are true.
* libguile/posix.c (scm_init_posix): Add the `fork' feature.
* doc/ref/api-options.texi (Common Feature Symbols): Add `fork'.
* doc/ref/posix.texi (Pipes): Add footnote mentioning the `fork'
  feature.
* module/Makefile.am (SCRIPTS_SOURCES): Make `scripts/autofrisk.scm' and
  `scripts/scan-api.scm' conditional on `BUILD_ICE_9_POPEN'.
* test-suite/tests/popen.test (if-supported): New macro.
  Wrap body in `if-supported'.
2013-03-29 19:20:01 +01:00
Ludovic Courtès
7e7c6f6a93 build: Remove redundant check for `struct timespec'.
* m4/gnulib-cache.m4: Add `time'.
* lib/Makefile.am: Update, still from v0.0-7865-ga828bb2.
* configure.ac: Remove check for `struct timespec', which was redundant
  with Gnulib, and conflicted with pthread-win32's <pthread.h>:
  <http://lists.gnu.org/archive/html/bug-gnulib/2013-03/msg00096.html>.
2013-03-29 19:20:01 +01:00
pcpa
51c96f9e19 Do not start over jit generation if can safely grow buffer size.
* include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_memory.c,
	lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c,
	lib/lightning.c: Do not start over jit generation if can grow
	the code buffer with mremap without moving the base pointer.
2013-03-29 12:53:40 -03:00
Mark H Weaver
7bfbd2935f doc: Use '@defvr' to introduce 'stream-null'.
* doc/ref/srfi-modules.texi (SRFI-41): Use @defvr to introduce
  'stream-null'.
2013-03-29 11:35:20 -04:00
Mark H Weaver
0ddf484d3e Revert "doc: Consider `stream-null' as a variable."
This reverts commit 4a0821a8d5.
2013-03-29 11:33:59 -04:00
pcpa
c39def9dce Add a simple memory management wrapper.
* lib/jit_memory.c: Implement a simple memory allocation wrapper
	to allow overriding calls to malloc/calloc/realloc/free, as well
	as ensuring all memory containing pointers is zero or points to
	allocated memory.

	* include/lightning.h, include/lightning/jit_private.h: Definitions
	for the memory allocation wrapper.

	* lib/Makefile.am: Update for new jit_memory.c file.

	* lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips.c, lib/jit_note.c,
	lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c:
	Use the new memory allocation wrapper code.
2013-03-29 12:10:36 -03:00
Mark H Weaver
c33ecf96a4 Merge remote-tracking branch 'origin/stable-2.0' 2013-03-28 22:24:00 -04:00
Ludovic Courtès
4702deb424 tests: Skip `test-pthread-create-secondary' except on Linux-based systems.
* test-suite/standalone/test-pthread-create-secondary.c: Skip on
  non-Linux-based systems.
2013-03-28 23:33:44 +01:00
Ludovic Courtès
465ff50245 build: Require GMP >= 4.2.
* NEWS, README: Update.
2013-03-28 22:53:59 +01:00
Ludovic Courtès
2a7d614cc0 tests: Fix file name canonicalization tests for when $srcdir contains symlinks.
* test-suite/tests/ports.test ("%file-port-name-canonicalization"): Use
  `pass-if-equal' instead of `pass-if'.
  ["relative canonicalization from ice-9"]: Throw to `unresolved' when
  %LOAD-PATH is not canonical.
  ["absolute canonicalization from ice-9"]: Canonicalize the result.
2013-03-28 22:42:31 +01:00
Ludovic Courtès
8d6e3dd83a Add Gnulib commit ID in `NEWS'. 2013-03-28 22:19:12 +01:00
Ludovic Courtès
07b390d582 Allow compilation with GMP < 5.0.0.
* libguile/numbers.c (VARARG_MPZ_ITERATOR)[!HAVE_DECL_MPZ_INITS]: New
  macro.
  (mpz_inits, mpz_clears)[!HAVE_DECL_MPZ_INITS]: New functions.
* configure.ac: Check for the declaration of `mpz_inits'.
2013-03-28 22:19:12 +01:00
Ludovic Courtès
06589f5c22 Fix erroneous FUNC_NAME' for scm_array_length'.
* libguile/generalized-arrays.c (scm_array_length): Fix `FUNC_NAME'.
2013-03-28 22:19:12 +01:00
Ludovic Courtès
4a0821a8d5 doc: Consider `stream-null' as a variable.
* doc/ref/srfi-modules.texi (SRFI-41): Use @var{stream-null}, not
  @code{stream-null}.  Use @defvr to introduce `stream-null'.
2013-03-28 22:19:10 +01:00
Ian Price
10d278fde5 Document (system repl server)
* doc/ref/api-evaluation.texi (REPL Servers): New Subsection.
2013-03-28 19:15:26 +00:00
Mark H Weaver
26d148066f Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
	configure.ac
	libguile/deprecated.c
	libguile/deprecated.h
	libguile/filesys.h
	libguile/fluids.c
	libguile/fports.c
	libguile/gc.c
	libguile/guile.c
	libguile/numbers.c
	libguile/objcodes.c
	libguile/r6rs-ports.c
	libguile/smob.c
	libguile/socket.c
	libguile/threads.h
	module/language/scheme/decompile-tree-il.scm
	module/language/tree-il/peval.scm
	test-suite/tests/syncase.test
2013-03-28 05:09:53 -04:00
Mark H Weaver
579127cce4 SRFI-41 stream-null is a Scheme Variable, not a Constant.
Suggested by Ludovic Courtès <ludo@gnu.org>.

* doc/ref/srfi-modules.texi (SRFI-41 Stream Primitives):
  Label 'stream-null' as a Scheme Variable, not a Constant.
2013-03-27 21:11:06 -04:00