Index: test/mjsunit/string-slices.js |
diff --git a/test/mjsunit/string-slices.js b/test/mjsunit/string-slices.js |
index 7c40229c75def951ac4379af31bf2754ae0bd5c3..2ef10c4efc08ac72134a3cd6c48f9e11f9fb0080 100755 |
--- a/test/mjsunit/string-slices.js |
+++ b/test/mjsunit/string-slices.js |
@@ -190,15 +190,33 @@ assertEquals("\u03B2\u03B3\u03B4\u03B5\u03B4\u03B5\u03B6\u03B7", |
utf.substring(5,1) + utf.substring(3,7)); |
// Externalizing strings. |
-var a = "123456789" + "qwertyuiopasdfghjklzxcvbnm"; |
-var b = "23456789qwertyuiopasdfghjklzxcvbn" |
-assertEquals(a.slice(1,-1), b); |
- |
-assertTrue(isAsciiString(a)); |
-externalizeString(a, true); |
-assertFalse(isAsciiString(a)); |
- |
-assertEquals(a.slice(1,-1), b); |
-assertTrue(/3456789qwe/.test(a)); |
-assertEquals(5, a.indexOf("678")); |
-assertEquals("12345", a.split("6")[0]); |
+seq = "123456789qwertyuiopasdfghjklzxcvbnm"; |
+cons = "123456789" + "qwertyuiopasdfghjklzxcvbnm"; |
+check = "23456789qwertyuiopasdfghjklzxcvbn"; |
+ |
+// Externalizing a sequential string changes its encoding from ascii to |
+// two-byte. The encoding of the sliced string must reflect this change too. |
+slice = seq.slice(1,-1); |
+assertEquals(check, slice); |
+ |
+// Seq strings can only be externalized once across multiple stress-opt runs. |
+if (isAsciiString(seq)) externalizeString(seq, true); |
+assertFalse(isAsciiString(seq)); |
+assertFalse(isAsciiString(slice)); |
+ |
+assertEquals(check, seq.slice(1,-1)); |
+assertEquals(check, slice); |
+assertTrue(/3456789qwe/.test(seq)); |
+assertEquals(5, seq.indexOf("678")); |
+assertEquals("12345", seq.split("6")[0]); |
+ |
+// Externalizing a cons string changes its encoding from ascii to two-byte, |
+// but the slice depending on the cons string does not, as it still points to |
+// the original cons string. |
+slice = cons.slice(1,-1); |
+assertEquals(check, slice); |
+ |
+assertTrue(isAsciiString(cons)); |
+externalizeString(cons, true); |
+assertFalse(isAsciiString(cons)); |
+assertTrue(isAsciiString(slice)); |