aboutsummaryrefslogtreecommitdiff
path: root/lib/base/number.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base/number.c')
-rw-r--r--lib/base/number.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/base/number.c b/lib/base/number.c
index c259f69971d0..8833c8b15233 100644
--- a/lib/base/number.c
+++ b/lib/base/number.c
@@ -35,7 +35,7 @@
#include "baselocl.h"
-static void
+static void HEIM_CALLCONV
number_dealloc(void *ptr)
{
}
@@ -58,12 +58,12 @@ number_cmp(void *a, void *b)
return na - nb;
}
-static unsigned long
+static uintptr_t
number_hash(void *ptr)
{
if (heim_base_is_tagged_object(ptr))
return heim_base_tagged_object_value(ptr);
- return (unsigned long)*(int *)ptr;
+ return (uintptr_t)*(int64_t *)ptr;
}
struct heim_type_data _heim_number_object = {
@@ -86,16 +86,16 @@ struct heim_type_data _heim_number_object = {
*/
heim_number_t
-heim_number_create(int number)
+heim_number_create(int64_t number)
{
heim_number_t n;
if (number < 0xffffff && number >= 0)
return heim_base_make_tagged_object(number, HEIM_TID_NUMBER);
- n = _heim_alloc_object(&_heim_number_object, sizeof(int));
+ n = _heim_alloc_object(&_heim_number_object, sizeof(int64_t));
if (n)
- *((int *)n) = number;
+ *((int64_t *)n) = number;
return n;
}
@@ -124,5 +124,13 @@ heim_number_get_int(heim_number_t number)
{
if (heim_base_is_tagged_object(number))
return heim_base_tagged_object_value(number);
- return *(int *)number;
+ return (int)(*(int64_t *)number);
+}
+
+int64_t
+heim_number_get_long(heim_number_t number)
+{
+ if (heim_base_is_tagged_object(number))
+ return heim_base_tagged_object_value(number);
+ return *(int64_t *)number;
}