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

7272 commits

Author SHA1 Message Date
Ludovic Courtès
69b6da07c3 Use `scm_is_eq' in filesys.c.
* libguile/filesys.c (is_file_name_separator): Use `scm_is_eq' instead
  of `=='.  Fixes <http://hydra.nixos.org/build/4261579>.
2013-03-04 08:57:08 +01:00
Ludovic Courtès
01b69e79f6 Allow the SMOB mark procedures to be called when libgc uses parallel markers.
Fixes <http://bugs.gnu.org/13611>.
Reported by Mike Gran <spk121@yahoo.com>.

* libguile/smob.c (current_mark_stack_pointer,
  current_mark_stack_limit): New variables.
  (smob_mark): Use CURRENT_MARK_STACK_POINTER and
  CURRENT_MARK_STACK_LIMIT instead of the same-named fields of
  `SCM_I_CURRENT_THREAD'.
  (scm_gc_mark): Likewise.
  (scm_smob_prehistory): Initialize CURRENT_MARK_STACK_LIMIT and
  CURRENT_MARK_STACK_POINTER.
* libguile/threads.h (scm_i_thread): Add comment that
  `current_mark_stack_ptr' and `current_mark_stack_limit' are no longer
  used.
2013-03-01 17:50:05 +01:00
Ludovic Courtès
0f595d7d1d Use accessors instead of symbols deprecated in libgc 7.3.
* configure.ac: Check for `GC_set_all_interior_pointers',
  `GC_get_gc_no', and `GC_set_java_finalization'.
* libguile/gc.c (scm_gc_stats)[HAVE_GC_GET_GC_NO]: Use `GC_get_gc_no'.
  (scm_storage_prehistory)[HAVE_GC_SET_ALL_INTERIOR_POINTERS]: Use
  `GC_set_all_interior_pointers'.
* libguile/guardians.c (scm_init_guardians)[HAVE_GC_SET_JAVA_FINALIZATION]:
  Use `GC_set_java_finalization'.
2013-03-01 17:50:05 +01:00
Mark H Weaver
8dd01861a9 Fix later-bindings-win logic in with-fluids.
Based on a patch by David Kastrup <dak@gnu.org>.
Fixes <http://bugs.gnu.org/13843>.

* libguile/fluids.c (scm_i_make_with_fluids): Reverse direction of inner
  loop that checks for duplicates, to properly handle more than two
  bindings to the same fluid.
2013-02-28 18:43:09 -05:00
Mark H Weaver
b8d8f8b929 Fix duplicate removal of with-fluids.
Based on a patch by David Kastrup <dak@gnu.org>.
Fixes <http://bugs.gnu.org/13838>.

* libguile/fluids.c (scm_i_make_with_fluids): Remove the duplicate
  binding instead of the last binding.

* test-suite/tests/fluids.test: Add test, and fix existing duplicate
  tests.

* THANKS: Thanks David Kastrup.
2013-02-28 06:26:22 -05:00
Mark H Weaver
5ccc3764b3 Support calling foreign functions of 10 arguments or more.
* libguile/foreign.c (OBJCODE_HEADER, META_HEADER, META): Change these
  into higher-order macros.
  (GEN_CODE): New higher-order macro based on 'CODE'.
  (M_STATIC, M_DYNAMIC): New macros.
  (CODE): Reimplement using 'GEN_CODE' and 'M_STATIC'.
  (make_objcode_trampoline): New static function.
  (large_objcode_trampolines, large_objcode_trampolines_mutex): New
  static variables.
  (get_objcode_trampoline): New static function.
  (cif_to_procedure): Use 'get_objcode_trampoline'.

* test-suite/standalone/test-ffi-lib.c (test_ffi_sum_many):
  New function.

* test-suite/standalone/test-ffi: Add test.
2013-02-28 04:11:35 -05:00
David Kastrup
a5d8f98c60 Let reverse! accept arbitrary types as second argument (new_tail)
* libguile/list.c (scm_reverse_x): remove typecheck for 2nd arg.

Signed-off-by: Mark H Weaver <mhw@netris.org>
2013-02-27 20:46:58 -05:00
Ludovic Courtès
94a7029acf Fix cross-compilation of `c-tokenize.o'.
* libguile/Makefile.am (c-tokenize.$(OBJEXT)): Pass -I$(top_builddir)
  when cross-compiling.
