bpt/guile.git
12 years agopeval doesn't resolve primitives
Andy Wingo [Fri, 4 Nov 2011 12:38:28 +0000 (13:38 +0100)]
peval doesn't resolve primitives

* module/language/tree-il/peval.scm (peval): Don't resolve primitives,
  as resolve-primitives! handles that already.

* test-suite/tests/tree-il.test (pass-if-peval): Always resolve and
  expand primitives.
  ("partial evaluation"): Update tests to assume expanded primitives.

12 years agoresolve-primitives! does not primitivize local definitions
Andy Wingo [Fri, 4 Nov 2011 12:37:58 +0000 (13:37 +0100)]
resolve-primitives! does not primitivize local definitions

* module/language/tree-il/primitives.scm (resolve-primitives!): Don't
  resolve toplevels defined in the same compilation unit to primitives,
  as it could be that the module doesn't have those bindings yet.

12 years agomore robust scm_exit_status
Andy Wingo [Fri, 4 Nov 2011 12:35:19 +0000 (13:35 +0100)]
more robust scm_exit_status

* libguile/throw.c (scm_exit_status): In one of my bogus patches, I
  managed to make #<unspecified> reach this function, causing a segfault
  on SCM_CAR.  Refactor to be more robust.

12 years agorefactor chi-top-sequence
Andy Wingo [Fri, 28 Oct 2011 10:14:00 +0000 (12:14 +0200)]
refactor chi-top-sequence

* module/ice-9/psyntax.scm (chi-top-sequence): Refactor slightly.
* module/ice-9/psyntax-pp.scm: Regenerate.

12 years agoregenerate psyntax-pp
Andy Wingo [Fri, 28 Oct 2011 09:41:08 +0000 (11:41 +0200)]
regenerate psyntax-pp

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

12 years agoadd string-length, string-ref, vector-length instructions
Andy Wingo [Fri, 28 Oct 2011 09:38:56 +0000 (11:38 +0200)]
add string-length, string-ref, vector-length instructions

* libguile/_scm.h (SCM_OBJCODE_MAJOR_VERSION): Bump the major version,
  indicating the first incompatibility between 2.0 and 2.2.

* libguile/vm-i-scheme.c (string-length, string-ref, vector-length): New
  instructions.

* module/language/tree-il/compile-glil.scm (*primcall-ops*): Add
  primcall ops for the new instructions.

12 years agoadd vector-length primitive
Andy Wingo [Fri, 28 Oct 2011 09:19:01 +0000 (11:19 +0200)]
add vector-length primitive

* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*, *effect-free-primitives*): Recognize
  vector-length as an effect-free primitive.

12 years agosimplify primitives.scm
Andy Wingo [Fri, 28 Oct 2011 08:29:46 +0000 (10:29 +0200)]
simplify primitives.scm

* module/language/tree-il/primitives.scm (*primitive-expand-table*):
  Remove a hack to compensate for the lack of a good inliner, now that
  we do have a good inliner.

12 years agofix the peval merge and a test
Andy Wingo [Thu, 27 Oct 2011 12:09:47 +0000 (14:09 +0200)]
fix the peval merge and a test

* module/language/tree-il/peval.scm (peval): Accessor primitives applied
  to constants are pure if the call type-checks.  Also, fold constants
  in accessor primcalls.

* test-suite/tests/tree-il.test ("partial evaluation"): Fix the "yo"
  test.

12 years agofix hash of zero-length vectors
Andy Wingo [Thu, 27 Oct 2011 12:00:38 +0000 (14:00 +0200)]
fix hash of zero-length vectors

* libguile/hash.c (scm_raw_ihash): Fix for zero-length vectors.

12 years agoMerge remote-tracking branch 'origin/stable-2.0'
Andy Wingo [Thu, 27 Oct 2011 11:45:04 +0000 (13:45 +0200)]
Merge remote-tracking branch 'origin/stable-2.0'

Conflicts:
GUILE-VERSION
libguile/deprecated.c
libguile/gc-malloc.c
module/language/tree-il/peval.scm

12 years agoupdate `hash'
Andy Wingo [Tue, 25 Oct 2011 23:44:48 +0000 (01:44 +0200)]
update `hash'

