| Index: src/string.js
|
| diff --git a/src/string.js b/src/string.js
|
| index 59a501f9ee502220124a68869aedeb9b10e03a13..cc6504fef315aa382a003b6e0a6e42c568c02af8 100644
|
| --- a/src/string.js
|
| +++ b/src/string.js
|
| @@ -62,26 +62,21 @@ function StringValueOf() {
|
|
|
| // ECMA-262, section 15.5.4.4
|
| function StringCharAt(pos) {
|
| - var char_code = %_FastCharCodeAt(this, pos);
|
| - if (!%_IsSmi(char_code)) {
|
| - var subject = TO_STRING_INLINE(this);
|
| - var index = TO_INTEGER(pos);
|
| - if (index >= subject.length || index < 0) return "";
|
| - char_code = %StringCharCodeAt(subject, index);
|
| + var result = %_StringCharAt(this, pos);
|
| + if (%_IsSmi(result)) {
|
| + result = %_StringCharAt(TO_STRING_INLINE(this), TO_INTEGER(pos));
|
| }
|
| - return %_CharFromCode(char_code);
|
| + return result;
|
| }
|
|
|
|
|
| // ECMA-262 section 15.5.4.5
|
| function StringCharCodeAt(pos) {
|
| - var fast_answer = %_FastCharCodeAt(this, pos);
|
| - if (%_IsSmi(fast_answer)) {
|
| - return fast_answer;
|
| + var result = %_StringCharCodeAt(this, pos);
|
| + if (!%_IsSmi(result)) {
|
| + result = %_StringCharCodeAt(TO_STRING_INLINE(this), TO_INTEGER(pos));
|
| }
|
| - var subject = TO_STRING_INLINE(this);
|
| - var index = TO_INTEGER(pos);
|
| - return %StringCharCodeAt(subject, index);
|
| + return result;
|
| }
|
|
|
|
|
| @@ -214,11 +209,7 @@ function StringMatch(regexp) {
|
| function SubString(string, start, end) {
|
| // Use the one character string cache.
|
| if (start + 1 == end) {
|
| - var char_code = %_FastCharCodeAt(string, start);
|
| - if (!%_IsSmi(char_code)) {
|
| - char_code = %StringCharCodeAt(string, start);
|
| - }
|
| - return %_CharFromCode(char_code);
|
| + return %_StringCharAt(string, start);
|
| }
|
| return %_SubString(string, start, end);
|
| }
|
| @@ -322,10 +313,7 @@ function ExpandReplacement(string, subject, matchInfo, builder) {
|
| var expansion = '$';
|
| var position = next + 1;
|
| if (position < length) {
|
| - var peek = %_FastCharCodeAt(string, position);
|
| - if (!%_IsSmi(peek)) {
|
| - peek = %StringCharCodeAt(string, position);
|
| - }
|
| + var peek = %_StringCharCodeAt(string, position);
|
| if (peek == 36) { // $$
|
| ++position;
|
| builder.add('$');
|
| @@ -343,10 +331,7 @@ function ExpandReplacement(string, subject, matchInfo, builder) {
|
| ++position;
|
| var n = peek - 48;
|
| if (position < length) {
|
| - peek = %_FastCharCodeAt(string, position);
|
| - if (!%_IsSmi(peek)) {
|
| - peek = %StringCharCodeAt(string, position);
|
| - }
|
| + peek = %_StringCharCodeAt(string, position);
|
| // $nn, 01 <= nn <= 99
|
| if (n != 0 && peek == 48 || peek >= 49 && peek <= 57) {
|
| var nn = n * 10 + (peek - 48);
|
| @@ -824,7 +809,7 @@ function StringFromCharCode(code) {
|
| var n = %_ArgumentsLength();
|
| if (n == 1) {
|
| if (!%_IsSmi(code)) code = ToNumber(code);
|
| - return %_CharFromCode(code & 0xffff);
|
| + return %_StringCharFromCode(code & 0xffff);
|
| }
|
|
|
| // NOTE: This is not super-efficient, but it is necessary because we
|
|
|