bpt/guile.git
10 years agoQuick documentation fixes.
Andy Wingo [Tue, 10 Dec 2013 18:53:55 +0000 (19:53 +0100)]
Quick documentation fixes.

* doc/ref/compiler.texi: Make it build.

10 years agoNon-loadable sections should not have an sh_addr field set
Andy Wingo [Tue, 10 Dec 2013 18:49:24 +0000 (19:49 +0100)]
Non-loadable sections should not have an sh_addr field set

* module/system/vm/linker.scm (relocate-section-header):
  (write-linker-object): Sections that are not loadable should not have
  their sh_addr fields set.  Fix.

10 years agoBeginnings of CPS section in manual
Andy Wingo [Sat, 7 Dec 2013 18:59:39 +0000 (19:59 +0100)]
Beginnings of CPS section in manual

* doc/ref/compiler.texi (Continuation-Passing Style): Beginnings of this
  section.  Will be finished when we fix implicit truncation.

10 years agoFix cross-references in api-macros.texi
Andy Wingo [Sat, 7 Dec 2013 18:58:43 +0000 (19:58 +0100)]
Fix cross-references in api-macros.texi

* doc/ref/api-macros.texi (Macro Expansion): Fix cross-references.

10 years agoArities-fixing pass handles incoming $ktrunc with rest args
Andy Wingo [Fri, 6 Dec 2013 11:04:10 +0000 (12:04 +0100)]
Arities-fixing pass handles incoming $ktrunc with rest args

* module/language/cps/arities.scm (fix-clause-arities): Allow $ktrunc
  arities with rest arguments.

10 years agoElide values primcalls with continuations with rest arguments
Andy Wingo [Fri, 6 Dec 2013 10:39:04 +0000 (11:39 +0100)]
Elide values primcalls with continuations with rest arguments

* module/language/cps/elide-values.scm (elide-values): Elide values
  primcalls when continuation has rest arguments.

10 years ago(call-with-values foo (lambda (a . b) a)) avoids consing rest list
Andy Wingo [Fri, 6 Dec 2013 10:08:45 +0000 (11:08 +0100)]
(call-with-values foo (lambda (a . b) a)) avoids consing rest list

* module/language/cps/slot-allocation.scm (allocate-slots): Don't
  allocate slots to unused results of function calls.  This can allow us
  to avoid consing a rest list for call-with-values with an ignored rest
  parameter, and can improve the parallel move code.

* module/language/cps/compile-bytecode.scm (compile-fun): Adapt to avoid
  emitting bind-rest in values context if the rest arg is unused.

10 years agocompiler.texi tweaks
Andy Wingo [Thu, 5 Dec 2013 10:55:10 +0000 (11:55 +0100)]
compiler.texi tweaks

* doc/ref/compiler.texi (Compiler Tower): Reword a couple things.
  (Tree-IL): Add more vertical space, for readability in info.

10 years agoDoc updates to macroexpansion, compiled procs, and compiler.texi
Andy Wingo [Wed, 4 Dec 2013 19:46:02 +0000 (20:46 +0100)]
Doc updates to macroexpansion, compiled procs, and compiler.texi

* doc/ref/api-macros.texi (Macro Expansion): New section.
* doc/ref/api-procedures.texi (Compiled Procedures): Beginnings of a
  revision.  Not finished.
* doc/ref/compiler.texi (Compiling to the Virtual Machine): Beginnings
  of a revision.  CPS and bytecode are not done yet.

10 years agoRename "RTL" to "bytecode"
Andy Wingo [Mon, 2 Dec 2013 20:31:47 +0000 (21:31 +0100)]
Rename "RTL" to "bytecode"

"RTL" didn't make any sense, and now that there's no other bytecode to
disambiguate against, just call it bytecode.

* module/Makefile.am:
* module/ice-9/eval-string.scm:
* module/language/bytecode.scm:
* module/language/bytecode/spec.scm:
* module/language/cps/arities.scm:
* module/language/cps/compile-bytecode.scm:
* module/language/cps/compile-rtl.scm:
* module/language/cps/contification.scm:
* module/language/cps/elide-values.scm:
* module/language/cps/primitives.scm:
* module/language/cps/reify-primitives.scm:
* module/language/cps/spec.scm:
* module/language/cps/specialize-primcalls.scm:
* module/language/rtl.scm:
* module/language/rtl/spec.scm:
* module/scripts/compile.scm:
* module/system/base/compile.scm:
* module/system/repl/common.scm:
* module/system/vm/assembler.scm:
* module/system/vm/debug.scm:
* module/system/vm/disassembler.scm:
* module/system/vm/dwarf.scm:
* test-suite/tests/cross-compilation.test:
* test-suite/tests/dwarf.test:
* test-suite/tests/rtl-compilation.test:
* test-suite/tests/rtl.test:
* test-suite/vm/run-vm-tests.scm: Fixups.

10 years agoFix brainfuck comment
Andy Wingo [Mon, 2 Dec 2013 18:02:05 +0000 (19:02 +0100)]
Fix brainfuck comment

* module/language/brainfuck/parse.scm: Fix outdated comment.

10 years agoFix brainfuck->scheme compiler.
Andy Wingo [Mon, 2 Dec 2013 18:00:57 +0000 (19:00 +0100)]
Fix brainfuck->scheme compiler.

* module/language/brainfuck/compile-scheme.scm (compile-scheme): Fix
  brainfuck compiler.

10 years agoThread safe port properties.
Mark H Weaver [Sun, 1 Dec 2013 23:29:33 +0000 (18:29 -0500)]
Thread safe port properties.

* libguile/ports.c (scm_i_port_property, scm_i_set_port_property_x):
  Lock the port mutex while accessing the port alist.

* libguile/read.c (set_port_read_option): Lock the port mutex
  while modifying port read options.

