X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Falien.impure.lisp;h=e215ad248069f7f2d56686b27e4a77ce9ea63d1f;hb=6dac5c9af52b4538b412b2e7c22b78863d85557a;hp=c800e80a9461b7f097986bf513198ec4e6b0b2ad;hpb=380ea897e2c12a01547f918f73e8a1db0a3a0373;p=sbcl.git diff --git a/tests/alien.impure.lisp b/tests/alien.impure.lisp index c800e80..e215ad2 100644 --- a/tests/alien.impure.lisp +++ b/tests/alien.impure.lisp @@ -10,7 +10,7 @@ ;;;; While most of SBCL is derived from the CMU CL system, the test ;;;; files (like this one) were written from scratch after the fork ;;;; from CMU CL. -;;;; +;;;; ;;;; This software is in the public domain and is provided with ;;;; absolutely no warranty. See the COPYING and CREDITS files for ;;;; more information. @@ -49,10 +49,10 @@ ;;; This used to break due to too eager auxiliary type twiddling in ;;; parse-alien-record-type. (defparameter *maybe* nil) -(defun with-alien-test-for-struct-plus-funcall () +(defun with-alien-test-for-struct-plus-funcall () (with-alien ((x (struct bar (x unsigned) (y unsigned))) - ;; bogus definition, but we just need the symbol - (f (function int (* (struct bar))) :extern "printf")) + ;; bogus definition, but we just need the symbol + (f (function int (* (struct bar))) :extern "printf")) (when *maybe* (alien-funcall f (addr x))))) @@ -62,16 +62,16 @@ (let ((s1 (make-alien struct.1)) (s2 (make-alien struct.2))) (setf (slot s1 'x) s2 - (slot s2 'x) s1 - (slot (slot s1 'x) 'y) 1 - (slot (slot s2 'x) 'y) 2) + (slot s2 'x) s1 + (slot (slot s1 'x) 'y) 1 + (slot (slot s2 'x) 'y) 2) (assert (= 1 (slot (slot s1 'x) 'y))) (assert (= 2 (slot (slot s2 'x) 'y)))) ;;; "Alien bug" on sbcl-devel 2004-10-11 by Thomas F. Burdick caused ;;; by recursive struct definition. (let ((fname "alien-bug-2004-10-11.tmp.lisp")) - (unwind-protect + (unwind-protect (progn (with-open-file (f fname :direction :output) (mapc (lambda (form) (print form f)) @@ -80,7 +80,7 @@ (in-package :alien-bug) (define-alien-type objc-class (struct objc-class - (protocols + (protocols (* (struct protocol-list (list (array (* (struct objc-class)))))))))))) (load fname) @@ -115,6 +115,17 @@ (deref integer-array 1))) (assert (eql (deref enum-array 2) 'k-two)))) +;; enums used to allow values to be used only once +;; C enums allow for multiple tags to point to the same value +(define-alien-type enum.4 + (enum nil (:key1 1) (:key2 2) (:keytwo 2))) +(with-alien ((enum-array (array enum.4 3))) + (setf (deref enum-array 0) :key1) + (setf (deref enum-array 1) :key2) + (setf (deref enum-array 2) :keytwo) + (assert (and (eql (deref enum-array 1) (deref enum-array 2)) + (eql (deref enum-array 1) :key2)))) + ;;; As reported by Baughn on #lisp, ALIEN-FUNCALL loops forever when ;;; compiled with (DEBUG 3). (sb-kernel::values-specifier-type-cache-clear) @@ -126,4 +137,3 @@ (assert (typep (funcall f "HOME") '(or string null)))) ;;; success -(quit :unix-status 104)