[前][次][番号順一覧][スレッド一覧]

ruby-changes:49479

From: shyouhei <ko1@a...>
Date: Thu, 4 Jan 2018 16:51:23 +0900 (JST)
Subject: [ruby-changes:49479] shyouhei:r61594 (trunk): ULL suffix is a C99ism

shyouhei	2018-01-04 16:51:17 +0900 (Thu, 04 Jan 2018)

  New Revision: 61594

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=61594

  Log:
    ULL suffix is a C99ism
    
    Don't assume long long == 8 bytes.
    
    If you can assume C99, there are macros named UINT64_C and
    such for appropriate integer literal suffixes.
    If you can't, no way but do a bitwise or.

  Modified files:
    trunk/string.c
Index: string.c
===================================================================
--- string.c	(revision 61593)
+++ string.c	(revision 61594)
@@ -440,10 +440,21 @@ static inline const char * https://github.com/ruby/ruby/blob/trunk/string.c#L440
 search_nonascii(const char *p, const char *e)
 {
     const uintptr_t *s, *t;
-#if SIZEOF_VOIDP == 8
-# define NONASCII_MASK 0x8080808080808080ULL
-#elif SIZEOF_VOIDP == 4
-# define NONASCII_MASK 0x80808080UL
+
+#if defined(__STDC_VERSION) && (__STDC_VERSION__ >= 199901L)
+# if SIZEOF_UINTPTR_T == 8
+#  define NONASCII_MASK UINT64_C(0x8080808080808080)
+# elif SIZEOF_UINTPTR_T == 4
+#  define NONASCII_MASK UINT32_C(0x80808080)
+# endif
+#else
+# if SIZEOF_UINTPTR_T == 8
+#  define NONASCII_MASK ((uintptr_t)0x80808080UL << 32 | (uintptr_t)0x80808080UL)
+# elif SIZEOF_UINTPTR_T == 4
+#  define NONASCII_MASK 0x80808080UL /* or...? */
+# else
+#  error "don't know what to do."
+# endif
 #endif
 
     if (UNALIGNED_WORD_ACCESS || e - p >= SIZEOF_VOIDP) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]