2013-02-27 20:40:07 +01:00
Mark H Weaver
be6a36a05d Update copyright dates on random.c
* libguile/random.c: Add 2012 and 2013 to the copyright notice.
2013-02-25 22:14:41 -05:00
Mark H Weaver
587f4edd39 random_state_of_last_resort: use getpid directly, instead of scm_getpid
* libguile/random.c: Include <sys/types.h> and <unistd.h> (if present).
  (random_state_of_last_resort): Use getpid directly.
2013-02-25 13:53:49 -05:00
Mark H Weaver
3ec19a7884 Revert "random_state_of_last_resort doesn't rely on HAVE_POSIX"
This reverts commit eaf21539d4.
2013-02-25 13:33:28 -05:00
Mark H Weaver
444b26f739 Revert "random-state-from-platform: simplify pid conditional, and clarify docs."
This reverts commit 08904661a2.
2013-02-25 13:33:14 -05:00
Mark H Weaver
08904661a2 random-state-from-platform: simplify pid conditional, and clarify docs.
* libguile/random.c (random_state_of_last_resort): Simplify optional
  inclusion of PID in the random state.  Clarify in the comments that
  the PID is only included where scm_getpid is present.

* doc/ref/api-data.texi (Random): Clarify that
  'random-state-from-platform' includes the PID in the random state only
  if scm_getpid is present.
2013-02-24 19:57:00 -05:00
Andy Wingo
7a17979ea4 cleanup to filesys.c's handling of file name separators
* libguile/filesys.c (is_file_name_separator): New helper, as in
  load.c.
  (scm_dirname, scm_basename, scm_i_relativize_path): Use
  is_file_name_separator.
2013-02-24 14:20:18 +01:00
Andy Wingo
c21939bc24 simplify scm_stat on mingw
* libguile/filesys.c (scm_stat): Don't munge the filename on MinGW;
  gnulib does that for us.
2013-02-24 14:18:29 +01:00
Andy Wingo
4bab7f01be load.c uses same logic as boot-9 for file names
* libguile/load.c (is_file_name_separator, is_drive_letter):
  (is_absolute_file_name): New helpers, like the ones in boot-9.
  Perhaps we should just define them in C.
  (search_path, scm_try_auto_compile, canonical_suffix): Rewrite using
  the new helpers.
2013-02-24 14:18:27 +01:00
Andy Wingo
eaf21539d4 random_state_of_last_resort doesn't rely on HAVE_POSIX
* libguile/random.c (random_state_of_last_resort): Add the PID as a seed
  only if we have scm_getpid().
2013-02-24 12:46:48 +01:00
Mike Gran
99d1843e2a Update predefined character sets to Unicode 6.2
* libguile/srfi-14.i.c (cs_graphic_ranges, cs_printing_ranges, cs_symbol_ranges)
  (cs_designated_ranges): modified
2013-02-21 06:44:42 -08:00
Andy Wingo
f5ea559aa0 net_db.c doesn't import winsock2.h
* libguile/net_db.c: Don't include winsock2.h; gnulib handles this for
  us as necessary.
2013-02-20 22:57:02 +01:00
Andy Wingo
0e42886088 mkstemp uses O_BINARY
* libguile/mkstemp.c (mkstemp): Add O_BINARY.  Since temp files are
  empty at the beginning, we're not changing the behavior for reading
  files.  For writing files `newline' and ~% can add \r elements as
  needed.  So this is a reasonable thing to do, and it prevents mangling
  of temp files for the compiler.
2013-02-20 21:20:55 +01:00
Andy Wingo
e716f4410f fix an error message loading invalid bytecode
* libguile/objcodes.c (make_objcode_from_file): Add correct error
  message if full_read failed without an errno.
2013-02-19 23:03:19 +01:00
Andy Wingo
5a4a4454c5 copy-file and load-objcode use O_BINARY
* libguile/filesys.c (scm_copy_file):
* libguile/objcodes.c (scm_load_objcode): Use O_BINARY.  Thanks to Eli
  Zaretskii for the patch.
2013-02-19 22:36:22 +01:00
Andy Wingo
9b6316eabc better handling of windows file name conventions
* libguile/filesys.c (scm_system_file_name_convention): New function.
  Exported to Scheme only.

* module/ice-9/boot-9.scm (file-name-separator?, absolute-file-name?):
  New predicates.
  (file-name-separator-string): New global variable.
  (in-vicinity): Use the new procedures.
  (load-user-init, try-module-autoload): Use file-name-separator-string.
  (load-in-vicinity): Update canonical->suffix.  Consistently use the
  term "file name" throughout.

* module/ice-9/psyntax.scm (include): Use global `absolute-file-name?'.

