| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 12d3860592b597f3480895f7f0c7932bedb4846b..910e6396577fec72e400c9a923d97845890cee8f 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -6469,9 +6469,6 @@ class Map: public HeapObject {
|
| // Casting.
|
| static inline Map* cast(Object* obj);
|
|
|
| - // Locate an accessor in the instance descriptor.
|
| - AccessorDescriptor* FindAccessor(Name* name);
|
| -
|
| // Code cache operations.
|
|
|
| // Clears the code cache.
|
| @@ -8795,6 +8792,7 @@ class Name: public HeapObject {
|
|
|
| // Equality operations.
|
| inline bool Equals(Name* other);
|
| + inline static bool Equals(Handle<Name> one, Handle<Name> two);
|
|
|
| // Conversion.
|
| inline bool AsArrayIndex(uint32_t* index);
|
| @@ -8931,28 +8929,37 @@ class String: public Name {
|
| // true.
|
| Vector<const uint8_t> ToOneByteVector() {
|
| ASSERT_EQ(ASCII, state_);
|
| - return buffer_;
|
| + return Vector<const uint8_t>(onebyte_start, length_);
|
| }
|
| // Return the two-byte content of the string. Only use if IsTwoByte()
|
| // returns true.
|
| Vector<const uc16> ToUC16Vector() {
|
| ASSERT_EQ(TWO_BYTE, state_);
|
| - return Vector<const uc16>::cast(buffer_);
|
| + return Vector<const uc16>(twobyte_start, length_);
|
| + }
|
| +
|
| + uc16 Get(int i) {
|
| + ASSERT(i < length_);
|
| + ASSERT(state_ != NON_FLAT);
|
| + if (state_ == ASCII) return onebyte_start[i];
|
| + return twobyte_start[i];
|
| }
|
|
|
| private:
|
| enum State { NON_FLAT, ASCII, TWO_BYTE };
|
|
|
| // Constructors only used by String::GetFlatContent().
|
| - explicit FlatContent(Vector<const uint8_t> chars)
|
| - : buffer_(chars),
|
| - state_(ASCII) { }
|
| - explicit FlatContent(Vector<const uc16> chars)
|
| - : buffer_(Vector<const byte>::cast(chars)),
|
| - state_(TWO_BYTE) { }
|
| - FlatContent() : buffer_(), state_(NON_FLAT) { }
|
| -
|
| - Vector<const uint8_t> buffer_;
|
| + explicit FlatContent(const uint8_t* start, int length)
|
| + : onebyte_start(start), length_(length), state_(ASCII) { }
|
| + explicit FlatContent(const uc16* start, int length)
|
| + : twobyte_start(start), length_(length), state_(TWO_BYTE) { }
|
| + FlatContent() : onebyte_start(NULL), length_(0), state_(NON_FLAT) { }
|
| +
|
| + union {
|
| + const uint8_t* onebyte_start;
|
| + const uc16* twobyte_start;
|
| + };
|
| + int length_;
|
| State state_;
|
|
|
| friend class String;
|
| @@ -8990,7 +8997,7 @@ class String: public Name {
|
| // to this method are not efficient unless the string is flat.
|
| INLINE(uint16_t Get(int index));
|
|
|
| - // Try to flatten the string. Checks first inline to see if it is
|
| + // Flattens the string. Checks first inline to see if it is
|
| // necessary. Does nothing if the string is not a cons string.
|
| // Flattening allocates a sequential string with the same data as
|
| // the given string and mutates the cons string to a degenerate
|
| @@ -9002,23 +9009,10 @@ class String: public Name {
|
| //
|
| // Degenerate cons strings are handled specially by the garbage
|
| // collector (see IsShortcutCandidate).
|
| - //
|
| - // Use FlattenString from Handles.cc to flatten even in case an
|
| - // allocation failure happens.
|
| - inline MaybeObject* TryFlatten(PretenureFlag pretenure = NOT_TENURED);
|
| -
|
| - // Convenience function. Has exactly the same behavior as
|
| - // TryFlatten(), except in the case of failure returns the original
|
| - // string.
|
| - inline String* TryFlattenGetString(PretenureFlag pretenure = NOT_TENURED);
|
|
|
| static inline Handle<String> Flatten(Handle<String> string,
|
| PretenureFlag pretenure = NOT_TENURED);
|
|
|
| - static Handle<String> SlowFlatten(Handle<ConsString> cons,
|
| - PretenureFlag tenure);
|
| -
|
| -
|
| // Tries to return the content of a flat string as a structure holding either
|
| // a flat vector of char or of uc16.
|
| // If the string isn't flat, and therefore doesn't have flat content, the
|
| @@ -9036,6 +9030,7 @@ class String: public Name {
|
|
|
| // String equality operations.
|
| inline bool Equals(String* other);
|
| + inline static bool Equals(Handle<String> one, Handle<String> two);
|
| bool IsUtf8EqualTo(Vector<const char> str, bool allow_prefix_match = false);
|
| bool IsOneByteEqualTo(Vector<const uint8_t> str);
|
| bool IsTwoByteEqualTo(Vector<const uc16> str);
|
| @@ -9206,15 +9201,15 @@ class String: public Name {
|
| private:
|
| friend class Name;
|
|
|
| - // Try to flatten the top level ConsString that is hiding behind this
|
| - // string. This is a no-op unless the string is a ConsString. Flatten
|
| - // mutates the ConsString and might return a failure.
|
| - MUST_USE_RESULT MaybeObject* SlowTryFlatten(PretenureFlag pretenure);
|
| + static Handle<String> SlowFlatten(Handle<ConsString> cons,
|
| + PretenureFlag tenure);
|
|
|
| // Slow case of String::Equals. This implementation works on any strings
|
| // but it is most efficient on strings that are almost flat.
|
| bool SlowEquals(String* other);
|
|
|
| + static bool SlowEquals(Handle<String> one, Handle<String> two);
|
| +
|
| // Slow case of AsArrayIndex.
|
| bool SlowAsArrayIndex(uint32_t* index);
|
|
|
|
|