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

Unified Diff: runtime/lib/integers.dart

Issue 2765523003: The formatter struggles a bit with these files. (Closed)
Patch Set: The formatter struggles a bit with these files. Created 3 years, 9 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: runtime/lib/integers.dart
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index e87dba700b759503669df13e4622ceee8f6541d1..ff755e9c8dd2f9e65f9ef477f8a71029a62fff34 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -11,16 +11,19 @@ abstract class _IntegerImplementation {
if (result != null) return result;
return other._toBigint()._addFromInteger(this);
}
+
num operator -(num other) {
var result = other._subFromInteger(this);
if (result != null) return result;
return other._toBigint()._subFromInteger(this);
}
+
num operator *(num other) {
var result = other._mulFromInteger(this);
if (result != null) return result;
return other._toBigint()._mulFromInteger(this);
}
+
num operator ~/(num other) {
if ((other is int) && (other == 0)) {
throw const IntegerDivisionByZeroException();
@@ -29,9 +32,11 @@ abstract class _IntegerImplementation {
if (result != null) return result;
return other._toBigint()._truncDivFromInteger(this);
}
+
num operator /(num other) {
return this.toDouble() / other.toDouble();
}
+
num operator %(num other) {
if ((other is int) && (other == 0)) {
throw const IntegerDivisionByZeroException();
@@ -40,27 +45,33 @@ abstract class _IntegerImplementation {
if (result != null) return result;
return other._toBigint()._moduloFromInteger(this);
}
+
int operator -() {
return 0 - this;
}
+
int operator &(int other) {
var result = other._bitAndFromInteger(this);
if (result != null) return result;
return other._toBigint()._bitAndFromInteger(this);
}
+
int operator |(int other) {
var result = other._bitOrFromInteger(this);
if (result != null) return result;
return other._toBigint()._bitOrFromInteger(this);
}
+
int operator ^(int other) {
var result = other._bitXorFromInteger(this);
if (result != null) return result;
return other._toBigint()._bitXorFromInteger(this);
}
+
num remainder(num other) {
return other._remainderFromInteger(this);
}
+
int _bitAndFromSmi(int other) native "Integer_bitAndFromInteger";
int _bitAndFromInteger(int other) native "Integer_bitAndFromInteger";
int _bitOrFromInteger(int other) native "Integer_bitOrFromInteger";
@@ -73,28 +84,35 @@ abstract class _IntegerImplementation {
int _remainderFromInteger(int other) {
return other - (other ~/ this) * this;
}
+
int operator >>(int other) {
var result = other._shrFromInt(this);
if (result != null) return result;
return other._toBigint()._shrFromInt(this);
}
+
int operator <<(int other) {
var result = other._shlFromInt(this);
if (result != null) return result;
return other._toBigint()._shlFromInt(this);
}
+
bool operator <(num other) {
return other > this;
}
+
bool operator >(num other) {
return other._greaterThanFromInteger(this);
}
+
bool operator >=(num other) {
- return (this == other) || (this > other);
+ return (this == other) || (this > other);
}
+
bool operator <=(num other) {
return (this == other) || (this < other);
}
+
bool _greaterThanFromInteger(int other)
native "Integer_greaterThanFromInteger";
bool operator ==(other) {
@@ -103,13 +121,16 @@ abstract class _IntegerImplementation {
}
return false;
}
+
bool _equalToInteger(int other) native "Integer_equalToInteger";
int abs() {
return this < 0 ? -this : this;
}
+
int get sign {
return (this > 0) ? 1 : (this < 0) ? -1 : 0;
}
+
bool get isEven => ((this & 1) == 0);
bool get isOdd => !isEven;
bool get isNaN => false;
@@ -134,7 +155,7 @@ abstract class _IntegerImplementation {
int compareTo(num other) {
const int EQUAL = 0, LESS = -1, GREATER = 1;
if (other is double) {
- const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
+ const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
const int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
double d = other;
if (d.isInfinite) {
@@ -161,15 +182,37 @@ abstract class _IntegerImplementation {
}
}
- int round() { return this; }
- int floor() { return this; }
- int ceil() { return this; }
- int truncate() { return this; }
+ int round() {
+ return this;
+ }
+
+ int floor() {
+ return this;
+ }
+
+ int ceil() {
+ return this;
+ }
- double roundToDouble() { return this.toDouble(); }
- double floorToDouble() { return this.toDouble(); }
- double ceilToDouble() { return this.toDouble(); }
- double truncateToDouble() { return this.toDouble(); }
+ int truncate() {
+ return this;
+ }
+
+ double roundToDouble() {
+ return this.toDouble();
+ }
+
+ double floorToDouble() {
+ return this.toDouble();
+ }
+
+ double ceilToDouble() {
+ return this.toDouble();
+ }
+
+ double truncateToDouble() {
+ return this.toDouble();
+ }
num clamp(num lowerLimit, num upperLimit) {
if (lowerLimit is! num) {
@@ -196,17 +239,30 @@ abstract class _IntegerImplementation {
return this;
}
- int toInt() { return this; }
- double toDouble() { return new _Double.fromInteger(this); }
- _Bigint _toBigint() { return new _Bigint._fromInt(this); }
- num _toBigintOrDouble() { return _toBigint(); }
+ int toInt() {
+ return this;
+ }
+
+ double toDouble() {
+ return new _Double.fromInteger(this);
+ }
+
+ _Bigint _toBigint() {
+ return new _Bigint._fromInt(this);
+ }
+
+ num _toBigintOrDouble() {
+ return _toBigint();
+ }
String toStringAsFixed(int fractionDigits) {
return this.toDouble().toStringAsFixed(fractionDigits);
}
+
String toStringAsExponential([int fractionDigits]) {
return this.toDouble().toStringAsExponential(fractionDigits);
}
+
String toStringAsPrecision(int precision) {
return this.toDouble().toStringAsPrecision(precision);
}
@@ -229,7 +285,7 @@ abstract class _IntegerImplementation {
value ~/= radix;
temp.add(_digits.codeUnitAt(digit));
} while (value > 0);
- if (isNegative) temp.add(0x2d); // '-'.
+ if (isNegative) temp.add(0x2d); // '-'.
_OneByteString string = _OneByteString._allocate(temp.length);
for (int i = 0, j = temp.length; j > 0; i++) {
@@ -252,7 +308,7 @@ abstract class _IntegerImplementation {
// Integer division, rounding up, to find number of _digits.
length += (value.bitLength + bitsPerDigit - 1) ~/ bitsPerDigit;
_OneByteString string = _OneByteString._allocate(length);
- string._setAt(0, 0x2d); // '-'. Is overwritten if not negative.
+ string._setAt(0, 0x2d); // '-'. Is overwritten if not negative.
var mask = radix - 1;
do {
string._setAt(--length, _digits.codeUnitAt(value & mask));
@@ -310,10 +366,7 @@ abstract class _IntegerImplementation {
final bool ac = x.isEven;
int u = x;
int v = y;
- int a = 1,
- b = 0,
- c = 0,
- d = 1;
+ int a = 1, b = 0, c = 0, d = 1;
do {
while (u.isEven) {
u >>= 1;
@@ -403,8 +456,7 @@ abstract class _IntegerImplementation {
class _Smi extends _IntegerImplementation implements int {
factory _Smi._uninstantiable() {
- throw new UnsupportedError(
- "_Smi can only be allocated by the VM");
+ throw new UnsupportedError("_Smi can only be allocated by the VM");
}
int get hashCode => this;
int get _identityHashCode => this;
@@ -424,63 +476,63 @@ class _Smi extends _IntegerImplementation implements int {
* `_digitTable[n * 2]` and `_digitTable[n * 2 + 1]`.
*/
static const _digitTable = const [
- 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33,
- 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37,
- 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31,
- 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35,
- 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39,
- 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33,
- 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37,
- 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31,
- 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35,
- 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39,
- 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33,
- 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37,
- 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31,
- 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35,
- 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39,
- 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33,
- 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37,
- 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31,
- 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35,
- 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39,
- 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33,
- 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37,
- 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31,
- 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35,
- 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39
+ 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, //
+ 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, //
+ 0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31, //
+ 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, //
+ 0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, //
+ 0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, //
+ 0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, //
+ 0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, //
+ 0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, //
+ 0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, //
+ 0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, //
+ 0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, //
+ 0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31, //
+ 0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35, //
+ 0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39, //
+ 0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33, //
+ 0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37, //
+ 0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31, //
+ 0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35, //
+ 0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39, //
+ 0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33, //
+ 0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37, //
+ 0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31, //
+ 0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35, //
+ 0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39, //
];
/**
* Result of int.toString for -99, -98, ..., 98, 99.
*/
static const _smallLookupTable = const [
- "-99", "-98", "-97", "-96", "-95", "-94", "-93", "-92", "-91", "-90",
- "-89", "-88", "-87", "-86", "-85", "-84", "-83", "-82", "-81", "-80",
- "-79", "-78", "-77", "-76", "-75", "-74", "-73", "-72", "-71", "-70",
- "-69", "-68", "-67", "-66", "-65", "-64", "-63", "-62", "-61", "-60",
- "-59", "-58", "-57", "-56", "-55", "-54", "-53", "-52", "-51", "-50",
- "-49", "-48", "-47", "-46", "-45", "-44", "-43", "-42", "-41", "-40",
- "-39", "-38", "-37", "-36", "-35", "-34", "-33", "-32", "-31", "-30",
- "-29", "-28", "-27", "-26", "-25", "-24", "-23", "-22", "-21", "-20",
- "-19", "-18", "-17", "-16", "-15", "-14", "-13", "-12", "-11", "-10",
- "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0",
- "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
- "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
- "21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
- "31", "32", "33", "34", "35", "36", "37", "38", "39", "40",
- "41", "42", "43", "44", "45", "46", "47", "48", "49", "50",
- "51", "52", "53", "54", "55", "56", "57", "58", "59", "60",
- "61", "62", "63", "64", "65", "66", "67", "68", "69", "70",
- "71", "72", "73", "74", "75", "76", "77", "78", "79", "80",
- "81", "82", "83", "84", "85", "86", "87", "88", "89", "90",
- "91", "92", "93", "94", "95", "96", "97", "98", "99"
+ "-99", "-98", "-97", "-96", "-95", "-94", "-93", "-92", "-91", "-90", //
+ "-89", "-88", "-87", "-86", "-85", "-84", "-83", "-82", "-81", "-80", //
+ "-79", "-78", "-77", "-76", "-75", "-74", "-73", "-72", "-71", "-70", //
+ "-69", "-68", "-67", "-66", "-65", "-64", "-63", "-62", "-61", "-60", //
+ "-59", "-58", "-57", "-56", "-55", "-54", "-53", "-52", "-51", "-50", //
+ "-49", "-48", "-47", "-46", "-45", "-44", "-43", "-42", "-41", "-40", //
+ "-39", "-38", "-37", "-36", "-35", "-34", "-33", "-32", "-31", "-30", //
+ "-29", "-28", "-27", "-26", "-25", "-24", "-23", "-22", "-21", "-20", //
+ "-19", "-18", "-17", "-16", "-15", "-14", "-13", "-12", "-11", "-10", //
+ "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", //
+ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", //
+ "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", //
+ "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", //
+ "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", //
+ "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", //
+ "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", //
+ "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", //
+ "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", //
+ "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", //
+ "91", "92", "93", "94", "95", "96", "97", "98", "99" //
];
// Powers of 10 above 1000000 are indistinguishable by eye.
- static const int _POW_10_7 = 10000000;
- static const int _POW_10_8 = 100000000;
- static const int _POW_10_9 = 1000000000;
+ static const int _POW_10_7 = 10000000;
+ static const int _POW_10_8 = 100000000;
+ static const int _POW_10_9 = 1000000000;
// Find the number of decimal digits in a positive smi.
// Never called with numbers < 100. These are handled before calling.
@@ -565,20 +617,21 @@ class _Smi extends _IntegerImplementation implements int {
// Character code for '0'.
const int DIGIT_ZERO = 0x30;
if (negSmi > -10) {
- return _OneByteString._allocate(2).._setAt(0, MINUS_SIGN)
- .._setAt(1, DIGIT_ZERO - negSmi);
+ return _OneByteString._allocate(2)
+ .._setAt(0, MINUS_SIGN)
+ .._setAt(1, DIGIT_ZERO - negSmi);
}
if (negSmi > -100) {
int digitIndex = 2 * -negSmi;
return _OneByteString._allocate(3)
- .._setAt(0, MINUS_SIGN)
- .._setAt(1, _digitTable[digitIndex])
- .._setAt(2, _digitTable[digitIndex + 1]);
+ .._setAt(0, MINUS_SIGN)
+ .._setAt(1, _digitTable[digitIndex])
+ .._setAt(2, _digitTable[digitIndex + 1]);
}
// Number of digits, not including minus.
int digitCount = _negativeBase10Length(negSmi);
_OneByteString result = _OneByteString._allocate(digitCount + 1);
- result._setAt(0, MINUS_SIGN); // '-'.
+ result._setAt(0, MINUS_SIGN); // '-'.
int index = digitCount;
do {
var twoDigits = negSmi.remainder(100);
@@ -603,8 +656,7 @@ class _Smi extends _IntegerImplementation implements int {
// Represents integers that cannot be represented by Smi but fit into 64bits.
class _Mint extends _IntegerImplementation implements int {
factory _Mint._uninstantiable() {
- throw new UnsupportedError(
- "_Mint can only be allocated by the VM");
+ throw new UnsupportedError("_Mint can only be allocated by the VM");
}
int get hashCode => this;
int get _identityHashCode => this;
@@ -621,5 +673,6 @@ class _Mint extends _IntegerImplementation implements int {
return 0;
}
}
+
int _shlFromInt(int other) native "Mint_shlFromInt";
}

Powered by Google App Engine
This is Rietveld 408576698