return i+1;
}
-static int lexHexLiteral(struct Parser* p, int index)
+static int lexIntLiteral(struct Parser* p, int index, int base)
{
int nib, i = index;
double d = 0;
- while(i < p->len && (nib = hex(p->buf[i])) >= 0) {
- d = d*16 + nib;
+ while(i < p->len && (nib = hex(p->buf[i])) >= 0 && nib < base) {
+ d = d * base + nib;
i++;
}
newToken(p, index, TOK_LITERAL, 0, 0, d);
unsigned char* buf = (unsigned char*)p->buf;
double d;
- if(buf[i] == '0' && i+2<len && buf[i+1] == 'x' && ISHEX(buf[i+2]))
- return lexHexLiteral(p, index+2);
+ if( buf[i] == '0' && i + 2 < len ) {
+ if( buf[i+1] == 'x' && ISHEX(buf[i+2]) )
+ return lexIntLiteral(p, index+2, 16);
+ if( buf[i+1] == 'o' && ISNUM(buf[i+2]) )
+ return lexIntLiteral(p, index+2, 8);
+ }
while(i<len && ISNUM(buf[i])) i++;
if(i<len && buf[i] == '.') {