0.9.17.8:
authorChristophe Rhodes <csr21@cam.ac.uk>
Fri, 6 Oct 2006 10:54:09 +0000 (10:54 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Fri, 6 Oct 2006 10:54:09 +0000 (10:54 +0000)
commitb9e94e326f79ab01e56cb437e424ce5ea489471f
treee7645f13a1edfbc9238600f05d96fbe610076a7b
parent1a3143cca7d6678c094b6bacc485e8531808ea59
0.9.17.8:
MORE THREADSAFE FUNCALLABLE-INSTANCE
... in a threaded world, we can't set the function and lexenv
of a funcallable instance separately, because some other
thread might inconveniently funcall the object 'twixt
the one and the other.
... instead, make the funcallable-instance-function a
fully-fledged slot, and give a funcallable-instance a
trampoline which knows how to call it.
... which means implementing this strategy for $n$
architectures.  Tested on x86, x86-64, ppc, alpha and
sparc; completely untested on mips, and unimplemented
on hppa.

This removes some of the complexity in calling closures (the
closure-self slot is now redundant, as is the extra
indirection).  Other miscellaneous fixes:
* extract-fun-type worked only by accident;
* new magic :init :funcallable-instance-tramp for primitive
  objects
* verify_space() need no longer worry its little brain about
  undefined_tramp and closure_tramp (I think)
* test case for threaded funcallable-instance interaction.
36 files changed:
NEWS
package-data-list.lisp-expr
src/code/stubs.lisp
src/code/target-defstruct.lisp
src/code/target-type.lisp
src/compiler/alpha/alloc.lisp
src/compiler/alpha/cell.lisp
src/compiler/generic/objdef.lisp
src/compiler/generic/vm-ir2tran.lisp
src/compiler/globaldb.lisp
src/compiler/hppa/alloc.lisp
src/compiler/hppa/cell.lisp
src/compiler/ir2tran.lisp
src/compiler/mips/alloc.lisp
src/compiler/mips/cell.lisp
src/compiler/ppc/alloc.lisp
src/compiler/ppc/cell.lisp
src/compiler/sparc/alloc.lisp
src/compiler/sparc/cell.lisp
src/compiler/x86-64/alloc.lisp
src/compiler/x86-64/cell.lisp
src/compiler/x86-64/system.lisp
src/compiler/x86/alloc.lisp
src/compiler/x86/cell.lisp
src/compiler/x86/system.lisp
src/runtime/alpha-assem.S
src/runtime/gc-common.c
src/runtime/gencgc.c
src/runtime/mips-assem.S
src/runtime/ppc-assem.S
src/runtime/purify.c
src/runtime/sparc-assem.S
src/runtime/x86-64-assem.S
src/runtime/x86-assem.S
tests/threads.impure.lisp
version.lisp-expr