X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Falien.impure.lisp;h=8984f7dc1c36f409a2563273aff1fcf3b2f8b5f0;hb=36a59e15bbd951e012297be691a8b7b526fcccf6;hp=6cd9807452aedb7eac60f88e30eb5d95f32a01b7;hpb=1cae060fd9735f9c1f63538969e68c99b48f46e6;p=sbcl.git diff --git a/tests/alien.impure.lisp b/tests/alien.impure.lisp index 6cd9807..8984f7d 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) @@ -97,7 +97,7 @@ (define-alien-type enum.2 (enum nil (zero 0) (one 1) (two 2) (three 3) (four 4) (five 5) (six 6) (seven 7) (eight 8) (nine 9))) -(with-alien ((integer-array (array integer 3))) +(with-alien ((integer-array (array int 3))) (let ((enum-array (cast integer-array (array enum.2 3)))) (setf (deref enum-array 0) 'three (deref enum-array 1) 'four) @@ -107,7 +107,7 @@ ;; The code that is used for mapping from integers to symbols depends on the ;; `density' of the set of used integers, so test with a sparse set as well. (define-alien-type enum.3 (enum nil (zero 0) (one 1) (k-one 1001) (k-two 1002))) -(with-alien ((integer-array (array integer 3))) +(with-alien ((integer-array (array int 3))) (let ((enum-array (cast integer-array (array enum.3 3)))) (setf (deref enum-array 0) 'one (deref enum-array 1) 'k-one) @@ -115,5 +115,15 @@ (deref integer-array 1))) (assert (eql (deref enum-array 2) 'k-two)))) +;;; As reported by Baughn on #lisp, ALIEN-FUNCALL loops forever when +;;; compiled with (DEBUG 3). +(sb-kernel::values-specifier-type-cache-clear) +(proclaim '(optimize (debug 3))) +(let ((f (compile nil '(lambda (v) + (sb-alien:alien-funcall (sb-alien:extern-alien "getenv" + (function (c-string) c-string)) + v))))) + (assert (typep (funcall f "HOME") '(or string null)))) + ;;; success (quit :unix-status 104)