| Index: sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/compiler/implementation/lib/interceptors.dart (revision 15078)
|
| +++ sdk/lib/_internal/compiler/implementation/lib/interceptors.dart (working copy)
|
| @@ -7,6 +7,7 @@
|
| import 'dart:collection';
|
|
|
| part 'js_array.dart';
|
| +part 'js_number.dart';
|
| part 'js_string.dart';
|
|
|
| /**
|
| @@ -25,6 +26,8 @@
|
| getInterceptor(object) {
|
| if (object is String) return const JSString();
|
| if (isJsArray(object)) return const JSArray();
|
| + if (object is int) return const JSInt();
|
| + if (object is double) return const JSDouble();
|
| return const ObjectInterceptor();
|
| }
|
|
|
| @@ -74,167 +77,6 @@
|
| return JS('String', r'String(#)', value);
|
| }
|
|
|
| -compareTo(a, b) {
|
| - if (checkNumbers(a, b)) {
|
| - if (a < b) {
|
| - return -1;
|
| - } else if (a > b) {
|
| - return 1;
|
| - } else if (a == b) {
|
| - if (a == 0) {
|
| - bool aIsNegative = a.isNegative;
|
| - bool bIsNegative = b.isNegative;
|
| - if (aIsNegative == bIsNegative) return 0;
|
| - if (aIsNegative) return -1;
|
| - return 1;
|
| - }
|
| - return 0;
|
| - } else if (a.isNaN) {
|
| - if (b.isNaN) {
|
| - return 0;
|
| - }
|
| - return 1;
|
| - } else {
|
| - return -1;
|
| - }
|
| - } else if (a is String) {
|
| - if (b is !String) throw new ArgumentError(b);
|
| - return JS('bool', r'# == #', a, b) ? 0
|
| - : JS('bool', r'# < #', a, b) ? -1 : 1;
|
| - } else {
|
| - return UNINTERCEPTED(a.compareTo(b));
|
| - }
|
| -}
|
| -
|
| -get$isNegative(receiver) {
|
| - if (receiver is num) {
|
| - return (receiver == 0) ? (1 / receiver) < 0 : receiver < 0;
|
| - } else {
|
| - return UNINTERCEPTED(receiver.isNegative);
|
| - }
|
| -}
|
| -
|
| -get$isNaN(receiver) {
|
| - if (receiver is num) {
|
| - return JS('bool', r'isNaN(#)', receiver);
|
| - } else {
|
| - return UNINTERCEPTED(receiver.isNaN);
|
| - }
|
| -}
|
| -
|
| -remainder(a, b) {
|
| - if (checkNumbers(a, b)) {
|
| - return JS('num', r'# % #', a, b);
|
| - } else {
|
| - return UNINTERCEPTED(a.remainder(b));
|
| - }
|
| -}
|
| -
|
| -abs(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.abs());
|
| -
|
| - return JS('num', r'Math.abs(#)', receiver);
|
| -}
|
| -
|
| -toInt(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.toInt());
|
| -
|
| - if (receiver.isNaN) throw new FormatException('NaN');
|
| -
|
| - if (receiver.isInfinite) throw new FormatException('Infinity');
|
| -
|
| - var truncated = receiver.truncate();
|
| - return JS('bool', r'# == -0.0', truncated) ? 0 : truncated;
|
| -}
|
| -
|
| -ceil(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.ceil());
|
| -
|
| - return JS('num', r'Math.ceil(#)', receiver);
|
| -}
|
| -
|
| -floor(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.floor());
|
| -
|
| - return JS('num', r'Math.floor(#)', receiver);
|
| -}
|
| -
|
| -get$isInfinite(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.isInfinite);
|
| -
|
| - return JS('bool', r'# == Infinity', receiver)
|
| - || JS('bool', r'# == -Infinity', receiver);
|
| -}
|
| -
|
| -round(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.round());
|
| -
|
| - if (JS('bool', r'# < 0', receiver)) {
|
| - return JS('num', r'-Math.round(-#)', receiver);
|
| - } else {
|
| - return JS('num', r'Math.round(#)', receiver);
|
| - }
|
| -}
|
| -
|
| -toDouble(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.toDouble());
|
| -
|
| - return receiver;
|
| -}
|
| -
|
| -truncate(receiver) {
|
| - if (receiver is !num) return UNINTERCEPTED(receiver.truncate());
|
| -
|
| - return receiver < 0 ? receiver.ceil() : receiver.floor();
|
| -}
|
| -
|
| -toStringAsFixed(receiver, fractionDigits) {
|
| - if (receiver is !num) {
|
| - return UNINTERCEPTED(receiver.toStringAsFixed(fractionDigits));
|
| - }
|
| - checkNum(fractionDigits);
|
| -
|
| - String result = JS('String', r'#.toFixed(#)', receiver, fractionDigits);
|
| - if (receiver == 0 && receiver.isNegative) return "-$result";
|
| - return result;
|
| -}
|
| -
|
| -toStringAsExponential(receiver, fractionDigits) {
|
| - if (receiver is !num) {
|
| - return UNINTERCEPTED(receiver.toStringAsExponential(fractionDigits));
|
| - }
|
| - String result;
|
| - if (fractionDigits != null) {
|
| - checkNum(fractionDigits);
|
| - result = JS('String', r'#.toExponential(#)', receiver, fractionDigits);
|
| - } else {
|
| - result = JS('String', r'#.toExponential()', receiver);
|
| - }
|
| - if (receiver == 0 && receiver.isNegative) return "-$result";
|
| - return result;
|
| -}
|
| -
|
| -toStringAsPrecision(receiver, fractionDigits) {
|
| - if (receiver is !num) {
|
| - return UNINTERCEPTED(receiver.toStringAsPrecision(fractionDigits));
|
| - }
|
| - checkNum(fractionDigits);
|
| -
|
| - String result = JS('String', r'#.toPrecision(#)',
|
| - receiver, fractionDigits);
|
| - if (receiver == 0 && receiver.isNegative) return "-$result";
|
| - return result;
|
| -}
|
| -
|
| -toRadixString(receiver, radix) {
|
| - if (receiver is !num) {
|
| - return UNINTERCEPTED(receiver.toRadixString(radix));
|
| - }
|
| - checkNum(radix);
|
| - if (radix < 2 || radix > 36) throw new ArgumentError(radix);
|
| - return JS('String', r'#.toString(#)', receiver, radix);
|
| -}
|
| -
|
| /**
|
| * This is the [Jenkins hash function][1] but using masking to keep
|
| * values in SMI range.
|
| @@ -261,16 +103,6 @@
|
| return 0x1fffffff & (hash + (0x00003fff & hash) << 15);
|
| }
|
|
|
| -get$isEven(receiver) {
|
| - if (receiver is !int) return UNINTERCEPTED(receiver.isEven);
|
| - return (receiver & 1) == 0;
|
| -}
|
| -
|
| -get$isOdd(receiver) {
|
| - if (receiver is !int) return UNINTERCEPTED(receiver.isOdd);
|
| - return (receiver & 1) == 1;
|
| -}
|
| -
|
| get$runtimeType(receiver) {
|
| if (receiver is int) {
|
| return createRuntimeType('int');
|
|
|