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/