* libguile/hash.c (scm_raw_ihash): Rename from `hasher'.  Remove the
  modulo argument; we expect the caller to deal with that.  Use
  scm_i_hashq for immediates and non-immediate integers.  Use
  scm_raw_ihashq on pointers too.  Update the vector and pairs hashing
  code.  There is still some work to do here.
  (scm_ihashv, scm_ihash): Adapt.

12 years agodon't downcase characters before hashing them
Andy Wingo [Tue, 25 Oct 2011 22:42:17 +0000 (00:42 +0200)]
don't downcase characters before hashing them

* libguile/hash.c (hasher, scm_ihashv): Don't downcase characters before
  hashing them.  That is silly.

12 years agoscm_hasher is static
Andy Wingo [Tue, 25 Oct 2011 22:38:47 +0000 (00:38 +0200)]
scm_hasher is static

* libguile/hash.c (hasher): Make static.
* libguile/hash.h: Remove scm_hasher.

12 years agoadd thomas wang's integer hash function; use it for hashq, hashv
Andy Wingo [Tue, 25 Oct 2011 22:37:24 +0000 (00:37 +0200)]
add thomas wang's integer hash function; use it for hashq, hashv

* libguile/hash.c (scm_raw_ihashq): Add Thomas Wang's integer hash
  function, from http://www.cris.com/~Ttwang/tech/inthash.htm.
  (scm_ihashq, scm_ihashv): Use it here.

12 years agosymbols.h reindent
Andy Wingo [Tue, 25 Oct 2011 22:06:53 +0000 (00:06 +0200)]
symbols.h reindent

* libguile/symbols.h: Reindent.

12 years agouse bob jenkins' hashword2 hash from lookup3.c for our string hash
Andy Wingo [Tue, 25 Oct 2011 21:46:17 +0000 (23:46 +0200)]
use bob jenkins' hashword2 hash from lookup3.c for our string hash

* libguile/hash.c (JENKINS_LOOKUP3_HASHWORD2, narrow_string_hash)
  (wide_string_hash, scm_string_hash, scm_i_string_hash)
  (scm_i_latin1_string_hash): Replace our lame string hash with Bob
  Jenkins' hash, treating each codepoint as a word, for the purposes of
  the algorithm.  There are probably more optimal hashes for our use
  cases.
  (scm_i_locale_string_hash): Remove optimization, as it wasn't used.
  (scm_i_utf8_string_hash): Add a specialized implementation for utf8.
  It's tricky but mostly just cut-and-paste.

12 years agofix a vhash test
Andy Wingo [Tue, 25 Oct 2011 22:06:33 +0000 (00:06 +0200)]
fix a vhash test

* test-suite/tests/vlist.test ("vhash"): As far as I can tell this test
  was not testing the right thing.

12 years agooptimize scm_from_utf8_stringn
Andy Wingo [Tue, 25 Oct 2011 16:18:39 +0000 (18:18 +0200)]
optimize scm_from_utf8_stringn

* libguile/strings.c (decoding_error): Factor out of scm_from_stringn,
  properly handling errno.
  (scm_from_stringn): Adapt.
  (scm_from_utf8_stringn): Inline the conversion here, to avoid going
  through iconv.

12 years agomost uses of scm_from_locale_symbol become scm_from_utf8_symbol
Andy Wingo [Tue, 25 Oct 2011 15:45:29 +0000 (17:45 +0200)]
most uses of scm_from_locale_symbol become scm_from_utf8_symbol

* libguile/array-handle.c:
* libguile/chars.c:
* libguile/expand.c:
* libguile/feature.c:
* libguile/goops.c:
* libguile/gsubr.c:
* libguile/instructions.c:
* libguile/load.c:
* libguile/macros.c:
* libguile/memoize.c:
* libguile/modules.c:
* libguile/options.c:
* libguile/print.c:
* libguile/smob.c:
* libguile/snarf.h: Change most uses of scm_from_locale_symbol to
  scm_from_utf8_symbol, as the symbols really are not locale-dependent.

12 years agooptimize utf8 symbol lookup
Andy Wingo [Tue, 25 Oct 2011 15:32:50 +0000 (17:32 +0200)]
optimize utf8 symbol lookup

* libguile/symbols.c (utf8_string_equals_wide_string)
  (utf8_lookup_predicate_fn, lookup_interned_utf8_symbol): Optimize
  utf8 symbol lookup.

12 years agoslight scm_procedure_p, scm_i_procedure_arity refactor
Andy Wingo [Mon, 24 Oct 2011 16:29:45 +0000 (18:29 +0200)]
slight scm_procedure_p, scm_i_procedure_arity refactor

* libguile/procs.c (scm_procedure_p):
* libguile/procprop.c (scm_i_procedure_arity): Refactor.

12 years agoremove CELL_P macro
Andy Wingo [Mon, 24 Oct 2011 16:28:24 +0000 (18:28 +0200)]
remove CELL_P macro

* libguile/private-gc.h: Remove private CELL_P macro.

12 years agoadd SCM_HEAP_OBJECT_BASE
Andy Wingo [Mon, 24 Oct 2011 16:22:35 +0000 (18:22 +0200)]
add SCM_HEAP_OBJECT_BASE

* libguile/tags.h (SCM_HEAP_OBJECT_BASE): New macro.  Given a SCM,
  returns a pointer to the start of its memory area on the heap.

* libguile/bytevectors.c:
* libguile/fluids.c:
* libguile/foreign.c:
* libguile/gc.h:
* libguile/guardians.c:
* libguile/numbers.h:
* libguile/ports.c:
* libguile/smob.c:
* libguile/struct.c:
* libguile/weak-set.c:
* libguile/weak-table.c:
* libguile/weak-vector.c: Use it.

12 years agoadd SCM_HEAP_OBJECT_P
Andy Wingo [Mon, 24 Oct 2011 16:13:51 +0000 (18:13 +0200)]
add SCM_HEAP_OBJECT_P

* libguile/tags.h (SCM_HEAP_OBJECT_P): New macro, an alias for
  SCM_NIMP.

* libguile/arrays.c:
* libguile/debug.c:
* libguile/foreign.c:
* libguile/gdbint.c:
* libguile/guardians.c:
* libguile/list.c:
* libguile/modules.c:
* libguile/options.c:
* libguile/smob.c:
* libguile/validate.h:
* libguile/weak-set.c:
* libguile/weak-table.c:
* libguile/weak-vector.c: Use it instead of SCM_NIMP or !SCM_IMP.

12 years agoboot_closure_print cleanup
Andy Wingo [Mon, 24 Oct 2011 15:59:23 +0000 (17:59 +0200)]
boot_closure_print cleanup

* libguile/eval.c (boot_closure_print): Get at the bits directly.

12 years agoadd SCM_{PACK,UNPACK}_POINTER
Andy Wingo [Mon, 24 Oct 2011 15:58:22 +0000 (17:58 +0200)]
add SCM_{PACK,UNPACK}_POINTER

* libguile/tags.h (SCM_UNPACK_POINTER, SCM_PACK_POINTER): New macros.
  The old SCM2PTR and PTR2SCM were defined in such a way that
  round-tripping through a pointer could lose precision, even in the
  case in which you weren't interested in actually dereferencing the
  pointer, it was simply that you needed to plumb a SCM through APIs
  that take pointers.  These new macros are more like SCM_PACK and
  SCM_UNPACK, but for pointer types.  The bit representation of the
  pointer should be the same as the scm_t_bits representation.

* libguile/gc.h (PTR2SCM, SCM2PTR): Remove support for (old) UNICOS
  pointers.  We are going to try tagging the SCM object itself in the
  future, and I don't think that keeping this support is worth its
  cost.  It probably doesn't work anyway.

* libguile/backtrace.c:
* libguile/bytevectors.c:
* libguile/continuations.c:
* libguile/fluids.c:
* libguile/foreign.c:
* libguile/gc.h:
* libguile/guardians.c:
* libguile/hashtab.c:
* libguile/load.c:
* libguile/numbers.c:
* libguile/ports.c:
* libguile/smob.c:
* libguile/strings.c:
* libguile/symbols.c:
* libguile/vm.c:
* libguile/weak-set.c:
* libguile/weak-table.c:
* libguile/weak-vector.c: Update many sites to use the new macros.

12 years agorefactor tc7 and tc16 checks
Andy Wingo [Mon, 24 Oct 2011 15:34:47 +0000 (17:34 +0200)]
refactor tc7 and tc16 checks

* libguile/tags.h (SCM_HAS_TYP7, SCM_HAS_TYP7S, SCM_HAS_TYP16): New
  macros.

* libguile/bytevectors.h (SCM_BYTEVECTOR_P):
* libguile/control.h (SCM_PROMPT_P):
* libguile/filesys.h (SCM_DIRP):
* libguile/fluids.h (SCM_WITH_FLUIDS_P, SCM_FLUID_P)
  (SCM_I_DYNAMIC_STATE_P):
* libguile/foreign.h (SCM_POINTER_P):
* libguile/fports.h (SCM_FPORTP):
* libguile/frames.h (SCM_VM_FRAME_P):
* libguile/hashtab.h (SCM_HASHTABLE_P):
* libguile/inline.h (scm_get_byte_or_eof):
* libguile/numbers.h (SCM_REALP, SCM_BIGP, SCM_COMPLEXP, SCM_FRACTIONP):
* libguile/objcodes.h (SCM_OBJCODE_P):
* libguile/ports.h (SCM_OUTPUT_PORT_P):
* libguile/programs.h (SCM_PROGRAM_P):
* libguile/smob.h (SCM_SMOB_PREDICATE):
* libguile/srfi-14.h (SCM_CHARSETP):
* libguile/strings.c (IS_STRING):
* libguile/strports.h (SCM_STRPORTP):
* libguile/symbols.h (scm_is_symbol):
* libguile/variable.h (SCM_VARIABLEP):
* libguile/vectors.h (SCM_I_IS_VECTOR, SCM_I_IS_NONWEAK_VECTOR):
* libguile/vm-i-system.c (call, tail-call, mv-call)
* libguile/vm.h (SCM_VM_P, SCM_VM_CONT_P):
* libguile/weak-set.c (SCM_WEAK_SET_P):
* libguile/weak-table.c (SCM_WEAK_TABLE_P):
* libguile/weak-vector.h (SCM_I_WVECTP): Use them.

12 years agocheck for pairs with scm_is_pair, not scm_nimp
Andy Wingo [Mon, 24 Oct 2011 15:22:47 +0000 (17:22 +0200)]
check for pairs with scm_is_pair, not scm_nimp

* libguile/array-map.c (scm_ra_matchp, scm_ramapc):
* libguile/dynwind.c (scm_swap_bindings):
* libguile/hooks.c (hook_print, scm_c_run_hook, scm_c_run_hookn):
* libguile/objprop.c (scm_object_property, scm_set_object_property_x):
  Use !scm_is_pair as the termination condition, not scm_imp.

12 years agode-inline cons in scm_acons
Andy Wingo [Mon, 24 Oct 2011 15:14:27 +0000 (17:14 +0200)]
de-inline cons in scm_acons

* libguile/alist.c (scm_acons): Don't inline the conses.

12 years agoremove mutex in make-object-property
Andy Wingo [Mon, 24 Oct 2011 08:55:46 +0000 (10:55 +0200)]
remove mutex in make-object-property

* module/ice-9/boot-9.scm (make-object-property): Remove the mutex; weak
  tables are now threadsafe.

12 years agoremove weak pairs, rewrite weak vectors
Andy Wingo [Mon, 24 Oct 2011 08:52:55 +0000 (10:52 +0200)]
remove weak pairs, rewrite weak vectors

* libguile/weak-vector.c:
* libguile/weak-vector.h: Renamed from weaks.[ch].  Remove weak pairs.
  They were not safe to access with `car' and `cdr'.  Remove weak alist
  vectors, as we have weak tables and sets.  Reimplement weak vectors,
  moving the implementation here.

