| Index: test/mjsunit/regress/regress-seqstrsetchar-ex1.js
|
| diff --git a/test/mjsunit/array-non-smi-length.js b/test/mjsunit/regress/regress-seqstrsetchar-ex1.js
|
| similarity index 66%
|
| copy from test/mjsunit/array-non-smi-length.js
|
| copy to test/mjsunit/regress/regress-seqstrsetchar-ex1.js
|
| index 23a25ee797bd68690ad2a7ce26a9135e23b486e2..047751328c5476852485bfa7fc0f3fde9758be2d 100644
|
| --- a/test/mjsunit/array-non-smi-length.js
|
| +++ b/test/mjsunit/regress/regress-seqstrsetchar-ex1.js
|
| @@ -27,20 +27,34 @@
|
|
|
| // Flags: --allow-natives-syntax
|
|
|
| -function TestNonSmiArrayLength() {
|
| - function f(a) {
|
| - return a.length+1;
|
| - }
|
| +// stubbed version of ToNumber
|
| +function ToNumber(x) {
|
| + return 311;
|
| +}
|
|
|
| - var a = [];
|
| - a.length = 0xFFFF;
|
| - assertSame(0x10000, f(a));
|
| - assertSame(0x10000, f(a));
|
| +// Reduced version of String.fromCharCode;
|
| +// does not actually do the same calculation but exhibits untagging bug
|
| +function StringFromCharCode(code) {
|
| + var n = %_ArgumentsLength();
|
| + var one_byte = %NewString(n, true);
|
| + var i;
|
| + for (i = 0; i < n; i++) {
|
| + var code = %_Arguments(i);
|
| + if (!%_IsSmi(code)) code = ToNumber(code) & 0xffff;
|
| + if (code > 0xff) break;
|
| + }
|
|
|
| - %OptimizeFunctionOnNextCall(f);
|
| - a.length = 0xFFFFFFFF;
|
| - assertSame(0x100000000, f(a));
|
| + var two_byte = %NewString(n - i, false);
|
| + for (var j = 0; i < n; i++, j++) {
|
| + var code = %_Arguments(i);
|
| + %_TwoByteSeqStringSetChar(two_byte, j, code);
|
| + }
|
| + return one_byte + two_byte;
|
| }
|
|
|
| -TestNonSmiArrayLength();
|
| +StringFromCharCode(0xFFF, 0xFFF);
|
| +StringFromCharCode(0x7C, 0x7C);
|
| +%OptimizeFunctionOnNextCall(StringFromCharCode);
|
| +StringFromCharCode(0x7C, 0x7C);
|
| +StringFromCharCode(0xFFF, 0xFFF);
|
|
|
|
|