aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-02-02 13:37:11 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-02-02 13:37:11 -0300
commitc888ae0aea030491f90b749260a156ce15635681 (patch)
tree0020da1138ef004e62a25789b458fa5072185326
parentd69789da1ccfa4db7c241de6b471d6b729f1561e (diff)
downloadlua-c888ae0aea030491f90b749260a156ce15635681.tar.gz
lua-c888ae0aea030491f90b749260a156ce15635681.tar.bz2
lua-c888ae0aea030491f90b749260a156ce15635681.zip
Small changes in hash of pointers
When converting from pointer to integer, use 'uintptr_t' if available; otherwise try 'uintmax_t', and use 'size_t' as last resource.
-rw-r--r--llimits.h21
1 files changed, 17 insertions, 4 deletions
diff --git a/llimits.h b/llimits.h
index 52a32f92..251a2702 100644
--- a/llimits.h
+++ b/llimits.h
@@ -71,11 +71,24 @@ typedef signed char ls_byte;
71 71
72 72
73/* 73/*
74** conversion of pointer to unsigned integer: 74** conversion of pointer to unsigned integer: this is for hashing only;
75** this is for hashing only; there is no problem if the integer 75** there is no problem if the integer cannot hold the whole pointer
76** cannot hold the whole pointer value 76** value. (In strict ISO C this may cause undefined behavior, but no
77** actual machine seems to bother.)
77*/ 78*/
78#define point2uint(p) ((unsigned int)((size_t)(p) & UINT_MAX)) 79#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \
80 __STDC_VERSION__ >= 199901L
81#include <stdint.h>
82#if defined(UINTPTR_MAX) /* even in C99 this type is optional */
83#define L_P2I uintptr_t
84#else /* no 'intptr'? */
85#define L_P2I uintmax_t /* use the largerst available integer */
86#endif
87#else /* C89 option */
88#define L_P2I size_t
89#endif
90
91#define point2uint(p) ((unsigned int)((L_P2I)(p) & UINT_MAX))
79 92
80 93
81 94