* libguile/vectors.c:
* libguile/vectors.h: Remove the extra header word.  Use
  scm_c_weak_vector_ref / scm_c_weak_vector_set_x to access weak
  vectors.

* libguile/snarf.h: Remove the extra header word in vectors.

* libguile/threads.c (do_thread_exit, fat_mutex_lock, fat_mutex_unlock):
  Instead of weak pairs, store thread-owned mutexes in a list of
  one-element weak vectors.

* libguile/guardians.c (finalize_guarded): Similarly, store object
  guardians in a list of one-element weak vectors.

* libguile/modules.c (scm_module_reverse_lookup): We no longer need to
  handle the case of weak references.

* libguile/print.c (iprin1): Use the standard vector accessor to print
  vectors.

* libguile.h:
* libguile/Makefile.am:
* libguile/gc-malloc.c:
* libguile/gc.c:
* libguile/goops.c:
* libguile/init.c:
* libguile/objprop.c:
* libguile/struct.c: Update includes.

* module/ice-9/weak-vector.scm: Load weak vector definitions using an
  extension instead of %init-weaks-builtins.

* test-suite/tests/weaks.test: Use the make-...-hash-table names instead
  of the old alist vector names.

12 years agoremove a stale comment
Andy Wingo [Mon, 24 Oct 2011 06:28:06 +0000 (08:28 +0200)]
remove a stale comment

