Faster JSNumber:toInt.
R=lrn@google.com Review URL: https://codereview.chromium.org//38353005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29162 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
@@ -58,8 +58,14 @@ class JSNumber extends Interceptor implements num {
|
||||
}
|
||||
|
||||
num abs() => JS('num', r'Math.abs(#)', this);
|
||||
|
||||
static const int _MIN_INT32 = -0x80000000;
|
||||
static const int _MAX_INT32 = 0x7FFFFFFF;
|
||||
|
||||
int toInt() {
|
||||
if (this >= _MIN_INT32 && this <= _MAX_INT32) {
|
||||
return JS('int', '# | 0', this);
|
||||
}
|
||||
if (JS('bool', r'isFinite(#)', this)) {
|
||||
return JS('int', r'# + 0', truncateToDouble()); // Converts -0.0 to +0.0.
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// Copyright (c) 2013, 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.
|
||||
|
||||
import "package:expect/expect.dart";
|
||||
|
||||
main() {
|
||||
Expect.equals(-0x80000001, (-0x80000001).toInt());
|
||||
Expect.equals(-0x80000000, (-0x80000000 - 0.7).toInt());
|
||||
Expect.equals(-0x80000000, (-0x80000000 - 0.3).toInt());
|
||||
Expect.equals(-0x7FFFFFFF, (-0x80000000 + 0.3).toInt());
|
||||
Expect.equals(-0x7FFFFFFF, (-0x80000000 + 0.7).toInt());
|
||||
Expect.equals(-0x7FFFFFFF, (-0x7FFFFFFF).toInt());
|
||||
Expect.equals(0x7FFFFFFE, (0x7FFFFFFE).toInt());
|
||||
Expect.equals(0x7FFFFFFE, (0x7FFFFFFF - 0.7).toInt());
|
||||
Expect.equals(0x7FFFFFFE, (0x7FFFFFFF - 0.3).toInt());
|
||||
Expect.equals(0x7FFFFFFF, (0x7FFFFFFF + 0.3).toInt());
|
||||
Expect.equals(0x7FFFFFFF, (0x7FFFFFFF + 0.7).toInt());
|
||||
Expect.equals(0x80000000, 0x80000000.toInt());
|
||||
}
|
||||
Reference in New Issue
Block a user