* module/ice-9/psyntax-pp.scm: Regenerate.
2013-02-19 15:00:11 +01:00
Ludovic Courtès
6f160a6e99 build: Fix compilation of `c-tokenize.c' with latest Gnulib.
* libguile/c-tokenize.lex: Include <config.h>, to pull in Gnulib macro
  definitions now required.
2013-02-18 21:43:30 +01:00
Daniel Llorens
739941679c Array documentation fixes
* libguile/generalized-arrays.c: Fix wording of docstring for array-length.
* doc/ref/api-compund.texi:
  - Document scm_array_type(), scm_array_ref(), array-length,
    scm_array_length(), scm_c_array_length().
  - Fix wording of documentation for array-in-bounds?
2013-02-18 16:57:16 +01:00
Andy Wingo
118ff892be deprecate generalized vectors in favor of arrays
* libguile/generalized-arrays.h:
* libguile/generalized-arrays.c (scm_c_array_length):
  (scm_array_length): New functions.

* module/ice-9/deprecated.scm:
* libguile/generalized-vectors.c:
* libguile/generalized-vectors.h:
* libguile/deprecated.h:
* libguile/deprecated.c (scm_generalized_vector_p)
  (scm_generalized_vector_length, scm_generalized_vector_ref)
  (scm_generalized_vector_set_x, scm_generalized_vector_to_list):
  Deprecate.

* libguile/uniform.c (scm_uniform_vector_to_list): Use
  scm_array_to_list.

* module/ice-9/boot-9.scm (case): Arrays are generalized vectors.

* module/srfi/srfi-4/gnu.scm (define-any->vector): Use the array
  functions instead of the generalized-vector functions.

* test-suite/tests/arrays.test: Remove generalized-vector->list test;
  covered by array->list test.

* test-suite/tests/bitvectors.test:
* test-suite/tests/bytevectors.test:
* test-suite/tests/srfi-4.test: Adapt to test using array interfaces
  instead of generalized-vector interfaces.

* doc/ref/api-compound.texi: Remove generalized vector docs.
* doc/ref/api-data.texi:
* doc/ref/srfi-modules.texi: Adapt.
2013-02-18 16:57:15 +01:00
Andy Wingo
336c921146 optimize access to arrays of rank 1 or 2
* libguile/array-handle.c (scm_array_handle_pos_1):
  (scm_array_handle_pos_2): New functions.

* libguile/generalized-arrays.c (scm_c_array_ref_1, scm_c_array_ref_2):
  (scm_c_array_set_1_x, scm_c_array_set_2_x): New functions.
  (scm_i_array_ref, scm_i_array_set_x): New subr bindings for array-ref
  and array-set! that avoid consing for arrays of rank 1 or 2.

* test-suite/tests/arrays.test ("array-set!"): Fix expected exception
  for wrong number of indices.
2013-02-18 16:38:24 +01:00
Andy Wingo
18cd9aff94 array handle inline functions defined in array-handle.h.
* libguile/inline.h:
* libguile/array-handle.h (scm_array_handle_ref):
  (scm_array_handle_set): Move definitions here from inline.h.

* libguile/inline.c: Include array-handle.h.
2013-02-18 12:46:00 +01:00
Daniel Hartwig
3330f00f54 add hash-count for native tables
* libguile/hashtab.c (scm_hash_count): New function.  Count the number
  of elements in a hash table.

* doc/ref/api-compound.texi (Hash Tables): Update examples and
  reference.

* test-suite/tests/hash.test (hash-count): New test.
2013-02-18 10:21:43 +08:00
Ludovic Courtès
3d2b2676e3 Fix `getgroups' for when zero supplementary group IDs exist.
* libguile/posix.c (scm_getgroups): Return the empty vector when NGROUPS
  is zero.  Reported by Mike Gran <spk121@yahoo.com>.
2013-02-16 18:41:15 +01:00
Mark H Weaver
d4124ac5ce Add copyright notice to gen-scmconfig.c.
* libguile/gen-scmconfig.c: Add copyright notice.
2013-02-02 08:55:04 -05:00
Mark H Weaver
3a3bea729f Add foreign types: ssize_t and ptrdiff_t.
* libguile/foreign.c (sym_ssize_t, sym_ptrdiff_t): New symbols.
  (scm_init_foreign): Add bindings for ssize_t and ptrdiff_t.

* module/system/foreign.scm: Export ssize_t and ptrdiff_t.

* doc/ref/api-foreign.texi (Foreign Types): Add docs.
2013-02-02 04:13:44 -05:00
Mark H Weaver
7facc08a80 Add scm_from_ptrdiff_t and scm_to_ptrdiff_t.
* libguile/numbers.h (scm_from_ptrdiff_t, scm_to_ptrdiff_t):
  New macros (function aliases).

