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:
ngeoffray@google.com
2013-10-24 08:44:32 +00:00
parent b4be8b8080
commit 581fa005f9
2 changed files with 26 additions and 0 deletions
+6
View File
@@ -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.
}
+20
View File
@@ -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());
}