* module/system/foreign.scm (define-wrapped-pointer-type): Remove stale
  comment.

12 years agoconvert internal weak hash table users to use the weak table api
Andy Wingo [Sun, 23 Oct 2011 21:38:51 +0000 (23:38 +0200)]
convert internal weak hash table users to use the weak table api

The weak table API isn't public yet.  It could be after some review.
But we can go ahead and use it now internally.

* libguile/foreign.c:
* libguile/goops.c:
* libguile/objprop.c:
* libguile/procprop.c:
* libguile/smob.c:
* libguile/srcprop.c: Update weak table users to new API.  No locking
  needed!

12 years agoreimplement hashtab.c's weak hash tables in terms of weak-table.c
Andy Wingo [Mon, 24 Oct 2011 05:57:17 +0000 (07:57 +0200)]
reimplement hashtab.c's weak hash tables in terms of weak-table.c

* libguile/hashtab.c:
* libguile/hashtab.h: Reimplement the weak hash table implementation in
  terms of weak tables.  All is well except for the horrific hack for
  hashx tables.

* libguile/weak-table.h:
* libguile/weak-table.c (scm_make_weak_key_hash_table)
  (scm_make_weak_value_hash_table, scm_make_doubly_weak_hash_table)
  (scm_weak_key_hash_table_p, scm_weak_value_hash_table_p)
  (scm_doubly_weak_hash_table_p): Move these definitions here.

12 years agoadd weak table implementation
Andy Wingo [Sun, 23 Oct 2011 21:23:47 +0000 (23:23 +0200)]
add weak table implementation

* libguile/weak-table.c:
* libguile/weak-table.h: New files, implementing open-addressed weak
  hash tables, similar to the implementation of weak sets.  This will
  let us remove weak pairs.

* libguile.h:
* libguile/Makefile.am:
* libguile/evalext.c:
* libguile/gc.c:
* libguile/init.c:
* libguile/print.c:
* libguile/tags.h: Update all the pieces for the new files and tc7.

12 years agoadd scm_c_make_port; the port table is now a weak set
Andy Wingo [Sun, 23 Oct 2011 18:51:52 +0000 (20:51 +0200)]
add scm_c_make_port; the port table is now a weak set

* libguile/ports.c (scm_c_make_port_with_encoding, scm_c_make_port): New
  functions, to replace scm_new_port_table_entry.  Use a weak set
  instead of a weak table.
  (scm_i_remove_port):
  (scm_c_port_for_each, scm_port_for_each): Adapt to use weak set.
  (scm_i_void_port): Use scm_c_make_port.
  (scm_init_ports): Make a weak set.

* libguile/fports.c:
* libguile/ioext.c:
* libguile/r6rs-ports.c:
* libguile/strports.c:
* libguile/vports.c: Adapt to use the new scm_c_make_port API.

12 years agosymbols.c uses weak sets
Andy Wingo [Sun, 23 Oct 2011 18:46:48 +0000 (20:46 +0200)]
symbols.c uses weak sets

* libguile/symbols.c (lookup_interned_symbol)
  (lookup_interned_latin1_symbol, intern_symbol): Adapt to use weak sets
  instead of weak-key hash tables.

12 years agoadd weak sets
Andy Wingo [Sun, 23 Oct 2011 18:45:01 +0000 (20:45 +0200)]
add weak sets

* libguile/weak-set.c:
* libguile/weak-set.h: New files, implementing weak sets, for use in the
  symbol table and port set.  Eventually we will be able to remove weak
  pairs.

* libguile.h:
* libguile/Makefile.am: Add new files.

* libguile/evalext.c:
* libguile/gc.c:
* libguile/init.c:
* libguile/print.c:
* libguile/tags.h: Add support for the new types.

12 years agoUpdate `NEWS'.
Ludovic Courtès [Sat, 22 Oct 2011 14:53:43 +0000 (16:53 +0200)]
Update `NEWS'.

12 years agoFix compilation of `deprecated.c' with SCM_DEBUG_TYPING_STRICTNESS=2.
Ludovic Courtès [Sat, 22 Oct 2011 14:48:46 +0000 (16:48 +0200)]
Fix compilation of `deprecated.c' with SCM_DEBUG_TYPING_STRICTNESS=2.

* libguile/deprecated.c (init_module_stuff,
  scm_primitive_make_property): Use `scm_is_false' instead of direct
  comparison to SCM_BOOL_F'.
  (maybe_close_port, scm_close_all_ports_except): Use `SCM2PTR' and
  `PTR2SCM' instead of wild casts.

12 years agoBump version number for 2.0.3.
Ludovic Courtès [Sat, 22 Oct 2011 14:29:20 +0000 (16:29 +0200)]
Bump version number for 2.0.3.

* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
  (LIBGUILE_INTERFACE_CURRENT): Increment to account for new C functions
  `scm_is_exact' etc.
  (LIBGUILE_INTERFACE_AGE): Increment.

