mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Fix parsing of single-digit numbers
This commit is contained in:
+27
-21
@@ -47,18 +47,19 @@ parse_i64_of_base :: proc(str: string, base: int) -> (value: i64, ok: bool) {
|
|||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
for r in s {
|
for r in s {
|
||||||
i += 1;
|
if r == '_' {
|
||||||
if r == '_' do continue;
|
i += 1;
|
||||||
v := i64(_digit_value(r));
|
continue;
|
||||||
if v >= i64(base) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
v := i64(_digit_value(r));
|
||||||
|
if v >= i64(base) do break;
|
||||||
value *= i64(base);
|
value *= i64(base);
|
||||||
value += v;
|
value += v;
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if neg do value = -value;
|
if neg do value = -value;
|
||||||
ok = i > 1;
|
ok = i > 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,18 +101,19 @@ parse_i64_maybe_prefixed :: proc(str: string) -> (value: i64, ok: bool) {
|
|||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
for r in s {
|
for r in s {
|
||||||
i += 1;
|
if r == '_' {
|
||||||
if r == '_' do continue;
|
i += 1;
|
||||||
v := i64(_digit_value(r));
|
continue;
|
||||||
if v >= base {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
v := i64(_digit_value(r));
|
||||||
|
if v >= base do break;
|
||||||
value *= base;
|
value *= base;
|
||||||
value += v;
|
value += v;
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if neg do value = -value;
|
if neg do value = -value;
|
||||||
ok = i > 1;
|
ok = i > 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,17 +140,18 @@ parse_u64_of_base :: proc(str: string, base: int) -> (value: u64, ok: bool) {
|
|||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
for r in s {
|
for r in s {
|
||||||
i += 1;
|
if r == '_' {
|
||||||
if r == '_' do continue;
|
i += 1;
|
||||||
v := u64(_digit_value(r));
|
continue;
|
||||||
if v >= u64(base) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
v := u64(_digit_value(r));
|
||||||
|
if v >= u64(base) do break;
|
||||||
value *= u64(base);
|
value *= u64(base);
|
||||||
value += v;
|
value += v;
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = i > 1;
|
ok = i > 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,15 +187,18 @@ parse_u64_maybe_prefixed :: proc(str: string) -> (value: u64, ok: bool) {
|
|||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
for r in s {
|
for r in s {
|
||||||
i += 1;
|
if r == '_' {
|
||||||
if r == '_' do continue;
|
i += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
v := u64(_digit_value(r));
|
v := u64(_digit_value(r));
|
||||||
if v >= base do break;
|
if v >= base do break;
|
||||||
value *= base;
|
value *= base;
|
||||||
value += u64(v);
|
value += u64(v);
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = i > 1;
|
ok = i > 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user