10 years agoAdd section to vm.texi about Guile's use of ELF
Andy Wingo [Sun, 1 Dec 2013 11:35:12 +0000 (12:35 +0100)]
Add section to vm.texi about Guile's use of ELF

* doc/ref/vm.texi (Object File Format): New section.

10 years agovm.texi tweak
Andy Wingo [Sat, 30 Nov 2013 19:59:14 +0000 (20:59 +0100)]
vm.texi tweak

* doc/ref/vm.texi (Why a VM?): Small tense tweak.

10 years agoUpdate vm.texi's "Instruction Set" section.
Andy Wingo [Sat, 30 Nov 2013 17:45:55 +0000 (18:45 +0100)]
Update vm.texi's "Instruction Set" section.

* doc/ref/vm.texi (Instruction Set): Update.

10 years agoFix more vm-engine comments
Andy Wingo [Sat, 30 Nov 2013 17:00:26 +0000 (18:00 +0100)]
Fix more vm-engine comments

* libguile/vm-engine.c: Fix more comments.

10 years agoRemove slot-ref and slot-set! ops
Andy Wingo [Sat, 30 Nov 2013 15:43:28 +0000 (16:43 +0100)]
Remove slot-ref and slot-set! ops

* libguile/vm-engine.c: Remove slot-ref and slot-set! ops.

10 years agoRemove GOOPS-internal @slot-ref and @slot-set!
Andy Wingo [Sat, 30 Nov 2013 15:40:17 +0000 (16:40 +0100)]
Remove GOOPS-internal @slot-ref and @slot-set!

* module/oop/goops.scm: Remove definitions of @slot-ref and @slot-set!.
  They are equivalent to struct-ref and struct-set!.
  (define-standard-accessor-method): Reimplement using syntax-case.
  (bound-check-get, standard-get, standard-set): Replace @slot-ref and
  @slot-set! uses with struct-ref and struct-set!.

* module/language/cps/reify-primitives.scm (primitive-module): Remove
  @slot-set! and @slot-ref references.

10 years agoBeginning vm.texi updates
Andy Wingo [Fri, 29 Nov 2013 22:24:17 +0000 (23:24 +0100)]
Beginning vm.texi updates

* doc/ref/vm.texi: Updates.

10 years agoFix vm-engine.c comments
Andy Wingo [Fri, 29 Nov 2013 22:23:28 +0000 (23:23 +0100)]
Fix vm-engine.c comments

* libguile/vm-engine.c: Fix some comments.

10 years agoUnknown files print as (unknown file) in disassembler
Andy Wingo [Fri, 29 Nov 2013 16:59:00 +0000 (17:59 +0100)]
Unknown files print as (unknown file) in disassembler

* module/system/vm/disassembler.scm (disassemble-buffer): Print unknown
  files as "(unknown file)".

10 years ago,x disassembles nested programs too
Andy Wingo [Fri, 29 Nov 2013 16:52:11 +0000 (17:52 +0100)]
,x disassembles nested programs too

* module/system/vm/disassembler.scm (code-annotation):
  (disassemble-buffer, disassemble-addr, disassemble-program): Arrange
  to disassemble nested procedures.
  (disassemble-image): Adapt.

10 years agoUpdate history.texi
Andy Wingo [Fri, 29 Nov 2013 11:29:12 +0000 (12:29 +0100)]
Update history.texi

* doc/ref/history.texi (A Timeline of Selected Guile Releases, Status):
  Update.

10 years agoRemove outdated section of api-memory.texi
Andy Wingo [Fri, 29 Nov 2013 11:28:53 +0000 (12:28 +0100)]
Remove outdated section of api-memory.texi

* doc/ref/api-memory.texi (Memory Blocks): Remove section documenting
  scm_must_malloc and friends.

10 years agoMerge remote-tracking branch 'origin/stable-2.0'
Andy Wingo [Thu, 28 Nov 2013 15:24:38 +0000 (16:24 +0100)]
Merge remote-tracking branch 'origin/stable-2.0'

10 years agoCritical sections in guardians do not need to block asyncs
Andy Wingo [Thu, 28 Nov 2013 15:20:42 +0000 (16:20 +0100)]
Critical sections in guardians do not need to block asyncs

* libguile/guardians.c: Critical sections here cannot cause an
  async_tick, so they do not need to block asyncs.

10 years agoMerge commit 'd364a8971828e38e8f9112b711066f4962bb400e'
Andy Wingo [Thu, 28 Nov 2013 15:16:48 +0000 (16:16 +0100)]
Merge commit 'd364a8971828e38e8f9112b711066f4962bb400e'

Conflicts:
libguile/deprecated.h
libguile/gc.c

10 years agoMerge commit 'e7bd20f7d9b2110fdc0fa25db5a2bfe6b2214923'
Andy Wingo [Thu, 28 Nov 2013 15:15:55 +0000 (16:15 +0100)]
Merge commit 'e7bd20f7d9b2110fdc0fa25db5a2bfe6b2214923'

10 years agoMerge commit '17330398d50524058c2ef488bd21ac5ec9c8b6e8'
Andy Wingo [Thu, 28 Nov 2013 15:15:51 +0000 (16:15 +0100)]
Merge commit '17330398d50524058c2ef488bd21ac5ec9c8b6e8'

10 years agoMerge commit 'a38024baaa32d1a6d91fdc81388c88bbb926c3ae'
Andy Wingo [Thu, 28 Nov 2013 15:15:38 +0000 (16:15 +0100)]
Merge commit 'a38024baaa32d1a6d91fdc81388c88bbb926c3ae'

Conflicts:
libguile/ports.h

