Reviewers: Erik Corry, Mads Ager,
Description:
More aggressive string flattening.
Please review this at http://codereview.chromium.org/2463001/show
Affected files:
M src/runtime.cc
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index
d53b13d07fca9363e9913429ded8cb084576a4c4..657d4a5bec533e40f6c3a6d5d3c0e1016c0d4538
100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -4541,7 +4541,10 @@ static Object* Runtime_StringToNumber(Arguments
args) {
NoHandleAllocation ha;
ASSERT(args.length() == 1);
CONVERT_CHECKED(String, subject, args[0]);
- subject->TryFlatten();
+
+ Object* flat_subject = subject->TryFlatten();
+ if (flat_subject->IsFailure()) return flat_subject;
+ subject = String::cast(flat_subject);
// Fast case: short integer or some sorts of junk values.
int len = subject->length();
@@ -4656,7 +4659,9 @@ static Object* Runtime_URIEscape(Arguments args) {
ASSERT(args.length() == 1);
CONVERT_CHECKED(String, source, args[0]);
- source->TryFlatten();
+ Object* flat_source = source->TryFlatten();
+ if (flat_source->IsFailure()) return flat_source;
+ source = String::cast(flat_source);
int escaped_length = 0;
int length = source->length();
@@ -4769,7 +4774,9 @@ static Object* Runtime_URIUnescape(Arguments args) {
ASSERT(args.length() == 1);
CONVERT_CHECKED(String, source, args[0]);
- source->TryFlatten();
+ Object* flat_source = source->TryFlatten();
+ if (flat_source->IsFailure()) return flat_source;
+ source = String::cast(flat_source);
bool ascii = true;
int length = source->length();
@@ -4809,7 +4816,9 @@ static Object* Runtime_StringParseInt(Arguments args)
{
CONVERT_CHECKED(String, s, args[0]);
CONVERT_SMI_CHECKED(radix, args[1]);
- s->TryFlatten();
+ Object* flat_s = s->TryFlatten();
+ if (flat_s->IsFailure()) return flat_s;
+ s = String::cast(flat_s);
RUNTIME_ASSERT(radix == 0 || (2 <= radix && radix <= 36));
double value = StringToInt(s, radix);
@@ -4989,7 +4998,10 @@ static Object* ConvertCase(
unibrow::Mapping<typename ConvertTraits::UnibrowConverter, 128>*
mapping) {
NoHandleAllocation ha;
CONVERT_CHECKED(String, s, args[0]);
- s->TryFlatten();
+
+ Object* flat_s = s->TryFlatten();
+ if (flat_s->IsFailure()) return flat_s;
+ s = String::cast(flat_s);
const int length = s->length();
// Assume that the string is not empty; we need this assumption later
@@ -5043,7 +5055,9 @@ static Object* Runtime_StringTrim(Arguments args) {
CONVERT_BOOLEAN_CHECKED(trimLeft, args[1]);
CONVERT_BOOLEAN_CHECKED(trimRight, args[2]);
- s->TryFlatten();
+ Object* flat_s = s->TryFlatten();
+ if (flat_s->IsFailure()) return flat_s;
+ s = String::cast(flat_s);
int length = s->length();
int left = 0;
@@ -5265,7 +5279,7 @@ static Object* Runtime_StringToArray(Arguments args) {
ASSERT(args.length() == 1);
CONVERT_ARG_CHECKED(String, s, 0);
- s->TryFlatten();
+ FlattenString(s);
const int length = s->length();
Handle<FixedArray> elements;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev