Changes around ascii-check for strings wrt external strings.
Review URL: http://codereview.chromium.org/8312015 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9662 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
dac0b853e1
commit
d2434953e2
@ -127,8 +127,8 @@ v8::Handle<v8::Value> ExternalizeStringExtension::IsAscii(
|
||||
return v8::ThrowException(v8::String::New(
|
||||
"isAsciiString() requires a single string argument."));
|
||||
}
|
||||
return Utils::OpenHandle(*args[0].As<v8::String>())->IsAsciiRepresentation() ?
|
||||
v8::True() : v8::False();
|
||||
Handle<String> string = Utils::OpenHandle(*args[0].As<v8::String>());
|
||||
return string->IsAsciiRepresentationUnderneath() ? v8::True() : v8::False();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
seq = "123456789qwertyuiopasdfghjklzxcvbnm";
|
||||
cons = "123456789" + "qwertyuiopasdfghjklzxcvbnm";
|
||||
check = "23456789qwertyuiopasdfghjklzxcvbn";
|
||||
|
||||
assertTrue(isAsciiString(a));
|
||||
externalizeString(a, true);
|
||||
assertFalse(isAsciiString(a));
|
||||
// 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);
|
||||
|
||||
assertEquals(a.slice(1,-1), b);
|
||||
assertTrue(/3456789qwe/.test(a));
|
||||
assertEquals(5, a.indexOf("678"));
|
||||
assertEquals("12345", a.split("6")[0]);
|
||||
// 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));
|
||||
|
Loading…
Reference in New Issue
Block a user