10 years agoMerge commit '2437c7b2e8b4ab7786847ee1ce0b59e446a70fe2'
Andy Wingo [Thu, 28 Nov 2013 15:03:58 +0000 (16:03 +0100)]
Merge commit '2437c7b2e8b4ab7786847ee1ce0b59e446a70fe2'

Conflicts:
libguile/guardians.c

10 years agoMerge commit '8571dbde639e0ee9885bad49c9e180474bd23646'
Andy Wingo [Thu, 28 Nov 2013 14:00:17 +0000 (15:00 +0100)]
Merge commit '8571dbde639e0ee9885bad49c9e180474bd23646'

Conflicts:
libguile/procprop.c

10 years agoMerge commit '750ac8c592e792e627444f476877f282525b132e'
Andy Wingo [Thu, 28 Nov 2013 13:53:03 +0000 (14:53 +0100)]
Merge commit '750ac8c592e792e627444f476877f282525b132e'

Conflicts:
.gitignore
libguile/deprecated.c

10 years agoMerge commit 'c61be45084d04b1db792b7e232f5bd77099f3287'
Andy Wingo [Thu, 28 Nov 2013 13:47:38 +0000 (14:47 +0100)]
Merge commit 'c61be45084d04b1db792b7e232f5bd77099f3287'

Conflicts:
libguile/ports.c

10 years agoMerge commit 'd360671c1cca335600079f1c5714572d1c2e676d'
Andy Wingo [Thu, 28 Nov 2013 13:46:24 +0000 (14:46 +0100)]
Merge commit 'd360671c1cca335600079f1c5714572d1c2e676d'

10 years agoDeprecate gc-live-object-stats
Andy Wingo [Thu, 28 Nov 2013 13:40:58 +0000 (14:40 +0100)]
Deprecate gc-live-object-stats

* libguile/gc.h:
* libguile/gc.c:
* libguile/deprecated.h:
* libguile/deprecated.c (scm_gc_live_object_stats): Deprecate; it hasn't
  worked in the whole 2.0 series.

10 years agoAvoid needless GC on startup due to scm_gc_register_allocation
Andy Wingo [Thu, 28 Nov 2013 11:10:50 +0000 (12:10 +0100)]
Avoid needless GC on startup due to scm_gc_register_allocation

* libguile/gc.c (bytes_until_gc): Initialize to
  DEFAULT_INITIAL_HEAP_SIZE, to avoid forced GC on the first
  mallocation.

10 years agoRemove private-gc.h
Andy Wingo [Thu, 28 Nov 2013 10:53:57 +0000 (11:53 +0100)]
Remove private-gc.h

* libguile/simpos.c (scm_getenv_int): Move here, from gc.c.

* libguile/private-gc.h: Remove, unused.

* libguile/simpos.h: Move scm_getenv_int declaration here.

* libguile/vm.c:
* libguile/gc.c: Adapt scm_getenv_int users.

* libguile/gc-malloc.c:
* libguile/load.c:
* libguile/script.c: Remove private-gc includes from non-users of
  scm_getenv_int.

* libguile/Makefile.am: Adapt.

10 years agoscm_i_tag_name internal to gc.c
Andy Wingo [Thu, 28 Nov 2013 10:46:13 +0000 (11:46 +0100)]
scm_i_tag_name internal to gc.c

* libguile/gc.c (scm_i_tag_name): Make internal to gc.c.

* libguile/private-gc.h: Remove from here.

10 years agoMore private-gc excisions
Andy Wingo [Thu, 28 Nov 2013 10:43:51 +0000 (11:43 +0100)]
More private-gc excisions

* libguile/private-gc.h (SCM_DOUBLECELL_ALIGNED_P): Remove; unused.
* libguile/filesys.c (MAX, MIN): Move definitions here, from
  private-gc.h.
  (scm_sendfile, scm_readdir): Adapt uses of SCM_MAX and SCM_MIN to use
  MAX or MIN.

10 years agoRemove unused enum policy_on_error
Andy Wingo [Thu, 28 Nov 2013 10:37:29 +0000 (11:37 +0100)]
Remove unused enum policy_on_error

* libguile/private-gc.h (enum policy_on_error): Remove unused enum.

10 years agoTune initial heap size
Andy Wingo [Thu, 28 Nov 2013 10:32:08 +0000 (11:32 +0100)]
Tune initial heap size

* libguile/fluids.c (new_fluid): Don't run an explicit GC for the first
  fluid.

* libguile/gc.c (DEFAULT_INITIAL_HEAP_SIZE, scm_storage_prehistory):
  Enlarge from 32 kB to 512 or 1024 kB, depending on word size.  Reduces
  startup time by 10 or 15% by avoiding excessive
  GC.

* libguile/private-gc.h: Remove SCM_DEFAULT_INIT_HEAP_SIZE_2 definition
  here.

10 years agoRemove another GC 6.8 hack
Andy Wingo [Thu, 28 Nov 2013 10:05:38 +0000 (11:05 +0100)]
Remove another GC 6.8 hack

* libguile/gc.c (scm_storage_prehistory): Remove hack for BDW-GC 6.8.

10 years agoFix "include" doc typo
Andy Wingo [Thu, 28 Nov 2013 09:59:42 +0000 (10:59 +0100)]
Fix "include" doc typo

* doc/ref/api-evaluation.texi (Local Inclusion): Fix typo.

10 years agoUse version 2.2 in manual examples
Andy Wingo [Thu, 28 Nov 2013 09:57:42 +0000 (10:57 +0100)]
Use version 2.2 in manual examples

* doc/ref/api-evaluation.texi (Load Paths):
* doc/ref/api-options.texi (Build Config):
* doc/ref/guile-invoke.texi (Environment Variables):
* doc/ref/libguile-parallel.texi (Parallel Installations): Use 2.2 in
  examples, rather than 2.0.

