Browse Source

Merge branch 'master' of https://github.com/odin-lang/Odin

gingerBill 5 years ago
parent
commit
dc1b3cc563
1 changed files with 27 additions and 21 deletions
  1. 27 21
      core/strconv/strconv.odin

+ 27 - 21
core/strconv/strconv.odin

@@ -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 == '_' do continue;
-		v := i64(_digit_value(r));
-		if v >= i64(base) {
-			break;
+		if r == '_' {
+			i += 1;
+			continue;
 		}
 		}
+		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 == '_' do continue;
-		v := i64(_digit_value(r));
-		if v >= base {
-			break;
+		if r == '_' {
+			i += 1;
+			continue;
 		}
 		}
+		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 == '_' do continue;
-		v := u64(_digit_value(r));
-		if v >= u64(base) {
-			break;
+		if r == '_' {
+			i += 1;
+			continue;
 		}
 		}
+		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 == '_' do continue;
+		if r == '_' {
+			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;
 }
 }