1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-02 04:40:29 +02:00
Commit graph

7681 commits

Author SHA1 Message Date
Andy Wingo
13d807b7d3 fix segfault in goops if class fields are redefined
* libguile/goops.c (map, filter_cpl, remove_duplicate_slots): Use
  scm_is_pair instead of !scm_is_null, given that we use accessor
  macros.
  (check_cpl, build_slots_list): Check that descendents of <class> can't
  redefine slots of <class>.

* test-suite/tests/goops.test ("defining classes"): Add a test.

Patch originally by Stefan Israelsson Tampe.
2011-10-21 00:22:50 +02:00
Andy Wingo
3e54fdfc21 slight frames.h refactor
* libguile/frames.h: Instead of doing a lot of nasty pointer match and
  casts here, simply define a struct that aliases the contents of a
  stack frame.  There are some naming issues here, that the SCM_FRAME
  macros access the scm_vm_frame structure, but SCM_VM_FRAME macros
  access scm_frame; oh well.
2011-10-19 11:55:27 +02:00
Cedric Cellier
c7519da3ea Default to using poll(2) in `fport_input_waiting'.
* libguile/fports.c (fport_input_waiting): Use poll(2) instead of
  select(2) when possible.  Cosmetic changes by Ludovic Courtès.
2011-10-15 16:27:18 +02:00
Andy Wingo
c259741533 revise comments in libguile/tags.h
* libguile/tags.h: Revise the comments to reflect libgc reality.
2011-10-15 11:22:10 +02:00
Andy Wingo
a215c15913 Merge remote-tracking branch 'origin/stable-2.0'
Does not include psyntax regeneration.

Conflicts:
	module/ice-9/psyntax-pp.scm
	module/language/tree-il/peval.scm
	test-suite/tests/tree-il.test
2011-10-10 16:20:08 +02:00
Mike Gran
022dda6901 New functions scm_is_exact and scm_is_inexact
* doc/ref/api-data.texi (Exact and Inexact Numbers): doc for scm_is_exact
  and scm_is_inexact
* libguile/numbers.c (scm_is_exact, scm_is_inexact): new functions
* libguile/numbers.h: declarations for scm_is_exact and scm_is_inexact
* test/suite/standalone/test-conversion.c (test_is_exact, test_is_inexact):
  new tests
2011-10-09 20:54:37 -07:00
Andy Wingo
6d5f8c324e fix reading of #||||#
* libguile/read.c (scm_read_r6rs_block_comment):
* test-suite/tests/reader.test ("reading"): Fix reading of #||||#,
  originally reported in bug debbugs.gnu.org/9672, by Bruno Haible.
  Thanks, Bruno!
2011-10-05 20:41:15 +02:00
Andy Wingo
ca12824581 Merge remote-tracking branch 'origin/stable-2.0'
This was a pretty big merge involving a fair amount of porting,
especially to peval and its tests.  I did not update psyntax-pp.scm,
that comes in the next commit.

Conflicts:
	module/ice-9/boot-9.scm
	module/ice-9/psyntax-pp.scm
	module/language/ecmascript/compile-tree-il.scm
	module/language/tree-il.scm
	module/language/tree-il/analyze.scm
	module/language/tree-il/inline.scm
	test-suite/tests/tree-il.test
2011-09-29 18:02:28 +02:00
Julian Graham
ccb771575a Remove extraneous semicolon from `SCM_STATIC_SUBR_OBJVECT' to prevent ISO C90 warning.
* snarf.h (SCM_STATIC_SUBR_OBJVECT): Remove semicolon at end of macro
  definition.
2011-09-19 22:02:49 +02:00
Andy Wingo
25f4a88032 Revert "SCM is a union"
This reverts commit 8787d7a170.
2011-09-15 12:28:17 -07:00
Andy Wingo
75917d6243 Revert "SCM is either a union or scm_t_bits"
This reverts commit 80125469ef.

Conflicts:

	libguile/__scm.h
2011-09-15 12:28:03 -07:00
Andy Wingo
fe13364050 fix scm_to_latin1_stringn for substrings
* libguile/strings.c (scm_to_latin1_stringn): Fix for substrings.

* test-suite/standalone/Makefile.am:
* test-suite/standalone/test-scm-to-latin1-string.c: Add test case.

  Thanks to David Hansen for the bug report and test case, and Stefan
  Israelsson Tampe for the fix.
