mirror of
https://github.com/dart-lang/sdk
synced 2024-09-22 23:33:52 +00:00
ef66be8610
R=floitsch@google.com Review URL: https://codereview.chromium.org//87953002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30667 260f80e4-7a28-3924-810f-c04153c831b5
51 lines
1.4 KiB
Dart
51 lines
1.4 KiB
Dart
// 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;
|
|
}
|
|
}
|