10 years agoFix some references to objcode in the manual
Andy Wingo [Thu, 28 Nov 2013 09:56:55 +0000 (10:56 +0100)]
Fix some references to objcode in the manual

* doc/ref/api-evaluation.texi (Compilation): Update references from
  "objcode" to "rtl".

10 years agoRemove nonfunctional gdb interface
Andy Wingo [Wed, 27 Nov 2013 21:30:15 +0000 (22:30 +0100)]
Remove nonfunctional gdb interface

* libguile/gdb_interface.h:
* libguile/gdbint.c:
* libguile/gdbint.h: Remove.  These were last modified significantly in
  1997 and I think they are unused.

* libguile/guile.c: Remove use.
* libguile.h: Remove inclusion.
* libguile/Makefile.am: Remove reference.
* libguile/init.c: Remove use.

10 years agoRemove the restore-continuation-hook.
Andy Wingo [Wed, 27 Nov 2013 21:03:58 +0000 (22:03 +0100)]
Remove the restore-continuation-hook.

* libguile/vm.h:
* libguile/vm.c:
* libguile/vm-engine.c:
* module/system/vm/traps.scm:
* module/system/vm/vm.scm: Remove the unused and redundant
  restore-continuation-hook.

10 years agoDeclare r6rs-ports functions
Andy Wingo [Wed, 27 Nov 2013 20:13:20 +0000 (21:13 +0100)]
Declare r6rs-ports functions

* libguile/r6rs-ports.h:
* libguile/r6rs-ports.c: Declare scm_unget_bytevector and
  scm_i_make_transcoded_port.

10 years agoFix uninitialized variable error in some peek-char error cases
Andy Wingo [Wed, 27 Nov 2013 18:50:13 +0000 (19:50 +0100)]
Fix uninitialized variable error in some peek-char error cases

* libguile/ports.c (scm_peek_char): Don't require error cases to
  set *len.  Fixes a bug caught by GCC whereby an EOF while reading a
  multibyte character with iconv would leave len uninitialized.

10 years agoDeclare scm_i_open_file to silence a warning
Andy Wingo [Wed, 27 Nov 2013 18:36:46 +0000 (19:36 +0100)]
Declare scm_i_open_file to silence a warning

* libguile/fports.c (scm_i_open_file): Declare.

10 years agoRemove generalized vector interface; deprecated in 2.0 already.
Andy Wingo [Wed, 27 Nov 2013 18:31:09 +0000 (19:31 +0100)]
Remove generalized vector interface; deprecated in 2.0 already.

* libguile/deprecated.c: Remove the generalized-vector interface,
  deprecated since 2.0.8.

10 years agoDeclare scm_nil_p
Andy Wingo [Wed, 27 Nov 2013 18:30:18 +0000 (19:30 +0100)]
Declare scm_nil_p

* libguile/boolean.h: Declare scm_nil_p.

10 years agoBuild psyntax-pp serially after eval.go.
Andy Wingo [Tue, 26 Nov 2013 09:47:29 +0000 (10:47 +0100)]
Build psyntax-pp serially after eval.go.

* module/Makefile.am: Arrange to build psyntax-pp.go in serial mode,
  after eval.go.  Before the expander is compiled, expanding all the
  Scheme files dominates compile-time, even for larger files like
  psyntax-pp.scm.  If we compile psyntax in parallel with other files,
  it could be one of the other files finishes first, leading to two
  consecutive compiles that have to use an uncompiled psyntax expander.
  Ordering the compilation minimizes total real and user time, at least
  locally on a 4-core machine.

  Also take the opportunity to shuffle compile order for the rest of the
  Scheme files, to build parts of the RTL compiler early.

10 years agoContification converges more quickly
Andy Wingo [Mon, 25 Nov 2013 19:07:27 +0000 (20:07 +0100)]
Contification converges more quickly

* module/language/cps/contification.scm (compute-contification):
  Converge more quickly by using the information we compute within a
  compute-contification pass.

10 years agoCompute-contification also visits body
Andy Wingo [Sun, 24 Nov 2013 12:59:18 +0000 (13:59 +0100)]
Compute-contification also visits body

* module/language/cps/contification.scm (compute-contification): If we
  decide to contify, don't forget to visit the body.  Should make
  contification converge faster.

10 years agoMake (ice-9 popen) thread-safe.
Mark H Weaver [Sun, 17 Nov 2013 07:54:31 +0000 (02:54 -0500)]
Make (ice-9 popen) thread-safe.

Fixes <http://bugs.gnu.org/15683>.
Reported by David Pirotte <david@altosw.be>.

* module/ice-9/popen.scm: Import (ice-9 threads) and (srfi srfi-9).
  (<pipe-info>): New record type.
  (port/pid-table): Mark as deprecated in comment.
  (port/pid-table-mutex): New variable.
  (open-pipe*): Store the pid in the pipe-info record, and store the
  pipe-info as a port property.  Guard the pipe-info instead of the
  port.  Lock 'port/pid-table-mutex' while mutating 'port/pid-table'.
  (fetch-pid): Removed.
  (fetch-pipe-info): New procedure.
  (close-process-quietly): Removed.
  (close-pipe): Use 'fetch-pipe-info' instead of 'fetch-pid'.  Clear
  the pid from the pipe-info.  Improve error messages.
  (reap-pipes): Adapt to the fact that the pipe-info is now guarded
  instead of the port.  Incorporate the 'waitpid' code that was
  previously in 'close-process-quietly', but let the port finalizer
  close the port.  Clear the pid from the pipe-info.

10 years agoStylistic improvements for (ice-9 popen).
Mark H Weaver [Sun, 17 Nov 2013 07:46:08 +0000 (02:46 -0500)]
Stylistic improvements for (ice-9 popen).

