;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: proxy.lisp,v 1.36 2006/02/26 15:30:01 espen Exp $
+;; $Id: proxy.lisp,v 1.38 2006/03/03 10:01:47 espen Exp $
(in-package "GLIB")
(call-next-method))
- ;; TODO: call some C code to detect this a compile time
- (defconstant +struct-alignmen+ 4)
+ (defconstant +struct-alignmen+
+ #+sbcl (/ (sb-alien-internals:alien-type-alignment
+ (sb-alien-internals:parse-alien-type
+ 'system-area-pointer nil))
+ 8)
+ #-sbcl 4)
(defun align-offset (size)
(if (zerop (mod size +struct-alignmen+))
(deftype inlined (type) type)
(define-type-method size-of ((type inlined))
- (let ((class (type-expand (second type))))
+ (let ((class (second (type-expand-to 'inlined type))))
(foreign-size class)))
(define-type-method reader-function ((type inlined))
- (let ((class (type-expand (second type))))
+ (let ((class (second (type-expand-to 'inlined type))))
#'(lambda (location &optional (offset 0) weak-p)
(declare (ignore weak-p))
(ensure-proxy-instance class
(reference-foreign class (sap+ location offset))))))
(define-type-method writer-function ((type inlined))
- (let ((class (type-expand (second type))))
+ (let ((class (second (type-expand-to 'inlined type))))
#'(lambda (instance location &optional (offset 0))
(copy-memory (foreign-location instance) (foreign-size class) (sap+ location offset)))))
+(define-type-method destroy-function ((type inlined))
+ (declare (ignore type))
+ #'(lambda (location &optional offset)
+ (declare (ignore location offset))))
+
+
(export 'inlined)