12 years agoUpdate Gnulib to v0.0-6523-gb3609c1.
Ludovic Courtès [Sat, 22 Oct 2011 14:24:32 +0000 (16:24 +0200)]
Update Gnulib to v0.0-6523-gb3609c1.

12 years agodoc: Document the `sitedir' and `extensiondir' pkg-config variables.
Ludovic Courtès [Sat, 22 Oct 2011 14:11:01 +0000 (16:11 +0200)]
doc: Document the `sitedir' and `extensiondir' pkg-config variables.

* doc/ref/libguile-parallel.texi (Parallel Installations): Document the
  `sitedir' and `extensiondir' pkg-config variables.  This fixes
  <https://savannah.gnu.org/bugs/index.php?32515>, reported by
  Dale. P. Smith.

12 years agoFix compilation with `--enable-debug-malloc'.
Bake Timmons [Sat, 22 Oct 2011 11:28:53 +0000 (13:28 +0200)]
Fix compilation with `--enable-debug-malloc'.

* libguile/gc-malloc.c (scm_gc_register_collectable_memory): Add the
  missing second argument in the call to scm_malloc_register.

12 years agoInitialize `get_internal_run_time' before it is used.
Ludovic Courtès [Sat, 22 Oct 2011 11:25:11 +0000 (13:25 +0200)]
Initialize `get_internal_run_time' before it is used.

* libguile/init.c (scm_i_init_guile): Call `scm_init_stime' before
  `scm_init_gc'.  Fixes <https://savannah.gnu.org/bugs/?34616> reported
  by Bake Timmons.

12 years agoset width for `,trace' command
BT Templeton [Fri, 22 Jul 2011 15:35:30 +0000 (11:35 -0400)]
set width for `,trace' command

* module/system/repl/command.scm (trace): Set trace width to terminal
  width by default.

12 years agofix segfault in goops if class fields are redefined
Andy Wingo [Thu, 20 Oct 2011 22:22:44 +0000 (00:22 +0200)]
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.

12 years agofix misallocation of some <fix> procedures
Andy Wingo [Thu, 20 Oct 2011 21:50:05 +0000 (23:50 +0200)]
fix misallocation of some <fix> procedures

* module/language/tree-il/analyze.scm (analyze-lexicals): When stepping
  into a non-tail form, we know that labels allocation will be invalid,
  so use an empty labels set.  Fixes http://debbugs.gnu.org/9769.

* test-suite/tests/tree-il.test ("labels allocation"): Add a test.

12 years agoslight frames.h refactor
Andy Wingo [Wed, 19 Oct 2011 09:55:27 +0000 (11:55 +0200)]
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.

12 years agodoc: Add `libguile-parallel.texi' to the distribution.
Ludovic Courtès [Tue, 18 Oct 2011 16:47:09 +0000 (18:47 +0200)]
doc: Add `libguile-parallel.texi' to the distribution.

