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

ruby-changes:29705

From: akr <ko1@a...>
Date: Wed, 3 Jul 2013 22:32:25 +0900 (JST)
Subject: [ruby-changes:29705] akr:r41757 (trunk): * internal.h (ruby_digit36_to_number_table): Declared.

akr	2013-07-03 22:32:14 +0900 (Wed, 03 Jul 2013)

  New Revision: 41757

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=41757

  Log:
    * internal.h (ruby_digit36_to_number_table): Declared.
    
    * util.c (ruby_digit36_to_number_table): Moved from scan_digits.
    
    * bignum.c (conv_digit): Use ruby_digit36_to_number_table.
    
    * pack.c (hex2num): Ditto.

  Modified files:
    trunk/ChangeLog
    trunk/bignum.c
    trunk/internal.h
    trunk/pack.c
    trunk/util.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 41756)
+++ ChangeLog	(revision 41757)
@@ -1,3 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Wed Jul  3 22:29:20 2013  Tanaka Akira  <akr@f...>
+
+	* internal.h (ruby_digit36_to_number_table): Declared.
+
+	* util.c (ruby_digit36_to_number_table): Moved from scan_digits.
+
+	* bignum.c (conv_digit): Use ruby_digit36_to_number_table.
+
+	* pack.c (hex2num): Ditto.
+
 Wed Jul  3 18:12:56 2013  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/mkmf.rb (install_dirs): revert DESTDIR prefix by r39841, since
Index: pack.c
===================================================================
--- pack.c	(revision 41756)
+++ pack.c	(revision 41757)
@@ -1047,19 +1047,11 @@ qpencode(VALUE str, VALUE from, long len https://github.com/ruby/ruby/blob/trunk/pack.c#L1047
 static inline int
 hex2num(char c)
 {
-    switch (c) {
-      case '0': case '1': case '2': case '3': case '4':
-      case '5': case '6': case '7': case '8': case '9':
-        return c - '0';
-      case 'a': case 'b': case 'c':
-      case 'd': case 'e': case 'f':
-	return c - 'a' + 10;
-      case 'A': case 'B': case 'C':
-      case 'D': case 'E': case 'F':
-	return c - 'A' + 10;
-      default:
-	return -1;
-    }
+    int n;
+    n = ruby_digit36_to_number_table[(unsigned char)c];
+    if (16 <= n)
+        n = -1;
+    return n;
 }
 
 #define PACK_LENGTH_ADJUST_SIZE(sz) do {	\
Index: util.c
===================================================================
--- util.c	(revision 41756)
+++ util.c	(revision 41757)
@@ -55,28 +55,29 @@ ruby_scan_hex(const char *start, size_t https://github.com/ruby/ruby/blob/trunk/util.c#L55
     return retval;
 }
 
+const signed char ruby_digit36_to_number_table[] = {
+    /*     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*1*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*2*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*3*/  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1,
+    /*4*/ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
+    /*5*/ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1,
+    /*6*/ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
+    /*7*/ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1,
+    /*8*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*9*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*a*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*b*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*c*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*d*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*e*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+    /*f*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+};
+
 static unsigned long
 scan_digits(const char *str, int base, size_t *retlen, int *overflow)
 {
-    static const signed char table[] = {
-        /*     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
-        /*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*1*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*2*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*3*/  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1,
-        /*4*/ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
-        /*5*/ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1,
-        /*6*/ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
-        /*7*/ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1,
-        /*8*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*9*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*a*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*b*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*c*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*d*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*e*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-        /*f*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-    };
 
     const char *start = str;
     unsigned long ret = 0, x;
@@ -85,7 +86,7 @@ scan_digits(const char *str, int base, s https://github.com/ruby/ruby/blob/trunk/util.c#L86
     *overflow = 0;
 
     while ((c = (unsigned char)*str++) != '\0') {
-        int d = table[c];
+        int d = ruby_digit36_to_number_table[c];
         if (d == -1 || base <= d) {
             *retlen = (str-1) - start;
             return ret;
Index: internal.h
===================================================================
--- internal.h	(revision 41756)
+++ internal.h	(revision 41757)
@@ -530,6 +530,9 @@ int rb_execarg_run_options(const struct https://github.com/ruby/ruby/blob/trunk/internal.h#L530
 VALUE rb_execarg_extract_options(VALUE execarg_obj, VALUE opthash);
 void rb_execarg_setenv(VALUE execarg_obj, VALUE env);
 
+/* util.c */
+extern const signed char ruby_digit36_to_number_table[];
+
 /* variable.c */
 void rb_gc_mark_global_tbl(void);
 void rb_mark_generic_ivar(VALUE);
Index: bignum.c
===================================================================
--- bignum.c	(revision 41756)
+++ bignum.c	(revision 41757)
@@ -1916,12 +1916,7 @@ rb_cstr_to_inum(const char *str, int bas https://github.com/ruby/ruby/blob/trunk/bignum.c#L1916
 
 #undef ISDIGIT
 #define ISDIGIT(c) ('0' <= (c) && (c) <= '9')
-#define conv_digit(c) \
-    (!ISASCII(c) ? -1 : \
-     ISDIGIT(c) ? ((c) - '0') : \
-     ISLOWER(c) ? ((c) - 'a' + 10) : \
-     ISUPPER(c) ? ((c) - 'A' + 10) : \
-     -1)
+#define conv_digit(c) (ruby_digit36_to_number_table[(unsigned char)(c)])
 
     if (!str) {
 	if (badcheck) goto bad;

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

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