2011-09-10 11:38:25 -07:00
Ludovic Courtès
91db4a375c Fix misdiagnoses of deprecated `+nan.[^0]' forms.
* libguile/numbers.c (mem2ureal): Check the result of `mem2uinteger'
  against `SCM_INUM0', not 0.
  (mem2uinteger): Add comment.
2011-09-03 22:53:36 +02:00
Andy Wingo
5f237d6e0e deprecate +nan.1
* libguile/numbers.c (mem2ureal): Deprecate nan values that are not
  "+nan.0".
2011-09-03 18:37:51 +02:00
Andy Wingo
8b66aa8f54 Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
	libguile/bytevectors.c
	libguile/bytevectors.h
	libguile/objcodes.c
	libguile/r6rs-ports.c
	libguile/strings.c
	libguile/vm.c
2011-08-31 09:34:54 +02:00
Andy Wingo
0b4f77192d fix scm_gc_strdup invocation
* libguile/i18n.c (get_current_locale): Fix scm_gc_strdup invocation.
2011-08-29 22:20:39 +02:00
Andy Wingo
fb031aba42 fix a couple of leaks
* libguile/bytevectors.h:
* libguile/bytevectors.c (scm_c_take_gc_bytevector): Rename this
  internal function, from scm_c_take_bytevector.  This indicates that
  unlike the other scm_take_* functions, this one takes GC-managed
  memory.

* libguile/objcodes.c (scm_objcode_to_bytecode):
* libguile/vm.c (really_make_boot_program): Use
  scm_gc_malloc_pointerless, not scm_malloc.  Thanks to Stefan
  Israelsson Tampe!

* libguile/r6rs-ports.c:
* libguile/strings.c: Adapt to renames.
2011-08-18 12:53:28 +02:00
Andy Wingo
81bda963e9 fix scm_tmpfile leak
* libguile/posix.c (scm_tmpfile): Fix to actually close the new
  tmpfile, causing its deletion, while keeping an fd to the file open.
  Fixes a leak both in memory and disk space on POSIX systems; MINGW
  systems will leak however.  A FIXME for later.
2011-08-17 23:54:58 +02:00
Andy Wingo
42f9581238 fix leak in get_current_locale()
* libguile/i18n.c (get_current_locale): Hold the locale name in a
  GC-managed string, not a mallocated string.  Thanks to Stefan
  Israelsson Tampe for the report.
2011-08-16 13:16:21 +02:00
Andy Wingo
e7a81c7acd fix take-right and drop-right for improper lists
* libguile/srfi-1.h:
* libguile/srfi-1.c (scm_srfi1_drop_right, scm_srfi1_take_right): Remove
  these internal functions, replacing with Scheme implementations.

* module/srfi/srfi-1.scm (take-right, drop-right): Add these impls from
  the reference code.  They do the right thing for improper lists,
  according to the spec, but they diverge for circular lists.  Oh well.

* test-suite/tests/srfi-1.test ("drop-right", "take-right"): Add more
  tests.
2011-08-12 23:26:15 +02:00
Andy Wingo
a6e1e05094 avoid duplicate stats when searching for files in a path
* libguile/load.c (search_path): Extract from scm_search_path, to
  give the caller the stat buffer of the found path.
  (scm_search_path, scm_sys_search_load_path): Adapt accordingly.
  (compiled_is_fresh): Take the stat buffers directly.
  (scm_primitive_load_path, scm_init_eval_in_scheme): Adapt to
  search_path / compiled_is_fresh changes to avoid duplicate states in
  search-path.
2011-08-03 12:43:29 +02:00
Andy Wingo
e4f6e855b6 fix unnecessary call to canonicalize_path in load-path fast case
* libguile/load.c (scm_primitive_load_path): Don't canonicalize the
  filename unless we need to look in the fallback path.  Fixes a stat
  explosion; see http://savannah.gnu.org/bugs/?33815.
2011-08-03 11:46:56 +02:00
Andy Wingo
0f75cc7809 simplify narrow_stack.
* libguile/stacks.c (narrow_stack): Simplify outer narrowing by a number
  of frames.  Thanks to
  http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-29 09:17:47 +02:00
Andy Wingo
89f886122a style fix in read.c
* libguile/read.c (scm_read_sexp): No need to assign to tmp here.
2011-07-29 09:14:04 +02:00
Andy Wingo
3b08b1c24d minor style fix in bytevectors.c
* libguile/bytevectors.c (SCM_BYTEVECTOR_HEADER_BYTES): Use sizeof
  scm_t_bits, not sizeof SCM.  It's the same, but it seems like the
  right thing.
2011-07-29 09:11:24 +02:00
Andy Wingo
2700aa43f2 fix a leak on startup from script.c
* libguile/script.c (scm_get_meta_args): Free nargv.  Thanks to
  http://article.gmane.org/gmane.lisp.guile.devel/12685.  We leak narg
  though.
2011-07-29 09:10:37 +02:00
Andy Wingo
7c888dfa6e fix read beyond end of hashtable size array in hashtab.c
* libguile/hashtab.c (make_hash_table): Fix read beyond end of
  hashtable_size array.  Thanks to
  http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-28 19:07:53 +02:00
Andy Wingo
eff3dd99f7 fix write beyond array end in arrays.c
* libguile/arrays.c (scm_i_read_array): Fix write past end of array
  while reading array type tag.  Fix non-ascii type tag elements.
  Thanks to http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-28 19:04:38 +02:00
Andy Wingo
2b14df4bc7 fix list validation bug in @abort
* libguile/control.c (scm_at_abort): Fix to ensure that we store the
  return of scm_ilength in a signed integer, even if later we copy it to
  an unsigned.  See
  http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-28 18:17:45 +02:00
Andy Wingo
bd61f2e64f remove dead code in scm_ceiling_quotient
* libguile/numbers.c (scm_ceiling_quotient): Remove dead code.  See
  http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-28 17:59:56 +02:00
Andy Wingo
74ec8d786f fix scm_i_tag_name
* libguile/gc.c (scm_i_tag_name): Fix to work as intended, though it was
  not called.  See http://article.gmane.org/gmane.lisp.guile.devel/12685.
2011-07-28 17:52:29 +02:00
Andy Wingo
ab4bc85398 Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
	GUILE-VERSION
	test-suite/tests/srfi-4.test
2011-07-25 18:26:37 +02:00
Andy Wingo
f29c300507 fix GC_get_suspend_signal on Mac OS
* libguile/scmsigs.c (GC_get_suspend_signal): Fix the back-compatibility
  shim for this function to work on some other cases; I hadn't realized
  that gcconfig.h could set SIG_SUSPEND.  Thanks to Aleix Conchillo
  Flaqué for the report.
2011-07-25 18:25:14 +02:00
Andy Wingo
9957641b60 add a site dir to %load-compiled-path
* libguile/Makefile.am (libpath.h): Define SCM_SITE_CCACHE_DIR.  Defined
  as site-ccache/ instead of site/ccache/ to indicate that we don't expect
  further subdirectories, and also to avoid confusion about whether
  extensions/ is a site-specific or not.

* libguile/load.c (scm_init_load_path): Add SCM_SITE_CCACHE_DIR to the
  default load-compiled path.
2011-07-21 10:36:13 +02:00
Ludovic Courtès
126a322431 Fix `open' mode bits on GNU/Hurd.
* libguile/filesys.c (scm_open): Fix check for read-write flags for
  systems such as GNU/Hurd, where O_RDWR == (O_WRONLY | O_RDONLY)
  and O_RDONLY != 0.
2011-07-13 00:02:00 +02:00
Ludovic Courtès
3565df4546 Define `O_NOTRANS' on GNU/Hurd.
* libguile/filesys.c (scm_init_filesys): Define `O_NOTRANS' when
  available.
2011-07-13 00:02:00 +02:00
Andy Wingo
ae88d9bcf6 fix CPL of <extended-generic-with-setter> and <extended-accessor>
* libguile/goops.c (fix_cpl): Fix bug in placement of debug assertion.
  (create_standard_classes): Put <extended-generic> before
  <generic-with-setter> in <extended-generic-with-setter>'s direct
  supers, so that the slot allocation is a superset of
  <generic-with-setter>, which results in the `setter' being allocated
  in the same place.

  Likewise fix <extended-accessor> to place <extended-generic> before
  <generic-with-setter>, not just <generic>.
2011-07-07 13:02:59 +02:00
Andy Wingo
319dd08936 fix invocation of duplicate handlers for merge-generics
* libguile/modules.c (resolve_duplicate_binding): Fix unbound -> #f
  conversion for the imported bindings.  Pass the existing entry in the
  import obarray as the resolved var (7th arg), and properly pass #f as
  the value (8th arg) if there is no such binding.  Fixes
  merge-generics; before, the <boolean> type test (indicating no
  previous value) was not being triggered.  This bug has been present
  since 2007 at least, though it was not in 1.8.

* test-suite/tests/modules.test ("duplicate bindings"): Add a test that
  the var and val are both #f.  These types are used by GOOPS.
2011-07-07 13:02:45 +02:00
Ludovic Courtès
37a5970c19 VM: Keep jump table address in a register.
* libguile/vm-engine.c (VM_NAME)[HAVE_LABELS_AS_VALUES]: Rename
  `jump_table' to `jump_table_pointer'.  Add `jump_table' as a local
  variable, initialize it.

* libguile/vm-engine.h (JT_REG): New macro.
2011-07-06 12:50:32 +02:00
Ludovic Courtès
4f39f31ea5 Revert "Fix lock ordering in fat_mutex_lock' to match that of do_thread_exit'."
This reverts commit ccb80964cd, which
introduced a race condition, with a small window during which a mutex
could be held by a thread without being part of its `mutexes' list,
thereby violating the invariant tested at line 667.
2011-07-01 22:46:32 +02:00
Ludovic Courtès
97ec95b728 Type-check the OWNER argument of `lock-mutex'.
* libguile/threads.c (scm_lock_mutex_timed): Type-check OWNER.
2011-07-01 19:10:18 +02:00
Ludovic Courtès
4bc95fccad Add type and range checks to the complex generalized vector accessors.
* libguile/bytevectors.c (COMPLEX_ACCESSOR_PROLOGUE, COMPLEX_NATIVE_REF,
  COMPLEX_NATIVE_SET): New macros.
  (bytevector_ref_c32, bytevector_ref_c64): Defined in terms of
  `COMPLEX_NATIVE_REF'.
  (bytevector_set_c32, bytevector_set_c64): Defined in terms of
  `COMPLEX_NATIVE_SET'.
  (bytevector_ref_fns): Make `static'.

