OpenJDK 11: Merging in java.lang.Long (update parseLong)
This is part of merging upstream changes from OpenJDK 11.28. This CL
updates parseLong(String s, int radix) method.
Bug: 207772338
Test: treehugger
Change-Id: If8e15d1f92f732d57b78a6f308bd3ed11b38e9af
diff --git a/ojluni/src/main/java/java/lang/Long.java b/ojluni/src/main/java/java/lang/Long.java
index 1790773..ba1b45b 100644
--- a/ojluni/src/main/java/java/lang/Long.java
+++ b/ojluni/src/main/java/java/lang/Long.java
@@ -572,12 +572,9 @@
" greater than Character.MAX_RADIX");
}
- long result = 0;
boolean negative = false;
int i = 0, len = s.length();
long limit = -Long.MAX_VALUE;
- long multmin;
- int digit;
if (len > 0) {
char firstChar = s.charAt(0);
@@ -585,21 +582,21 @@
if (firstChar == '-') {
negative = true;
limit = Long.MIN_VALUE;
- } else if (firstChar != '+')
- throw NumberFormatException.forInputString(s);
-
- if (len == 1) // Cannot have lone "+" or "-"
- throw NumberFormatException.forInputString(s);
- i++;
- }
- multmin = limit / radix;
- while (i < len) {
- // Accumulating negatively avoids surprises near MAX_VALUE
- digit = Character.digit(s.charAt(i++),radix);
- if (digit < 0) {
+ } else if (firstChar != '+') {
throw NumberFormatException.forInputString(s);
}
- if (result < multmin) {
+
+ if (len == 1) { // Cannot have lone "+" or "-"
+ throw NumberFormatException.forInputString(s);
+ }
+ i++;
+ }
+ long multmin = limit / radix;
+ long result = 0;
+ while (i < len) {
+ // Accumulating negatively avoids surprises near MAX_VALUE
+ int digit = Character.digit(s.charAt(i++),radix);
+ if (digit < 0 || result < multmin) {
throw NumberFormatException.forInputString(s);
}
result *= radix;
@@ -608,10 +605,10 @@
}
result -= digit;
}
+ return negative ? result : -result;
} else {
throw NumberFormatException.forInputString(s);
}
- return negative ? result : -result;
}
/**