;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: ffi.lisp,v 1.24 2006/02/19 19:17:45 espen Exp $
+;; $Id: ffi.lisp,v 1.25 2006/02/19 22:25:31 espen Exp $
(in-package "GLIB")
,@(when documentation `((:documentation ,documentation))))
(defmethod ,name (,@args (type symbol) &rest args)
(let ((class (find-class type nil)))
- (if class
+ (if (typep class 'standard-class)
(apply #',name ,@args class args)
(multiple-value-bind (super-type expanded-p)
(type-expand-1 (cons type args))
(declare (ignore type args))
#'identity)
+;; This does not really work as def-type-method is badly broken and
+;; needs a redesign, so we need to add a lots of redundant methods
(defmethod callback-from-alien-form (form (type t) &rest args)
- (apply #'copy-from-alien-form form type args))
+; (apply #'copy-from-alien-form form type args))
+ (apply #'from-alien-form form type args))
(defmethod callback-cleanup-form (form (type t) &rest args)
(declare (ignore form type args))
(let ((utf8 (%deport-utf8-string string)))
(copy-memory (vector-sap utf8) (length utf8)))))
+(defmethod callback-from-alien-form (form (type (eql 'string)) &rest args)
+ (apply #'copy-from-alien-form form type args))
+
(defmethod from-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
(unless (null-pointer-p string)
(deallocate-memory string))))
+(defmethod callback-from-alien-form (form (type (eql 'string)) &rest args)
+ (apply #'copy-from-alien-form form type args))
+
(defmethod copy-from-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
#'(lambda (boolean)
(if boolean 1 0)))
+(defmethod callback-from-alien-form (form (type (eql 'boolean)) &rest args)
+ (apply #'from-alien-form form type args))
+
(defmethod from-alien-form (boolean (type (eql 'boolean)) &rest args)
(declare (ignore type args))
`(not (zerop ,boolean)))
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: genums.lisp,v 1.17 2006/02/06 18:12:19 espen Exp $
+;; $Id: genums.lisp,v 1.18 2006/02/19 22:25:31 espen Exp $
(in-package "GLIB")
(t (error 'type-error :datum ,form :expected-type '(enum ,@args)))))
+(defmethod callback-from-alien-form (form (type (eql 'enum)) &rest args)
+ (apply #'from-alien-form form type args))
+
(defmethod from-alien-form (form (type (eql 'enum)) &rest args)
(declare (ignore type))
`(case ,form
(t (error 'type-error :datum ,flags
:expected-type '(,type ,@args)))))))
+(defmethod callback-from-alien-form (form (type (eql 'flags)) &rest args)
+ (apply #'from-alien-form form type args))
+
(defmethod from-alien-form (value (type (eql 'flags)) &rest args)
(declare (ignore type))
`(loop
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: gtype.lisp,v 1.45 2006/02/19 19:27:32 espen Exp $
+;; $Id: gtype.lisp,v 1.46 2006/02/19 22:25:31 espen Exp $
(in-package "GLIB")
;; A ginstance should never be invalidated since it is ref counted
nil)
-(defmethod callback-from-alien-form (form (type t) &rest args)
- (apply #'from-alien-form form type args))
+(defmethod callback-from-alien-form (form (class ginstance-class) &rest args)
+ (declare (ignore args))
+ (from-alien-form form class))
(defmethod copy-from-alien-form (location (class ginstance-class) &rest args)
(declare (ignore location class args))