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); |