* module/ice-9/popen.scm (close-process, close-process-quietly): Accept
  'port' and 'pid' as separate arguments.  Improve style.
  (close-pipe, read-pipes): Improve style.

10 years agoMake port properties accessible from Scheme.
Mark H Weaver [Sun, 17 Nov 2013 06:11:57 +0000 (01:11 -0500)]
Make port properties accessible from Scheme.

* libguile/ports.c (scm_i_port_alist, scm_i_set_port_alist_x): Removed.
  (scm_i_port_property, scm_i_set_port_property_x): New procedures,
  available from Scheme as '%port-property' and '%set-port-property!'.

* libguile/ports.h (scm_i_port_alist, scm_i_set_port_alist_x): Removed.
  (scm_i_port_property, scm_i_set_port_property_x): New prototypes.

* libguile/read.c (set_port_read_option, init_read_options): Adapt to
  use scm_i_port_property and scm_i_set_port_property_x.

10 years agoMake guardians thread-safe.
Mark H Weaver [Sun, 17 Nov 2013 08:35:09 +0000 (03:35 -0500)]
Make guardians thread-safe.

* libguile/guardians.c (t_guardian): Add mutex.
  (finalize_guarded, scm_i_guard, scm_i_get_one_zombie): Lock mutex and
  block system asyncs during critical sections.
  (scm_make_guardian): Initialize mutex.

10 years agoBlock system asyncs while 'overrides_lock' is held.
Mark H Weaver [Sun, 17 Nov 2013 08:19:32 +0000 (03:19 -0500)]
Block system asyncs while 'overrides_lock' is held.

* libguile/procprop.c (scm_set_procedure_property_x): Block system
  asyncs while overrides_lock is held.  Use dynwind block in case
  an exception is thrown.

10 years agoAdd mutex locking functions that also block asyncs.
Mark H Weaver [Sun, 17 Nov 2013 09:00:29 +0000 (04:00 -0500)]
Add mutex locking functions that also block asyncs.

* libguile/async.h (scm_i_pthread_mutex_lock_block_asyncs,
  scm_i_pthread_mutex_unlock_unblock_asyncs): New macros.

* libguile/threads.c (do_unlock_with_asyncs): New static helper.
  (scm_i_dynwind_pthread_mutex_lock_block_asyncs): New function.

* libguile/threads.h (scm_i_dynwind_pthread_mutex_lock_block_asyncs):
  Add prototype.

10 years agoConvert test-suite/tests/exceptions.test to use hygienic macros.
Chris K. Jester-Young [Sun, 27 Oct 2013 21:31:38 +0000 (17:31 -0400)]
Convert test-suite/tests/exceptions.test to use hygienic macros.

* test-suite/tests/exceptions.test (push): New syntax parameter.
  (throw-test): Convert to a syntax-rules macro, using syntax parameters
  to support the otherwise-unhygienic use of "push".

10 years agoExpandable stacks.
Andy Wingo [Fri, 22 Nov 2013 16:31:07 +0000 (17:31 +0100)]
Expandable stacks.

* libguile/vm-engine.c (CHECK_OVERFLOW): Call vm_expand_stack, not
  vm_error_stack_overflow.
* libguile/vm.c (hard_max_stack_size, default_max_stack_size): Recast
  #defines as locals.  Have both hard and soft stack limits.
  (initialize_default_stack_size): Set soft stack limit from
  GUILE_STACK_SIZE.
  (expand_stack, vm_expand_stack): Support for expanding stacks as
  needed.  Whee!
  (make_vm): Adapt limits.
  (scm_call_n): Expand stack if needed.

* libguile/vm.h (struct scm_vm): Add max_stack_size member.

10 years agoVM copes with moving FP
Andy Wingo [Fri, 22 Nov 2013 17:35:02 +0000 (18:35 +0100)]
VM copes with moving FP

* libguile/_scm.h (SCM_ASYNC_TICK_WITH_GUARD_CODE): New macro.
* libguile/vm-engine.c (VM_HANDLE_INTERRUPTS): Restore FP after
  ticking.
  (CACHE_FP): New macro.
  (CHECK_OVERFLOW): Use CACHE_FP.
  (BR_ARITHMETIC, RETURN_EXP, RETURN_ONE_VALUE, BINARY_INTEGER_OP):
  (call, return-values, subr-call, foreign-call)
  (resolve, define!, toplevel-box, module-box): Restore the FP from the
  vp where needed.

10 years agoSimplify state sync in VM before potential bailout.
Andy Wingo [Fri, 22 Nov 2013 17:06:35 +0000 (18:06 +0100)]
Simplify state sync in VM before potential bailout.

* libguile/vm-engine.c (SYNC_IP): Remove calls to SYNC_BEFORE_GC, a
  no-op.  Replace SYNC_REGISTER / SYNC_ALL calls with just SYNC_IP.

10 years agoMore precise stack marking.
Andy Wingo [Fri, 22 Nov 2013 14:02:17 +0000 (15:02 +0100)]
More precise stack marking.

* libguile/vm.c (scm_i_vm_mark_stack): Mark the stack more precisely.

10 years agoAllocate stacks using mmap, and mark them via the thread marker
Andy Wingo [Fri, 22 Nov 2013 13:41:19 +0000 (14:41 +0100)]
Allocate stacks using mmap, and mark them via the thread marker

* libguile/threads.c (thread_mark): Mark the VM stack, if we have one.
  (on_thread_exit): Free the VM stack here.

* libguile/vm.c (make_vm): Allocate the VM stack using mmap, and arrange
  for it to be marked by the thread marker.
  (scm_i_vm_mark_stack, scm_i_vm_free_stack): New internal interfaces.
  (allocate_stack, free_stack): New helpers.

10 years agoAdd thread mark procedure
Andy Wingo [Fri, 22 Nov 2013 12:01:53 +0000 (13:01 +0100)]
Add thread mark procedure

