Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(605)

Unified Diff: sdk/lib/_internal/compiler/implementation/lib/js_number.dart

Issue 11748016: Make ~/, round, ceil, floor, truncate return ints. Remove toInt. (Closed) Base URL: https://dart.googlecode.com/svn/experimental/lib_v2/dart
Patch Set: Checked mode fixes. Created 7 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/lib/js_number.dart
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
index 6acf7696feef9b2df4fe6ee65bc927195b90d985..bfc3343e46ee96745050a5b346b134a5eb0138e9 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_number.dart
@@ -49,28 +49,36 @@ class JSNumber {
num abs() => JS('num', r'Math.abs(#)', this);
- int toInt() {
+ num ceil() {
if (isNaN) throw new FormatException('NaN');
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Consider UnsupportedError. FormatException is real
if (isInfinite) throw new FormatException('Infinity');
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Consider combining the test into one 'Not finite'
- num truncated = truncate();
- return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
+ num ceiled = JS('num', r'Math.ceil(#)', this);
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Just do: return JS('num', r'Math.ceil(#) + 0', t
+ return (ceiled == -0.0) ? 0 : ceiled;
}
- num ceil() => JS('num', r'Math.ceil(#)', this);
-
- num floor() => JS('num', r'Math.floor(#)', this);
+ num floor() {
+ if (isNaN) throw new FormatException('NaN');
+ if (isInfinite) throw new FormatException('Infinity');
+ JS('num', r'Math.floor(#)', this);
Lasse Reichstein Nielsen 2013/01/04 10:29:42 This can return -0 if it gets -0 as input. Add the
+ }
- bool get isInfinite {
- return JS('bool', r'# == Infinity', this)
- || JS('bool', r'# == -Infinity', this);
+ int truncate() {
+ return this < 0 ? ceil() : floor();
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Parentheses around (this < 0).
}
num round() {
- if (this < 0) {
- return JS('num', r'-Math.round(-#)', this);
- } else {
- return JS('num', r'Math.round(#)', this);
+ if (isNaN) throw new FormatException('NaN');
+ if (isInfinite) throw new FormatException('Infinity');
+ if (this <= 0) {
+ num rounded = JS('num', r'-Math.round(-#)', this);
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Just do return JS('int', r'-Math.round(-#) + 0'
+ return (rounded == -0.0) ? 0 : rounded;
}
+ return JS('num', r'Math.round(#)', this);
+ }
+
+ bool get isInfinite {
+ return JS('bool', r'# == Infinity', this)
+ || JS('bool', r'# == -Infinity', this);
Lasse Reichstein Nielsen 2013/01/04 10:29:42 Indentation off here.
}
num clamp(lowerLimit, upperLimit) {
@@ -86,8 +94,6 @@ class JSNumber {
double toDouble() => this;
- num truncate() => this < 0 ? ceil() : floor();
-
String toStringAsFixed(int fractionDigits) {
checkNum(fractionDigits);
// TODO(floitsch): fractionDigits must be an integer.

Powered by Google App Engine
This is Rietveld 408576698