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

Reply via email to