зеркало из https://github.com/github/ruby.git
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41757 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
48ebea719f
Коммит
b2be623240
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
Wed Jul 3 22:29:20 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* 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@ruby-lang.org>
|
||||
|
||||
* lib/mkmf.rb (install_dirs): revert DESTDIR prefix by r39841, since
|
||||
|
|
7
bignum.c
7
bignum.c
|
@ -1916,12 +1916,7 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
|
|||
|
||||
#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;
|
||||
|
|
|
@ -530,6 +530,9 @@ int rb_execarg_run_options(const struct rb_execarg *e, struct rb_execarg *s, cha
|
|||
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);
|
||||
|
|
18
pack.c
18
pack.c
|
@ -1047,19 +1047,11 @@ qpencode(VALUE str, VALUE from, long len)
|
|||
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 { \
|
||||
|
|
41
util.c
41
util.c
|
@ -55,28 +55,29 @@ ruby_scan_hex(const char *start, size_t len, size_t *retlen)
|
|||
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, size_t *retlen, int *overflow)
|
|||
*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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче