[Git][cmucl/cmucl][issue-242-c-call-char-result-wrong] Make out unwanted bits for boolean result
Raymond Toy (@rtoy)
gitlab at common-lisp.net
Sat Jul 1 18:07:16 UTC 2023
Raymond Toy pushed to branch issue-242-c-call-char-result-wrong at cmucl / cmucl
Commits:
3522814e by Raymond Toy at 2023-07-01T11:06:10-07:00
Make out unwanted bits for boolean result
- - - - -
1 changed file:
- src/code/alieneval.lisp
Changes:
=====================================
src/code/alieneval.lisp
=====================================
@@ -666,8 +666,8 @@
,val)))
(t alien)))
(case (alien-integer-type-bits type)
- (8 `(ldb (byte 8 0) ,alien))
- (16 `(ldb (byte 16 0) ,alien))
+ (8 `(ldb (byte 8 0) (truly-the (unsigned-byte 32) ,alien)))
+ (16 `(ldb (byte 16 0) (truly-the (unsigned-byte 32) ,alien)))
(t alien))))
;; signed numbers <= 32 bits need to be sign extended.
@@ -715,8 +715,8 @@
(def-alien-type-class (boolean :include integer :include-args (signed)))
-(def-alien-type-translator boolean (&optional (bits vm:word-bits))
- (make-alien-boolean-type :bits bits :signed nil))
+(def-alien-type-translator boolean (&optional (bits 8))
+ (make-alien-boolean-type :bits bits :signed t))
(def-alien-type-method (boolean :unparse) (type)
`(boolean ,(alien-boolean-type-bits type)))
@@ -726,8 +726,10 @@
`(member t nil))
(def-alien-type-method (boolean :naturalize-gen) (type alien)
- (declare (ignore type))
- `(not (zerop ,alien)))
+ ;; Mask out any unwanted bits. Important if the C code returns
+ ;; values in %al, or %ax
+ `(not (zerop (ldb (byte ,(alien-boolean-type-bits type) 0)
+ ,alien))))
(def-alien-type-method (boolean :deport-gen) (type value)
(declare (ignore type))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/3522814e013a7092890be8e9952d244d6c4b386c
--
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/commit/3522814e013a7092890be8e9952d244d6c4b386c
You're receiving this email because of your account on gitlab.common-lisp.net.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20230701/9867e95f/attachment-0001.html>
More information about the cmucl-cvs
mailing list