()
| 36 | %NeverOptimizeFunction(dont_inline2); |
| 37 | |
| 38 | function test() { |
| 39 | var str = ""; |
| 40 | |
| 41 | // Build an ascii cons string. |
| 42 | for (var i = 0; i < size; i++) { |
| 43 | str += String.fromCharCode(i & 0x7f); |
| 44 | } |
| 45 | assertTrue(isOneByteString(str)); |
| 46 | |
| 47 | var realTwoByteExternalString = |
| 48 | createExternalizableString('\u1234\u1234\u1234\u1234' + dont_inline2()); |
| 49 | externalizeString(realTwoByteExternalString); |
| 50 | assertFalse(isOneByteString(realTwoByteExternalString)); |
| 51 | |
| 52 | assertFalse(isOneByteString(["a", realTwoByteExternalString].join(""))); |
| 53 | |
| 54 | // Appending a real two-byte string should produce a two-byte cons. |
| 55 | var str2 = str + realTwoByteExternalString; |
| 56 | assertFalse(isOneByteString(str2)); |
| 57 | |
| 58 | // Force flattening of the string. |
| 59 | old_length = str2.length - realTwoByteExternalString.length; |
| 60 | for (var i = 0; i < old_length; i++) { |
| 61 | assertEquals(String.fromCharCode(i & 0x7f), str2[i]); |
| 62 | } |
| 63 | for (var i = old_length; i < str.length; i++) { |
| 64 | assertEquals("\u1234", str2[i]); |
| 65 | } |
| 66 | |
| 67 | // Flattened string should still be two-byte. |
| 68 | assertFalse(isOneByteString(str2)); |
| 69 | } |
| 70 | |
| 71 | // Run the test many times to ensure IC-s don't break things. |
| 72 | for (var i = 0; i < 10; i++) { |
no test coverage detected
searching dependent graphs…