// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // Dart core library. // VM implementation of double. patch class double { static double _native_parse(_OneByteString string) native "Double_parse"; static double _parse(var str) { str = str.trim(); if (str.length == 0) return null; final ccid = str._cid; _OneByteString oneByteString; // TODO(floitsch): Allow _ExternalOneByteStrings. As of May 2013 they don't // have any _classId. if (ccid != _OneByteString._classId) { 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; } else { oneByteString = str; } return _native_parse(oneByteString); } /* patch */ static double parse(String str, [double onError(String str)]) { var result = _parse(str); if (result == null) { if (onError == null) throw new FormatException(str); return onError(str); } return result; } }