* doc/ref/api-data.texi: Add docs.
2013-02-02 04:13:37 -05:00
Mark H Weaver
bcc7e238c9 Fix typo in comment generated by gen-scmconfig.c.
* libguile/gen-scmconfig.c (main): Fix typo in generated comment.
2013-02-02 04:13:29 -05:00
Andy Wingo
419c873624 Revert "detect and consume byte-order marks for textual ports"
This reverts commit b2cb557d75, which was
pushed accidentally.
2013-01-30 15:30:31 +01:00
Andy Wingo
b2cb557d75 detect and consume byte-order marks for textual ports
* libguile/ports.h:
* libguile/ports.c (scm_consume_byte_order_mark): New procedure.

* libguile/fports.c (scm_open_file): Call consume-byte-order-mark if we
  are opening a file in "r" mode.

* libguile/read.c (scm_i_scan_for_encoding): Don't do anything about
  byte-order marks.

* libguile/load.c (scm_primitive_load): Add a note about the duplicate
  encoding scan.

* test-suite/tests/filesys.test: Add tests for UTF-8, UTF-16BE, and
  UTF-16LE BOM handling.
2013-01-30 13:52:01 +01:00
Ludovic Courtès
aac01de63d Remove unneeded SMOB mark procedure in `memoize.c'.
* libguile/memoize.c (scm_init_memoize): Remove unnecessary call to
  `scm_set_smob_mark'.
2013-01-28 22:28:42 +01:00
Andy Wingo
776491caa2 fix compilation of glil to assembly
* libguile/vm-i-scheme.c (VM_VALIDATE_STRUCT): Fix the error message if
  the value was not a struct.

* module/system/base/compile.scm (find-language-joint): Default to
  joining at the target language.
  (default-language-joiner): Allow sequences of one compiled expression
  to pass through.  Otherwise error as before.
  (read-and-parse): New helper; actually parses.
  (read-and-compile): Use read-and-parse, and fall back to
  default-language-joiner.

Thanks to Nala Ginrut for the report.
2013-01-22 09:19:55 +01:00
Andy Wingo
0bc37aec59 add dynl.x dep on libpath.h
* libguile/Makefile.am (dynl.x): Add dep on libpath.h.  Thanks to Bogdan
  Marinescu for the report.
2013-01-21 22:11:02 +01:00
Andy Wingo
f6fd2c03a5 fix try-module-autoload, which did not detect failure to find the file
* libguile/load.c (scm_primitive_load_path): If the second argument is a
  procedure, call it like a thunk.

* doc/ref/api-evaluation.texi (Load Paths): Update docs.

* module/ice-9/boot-9.scm (resolve-interface): Use `unless'.
  (try-module-autoload): Use the new primitive-load-path to detect
  failure to find an appropriate file.  Fixes a bug reported by Diogo
  F. S. Ramos.  Thanks to Noah Lavine for tracking it down.
2013-01-21 11:21:52 +01:00
Andy Wingo
a796d0a954 warn on multithreaded fork
* libguile/posix.c (scm_fork): Issue a warning on a multithreaded fork.
* doc/ref/posix.texi (Processes): Add note about multithreaded fork.

* test-suite/tests/00-socket.test: Moved here, from socket.test, so as
  to run before any threads are created.
* test-suite/Makefile.am: Adapt.
2013-01-17 12:38:56 +01:00
Andy Wingo
581f410fbd case-lambda* clauses fail to match if too many positionals
* doc/ref/api-procedures.texi (Case-lambda): Expand case-lambda*
  documentation.

* module/ice-9/eval.scm (primitive-eval):
* libguile/eval.c (prepare_boot_closure_env_for_apply): Dispatch to the
  next case-lambda clause if there are too many positionals.

* doc/ref/vm.texi (Function Prologue Instructions):
* libguile/vm-i-system.c (bind-optionals/shuffle-or-br): New
  instruction, like bind-optionals/shuffle but can dispatch to the next
  clause if there are too many positionals.

* module/language/assembly/disassemble.scm (code-annotation):
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
* module/language/assembly/compile-bytecode.scm (compile-bytecode): Add
  case for bind-optionals/shuffle-or-br.
* module/language/glil/compile-assembly.scm (glil->assembly): If there
  is an alternate, use bind-optionals/shuffle-or-br instead of
  bind-optionals/shuffle.

* test-suite/tests/optargs.test ("case-lambda*"): Add tests.
2013-01-14 11:38:09 +01:00
Andy Wingo
921cd222b9 deprecate SCM_CHAR_CODE_LIMIT and char-code-limit
* libguile/__scm.h:
* libguile/deprecated.h (SCM_CHAR_CODE_LIMIT): Move declaration here
  from __scm.h.

* libguile/feature.c:
* module/ice-9/deprecated.scm (char-code-limit): Move definition here.

* test-suite/tests/regexp.test: Update to not use char-code-limit.
2013-01-10 16:01:06 +01:00
Andy Wingo
03a2f59851 slight open-pipe* / open-process refactor
* libguile/posix.c (scm_open_process): Return the ports as values
  instead of calling out to Scheme again to make-rw-port.  This
  function is private to (ice-9 popen).

* module/ice-9/popen.scm (open-pipe*): Adapt to change.
2013-01-08 12:58:05 +01:00
Andy Wingo
44390164ce minor cleanup in values.c
* libguile/values.c (scm_c_value_ref): Use scm_from_size_t to assimilate
  a size_t.
2013-01-07 20:36:41 +01:00
Ludovic Courtès
668ba7c955 Change `system*' to not leave dangling processes behind.
Fixes <http://bugs.gnu.org/13166>.

