Andy Wingo [Fri, 29 Nov 2013 22:24:17 +0000 (23:24 +0100)]
Beginning vm.texi updates
* doc/ref/vm.texi: Updates.
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.
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)".
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.
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.
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.
Andy Wingo [Thu, 28 Nov 2013 15:24:38 +0000 (16:24 +0100)]
Merge remote-tracking branch 'origin/stable-2.0'
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.
Andy Wingo [Thu, 28 Nov 2013 15:16:48 +0000 (16:16 +0100)]
Merge commit '
d364a8971828e38e8f9112b711066f4962bb400e'
Conflicts:
libguile/deprecated.h
libguile/gc.c
Andy Wingo [Thu, 28 Nov 2013 15:15:55 +0000 (16:15 +0100)]
Andy Wingo [Thu, 28 Nov 2013 15:15:51 +0000 (16:15 +0100)]
Andy Wingo [Thu, 28 Nov 2013 15:15:38 +0000 (16:15 +0100)]
Merge commit '
a38024baaa32d1a6d91fdc81388c88bbb926c3ae'
Conflicts:
libguile/ports.h
Andy Wingo [Thu, 28 Nov 2013 15:03:58 +0000 (16:03 +0100)]
Merge commit '
2437c7b2e8b4ab7786847ee1ce0b59e446a70fe2'
Conflicts:
libguile/guardians.c
Andy Wingo [Thu, 28 Nov 2013 14:00:17 +0000 (15:00 +0100)]
Merge commit '
8571dbde639e0ee9885bad49c9e180474bd23646'
Conflicts:
libguile/procprop.c
Andy Wingo [Thu, 28 Nov 2013 13:53:03 +0000 (14:53 +0100)]
Merge commit '
750ac8c592e792e627444f476877f282525b132e'
Conflicts:
.gitignore
libguile/deprecated.c
Andy Wingo [Thu, 28 Nov 2013 13:47:38 +0000 (14:47 +0100)]
Merge commit '
c61be45084d04b1db792b7e232f5bd77099f3287'
Conflicts:
libguile/ports.c
Andy Wingo [Thu, 28 Nov 2013 13:46:24 +0000 (14:46 +0100)]
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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".
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.
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.
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.
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.
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.
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.
Andy Wingo [Wed, 27 Nov 2013 18:30:18 +0000 (19:30 +0100)]
Declare scm_nil_p
* libguile/boolean.h: Declare scm_nil_p.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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".
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.
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.
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.
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.
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.
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.
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.
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.
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!
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Andy Wingo [Wed, 20 Nov 2013 18:38:37 +0000 (19:38 +0100)]
vm-engine cosmetic cleanup
* libguile/vm-engine.c: Reindent UNPACK macros.
Andy Wingo [Wed, 20 Nov 2013 18:38:06 +0000 (19:38 +0100)]
Remove unused resolve_variable helper
* libguile/vm.c (resolve_variable): Remove unused helper.
Andy Wingo [Tue, 19 Nov 2013 21:14:20 +0000 (22:14 +0100)]
Rework hook dispatch mechanism
* libguile/vm-engine.c (RUN_HOOK, RUN_HOOK0, RUN_HOOK1): Rework to
dispatch through specific per-hook procedures. Might reduce register
pressure in the VM.
* libguile/vm.c (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): New internal helpers.
Andy Wingo [Tue, 19 Nov 2013 20:47:55 +0000 (21:47 +0100)]
Remove VM_ENABLE_STACK_NULLING
* libguile/vm.c: Remove code dependent on VM_ENABLE_STACK_NULLING. This
defined didn't work and doesn't apply to the RTL model.
Andy Wingo [Tue, 19 Nov 2013 20:45:07 +0000 (21:45 +0100)]
Rename objcodes?.{scm,c,h} to loader.{scm,c,h}
* libguile/loader.c:
* libguile/loader.h: Rename from objcodes.[ch].
* module/system/vm/loader.scm: Rename from objcode.scm.
* libguile/Makefile.am:
* libguile/gsubr.c:
* libguile/init.c:
* libguile/procs.c:
* libguile/vm.c:
* module/Makefile.am:
* module/ice-9/eval-string.scm:
* module/language/rtl/spec.scm:
* module/system/base/target.scm:
* module/system/repl/command.scm:
* module/system/repl/common.scm:
* module/system/vm/debug.scm:
* module/system/vm/disassembler.scm:
* module/system/vm/objcode.scm:
* test-suite/tests/compiler.test:
* test-suite/tests/dwarf.test:
* test-suite/tests/rtl-compilation.test:
* test-suite/tests/rtl.test: Adapt.
Andy Wingo [Tue, 19 Nov 2013 20:32:42 +0000 (21:32 +0100)]
Remove (oop goops) <objcode> export
* module/oop/goops.scm (oop): Remove objcode export.
Andy Wingo [Tue, 19 Nov 2013 20:27:38 +0000 (21:27 +0100)]
Fix gsubr comment
* libguile/gsubr.c: Update comment to excise RTL.
Andy Wingo [Tue, 19 Nov 2013 20:26:26 +0000 (21:26 +0100)]
Lingering RTL excision in vm.c
* libguile/vm-engine.c:
* libguile/vm.c: Rework VM inclusion so that we don't define VM_ENGINE
and expect vm-engine.c to understand that -- since there is only
VM_USE_HOOKS, define that in vm.c directly. Rename rtl_vm_foo to
vm_foo.
* libguile/vm.h: Remove scm_t_vm_engine typedef.
Andy Wingo [Tue, 19 Nov 2013 20:11:28 +0000 (21:11 +0100)]
Move RTL unpack macros to vm-engine.c
* libguile/instructions.h: Remove SCM_UNPACK macros from here.
* libguile/vm-engine.c: Add them here, without the RTL_, and without the
SCM_ prefix.
Andy Wingo [Tue, 19 Nov 2013 20:04:24 +0000 (21:04 +0100)]
Change SCM_PACK_RTL macros to SCM_PACK_OP / SCM_PACK_OP_ARG
* libguile/instructions.h: Guard in BUILDING_LIBGUILE.
(SCM_PACK_OP_24):
(SCM_PACK_OP_8_8_8):
(SCM_PACK_OP_8_16):
(SCM_PACK_OP_16_8):
(SCM_PACK_OP_12_12): Rename from SCM_PACK_RTL_*, and splice in the
opcode.
(SCM_PACK_OP_ARG_8_24): New helper.
* libguile/vm.c:
* libguile/gsubr.c:
* libguile/foreign.c:
* libguile/control.c:
* libguile/continuations.c: Adapt.
Andy Wingo [Tue, 19 Nov 2013 19:31:21 +0000 (20:31 +0100)]
scm_rtl_op_* -> scm_op_*
* libguile/instructions.h (scm_opcode): Rename from scm_rtl_opcode.
Rename opcodes from scm_rtl_op_* to scm_op_*.
* libguile/continuations.c:
* libguile/control.c:
* libguile/foreign.c:
* libguile/gsubr.c:
* libguile/instructions.c:
* libguile/vm.c: Adapt.
Andy Wingo [Tue, 19 Nov 2013 19:45:57 +0000 (20:45 +0100)]
(system vm instruction) rtl-instruction-list -> (language rtl) instruction-list
* libguile/instructions.c (struct scm_instruction, fetch_instruction_table)
(scm_instruction_list): Remove rtl_ infix.
* libguile/instructions.h: Adapt.
* module/system/vm/instruction.scm: Remove.
* module/language/rtl.scm: Export instruction-list from here.
* module/Makefile.am:
* module/language/cps/primitives.scm:
* module/system/vm/assembler.scm:
* module/system/vm/disassembler.scm:
* module/system/vm/frame.scm:
* module/system/vm/program.scm:
* module/system/vm/trace.scm:
* module/system/vm/traps.scm: Adapt.
Andy Wingo [Tue, 19 Nov 2013 19:05:45 +0000 (20:05 +0100)]
Internal RTL excision in vm.c
* libguile/vm.c (vm_boot_continuation, vm_boot_continuation_code):
Rename from rtl_boot_continuation[_code].
(scm_bootstrap_vm):
* libguile/vm-engine.c (rtl_vm_engine): Adapt.
Andy Wingo [Tue, 19 Nov 2013 19:02:49 +0000 (20:02 +0100)]
Small comment fix.
* libguile/vm-builtins.h: Rename RTL to VM in a comment.
Andy Wingo [Tue, 19 Nov 2013 19:02:15 +0000 (20:02 +0100)]
Rename DT_GUILE_VM_VERSION.
* libguile/objcodes.c (DT_GUILE_VM_VERSION, process_dynamic_segment):
* module/system/vm/elf.scm (DT_GUILE_VM_VERSION): Rename from
DT_GUILE_RTL_VERSION.
* module/system/vm/assembler.scm (link-dynamic-section): Adapt.
Andy Wingo [Tue, 19 Nov 2013 18:50:15 +0000 (19:50 +0100)]
Rename internal rtl-program-properties -> program-properties
* module/system/vm/program.scm (program-properties): Rename from
rtl-program-properties.
* libguile/programs.c (scm_i_program_properties): Adapt.
Andy Wingo [Tue, 19 Nov 2013 18:47:33 +0000 (19:47 +0100)]
Excise "rtl-" from fallback program printer
* libguile/programs.c (scm_i_program_print): Fallback printer uses
"program", not "rtl-program".
Andy Wingo [Tue, 19 Nov 2013 18:45:56 +0000 (19:45 +0100)]
Rename internals of (system vm program) program-minimum-arity
* module/system/vm/debug.scm (find-program-minimum-arity): Rename from
program-minimum-arity.
* module/system/vm/program.scm (program-minimum-arity): Rename from
rtl-program-minimum-arity.
* libguile/programs.c (scm_i_program_arity): Adapt.
Andy Wingo [Tue, 19 Nov 2013 18:36:16 +0000 (19:36 +0100)]
Rename (system vm program) internal functions to remove rtl-
* module/system/vm/program.scm (program-name)
(program-documentation): Rename (removing rtl-).
* libguile/programs.c (scm_i_program_name):
(scm_i_program_documentation): Adapt callers.
Andy Wingo [Tue, 19 Nov 2013 18:19:55 +0000 (19:19 +0100)]
Remove unused C scm_program_source.
* libguile/programs.c (scm_program_source): Remove; not called. (The
definition is in Scheme.)