From 559b1ae87623c6885979318f58f6920e9e476984 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Thu, 14 Oct 2010 22:21:12 -0700 Subject: [PATCH] alien.c-types: make behavior of int/uint/long/ulong/longlong/ulonglong struct field setters consistent across 32-bit and 64-bit when supplied with floats (reported by Anton Gorenko) --- basis/alien/c-types/c-types-tests.factor | 9 +++++++++ basis/alien/c-types/c-types.factor | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/basis/alien/c-types/c-types-tests.factor b/basis/alien/c-types/c-types-tests.factor index 5e4635e018..96976b7b6c 100644 --- a/basis/alien/c-types/c-types-tests.factor +++ b/basis/alien/c-types/c-types-tests.factor @@ -12,6 +12,15 @@ CONSTANT: xyz 123 [ -1 ] [ -1 *short ] unit-test [ -1 ] [ -1 *int ] unit-test +! I don't care if this throws an error or works, but at least +! it should be consistent between platforms +[ -1 ] [ -1.0 *int ] unit-test +[ -1 ] [ -1.0 *long ] unit-test +[ -1 ] [ -1.0 *longlong ] unit-test +[ 1 ] [ 1.0 *uint ] unit-test +[ 1 ] [ 1.0 *ulong ] unit-test +[ 1 ] [ 1.0 *ulonglong ] unit-test + UNION-STRUCT: foo { a int } { b int } ; diff --git a/basis/alien/c-types/c-types.factor b/basis/alien/c-types/c-types.factor index 04755ea033..f703f0d0f7 100644 --- a/basis/alien/c-types/c-types.factor +++ b/basis/alien/c-types/c-types.factor @@ -365,6 +365,7 @@ M: pointer c-type 8 >>align-first "from_signed_cell" >>boxer "to_fixnum" >>unboxer + [ >integer ] >>unboxer-quot \ longlong define-primitive-type @@ -377,6 +378,7 @@ M: pointer c-type 8 >>align-first "from_unsigned_cell" >>boxer "to_cell" >>unboxer + [ >integer ] >>unboxer-quot \ ulonglong define-primitive-type os windows? [ @@ -403,6 +405,7 @@ M: pointer c-type 4 >>align-first "from_signed_cell" >>boxer "to_fixnum" >>unboxer + [ >integer ] >>unboxer-quot \ int define-primitive-type @@ -415,6 +418,7 @@ M: pointer c-type 4 >>align-first "from_unsigned_cell" >>boxer "to_cell" >>unboxer + [ >integer ] >>unboxer-quot \ uint define-primitive-type @@ -426,6 +430,7 @@ M: pointer c-type 8-byte-alignment "from_signed_8" >>boxer "to_signed_8" >>unboxer + [ >integer ] >>unboxer-quot \ longlong define-primitive-type @@ -437,6 +442,7 @@ M: pointer c-type 8-byte-alignment "from_unsigned_8" >>boxer "to_unsigned_8" >>unboxer + [ >integer ] >>unboxer-quot \ ulonglong define-primitive-type \ int c-type \ long define-primitive-type