projects
/
uffi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r2212: *** empty log message ***
[uffi.git]
/
src
/
objects.cl
diff --git
a/src/objects.cl
b/src/objects.cl
index b510b35bcd47f9627f0b1d46445c389d9bb85797..377a0779c5de864ec290a0119ca188086dc5c54d 100644
(file)
--- a/
src/objects.cl
+++ b/
src/objects.cl
@@
-1,4
+1,4
@@
-;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10
; Package: UFFI
-*-
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
@@
-7,7
+7,7
@@
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: objects.cl,v 1.
14 2002/03/22 20:51:08
kevin Exp $
+;;;; $Id: objects.cl,v 1.
20 2002/07/10 02:26:32
kevin Exp $
;;;;
;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
;;;;
;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
@@
-21,22
+21,22
@@
(defmacro allocate-foreign-object (type &optional (size :unspecified))
"Allocates an instance of TYPE. If size is specified, then allocate
(defmacro allocate-foreign-object (type &optional (size :unspecified))
"Allocates an instance of TYPE. If size is specified, then allocate
-an array of TYPE with size SIZE."
+an array of TYPE with size SIZE.
The TYPE parameter is evaluated.
"
(if (eq size :unspecified)
(progn
#+cmu
(if (eq size :unspecified)
(progn
#+cmu
- `(alien:make-alien ,(convert-from-uffi-type
type
:allocation))
+ `(alien:make-alien ,(convert-from-uffi-type
(eval type)
:allocation))
#+lispworks
`(fli:allocate-foreign-object :type ',(convert-from-uffi-type type :allocate))
#+allegro
#+lispworks
`(fli:allocate-foreign-object :type ',(convert-from-uffi-type type :allocate))
#+allegro
- `(ff:allocate-fobject
'
,(convert-from-uffi-type type :allocate) :c))
+ `(ff:allocate-fobject ,(convert-from-uffi-type type :allocate) :c))
(progn
#+cmu
(progn
#+cmu
- `(alien:make-alien ,(convert-from-uffi-type
type
:allocation) ,size)
+ `(alien:make-alien ,(convert-from-uffi-type
(eval type)
:allocation) ,size)
#+lispworks
`(fli:allocate-foreign-object :type ',(convert-from-uffi-type type :allocate) :nelems ,size)
#+allegro
#+lispworks
`(fli:allocate-foreign-object :type ',(convert-from-uffi-type type :allocate) :nelems ,size)
#+allegro
- `(ff:allocate-fobject '(:array ,(convert-from-uffi-type
type
:allocate) ,(eval size)) :c)
+ `(ff:allocate-fobject '(:array ,(convert-from-uffi-type
(eval type)
:allocate) ,(eval size)) :c)
)
))
)
))
@@
-55,6
+55,13
@@
an array of TYPE with size SIZE."
#+cmu `(alien:null-alien ,obj)
)
#+cmu `(alien:null-alien ,obj)
)
+(defmacro size-of-foreign-type (type)
+ #+lispworks `(fli:size-of ,type)
+ #+allegro `(ff:sizeof-fobject ,type)
+ #+cmu `(alien:alien-size ,type)
+ #+clisp `(values (ffi:size-of ,type))
+ )
+
(defmacro make-null-pointer (type)
#+(or allegro cmu) (declare (ignore type))
(defmacro make-null-pointer (type)
#+(or allegro cmu) (declare (ignore type))
@@
-76,7
+83,7
@@
an array of TYPE with size SIZE."
#+(or cmu lispworks) (declare (ignore type))
#+cmu `(alien:deref ,ptr)
#+lispworks `(fli:dereference ,ptr)
#+(or cmu lispworks) (declare (ignore type))
#+cmu `(alien:deref ,ptr)
#+lispworks `(fli:dereference ,ptr)
- #+allegro `(ff:fslot-value-typed ,
type
:c ,ptr)
+ #+allegro `(ff:fslot-value-typed ,
(convert-from-uffi-type type :deref)
:c ,ptr)
)
#+lispworks ;; with LW, deref is a character
)
#+lispworks ;; with LW, deref is a character
@@
-107,6
+114,7
@@
an array of TYPE with size SIZE."
obj
)
obj
)
+;; TYPE is evaluated.
(defmacro with-foreign-object ((var type) &rest body)
#-(or cmu lispworks) ; default version
`(let ((,var (allocate-foreign-object ,type)))
(defmacro with-foreign-object ((var type) &rest body)
#-(or cmu lispworks) ; default version
`(let ((,var (allocate-foreign-object ,type)))
@@
-115,12
+123,12
@@
an array of TYPE with size SIZE."
(free-foreign-object ,var)))
#+cmu
(let ((obj (gensym)))
(free-foreign-object ,var)))
#+cmu
(let ((obj (gensym)))
- `(alien:with-alien ((,obj ,(convert-from-uffi-type
type
:allocate)))
+ `(alien:with-alien ((,obj ,(convert-from-uffi-type
(eval type)
:allocate)))
(let ((,var (alien:addr ,obj)))
,@body)))
#+lispworks
`(fli:with-dynamic-foreign-objects ((,var ,(convert-from-uffi-type
(let ((,var (alien:addr ,obj)))
,@body)))
#+lispworks
`(fli:with-dynamic-foreign-objects ((,var ,(convert-from-uffi-type
-
type
:allocate)))
+
(eval type)
:allocate)))
,@body)
)
,@body)
)