Changeset: ceaa13667710 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ceaa13667710 Modified Files: sql/server/sql_scan.c Branch: literal_features Log Message:
simplify code diffs (90 lines): diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -966,15 +966,32 @@ static inline bool is_valid_binary_digit static inline bool is_valid_octal_digit(int cur) { return (iswdigit(cur) && cur < '8'); } static inline bool is_valid_hexadecimal_digit(int cur) { return iswxdigit(cur); } -static inline int check_validity_number(mvc* c, int pcur, bool initial_underscore_allowed, int *token, bool (*is_valid_n_ary_digit)(int), int type, char type2) { +static inline int check_validity_number(mvc* c, int pcur, bool initial_underscore_allowed, int *token, int type) { struct scanner *lc = &c->scanner; - (void) type2; + bool (*is_valid_n_ary_digit)(int); if (pcur == '_' && !initial_underscore_allowed) /* ERROR: initial underscore not allowed */ { *token = 0; return '_'; } + assert(*token); + + switch (*token) { + case BINARYNUM: + is_valid_n_ary_digit = &is_valid_binary_digit; + break; + case OCTALNUM: + is_valid_n_ary_digit = &is_valid_octal_digit; + break; + case HEXADECIMALNUM: + is_valid_n_ary_digit = &is_valid_hexadecimal_digit; + break; + default: + is_valid_n_ary_digit = &is_valid_decimal_digit; + break; + } + if ( !(pcur == '_' || is_valid_n_ary_digit(pcur)) ) /* ERROR: first digit is not valid */ { *token = 0; return pcur; @@ -1027,17 +1044,17 @@ number(mvc * c, int cur) switch ((cur = scanner_getc(lc))) { case 'b': cur = scanner_getc(lc); - if ((cur = check_validity_number(c, cur, true, &token, &is_valid_binary_digit , BINARYNUM , 'b')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, true, &token, BINARYNUM)) == EOF) return cur; is_decimal = false; break; case 'o': cur = scanner_getc(lc); - if ((cur = check_validity_number(c, cur, true, &token, &is_valid_octal_digit , OCTALNUM , 'o')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, true, &token, OCTALNUM)) == EOF) return cur; is_decimal = false; break; case 'x': cur = scanner_getc(lc); - if ((cur = check_validity_number(c, cur, true, &token, &is_valid_hexadecimal_digit , HEXADECIMALNUM, 'x')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, true, &token, HEXADECIMALNUM)) == EOF) return cur; is_decimal = false; break; default: @@ -1046,7 +1063,7 @@ number(mvc * c, int cur) } } if (is_decimal) { - if ((cur = check_validity_number(c, cur, false, &token, &is_valid_decimal_digit , sqlINT, 'd')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, false, &token, sqlINT)) == EOF) return cur; if (cur == '@') { if (token == sqlINT) { cur = scanner_getc(lc); @@ -1067,18 +1084,18 @@ number(mvc * c, int cur) } else { if (cur == '.') { cur = scanner_getc(lc); - if ((cur = check_validity_number(c, cur, false, &token, &is_valid_decimal_digit , INTNUM, 'd')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, false, &token, INTNUM)) == EOF) return cur; } if (token != 0) if (cur == 'e' || cur == 'E') { cur = scanner_getc(lc); if (cur == '+' || cur == '-') cur = scanner_getc(lc); - if ((cur = check_validity_number(c, cur, false, &token, &is_valid_decimal_digit , APPROXNUM, 'd')) == EOF) return cur; + if ((cur = check_validity_number(c, cur, false, &token, APPROXNUM)) == EOF) return cur; } } } - + assert(cur != EOF); if (iswalnum(cur)) /* ERROR: not a valid digit */ _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org