| 1119 | } |
| 1120 | |
| 1121 | public int parseInt() { |
| 1122 | final byte[] buffer = buf; |
| 1123 | double d = 0; |
| 1124 | int p = pos, i = 0, n = 0, expFrac = 0, exp = 0, useDouble = 0, b, c; |
| 1125 | boolean minus = false, expMinus = false; |
| 1126 | |
| 1127 | try { |
| 1128 | b = buffer[p]; |
| 1129 | if (b == '-') { |
| 1130 | minus = true; |
| 1131 | b = buffer[++p]; |
| 1132 | } else if (b == '+') |
| 1133 | b = buffer[++p]; |
| 1134 | if (b == '0') |
| 1135 | b = buffer[++p]; |
| 1136 | else if ((i = (b - '0') & 0xff) < 10) { |
| 1137 | while ((c = ((b = buffer[++p]) - '0') & 0xff) < 10) { |
| 1138 | if (i >= 0xCCC_CCCC) { // 0xCCC_CCCC * 10 = 0x7FFF_FFF8 |
| 1139 | d = i; |
| 1140 | useDouble = 2; |
| 1141 | do |
| 1142 | d = d * 10 + c; |
| 1143 | while ((c = ((b = buffer[++p]) - '0') & 0xff) < 10); |
| 1144 | break; |
| 1145 | } |
| 1146 | i = i * 10 + c; |
| 1147 | n++; |
| 1148 | } |
| 1149 | } else |
| 1150 | i = 0; |
| 1151 | |
| 1152 | if (b == '.') { |
| 1153 | c = ((b = buffer[++p]) - '0') & 0xff; |
| 1154 | if (useDouble == 0) { |
| 1155 | useDouble = 1; |
| 1156 | for (; c < 10; c = ((b = buffer[++p]) - '0') & 0xff) { |
| 1157 | if (i >= 0xCCC_CCCC) |
| 1158 | break; |
| 1159 | i = i * 10 + c; |
| 1160 | expFrac--; |
| 1161 | if (i != 0) |
| 1162 | n++; |
| 1163 | } |
| 1164 | d = i; |
| 1165 | useDouble = 2; |
| 1166 | } |
| 1167 | for (; c < 10; c = ((b = buffer[++p]) - '0') & 0xff) { |
| 1168 | if (n < 17) { |
| 1169 | d = d * 10 + c; |
| 1170 | expFrac--; |
| 1171 | if (d > 0) |
| 1172 | n++; |
| 1173 | } |
| 1174 | } |
| 1175 | } |
| 1176 | |
| 1177 | if ((b | 0x20) == 'e') { // E:0x45 | 0x20 = e:0x65 |
| 1178 | if (useDouble == 0) { |