* libguile/simpos.c (scm_system_star): In the child, call `_exit'
  instead of `SCM_SYSERROR' when `execvp' fails.
* test-suite/tests/posix.test ("system*"): New test prefix.
2012-12-19 23:15:45 +01:00
Ludovic Courtès
cc94810708 Verify the value of `SHUT_RD' and related constants.
* libguile/socket.c: Add `verify' clauses for the values of `SHUT_RD',
  `SHUT_WR', and `SHUT_RDWR'.
2012-12-10 23:41:06 +01:00
Mark H Weaver
2355f01709 Avoid signed integer overflow in scm_product
* libguile/numbers.c (scm_product): Avoid signed integer overflow, which
  modern C compilers are allowed to assume will never happen, thus
  allowing them to optimize out our overflow checks.

* test-suite/tests/numbers.test (*): Add tests.
2012-12-07 12:02:07 -05:00
Mark H Weaver
bd31bce6ac Add parse-path-with-ellipsis, and use it for GUILE_LOAD_PATH et al.
* libguile/load.c (scm_ellipsis): New Variable.
  (scm_parse_path_with_ellipsis): New procedure.
  (scm_init_load): Initialize 'scm_ellipsis'.
  (scm_init_load_path): Use 'scm_parse_path_with_ellipsis' to
  handle GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH.

* libguile/load.h (scm_parse_path_with_ellipsis): Add prototype.

* doc/ref/guile-invoke.texi (Environment Variables):
  doc/ref/api-evaluation.texi (Load Paths): Add documentation.
  Correct description of default load path to reflect reality.
  Remove 'GUILE_LOAD_PATH' from the concept index; it is already
  in the variable index.  Add cross references between these two
  sections of the manual.
2012-11-28 21:58:05 -05:00
Ludovic Courtès
c438cd7175 eval: Store docstrings for lambdas.
Fixes <http://bugs.gnu.org/12173>.
Reported by Ian Price <ianprice90@googlemail.com>.

* libguile/memoize.c (MAKMEMO_LAMBDA): New `docstring' parameter.  Add
  it as the second argument of `SCM_M_LAMBDA'.  Update caller.
  (memoize)[SCM_M_LAMBDA]: Extract docstring from EXP; when `memoize'
  returns, add the docstring to the lambda's arguments.
  (unmemoize)[SCM_M_LAMBDA]: Adjust to new argument layout of
  `SCM_M_LAMBDA'.
* libguile/eval.c (BOOT_CLOSURE_NUM_REQUIRED_ARGS,
  BOOT_CLOSURE_HAS_REST_ARGS, BOOT_CLOSURE_IS_REST,
  BOOT_CLOSURE_PARSE_FULL): Adjust to new argument layout of
  `SCM_M_LAMBDA'.
* module/ice-9/eval.scm (primitive-eval)[make-general-closure]:
  Likewise.
  [eval]: When EXP is a lambda, match its docstring; when the docstring
  is not #f, add it to the closures procedure properties.
* test-suite/tests/eval.test ("docstrings"): New test prefix.

* libguile/procs.c (sym_documentation): Rename to...
  (scm_sym_documentation): ... this.  Make it global.
* libguile/procs.h (scm_sym_documentation): New declaration.
2012-11-28 16:43:59 +01:00