* test-suite/tests/srfi-4.test ("c32 vectors")["generalized-vector-ref",
  "generalized-vector-set!", "generalized-vector-ref, out-of-range",
  "generalized-vector-set!, out-of-range"]: New tests.
  ("c64 vectors")["generalized-vector-ref", "generalized-vector-set!",
  "generalized-vector-ref, out-of-range",
  "generalized-vector-set!, out-of-range"]: New tests.
2011-07-01 19:09:29 +02:00
Ludovic Courtès
1e8f939229 Fix unaligned accesses for bytevectors of complex numbers.
* libguile/bytevectors.c (bytevector_ref_c32, bytevector_ref_c64,
  bytevector_set_c32, bytevector_set_c64): Use `memcpy' to avoid
  unaligned accesses.  This fixes SIGBUS on SPARC and possibly other
  alignment-sensitive platforms.
2011-07-01 16:21:21 +02:00
Ludovic Courtès
e780c14fd0 i18n: Don't use `!=' to compare SCMs.
* libguile/i18n.c (install_locale)[!USE_GNU_LOCALE_API]: Use
  `SCM_UNBNDP' instead of `!='.
2011-07-01 15:29:51 +02:00
Andy Wingo
1f7945a768 fix '(a #{.} b)
* libguile/read.c (scm_read_sexp): Don't confuse `#{.}#' with `.' for
  the purpose of reading dotted pairs.  Thanks to CRLF0710 for the
  report.

* test-suite/tests/reader.test ("#{}#"): Add test.
2011-07-01 12:20:52 +02:00
Andy Wingo
28d0871b55 defining a smob or port type no longer mucks exports of (oop goops)
* libguile/goops.c (DEFVAR): Remove this helper macro, replacing its
  uses with scm_module_define, but without scm_module_export.
  (create_basic_classes, scm_init_goops_builtins): Update callers.
  (make_class_from_template, make_class_from_symbol): Change to not
  define variables for classes.  This affects ports, struct classes, and
  smob classes.

* module/oop/goops.scm: Explicitly list our exports, so there is no more
  trickery happening in C.
  (find-subclass): Private helper to grub the class hierarchy, so we can
  define bindings for smobs, ports, etc.  Use to define the classes that
  goops.c used to define -- probably a subset, but it's better to have
  them listed.
2011-07-01 11:46:32 +02:00
Ludovic Courtès
b8441577f9 Fix `on_thread_exit' for canceled threads.
* libguile/threads.c (on_thread_exit): Clear `t->guile_mode' upon
  entry.  This fixes a bug whereby `t->base' would be incorrect for
  canceled threads, leading to a misdiagnosed VM stack overflow.
  See <http://lists.gnu.org/archive/html/bug-guile/2011-06/msg00068.html>
  for details.
  (scm_leave_guile_cleanup): Remove because it's unused.
2011-06-30 22:58:07 +02:00
Andy Wingo
6934d9e75f fix generation of auto-compiled file names on mingw systems
* libguile/load.c (canonical_to_suffix, scm_primitive_load_path):
* module/ice-9/boot-9.scm (load-in-vicinity):
* module/system/base/compile.scm (compiled-file-name): If the canonical
  path of a file is a DOS-style path with a drive letter, turn it into a
  path suffix it by removing the colon and prefixing a "/".

Inspired by a patch from Jan Nieuwenhuizen.
2011-06-30 16:07:17 +02:00
Andy Wingo
8a562c697b Merge remote-tracking branch 'local-2.0/stable-2.0'
Conflicts:
	libguile/deprecated.c
	module/ice-9/psyntax-pp.scm
2011-06-30 13:47:46 +02:00
Andy Wingo
dcada7d8e7 %load-hook not just for primitive-load
* libguile/load.c (scm_primitive_load_path):
* module/ice-9/boot-9.scm (load-in-vicinity): Call %load-hook as needed.
2011-06-30 12:56:12 +02:00