Implement Smi.toString in Dart instead of calling to C++ natives. Large performance improvement.
R=asiva@google.com
Review URL: https://codereview.chromium.org//14629015
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22341 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index 8ee9dd3..55d3626 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -221,6 +221,32 @@
int operator ~() native "Smi_bitNegate";
int _shrFromInt(int other) native "Smi_shrFromInt";
int _shlFromInt(int other) native "Smi_shlFromInt";
+
+ String toString() {
+ if (this == 0) return "0";
+ var reversed = new List();
+ var val = this < 0 ? -this : this;
+ while (val > 0) {
+ reversed.add((val % 10) + 0x30);
+ val = val ~/ 10;
+ }
+ final int numDigits = reversed.length;
+ List digits;
+ int i;
+ if (this < 0) {
+ digits = new List(numDigits + 1);
+ digits[0] = 0x2D; // '-'.
+ i = 1;
+ } else {
+ digits = new List(numDigits);
+ i = 0;
+ }
+ int ri = reversed.length - 1;
+ for (; i < digits.length; i++, ri--) {
+ digits[i] = reversed[ri];
+ }
+ return _StringBase.createFromCharCodes(digits);
+ }
}
// Represents integers that cannot be represented by Smi but fit into 64bits.