* libguile/threads.c (thread_mark): A mark procedure for threads.
  Eventually will mark the stack.
  (guilify_self_1): Move initialization of VP earlier.  Allocate thread
  using thread_gc_kind.
  (scm_threads_prehistory): Initialize thread_gc_kind.

10 years agoRemove unused scm_i_thread fields
Andy Wingo [Fri, 22 Nov 2013 09:59:14 +0000 (10:59 +0100)]
Remove unused scm_i_thread fields

* libguile/threads.h (scm_i_thread):
* libguile/threads.c (guilify_self_1): Remove unused mark stack fields.

10 years agoRemove tests and shims for pre-7.2 bdw-gc.
Andy Wingo [Fri, 22 Nov 2013 09:51:56 +0000 (10:51 +0100)]
Remove tests and shims for pre-7.2 bdw-gc.

* configure.ac: Remove checks for symbols present in bdw-gc 7.2.

* libguile/finalizers.c:
* libguile/gc-malloc.c:
* libguile/gc.c:
* libguile/guardians.c:
* libguile/scmsigs.c:
* libguile/threads.c: Remove shims.

10 years agoAdd explicit nopcodes
Andy Wingo [Thu, 21 Nov 2013 21:51:38 +0000 (22:51 +0100)]
Add explicit nopcodes

* libguile/vm-engine.c (VM_NAME): Add explicit nopcodes, later to be
  interspersed with others.  This will allow us some extensibility
  without always shuffling around opcodes.  Also avoid lazy
  initialization; have the linker do it for us.

* libguile/instructions.c (parse_instruction):
  (scm_instruction_list): Rework instruction parsing to avoid using
  malloc.  It would seem that this would fix some GC issue -- but who
  knows!

10 years agoSetjmp before calling into the VM
Andy Wingo [Thu, 21 Nov 2013 20:15:58 +0000 (21:15 +0100)]
Setjmp before calling into the VM

* libguile/vm-engine.c (CACHE_REGISTER): Remove an unneeded cast.
  (VM_NAME):
* libguile/vm.c (scm_call_n): Setjmp out here.  This leaves the VM
  without any initialization work to do.  It also makes it possible to
  restart the VM in another mode (with hooks, for example).

10 years agoscm_call_n sets up boot continuation frame for VM
Andy Wingo [Thu, 21 Nov 2013 18:05:43 +0000 (19:05 +0100)]
scm_call_n sets up boot continuation frame for VM

* libguile/vm-engine.c:
* libguile/vm.c (scm_call_n): Move boot continuation setup to
  scm_call_n, so that vm-engine takes all of its state from the vp.

10 years agoscm_call_n avoids double TLS lookup
Andy Wingo [Thu, 21 Nov 2013 17:50:12 +0000 (18:50 +0100)]
scm_call_n avoids double TLS lookup

* libguile/vm-engine.c (VM_NAME): Take the current thread as an
  argument.
* libguile/vm.c (scm_i_capture_current_stack): Call thread_vm.
  (thread_vm): New helper.
  (scm_the_vm): Call thread_vm.
  (scm_call_n): Call thread_vm.  Avoids a double TLS lookup.

10 years agoRemove scm_tc7_vm
Andy Wingo [Thu, 21 Nov 2013 17:37:52 +0000 (18:37 +0100)]
Remove scm_tc7_vm

* libguile/tags.h (scm_tc7_vm): Return to pool.

* libguile/goops.c:
* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p):
* libguile/print.c (iprin1): Remove tc7_vm things.

* libguile/vm.h (scm_the_vm_fluid): Remove stray declaration.  Remove
  SCM_VM_P.  Remove SCM_VM_DATA.  Remove SCM_VALIDATE_VM.
* libguile/vm.c (scm_i_vm_print): Remove.

10 years agoRemove last use of SCM vm
Andy Wingo [Thu, 21 Nov 2013 17:33:06 +0000 (18:33 +0100)]
Remove last use of SCM vm

* libguile/threads.h (scm_i_thread): Hold a struct scm_vm*, not a SCM
  vm.
* libguile/threads.c (guilify_self_2):
* libguile/vm.c (make_vm): Adapt.

10 years agoscm_the_vm now returns raw struct scm_vm pointer
Andy Wingo [Thu, 21 Nov 2013 17:28:06 +0000 (18:28 +0100)]
scm_the_vm now returns raw struct scm_vm pointer

* libguile/vm.h (scm_the_vm): Return struct scm_vm*.
  (scm_c_vm_run): Remove.

* libguile/control.c:
* libguile/eval.c:
* libguile/throw.c:
* libguile/vm.c: Adapt.

10 years agoPrefer scm_call_n to scm_c_vm_run (scm_the_vm())
Andy Wingo [Thu, 21 Nov 2013 17:23:08 +0000 (18:23 +0100)]
Prefer scm_call_n to scm_c_vm_run (scm_the_vm())

* libguile/vm.c (scm_i_capture_current_stack): Cosmetic tweak.
  (scm_call_n): Define here instead of in eval.c.  All callers of
  scm_c_vm_run were passing scm_the_vm() as the VM.  Eventually
  scm_call_n will replace scm_c_vm_run.

* libguile/eval.c: Adapt all callers.

10 years agoscm_i_prompt_pop_abort_args_x takes struct scm_vm* as arg
Andy Wingo [Thu, 21 Nov 2013 17:09:29 +0000 (18:09 +0100)]
scm_i_prompt_pop_abort_args_x takes struct scm_vm* as arg

* libguile/control.h:
* libguile/control.c (scm_i_prompt_pop_abort_args_x): Change to take VP
  as an arg, not VM.

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Adapt.

