Index: runtime/lib/double_patch.dart |
diff --git a/runtime/lib/double_patch.dart b/runtime/lib/double_patch.dart |
index d0367250dcd2cb082e021cd29d07df65a046c843..a239a7523ce6f0b42fa71856c2c83f934846c017 100644 |
--- a/runtime/lib/double_patch.dart |
+++ b/runtime/lib/double_patch.dart |
@@ -7,34 +7,17 @@ |
patch class double { |
- static double _native_parse(_OneByteString string) native "Double_parse"; |
+ static double _nativeParse(String str, |
+ int start, int end) native "Double_parse"; |
static double _parse(var str) { |
- str = str.trim(); |
+ int len = str.length; |
+ int start = str._firstNonWhitespace(); |
+ if (start == len) return null; // All whitespace. |
+ int end = str._lastNonWhitespace() + 1; |
+ assert(start < end); |
- if (str.length == 0) return null; |
- |
- final ccid = ClassID.getID(str); |
- _OneByteString oneByteString; |
- // TODO(Srdjan): Allow _ExternalOneByteStrings. |
- if (ccid == ClassID.cidOneByteString) { |
- oneByteString = str; |
- } else { |
- int length = str.length; |
- var s = _OneByteString._allocate(length); |
- for (int i = 0; i < length; i++) { |
- int currentUnit = str.codeUnitAt(i); |
- // All valid trimmed double strings must be ASCII. |
- if (currentUnit < 128) { |
- s._setAt(i, currentUnit); |
- } else { |
- return null; |
- } |
- } |
- oneByteString = s; |
- } |
- |
- return _native_parse(oneByteString); |
+ return _nativeParse(str, start, end); |
} |
/* patch */ static double parse(String str, |