[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] GNU Guile branch, wip-case-lambda, created. release_1-9-
From: |
Andy Wingo |
Subject: |
[Guile-commits] GNU Guile branch, wip-case-lambda, created. release_1-9-3-46-g110a808 |
Date: |
Sun, 04 Oct 2009 19:10:13 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".
http://git.savannah.gnu.org/cgit/guile.git/commit/?id=110a80803a32288df898d5f1ab944d64a248baf0
The branch, wip-case-lambda has been created
at 110a80803a32288df898d5f1ab944d64a248baf0 (commit)
- Log -----------------------------------------------------------------
commit 110a80803a32288df898d5f1ab944d64a248baf0
Author: Andy Wingo <address@hidden>
Date: Sun Oct 4 21:07:37 2009 +0200
case-lambda support in the low-level debugging bits
* libguile/frames.c (scm_vm_frame_arguments): Defer to an implementation
in Scheme, in (system vm frame).
(scm_vm_frame_num_locals scm_vm_frame_local_ref)
(scm_vm_frame_local_set_x): Since we can get not-yet-active frames on
the stack now, with our current calling convention, we have to add a
heuristic here to jump over those frames -- because frames have
pointers in them, not Scheme values.
(scm_vm_frame_instruction_pointer): New accessor.
* libguile/frames.h: Add scm_vm_frame_instruction_pointer.
* libguile/programs.h:
* libguile/programs.c (scm_program_arity): Remove. Arity metadata will
now be part of the program-metadata.
* libguile/vm-i-system.c: Add a comment.
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
Fix mv-call decompilation.
* module/system/vm/frame.scm (vm-frame-bindings, vm-frame-binding-ref)
(vm-frame-binding-set!): New functions, to access bindings by name in
a frame.
(vm-frame-arguments): Function now implemented in Scheme. Commented
fairly extensively.
* module/system/vm/program.scm (program-bindings-by-index)
(program-bindings-for-ip): New accessors, parsing the program bindings
metadata into something more useful.
(program-arglists, program-arguments): In a case-lambda world, we have
to assume that programs can have multiple arities. But it's tough to
detect this algorithmically; instead we're going to require that the
program metadata include information about the arities, and the parts
of the program that that metadata applies to.
(program-lambda-list): New accessor.
(write-program): Show multiple arities.
commit 827d6a54faf814325187072fad55d44be399095b
Author: Andy Wingo <address@hidden>
Date: Sun Sep 27 20:25:39 2009 -0400
callees now check their args, cons rest list, reserve locals
* gdbinit: Ignore SIGPWR and SIGXCPU, which the BDW GC seems to use.
* libguile/vm-engine.h (FETCH_WIDTH): Remove unused macro.
(INIT_ARGS, INIT_FRAME): Remove; callees now check their args and
reserve space for their locals.
* libguile/vm-engine.c:
* libguile/vm-i-system.c: Turn on callee arg checking and local
reservation. Seems to work!
commit 15b1839735a3a8621f6dae9a0a5ed54c5b072f0e
Author: Andy Wingo <address@hidden>
Date: Sun Sep 27 19:50:06 2009 -0400
callees reserve their own local vars
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (reserve-locals): New instruction, to reserve
space for local vars. Other ops renumbered.
* module/language/tree-il/compile-glil.scm (flatten-lambda): Emit
reserve-locals instructions as necessary.
commit f98bd956e346bca9d9a8f5dac8bbe343ba6420db
Author: Andy Wingo <address@hidden>
Date: Sun Sep 27 19:25:58 2009 -0400
remove stack_base from the vm runtime
* libguile/frames.h:
* libguile/frames.c (scm_vm_frame_stack): Removed, because it's getting
more difficult to tell what's an argument and what's a temporary stack
element.
(scm_vm_frame_num_locals): New accessor.
* libguile/frames.h: Rework so we don't frob the program's nargs, nlocs,
etc at runtime. Instead we don't really know what's a local var, an
argument, or an intermediate value. It's a little unfortunate, but
this will allow for case-lambda, and eventually for good polymorphic
generic dispatch; and the nlocs etc can be heuristically
reconstructed. Such a reconstruction would be better done at the
Scheme level, though.
(SCM_FRAME_STACK_ADDRESS): New macro, the pointer to the base of the
stack elements (not counting the program).
(SCM_FRAME_UPPER_ADDRESS): Repurpose to be the address of the last
element in the bookkeeping part of the stack -- i.e. to point to the
return address.
* libguile/vm-engine.c (vm_engine): Remove the stack_base variable. It
is unnecessary, and difficult to keep track of in the face of
case-lambda.
* libguile/vm-engine.h:
* libguile/vm-i-system.c: Adapt to removal of stack_base. Though we
still detect stack-smashing underflow, we don't do so as precisely as
we did before, because now we only detect overwriting of the frame
metadata.
commit 5be68fec5b5d4769a90ceaecbcf6b573bf387438
Author: Andy Wingo <address@hidden>
Date: Sun Sep 27 18:16:56 2009 -0400
steps on the way to have the callee check the number of arguments
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (assert-nargs-ee, assert-nargs-ge)
(push-rest-list): New instructions, which for now don't actually do
anything. Renumber the rest of the ops in this file.
* module/language/glil.scm (<glil-arity>): New GLIL type, an entity that
checks the number of args for a block, optionally consing a rest list,
and either branching or erroring if the arity doesn't match.
* module/language/glil/compile-assembly.scm (glil->assembly): Compile
<glil-arity> to assembly. Some of these VM ops are not implemented --
notably the branching case.
* module/language/tree-il/compile-glil.scm (flatten-lambda): Emit
<glil-arity>.
commit 3cfe731499bc967b0e04dd1d9f0702d04c40a93a
Author: Andy Wingo <address@hidden>
Date: Sun Sep 27 15:57:06 2009 -0400
comment fixups to tree-il/compile-glil.scm
* module/language/tree-il/compile-glil.scm: Remove some outdated
comments.
commit f66a345ba92ca7b08e08a8efd3a53e2522d5aad1
Author: Andy Wingo <address@hidden>
Date: Thu Sep 17 14:58:31 2009 +0200
jumps encoded using 24 bits, not 19; blocks no longer aligned
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
* libguile/vm-i-system.c (FETCH_OFFSET, BR): Labels are no longer 8-byte
aligned; instead, jumps are encoded into 3 bytes instead of 2.
(br, br-if, br-if-not, br-if-eq, br-if-not-eq, br-if-null)
(br-if-not-null, mv-call): Adapt for new length of br instructions (3
bytes instead of 2).
* libguile/vm.c (really_make_boot_program): Adapt hand-coded bytecode
for new offset regime.
* module/language/assembly.scm (align-block): No alignment necessary.
* module/language/assembly/compile-bytecode.scm (write-bytecode): Write
out breaks as 24-bit relative jumps.
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
Decompile break instructions.
-----------------------------------------------------------------------
hooks/post-receive
--
GNU Guile
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Guile-commits] GNU Guile branch, wip-case-lambda, created. release_1-9-3-46-g110a808,
Andy Wingo <=