10 years agoEngine takes struct scm_vm* as argument
Andy Wingo [Thu, 21 Nov 2013 16:52:00 +0000 (17:52 +0100)]
Engine takes struct scm_vm* as argument

* libguile/vm-engine.c:
* libguile/vm.c (scm_c_vm_run): VM engine now takes struct scm_vm* as
  argument, not SCM vm.

10 years agoOne more SCM vm user: continuations.
Andy Wingo [Thu, 21 Nov 2013 16:50:33 +0000 (17:50 +0100)]
One more SCM vm user: continuations.

* libguile/continuations.c:
* libguile/continuations.h (struct scm_t_contregs): Rename SCM vm member
  to struct scm_vm *vp.
  (scm_i_make_continuation): Take vp instead of vm.
  (scm_i_contregs_vp): Rename from scm_i_contregs_vm, return vp.

* libguile/vm-engine.c (continuation-call, call/cc): Fix remaining SCM
  vm user.

* libguile/vm.c (vm_return_to_continuation): Adapt prototype.

10 years agoRemove last use of SCM vm in VM
Andy Wingo [Thu, 21 Nov 2013 16:36:22 +0000 (17:36 +0100)]
Remove last use of SCM vm in VM

* libguile/control.h:
* libguile/control.c (reify_partial_continuation, scm_c_abort): Take
  struct scm_vm *vp as an arg.

* libguile/dynstack.h: Remove control.h include.

* libguile/vm.c (vm_abort): Take struct scm_vm *vp as an arg.

* libguile/vm-engine.c (abort): Adapt to vm_abort change.

10 years agoRemove use of SCM vm in compose-continuation
Andy Wingo [Thu, 21 Nov 2013 16:28:34 +0000 (17:28 +0100)]
Remove use of SCM vm in compose-continuation

* libguile/vm.c (vm_reinstate_partial_continuation): Take struct scm_vm
  argument instead of SCM.
* libguile/vm-engine.c (compose-continuation): Adapt.

10 years agoDispatch hooks use "vp" rather than "vm"
Andy Wingo [Thu, 21 Nov 2013 16:24:48 +0000 (17:24 +0100)]
Dispatch hooks use "vp" rather than "vm"

* libguile/vm.c (vm_dispatch_hook):
  (vm_dispatch_apply_hook):
  (vm_dispatch_push_continuation_hook):
  (vm_dispatch_pop_continuation_hook):
  (vm_dispatch_next_hook):
  (vm_dispatch_abort_hook):
  (vm_dispatch_restore_continuation_hook): Use scm_vm pointer instead of
  Scheme vm object.

10 years agoHeap frame "stack holders" are raw scm_vm / scm_vm_cont pointers
Andy Wingo [Thu, 21 Nov 2013 16:21:37 +0000 (17:21 +0100)]
Heap frame "stack holders" are raw scm_vm / scm_vm_cont pointers

* libguile/frames.h (struct scm_frame): stack_holder is a void*.
* libguile/frames.c (scm_i_frame_stack_base, scm_i_frame_offset): Expect
  stack_holder to be the raw struct scm_vm or scm_vm_cont.

* libguile/continuations.c (scm_i_continuation_to_frame):
* libguile/stacks.c (scm_make_stack)
* libguile/vm.c (vm_dispatch_hook): Adapt creators.

10 years agoHeap frames have a "frame kind" bit
Andy Wingo [Thu, 21 Nov 2013 16:13:18 +0000 (17:13 +0100)]
Heap frames have a "frame kind" bit

* libguile/frames.h (enum scm_vm_frame_kind, SCM_VM_FRAME_KIND)
  (scm_c_make_frame): Add a "frame kind" bit to the first word.  This
  will allow the "stack holder" to be a non-SCM object.

* libguile/continuations.c (scm_i_continuation_to_frame):
* libguile/frames.c (scm_c_make_frame, scm_frame_previous)
* libguile/stacks.c (scm_make_stack):
* libguile/vm.c (vm_dispatch_hook): Adapt frame creators to set the
  frame kind bit.

10 years agoThe dynamic stack records SP and FP values as offsets
Andy Wingo [Thu, 21 Nov 2013 11:12:38 +0000 (12:12 +0100)]
The dynamic stack records SP and FP values as offsets

* libguile/dynstack.h:
* libguile/dynstack.c (PROMPT_FP, PROMPT_SP):
  (scm_dynstack_push_prompt, scm_dynstack_find_prompt): Prompts on the
  dynstack are recorded as offsets from the base stack address in this
  thread.

* libguile/control.c (scm_c_abort):
* libguile/eval.c (eval):
* libguile/stacks.c (find_prompt, narrow_stack):
* libguile/throw.c (pre_init_catch):
* libguile/vm-engine.c (prompt): Adapt.

10 years agoReorder struct scm_vm fields.
Andy Wingo [Thu, 21 Nov 2013 15:51:04 +0000 (16:51 +0100)]
Reorder struct scm_vm fields.

* libguile/vm.h (struct scm_vm): Reorder fields, perhaps for better
  locality.

10 years agoNo more VM objects visible to Scheme
Andy Wingo [Thu, 21 Nov 2013 15:45:03 +0000 (16:45 +0100)]
No more VM objects visible to Scheme

* libguile/vm.h:
* libguile/vm.c (scm_the_vm): Don't expose to Scheme.
  (scm_vm_p): Remove, as it is not needed.

* module/system/vm/vm.scm: Remove the-vm and vm? exports.

* doc/ref/api-coverage.texi (Code Coverage):
* test-suite/tests/coverage.test:
* module/system/vm/coverage.scm (with-code-coverage): Don't take a VM
  argument.  Adapt documentation and tests.

* module/ice-9/command-line.scm: Remove the-vm autoload.

* module/system/vm/trace.scm (trace-calls-to-procedure):
  (trace-calls-in-procedure):
  (trace-instructions-in-procedure):
  (call-with-trace): Remove #:vm kwarg, and adapt to trap changes.

* module/system/vm/trap-state.scm (the-trap-state): Rework to use a
  parameter underneath instead of a weak key on (the-vm).

* module/system/vm/traps.scm (new-disabled-trap):
  (new-enabled-trap): Remove vm argument.
  (trap-at-procedure-call):
  (trap-in-procedure):
  (trap-instructions-in-procedure):
  (trap-at-procedure-ip-in-range):
  (trap-at-source-location):
  (trap-frame-finish):
  (trap-in-dynamic-extent):
  (trap-calls-in-dynamic-extent):
  (trap-instructions-in-dynamic-extent):
  (trap-calls-to-procedure):
  (trap-matching-instructions): Remove vm keyword arguments.

* test-suite/tests/control.test ("unwind"): Adapt test.

* test-suite/tests/eval.test (test-suite): Remove the-vm import.

10 years agoVM accessors take VM as implicit argument, not explicit argument
Andy Wingo [Thu, 21 Nov 2013 15:10:41 +0000 (16:10 +0100)]
VM accessors take VM as implicit argument, not explicit argument

* libguile/vm.h:
* libguile/vm.c:
  (scm_vm_apply_hook, scm_vm_push_continuation_hook,
  scm_vm_pop_continuation_hook, scm_vm_abort_continuation_hook,
  scm_vm_restore_continuation_hook, scm_vm_next_hook,
  scm_vm_trace_level, scm_set_vm_trace_level_x, scm_vm_engine,
  scm_set_vm_engine_x, scm_c_set_vm_engine_x): The VM argument is now
  implicit: the VM for the current thread.

* doc/ref/api-debug.texi (VM Hooks): Try to adapt.

* module/ice-9/command-line.scm:
* module/statprof.scm:
* module/system/vm/coverage.scm:
* module/system/vm/trace.scm:
* module/system/vm/trap-state.scm:
* module/system/vm/traps.scm:
* test-suite/tests/control.test:
* test-suite/tests/eval.test: Adapt users that set hooks or ensure that
  we have a debug engine.

10 years agoChange eval.c to use scm_c_vm_run instead of scm_call_with_vm.
Andy Wingo [Thu, 21 Nov 2013 14:41:27 +0000 (15:41 +0100)]
Change eval.c to use scm_c_vm_run instead of scm_call_with_vm.

* libguile/eval.c (scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3)
  (scm_map, scm_for_each, scm_apply): Change to prefer scm_apply_0, and
  to have it call vm_run instead of call_with_vm.
  (eval): Use scm_apply_0 and scm_call_0.

* libguile/srfi-1.c (scm_srfi1_count): Use scm_apply_0.

10 years agoRemove unused vm:ip, vm:sp, vm:fp
Andy Wingo [Thu, 21 Nov 2013 14:02:36 +0000 (15:02 +0100)]
Remove unused vm:ip, vm:sp, vm:fp

* libguile/vm.h:
* libguile/vm.c (scm_vm_ip, scm_vm_fp, scm_vm_sp): Remove unused
  functions.

* module/system/vm/vm.scm: Remove exports.

10 years agoRemove make-vm; there will be one vm per thread now.
Andy Wingo [Thu, 21 Nov 2013 13:59:58 +0000 (14:59 +0100)]
Remove make-vm; there will be one vm per thread now.

* libguile/vm.h:
* libguile/vm.c (scm_make_vm): Remove.

* module/system/vm/vm.scm: Remove make-vm export.

* test-suite/tests/control.test ("the-vm"):
* test-suite/tests/coverage.test (%test-vm):
* test-suite/tests/eval.test ("stack overflow"): Adapt tests.

10 years agoScheme frame objects hold relative stack offsets
Andy Wingo [Thu, 21 Nov 2013 10:20:19 +0000 (11:20 +0100)]
Scheme frame objects hold relative stack offsets

* libguile/frames.h: Wrap the C interface to VM frames in
  BUILDING_LIBGUILE.  Change VM frames to record relative offsets into a
  stack held by some other object, so that if the stack moves they will
  remain valid.
* libguile/frames.c (scm_c_make_frame): Remove offset argument.
  (scm_i_frame_offset): Instead, compute the offset from the stack
  holder.
  (scm_i_frame_stack_base): New helper.
  (scm_frame_previous): Adapt.

* libguile/stacks.c (scm_make_stack)
* libguile/vm.c (vm_dispatch_hook):
* libguile/continuations.c (scm_i_continuation_to_frame): Adapt.

10 years agoPrepare for moveable stacks in the VM.
Andy Wingo [Thu, 21 Nov 2013 09:23:35 +0000 (10:23 +0100)]
Prepare for moveable stacks in the VM.

* libguile/vm-engine.c (CHECK_OVERFLOW, ALLOC_FRAME, vm_engine): Prepare
  for moveable stacks.

10 years agoCHECK_OVERFLOW tweak
Andy Wingo [Thu, 21 Nov 2013 09:07:58 +0000 (10:07 +0100)]
CHECK_OVERFLOW tweak

* libguile/vm-engine.c (CHECK_OVERFLOW): Now that we aren't checking for
  overflow on every push, fetch the stack limit from the vm instead of a
  local.

10 years agoFix standalone tests
Andy Wingo [Wed, 20 Nov 2013 19:01:30 +0000 (20:01 +0100)]
Fix standalone tests

* test-suite/vm/run-vm-tests.scm: Fix for objcode -> loader rename.

10 years agovm-engine cosmetic cleanup
Andy Wingo [Wed, 20 Nov 2013 18:38:37 +0000 (19:38 +0100)]
vm-engine cosmetic cleanup

* libguile/vm-engine.c: Reindent UNPACK macros.