More emacs-module.c fixes for wide ints
* src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use unsigned data types to manipulate pointers, to avoid sign extension coming after us with a vengeance. * modules/mod-test/test.el (mod-test-sum-test): Add tests for Emacs with wide ints that verify integer values near the critical value that requires us to switch to a cons cell.
This commit is contained in:
parent
0af2c269b1
commit
36dbe6fc3e
2 changed files with 8 additions and 3 deletions
|
@ -43,10 +43,15 @@
|
|||
(should (= (nth 2 descr) 3)))
|
||||
(should-error (mod-test-sum "1" 2) :type 'wrong-type-argument)
|
||||
(should-error (mod-test-sum 1 "2") :type 'wrong-type-argument)
|
||||
;; The following tests are for 32-bit build --with-wide-int.
|
||||
(should (= (mod-test-sum -1 most-positive-fixnum)
|
||||
(1- most-positive-fixnum)))
|
||||
(should (= (mod-test-sum 1 most-negative-fixnum)
|
||||
(1+ most-negative-fixnum))))
|
||||
(1+ most-negative-fixnum)))
|
||||
(should (= (mod-test-sum 1 #x1fffffff)
|
||||
(1+ #x1fffffff)))
|
||||
(should (= (mod-test-sum -1 #x20000000)
|
||||
#x1fffffff)))
|
||||
|
||||
(ert-deftest mod-test-sum-docstring ()
|
||||
(should (string= (documentation 'mod-test-sum) "Return A + B")))
|
||||
|
|
|
@ -850,8 +850,8 @@ static Lisp_Object
|
|||
value_to_lisp (emacs_value v)
|
||||
{
|
||||
#ifdef WIDE_EMACS_INT
|
||||
ptrdiff_t tmp = (ptrdiff_t)v;
|
||||
int tag = tmp & ((1 << GCTYPEBITS) - 1);
|
||||
uintptr_t tmp = (uintptr_t)v;
|
||||
unsigned tag = tmp & ((1 << GCTYPEBITS) - 1);
|
||||
Lisp_Object o;
|
||||
switch (tag)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue