- try {
- val = checked (val * 10 + (c - '0') * sign);
- digits_seen = true;
- } catch (OverflowException e) {
- exc = e;
- return false;
- }
- } else {
- if (Char.IsWhiteSpace (c)){
- for (i++; i < len; i++){
- if (!Char.IsWhiteSpace (s [i])) {
- if (!tryParse)
- exc = GetFormatException ();
- return false;
-
- }
+ byte d = (byte) (c - '0');
+
+ if (val > (MaxValue/10))
+ goto overflow;
+
+ if (val == (MaxValue/10)){
+ if ((d > (MaxValue % 10)) && (sign == 1 || (d > ((MaxValue % 10) + 1))))
+ goto overflow;
+ if (sign == -1)
+ val = (val * sign * 10) - d;
+ else
+ val = (val * 10) + d;
+
+ if (ProcessTrailingWhitespace (tryParse, s, i + 1, ref exc)){
+ result = val;
+ return true;