From f1c9a8e0c22978e4b9995383f8e153a55d046e2e Mon Sep 17 00:00:00 2001 From: Juho Snellman Date: Sat, 15 Oct 2005 12:55:53 +0000 Subject: [PATCH] 0.9.5.64: Support callbacks with void return types. * Export SB-ALIEN:ALIEN-VOID-TYPE-P * Bind *VALUES-TYPE-OKAY* to T when parsing of the return type * Add test (+ another test for a x86-64 sign extension failure) --- package-data-list.lisp-expr | 3 ++- src/code/target-alieneval.lisp | 3 ++- tests/callback.impure.lisp | 16 ++++++++++++++++ version.lisp-expr | 2 +- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/package-data-list.lisp-expr b/package-data-list.lisp-expr index 90b20de..1002431 100644 --- a/package-data-list.lisp-expr +++ b/package-data-list.lisp-expr @@ -102,7 +102,8 @@ of SBCL which maintained the CMU-CL-style split into two packages.)" "ALIEN-VALUE" "ALIEN-VALUE-TYPE" "ALIEN-VALUE-SAP" "ALIEN-VALUE-P" "ALIEN-VALUES-TYPE" "ALIEN-VALUES-TYPE-P" - "ALIEN-VALUES-TYPE-VALUES" "ALIGN-OFFSET" "COMPUTE-ALIEN-REP-TYPE" + "ALIEN-VALUES-TYPE-VALUES" "ALIGN-OFFSET" "ALIEN-VOID-TYPE-P" + "COMPUTE-ALIEN-REP-TYPE" "COMPUTE-DEPORT-LAMBDA" "COMPUTE-DEPOSIT-LAMBDA" "COMPUTE-EXTRACT-LAMBDA" "COMPUTE-LISP-REP-TYPE" "COMPUTE-NATURALIZE-LAMBDA" "DEFINE-ALIEN-TYPE-CLASS" diff --git a/src/code/target-alieneval.lisp b/src/code/target-alieneval.lisp index d6cb2be..f64a212 100644 --- a/src/code/target-alieneval.lisp +++ b/src/code/target-alieneval.lisp @@ -838,7 +838,8 @@ ENTER-ALIEN-CALLBACK pulls the corresponsing trampoline out and calls it.") (destructuring-bind (function result-type &rest argument-types) specifier (aver (eq 'function function)) - (values (parse-alien-type result-type env) + (values (let ((*values-type-okay* t)) + (parse-alien-type result-type env)) (mapcar (lambda (spec) (parse-alien-type spec env)) argument-types)))) diff --git a/tests/callback.impure.lisp b/tests/callback.impure.lisp index d2440b4..45fb31d 100644 --- a/tests/callback.impure.lisp +++ b/tests/callback.impure.lisp @@ -126,3 +126,19 @@ (assert (= 26 (alien-funcall foo))) +;;; callbacks with void return values + +(with-test (:name void-return) + (sb-alien::alien-lambda void () + (values))) + +;;; tests for a sign extension problem in callback argument handling on x86-64 + +(with-test (:name sign-extension :fails-on :x86-64) + (let ((*add-two-ints* + (sb-alien::alien-callback (function int int int) #'+))) + (assert (= (alien-funcall *add-two-ints* #x-80000000 1) + -2147483647)) + (assert (= (alien-funcall *add-two-ints* #x-80000000 -1) + #x7fffffff)))) + diff --git a/version.lisp-expr b/version.lisp-expr index 8288530..23bb221 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.5.63" +"0.9.5.64" -- 1.7.10.4