digit = (int) *(--string); length--;
/* separate because toupper() is likely a macro! */
digit = toupper(digit);
- if ((ok = (isxdigit(digit) != 0)))
+ if (digit == '_')
+ count -= 4;
+ else if ((ok = (isxdigit(digit) != 0)))
{
if (digit >= (int) 'A') digit -= (int) 'A' - 10;
else digit -= (int) '0';
for ( count = count_fill; (ok and (length > 0) and (count < BITS)); count += 3 )
{
digit = (int) *(--string); length--;
- if ((ok = (isdigit(digit) && digit != '8' && digit != '9')) != 0)
+ if (digit == '_')
+ count -= 3;
+ else if ((ok = (isdigit(digit) && digit != '8' && digit != '9')) != 0)
{
digit -= (int) '0';
value |= (((N_word) digit) << count);
case (int) '1':
value |= BITMASKTAB[count];
break;
+ case (int) '_':
+ count--;
+ break;
default:
ok = FALSE;
break;
any = [\001-\377];
digit = [0-9];
iletter = [a-zA-Z];
- bindigit = [01];
- octdigit = [0-7];
- hexdigit = [0-9a-fA-F];
+ bindigit = [01_];
+ octdigit = [0-7_];
+ hexdigit = [0-9a-fA-F_];
ws = [ \t\r];
quot = ["'];
*/
}
/* 10010011b - binary number */
- bindigit+ 'b' {
+ [01] bindigit* 'b' {
s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */
lvalp->intn = yasm_intnum_create_bin(TOK);
RETURN(INTNUM);
}
/* 777q or 777o - octal number */
- octdigit+ [qQoO] {
+ [0-7] octdigit* [qQoO] {
s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */
lvalp->intn = yasm_intnum_create_oct(TOK);
RETURN(INTNUM);
}
/* 10010011b - binary number */
- bindigit+ 'b' {
+ [01] bindigit* 'b' {
s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */
lvalp->intn = yasm_intnum_create_bin(TOK);
RETURN(INTNUM);
}
/* 777q or 777o - octal number */
- octdigit+ [qQoO] {
+ [0-7] octdigit* [qQoO] {
s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */
lvalp->intn = yasm_intnum_create_oct(TOK);
RETURN(INTNUM);
}
/* $0AA and 0xAA forms of hexidecimal number */
- (("$" digit) | "0x") hexdigit+ {
+ (("$" digit) | '0x') hexdigit+ {
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
- if (s->tok[1] == 'x')
+ if (s->tok[1] == 'x' || s->tok[1] == 'X')
/* skip 0 and x */
lvalp->intn = yasm_intnum_create_hex(TOK+2);
else
EXTRA_DIST += modules/parsers/nasm/tests/struczero.hex
EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.asm
EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.errwarn
+EXTRA_DIST += modules/parsers/nasm/tests/uscore.asm
+EXTRA_DIST += modules/parsers/nasm/tests/uscore.hex
EXTRA_DIST += modules/parsers/nasm/tests/worphan/Makefile.inc