Index: src/objects-inl.h |
=================================================================== |
--- src/objects-inl.h (revision 4699) |
+++ src/objects-inl.h (working copy) |
@@ -1691,13 +1691,19 @@ |
Object* String::TryFlatten(PretenureFlag pretenure) { |
- // We don't need to flatten strings that are already flat. Since this code |
- // is inlined, it can be helpful in the flat case to not call out to Flatten. |
- if (IsFlat()) return this; |
+ if (!StringShape(this).IsCons()) return this; |
+ ConsString* cons = ConsString::cast(this); |
+ if (cons->second()->length() == 0) return cons->first(); |
return SlowTryFlatten(pretenure); |
} |
+String* String::TryFlattenGetString(PretenureFlag pretenure) { |
+ Object* flat = TryFlatten(pretenure); |
+ return flat->IsFailure() ? this : String::cast(flat); |
+} |
+ |
+ |
uint16_t String::Get(int index) { |
ASSERT(index >= 0 && index < length()); |
switch (StringShape(this).full_representation_tag()) { |