This is a followup to d32df1325dfe5f550cf1262dc7e90ba86b526a7c ("manual:
reorganize autoconf, pkg-config info").

* doc/ref/Makefile.am (guile_TEXINFOS): Add `libguile-parallel.texi'.

12 years agofix (web http) write-date for mondays
Andy Wingo [Mon, 17 Oct 2011 07:48:19 +0000 (09:48 +0200)]
fix (web http) write-date for mondays

* module/web/http.scm (write-date): Fix bug on Mondays.  Jeez!

12 years agodoc: Complete renaming of `autoconf.texi'.
Ludovic Courtès [Sun, 16 Oct 2011 19:55:29 +0000 (21:55 +0200)]
doc: Complete renaming of `autoconf.texi'.

This is a followup to d32df1325dfe5f550cf1262dc7e90ba86b526a7c ("manual:
reorganize autoconf, pkg-config info").

* doc/ref/Makefile.am: Replace references to `autoconf.texi' by
  `libguile-autoconf.texi'.

12 years agoUpdate (ice-9 match) from Chibi-Scheme.
Ludovic Courtès [Sun, 16 Oct 2011 16:36:20 +0000 (18:36 +0200)]
Update (ice-9 match) from Chibi-Scheme.

* module/ice-9/match.scm (match): Remove macro.

* module/ice-9/match.upstream.scm: Update from Chibi-Scheme, which fixes
  <http://debbugs.gnu.org/9567>.

* test-suite/tests/match.test.upstream: Likewise.

12 years agocoverage: Add tests for `case-lambda'.
Ludovic Courtès [Sat, 15 Oct 2011 15:05:23 +0000 (17:05 +0200)]
coverage: Add tests for `case-lambda'.

* test-suite/tests/coverage.test
  ("line-execution-counts")["case-lambda"]: New test.
  ("procedure-execution-count")["case-lambda"]: New test.

12 years agodoc: Mention the partial evaluator next to `define-inlinable'.
Ludovic Courtès [Sat, 15 Oct 2011 15:34:48 +0000 (17:34 +0200)]
doc: Mention the partial evaluator next to `define-inlinable'.

* doc/ref/api-procedures.texi (Inlinable Procedures): Mention inlining
  performed by the partial evaluator.

12 years agocoverage: Add test with `eval'.
Ludovic Courtès [Sat, 15 Oct 2011 14:46:29 +0000 (16:46 +0200)]
coverage: Add test with `eval'.

* test-suite/tests/coverage.test (test-procedure): New procedure.
  ("procedure-execution-count")["called from eval"]: New test.

12 years agoDefault to using poll(2) in `fport_input_waiting'.
Cedric Cellier [Sat, 15 Oct 2011 14:25:21 +0000 (16:25 +0200)]
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.

12 years agorevise comments in libguile/tags.h
Andy Wingo [Sat, 15 Oct 2011 09:22:10 +0000 (11:22 +0200)]
revise comments in libguile/tags.h

* libguile/tags.h: Revise the comments to reflect libgc reality.

12 years agoupdate NEWS for 2.0.3
Andy Wingo [Wed, 12 Oct 2011 15:12:14 +0000 (17:12 +0200)]
update NEWS for 2.0.3

* NEWS: Update.

12 years agoadd "Installing Site Packages"
Andy Wingo [Wed, 12 Oct 2011 14:20:51 +0000 (16:20 +0200)]
add "Installing Site Packages"

* doc/ref/scheme-using.texi (Installing Site Packages): Add a new
  section about where to install .scm, .go, and .so files.

* doc/ref/tour.texi: Reference it here.
* doc/ref/guile.texi: Add new section.

12 years agoupdate tour.texi for site modules and extensions
Andy Wingo [Wed, 12 Oct 2011 11:07:50 +0000 (13:07 +0200)]
update tour.texi for site modules and extensions

* doc/ref/tour.texi (Putting Extensions into Modules)
  (Writing new Modules): In the examples, show the files as being in the
  "site" dirs.

12 years agomanual: reorganize autoconf, pkg-config info
Andy Wingo [Wed, 12 Oct 2011 11:07:30 +0000 (13:07 +0200)]
manual: reorganize autoconf, pkg-config info

* doc/ref/libguile-parallel.texi: New file, documenting parallel
  installation and the use of pkg-config.

* doc/ref/libguile-linking.texi: Adapt.

* doc/ref/libguile-autoconf.texi: Rename from autoconf.texi.  Lower
  sections, and integrate in the "Programming in C" chapter.

* doc/ref/guile.texi: Adapt.

12 years agoremove documentation on autofrisk foo
Andy Wingo [Wed, 12 Oct 2011 09:51:33 +0000 (11:51 +0200)]
remove documentation on autofrisk foo

* doc/ref/autoconf.texi: Remove documentation on autofrisk facility,
  given that we do not ship those macros, and to my knowledge, never
  have.

12 years agoadd (web client) docs
Andy Wingo [Wed, 12 Oct 2011 09:24:58 +0000 (11:24 +0200)]
add (web client) docs

* doc/ref/web.texi (Web Client): New doc section.

12 years agofold constants with accessors
Andy Wingo [Mon, 10 Oct 2011 18:39:22 +0000 (20:39 +0200)]
fold constants with accessors

* module/language/tree-il/peval.scm (peval): Factor constant folding out
  to a helper.  Use it in the accessor case in addition to the normal
  effect-free-primitive case.

* test-suite/tests/tree-il.test: Add a test.

12 years agorecognize string primitives
Andy Wingo [Mon, 10 Oct 2011 18:19:07 +0000 (20:19 +0200)]
recognize string primitives

* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*): Add string?, string-length, and ref
  and set.
  (*primitive-accessors*): Add string-ref.
  (*effect-free-primitives*): Add string-length and string?
  (*effect+exception-free-primitives*): Add string?.
  (*singly-valued-primitives*): Add string-length and ref and set.

12 years agoadd ,expand and ,optimize
Andy Wingo [Mon, 10 Oct 2011 15:01:11 +0000 (17:01 +0200)]
add ,expand and ,optimize

* module/system/repl/command.scm (*command-table*, expand, optimize):
  New meta-commands.
* module/system/repl/common.scm (repl-expand, repl-optimize): New
  helpers.

* doc/ref/scheme-using.texi (Compile Commands): Document.

12 years agoregenerate psyntax-pp.scm
Andy Wingo [Mon, 10 Oct 2011 14:21:06 +0000 (16:21 +0200)]
regenerate psyntax-pp.scm

* module/ice-9/psyntax-pp.scm: Regenerate, now with optimizations.

12 years agoMerge remote-tracking branch 'origin/stable-2.0'
Andy Wingo [Mon, 10 Oct 2011 14:20:08 +0000 (16:20 +0200)]
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

12 years agoregenerate psyntax-pp.scm
Andy Wingo [Mon, 10 Oct 2011 11:01:54 +0000 (13:01 +0200)]
regenerate psyntax-pp.scm

* module/ice-9/psyntax-pp.scm: Regenerate, now with inlined letrec
  bindings.  Whee!!

12 years agopeval support for memq and memv
Andy Wingo [Mon, 10 Oct 2011 12:42:40 +0000 (14:42 +0200)]
peval support for memq and memv

