to_digit((uint8_t)p[1]) < radix)) {
p++;
}
- if (!(flags & ATOD_INT_ONLY)) {
+ if (!(flags & ATOD_INT_ONLY) && radix == 10) {
if (*p == '.' && (p > p_start || to_digit((uint8_t)p[1]) < radix)) {
is_float = TRUE;
p++;
(*p == sep && to_digit((uint8_t)p[1]) < radix))
p++;
}
- if (p > p_start &&
- (((*p == 'e' || *p == 'E') && radix == 10) ||
- ((*p == 'p' || *p == 'P') && (radix == 2 || radix == 8 || radix == 16)))) {
+ if (p > p_start && (*p == 'e' || *p == 'E')) {
const char *p1 = p + 1;
is_float = TRUE;
if (*p1 == '+') {
}
buf[j] = '\0';
- if (flags & ATOD_ACCEPT_SUFFIX) {
- if (*p == 'n') {
- p++;
- atod_type = ATOD_TYPE_BIG_INT;
- } else {
- if (is_float && radix != 10)
- goto fail;
- }
- } else {
- if (atod_type == ATOD_TYPE_FLOAT64) {
- if (is_float && radix != 10)
- goto fail;
- }
+ if ((flags & ATOD_ACCEPT_SUFFIX) && *p == 'n') {
+ p++;
+ atod_type = ATOD_TYPE_BIG_INT;
}
switch(atod_type) {
assert(gvar1, 5);
}
+function test_number_literals()
+{
+ assert(0.1.a, undefined);
+ assert(0x1.a, undefined);
+ assert(0b1.a, undefined);
+ assert(01.a, undefined);
+ assert(0o1.a, undefined);
+ assert_throws(SyntaxError, () => eval('0.a'));
+}
+
test_op1();
test_cvt();
test_eq();
test_parse_arrow_function();
test_unicode_ident();
test_global_var_opt();
+test_number_literals();