:ref-trans %simple-fun-type
:set-known (unsafe)
:set-trans (setf %simple-fun-type))
+ (xrefs :init :null
+ :ref-trans %simple-fun-xrefs
+ :ref-known (flushable)
+ :set-trans (setf %simple-fun-xrefs)
+ :set-known ())
;; the SB!C::DEBUG-FUN object corresponding to this object, or NIL for none
#+nil ; FIXME: doesn't work (gotcha, lowly maintenoid!) See notes on bug 137.
(debug-fun :ref-known (flushable)
:lowtag fun-pointer-lowtag
:widetag funcallable-instance-header-widetag
:alloc-trans %make-funcallable-instance)
- #!-(or x86 x86-64)
- (fun
- :ref-known (flushable) :ref-trans %funcallable-instance-fun
- :set-known (unsafe) :set-trans (setf %funcallable-instance-fun))
- #!+(or x86 x86-64)
- (fun
- :ref-known (flushable) :ref-trans %funcallable-instance-fun
- ;; KLUDGE: There's no :SET-KNOWN or :SET-TRANS in this case.
- ;; Instead, later in compiler/x86/system.lisp there's a separate
- ;; DEFKNOWN for (SETF %FUNCALLABLE-INSTANCE-FUN), and a weird
- ;; unexplained DEFTRANSFORM from (SETF %SIMPLE-FUN-INSTANCE-FUN)
- ;; into (SETF %SIMPLE-FUN-SELF). The #!+X86 wrapped around this case
- ;; is a literal translation of the old CMU CL implementation into
- ;; the new world of sbcl-0.6.12.63, where multiple DEFKNOWNs for
- ;; the same operator cause an error (instead of silently deleting
- ;; all information associated with the old DEFKNOWN, as before).
- ;; It's definitely not very clean, with too many #!+ conditionals and
- ;; too little documentation, but I have more urgent things to
- ;; clean up right now, so I've just left it as a literal
- ;; translation without trying to fix it. -- WHN 2001-08-02
- )
- (lexenv :ref-known (flushable) :ref-trans %funcallable-instance-lexenv
- :set-known (unsafe) :set-trans (setf %funcallable-instance-lexenv))
- (layout :init :arg
- :ref-known (flushable) :ref-trans %funcallable-instance-layout
- :set-known (unsafe) :set-trans (setf %funcallable-instance-layout))
+ (trampoline :init :funcallable-instance-tramp)
+ (function :ref-known (flushable) :ref-trans %funcallable-instance-function
+ :set-known (unsafe) :set-trans (setf %funcallable-instance-function))
(info :rest-p t))
(define-primitive-object (value-cell :lowtag other-pointer-lowtag
(current-uwp :c-type #!-alpha "struct unwind_block *" #!+alpha "u32")
(current-cont :c-type #!-alpha "lispobj *" #!+alpha "u32")
#!-(or x86 x86-64) current-code
- entry-pc)
+ entry-pc
+ #!+win32 next-seh-frame
+ #!+win32 seh-frame-handler)
(define-primitive-object (catch-block)
(current-uwp :c-type #!-alpha "struct unwind_block *" #!+alpha "u32")
(current-cont :c-type #!-alpha "lispobj *" #!+alpha "u32")
#!-(or x86 x86-64) current-code
entry-pc
+ #!+win32 next-seh-frame
+ #!+win32 seh-frame-handler
tag
(previous-catch :c-type #!-alpha "struct catch_block *" #!+alpha "u32")
size)
(define-primitive-object (symbol :lowtag other-pointer-lowtag
:widetag symbol-header-widetag
- :alloc-trans make-symbol)
+ :alloc-trans %make-symbol)
;; Beware when changing this definition. NIL-the-symbol is defined
;; using this layout, and NIL-the-end-of-list-marker is the cons
(real :c-type "double" :length #!-x86-64 2 #!+x86-64 1)
(imag :c-type "double" :length #!-x86-64 2 #!+x86-64 1))
+#!+(and sb-lutex sb-thread)
+(define-primitive-object (lutex
+ :lowtag other-pointer-lowtag
+ :widetag lutex-widetag
+ :alloc-trans %make-lutex)
+ (gen :c-type "long" :length 1)
+ (live :c-type "long" :length 1)
+ (next :c-type "struct lutex *" :length 1)
+ (prev :c-type "struct lutex *" :length 1)
+ (mutex :c-type "pthread_mutex_t *"
+ :length 1)
+ (mutexattr :c-type "pthread_mutexattr_t *"
+ :length 1)
+ (condition-variable :c-type "pthread_cond_t *"
+ :length 1))
+
;;; this isn't actually a lisp object at all, it's a c structure that lives
;;; in c-land. However, we need sight of so many parts of it from Lisp that
;;; it makes sense to define it here anyway, so that the GENESIS machinery
;;; Hence the even-fixnum lowtag just so we don't get odd(sic) numbers
;;; added to the slot offsets
(define-primitive-object (thread :lowtag even-fixnum-lowtag)
- ;; unbound_marker is borrowed very briefly at thread startup to
- ;; pass the address of initial-function into new_thread_trampoline
- (unbound-marker :init :unbound) ; tls[0] = UNBOUND_MARKER_WIDETAG
- (os-thread :c-type "os_thread_t")
+ ;; no_tls_value_marker is borrowed very briefly at thread startup to
+ ;; pass the address of initial-function into new_thread_trampoline.
+ ;; tls[0] = NO_TLS_VALUE_MARKER_WIDETAG because a the tls index slot
+ ;; of a symbol is initialized to zero
+ (no-tls-value-marker)
+ (os-thread :c-type "volatile os_thread_t")
(binding-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
(binding-stack-pointer :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
(control-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
(alien-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
(alien-stack-pointer :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1)
#!+gencgc (alloc-region :c-type "struct alloc_region" :length 5)
- (tls-cookie) ; on x86, the LDT index
(this :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1)
(prev :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1)
(next :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1)
;; starting, running, suspended, dead
- (state)
- #!+(or x86 x86-64) (pseudo-atomic-atomic)
- #!+(or x86 x86-64) (pseudo-atomic-interrupted)
- (interrupt-fun)
- (interrupt-fun-lock)
+ (state :c-type "volatile lispobj")
+ (tls-cookie) ; on x86, the LDT index
+ #!+(or x86 x86-64) (pseudo-atomic-bits)
(interrupt-data :c-type "struct interrupt_data *"
:length #!+alpha 2 #!-alpha 1)
+ (stepping)
(interrupt-contexts :c-type "os_context_t *" :rest-p t))