* module/language/tree-il/peval.scm (peval): Add special handlers for
  memq and memv, as inline.scm used to have.  This is important for
  `case' clauses.  It is very ugly, though.

* test-suite/tests/tree-il.test ("partial evaluation"): Add tests.

12 years agoadd accessor-primitive?, peval uses it
Andy Wingo [Mon, 10 Oct 2011 11:23:26 +0000 (13:23 +0200)]
add accessor-primitive?, peval uses it

* module/language/tree-il/primitives.scm (*primitive-accessors*): New
  set of primitives: those that access mutable memory, but are otherwise
  pure.  Include bytevector references here.
  (accessor-primitive?): New public predicate.

* module/language/tree-il/peval.scm (peval): Refactor to distinguish
  constructor-primitive? from accessor-primitive?.

12 years agopeval: visit operands on-demand, to inline mutually recursive bindings
Andy Wingo [Mon, 10 Oct 2011 10:58:28 +0000 (12:58 +0200)]
peval: visit operands on-demand, to inline mutually recursive bindings

This commit changes to use <operand> structures to hold the context
needed to visit lexical bindings lazily, in context, instead of eagerly
visiting them for value.  This laziness enables inlining of mutually
recursive bindings.

* module/language/tree-il/peval.scm (<var>): Remove comment about copy
  propagation having to run build-var-table; things don't work like that
  any more.
  (build-var-table): Build <var> entries for all variables, even
  unreferenced variables.
  (alpha-rename): Remove.  We will rename bindings on-demand now.

  (peval lookup-var): New helper, to fetch the <var> of a gensym.

  (peval fresh-gensyms): Fold here, under peval, and in it, handle
  updating the store to record a mapping between new names and <var>
  entries from the source program.

  (peval record-source-expression): Don't call build-var-table on the
  new expression, as alpha-renaming happens on-demand now.

  (peval prune-bindings): Rewrite to work with mutually-recursive
  bindings, while optionally preserving binding order.

  (peval extend-env): New helper.

  (peval loop): OK, here goes... Remove the `operand' context, as now we
  visit operands lazily.  Add a `call' context, which does not
  copy-propagate lambda expressions, used to residualize a call after
  aborting an inlining attempt.  Change the `env' to be a mapping of
  gensym to <operand>.  Instead of looking up the operand's binding then
  alpha-renaming it, just rely on the fact that visiting the operand
  will rename it if necessary.

  If we residualize a lexical, do so with the fresh name from the
  environment.  If we visit an operand and it doesn't turn out to be
  constant, we will never be able to copy it, and so cache that fact in
  the operand.  If we residualize a binding and we know what the value
  should be, record that binding so that prune-bindings won't have to
  visit it again.  If the operand folds to a constant, cache that too,
  to save effort when unrolling loops.

  For let, letrec, fix, and lambda-case, instead of visiting the
  bindings eagerly for value, simply record the source expressions and
  environments in an <operand> and rely on copy-propagation to visit
  them later in the right context.  In the case of letrec and fix, this
  allows mutually-recursive bindings to be inlined.

  Refactor folding of "constructors" (which still need renaming) to
  avoid visiting operands twice in some contexts.

  For applications, if we have to abort, process the procedure in call
  context, which allows some folding but avoids copying lambdas.  If we
  find a recursive procedure, mark intervening counters as recursive
  too, to allow for mutual recursion at the top level.

  For lambdas, if we are processing for value, record the source
  expression so we can detect recursion.  This was previously done in
  the lexical-ref copy propagator.

* test-suite/tests/tree-il.test ("partial evaluation"): Remove unused
  recursive lexicals in a couple of cases.  Add a couple test cases for
  pruning.  Add a few recursive binding cases.

12 years agopeval: add operand structure
Andy Wingo [Thu, 6 Oct 2011 08:56:12 +0000 (10:56 +0200)]
peval: add operand structure

* module/language/tree-il/peval.scm (<operand>): Add operand structure,
  to be used by peval.

12 years agopeval: refactor logging
Andy Wingo [Mon, 10 Oct 2011 10:03:17 +0000 (12:03 +0200)]
peval: refactor logging

* module/language/tree-il/peval.scm: Make it easier to turn on logging.

12 years agoNew functions scm_is_exact and scm_is_inexact
Mike Gran [Mon, 10 Oct 2011 03:54:37 +0000 (20:54 -0700)]
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

12 years agoDocument SCM_ASSERT_TYPE and SCM_ASRTGO macros
Mike Gran [Sun, 9 Oct 2011 00:12:12 +0000 (17:12 -0700)]
Document SCM_ASSERT_TYPE and SCM_ASRTGO macros

* doc/ref/api-control.texi (Signalling Type Errors): document macros

12 years agopeval: logging
Andy Wingo [Fri, 7 Oct 2011 13:49:36 +0000 (15:49 +0200)]
peval: logging

* module/language/tree-il/peval.scm: Define a quick and dirty
  infrastructure for logging.  Use it in peval.

12 years agopeval: bugfix in constant-expression?
Andy Wingo [Thu, 6 Oct 2011 21:28:19 +0000 (23:28 +0200)]
peval: bugfix in constant-expression?

* module/language/tree-il/peval.scm (constant-expression?): Correctly
  handle lambda-case alternates.

12 years agooptimizer verifies its output
Andy Wingo [Thu, 6 Oct 2011 21:28:06 +0000 (23:28 +0200)]
optimizer verifies its output

* module/language/tree-il/optimize.scm: Verify the result of partial
  evaluation.

12 years agoadd tree-il verifier
Andy Wingo [Thu, 6 Oct 2011 21:27:43 +0000 (23:27 +0200)]
add tree-il verifier

* module/Makefile.am: Add debug.scm.
* module/language/tree-il/debug.scm: New file, a verifier for tree-il.

12 years agopeval refactor
Andy Wingo [Thu, 6 Oct 2011 10:14:10 +0000 (12:14 +0200)]
peval refactor

* module/language/tree-il/peval.scm (peval): Refactor the for-value, etc
  helpers.

12 years agocomment peval.scm
Andy Wingo [Thu, 6 Oct 2011 08:39:14 +0000 (10:39 +0200)]
comment peval.scm

* module/language/tree-il/peval.scm: Add comments.  Move alpha-rename
  later in the file.

12 years agofix reading of #||||#
Andy Wingo [Wed, 5 Oct 2011 18:41:11 +0000 (20:41 +0200)]
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!

12 years agopeval: Add test for possible infinite recursion.
Ludovic Courtès [Fri, 30 Sep 2011 13:20:16 +0000 (15:20 +0200)]
peval: Add test for possible infinite recursion.

* test-suite/tests/tree-il.test ("partial evaluation"): Add test.

12 years agoAdd link to the (ice-9 match) bug.
Ludovic Courtès [Fri, 30 Sep 2011 13:16:02 +0000 (15:16 +0200)]
Add link to the (ice-9 match) bug.

* module/ice-9/match.scm: Add comment.

12 years agopeval: Recognize module-refs to primitives.
Ludovic Courtès [Fri, 23 Sep 2011 15:27:28 +0000 (17:27 +0200)]
peval: Recognize module-refs to primitives.

* module/language/tree-il/optimize.scm (peval): Handle module-refs to
  primitives.

* test-suite/tests/tree-il.test ("partial evaluation"): Add test, using
  `pmatch'.

12 years agoregenerate psyntax-pp.scm
Andy Wingo [Thu, 29 Sep 2011 16:07:02 +0000 (18:07 +0200)]
regenerate psyntax-pp.scm

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

12 years agoMerge remote-tracking branch 'origin/stable-2.0'
Andy Wingo [Thu, 29 Sep 2011 16:02:28 +0000 (18:02 +0200)]
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

12 years agogenerate psyntax-pp in canonical form
Andy Wingo [Wed, 28 Sep 2011 17:42:32 +0000 (19:42 +0200)]
generate psyntax-pp in canonical form

* module/ice-9/compile-psyntax.scm (source): Canonicalize after
  optimizing.  The optimizer should be a little more clever, but
  currently fix-letrec outputs some non-canonical forms.

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

12 years agoseparate peval and a new canonicalization pass into their own modules
Andy Wingo [Wed, 28 Sep 2011 17:39:25 +0000 (19:39 +0200)]
separate peval and a new canonicalization pass into their own modules

* module/language/tree-il/peval.scm: Move to its own file.  Remove the
  bits about <prompt> thunk-application bodies, as they are not
  optimizations, simply expectations of the compiler.  `canonicalize'
  handles that now.

* module/language/tree-il/optimize.scm: Use peval from its module.
  Don't call `inline!', as that's useless now.

* module/language/tree-il/canonicalize.scm: New file, implementing a
  pass that `compile-tree-il' runs on the result from the optimizer.
  The compiler currently expects a <let> form to have bindings, for
  example, and this pass turns a <let> without bindings into its body.

* module/language/tree-il/inline.scm: Deprecate, as `peval' does
  everything this function ever did.

* module/language/tree-il/compile-glil.scm: Canonicalize after
  optimizing.  This should allow us to skip the optimizer entirely, if
  we want.

* module/Makefile.am: Update and reorder a little bit.

12 years agoregenerate psyntax-pp.scm, with optimizations
Andy Wingo [Tue, 27 Sep 2011 13:09:25 +0000 (15:09 +0200)]
regenerate psyntax-pp.scm, with optimizations

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

12 years ago((lambda ...) ...) fix
Andy Wingo [Tue, 27 Sep 2011 21:29:10 +0000 (23:29 +0200)]
((lambda ...) ...) fix

* module/language/tree-il/optimize.scm (peval): If it's a lambda in the
  operator position, inline without a nested counter, as it's not
  possible to increase code size.

12 years agopeval: more effective binding pruning
Andy Wingo [Tue, 27 Sep 2011 21:21:53 +0000 (23:21 +0200)]
peval: more effective binding pruning

* module/language/tree-il/optimize.scm (peval): Factor prune-bindings
  out of `let' and company.  Have it process unreferenced bindings in
  effect context instead of always residualizing non-constant
  expressions.

12 years agodon't propagate pure primcalls that might not type-check
Andy Wingo [Tue, 27 Sep 2011 21:20:49 +0000 (23:20 +0200)]
don't propagate pure primcalls that might not type-check

* module/language/tree-il/optimize.scm (types-check?): New helper, to
  determine if a primcall will apply without throwing an exception.
  (peval): constant-expression? returns #f for expressions that don't
  types-check?.  Effect-free primitives that type-check are void.

12 years agofix unparse-tree-il of <dynset>
Andy Wingo [Tue, 27 Sep 2011 13:08:39 +0000 (15:08 +0200)]
fix unparse-tree-il of <dynset>

* module/language/tree-il.scm (unparse-tree-il): Fix printing of
  `dynset'.

12 years agopeval works on all expressions
Andy Wingo [Tue, 27 Sep 2011 13:08:17 +0000 (15:08 +0200)]
peval works on all expressions

* module/language/tree-il/optimize.scm (alpha-rename, peval): Add
  <dynset> cases.  Allow any kind of <application>.  Remove the `catch'
  wrapper as now peval handles all kinds of expressions.

12 years agopeval: elide make-prompt-tag in effect context
Andy Wingo [Tue, 27 Sep 2011 11:42:43 +0000 (13:42 +0200)]
peval: elide make-prompt-tag in effect context

* module/language/tree-il/optimize.scm (peval): Fix a duplicate
  traversal for constructors in effect or test context.  Add support for
  eliding make-prompt-tag.

* test-suite/tests/tree-il.test ("partial evaluation"): Update the test
  for make-prompt-tag elision.

12 years agopeval: add support for <prompt> and <abort>
Andy Wingo [Tue, 27 Sep 2011 11:39:29 +0000 (13:39 +0200)]
peval: add support for <prompt> and <abort>

* module/language/tree-il/optimize.scm (alpha-rename, peval): Handle
  <prompt> and <abort>.  Attempt to remove the prompt if the tag is
  otherwise unreferenced.

* module/language/tree-il/primitives.scm (*primitive-constructors*): Add
  make-prompt-tag as a constructor.

* test-suite/tests/tree-il.test ("partial evaluation"): Add a test that
  an prompt whose tag is unreferenced is removed.