Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(725)

Unified Diff: src/objects.h

Issue 35413006: Correct handling of arrays with callbacks in the prototype chain. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Test fixes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index 6a94edd93fc88c47d4a1a1b474072d1731dd8561..9701477a4c312f117a35afc6e2be690010fb6a2d 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -2102,8 +2102,13 @@ class JSObject: public JSReceiver {
inline bool HasExternalDoubleElements();
bool HasFastArgumentsElements();
bool HasDictionaryArgumentsElements();
+ inline bool HasNonStrictArgumentsElementsMap();
inline SeededNumberDictionary* element_dictionary(); // Gets slow elements.
+ // Gets elements from the appropriate location if a normal object or a
+ // non-strict arguments object.
+ inline FixedArrayBase* GetElements();
danno 2013/10/30 12:17:45 Why is elements() not sufficient here?
+
inline bool ShouldTrackAllocationInfo();
inline void set_map_and_elements(
@@ -2497,6 +2502,14 @@ class JSObject: public JSReceiver {
MUST_USE_RESULT MaybeObject* NormalizeElements();
+ // Convert the elements backing store as a SeededNumberDictionary dictionary.
+ // Precondition: the elements aren't already a dictionary.
+ // Does not set the new elements in the object.
+ static Handle<SeededNumberDictionary> CreateNormalizedElements(
+ Handle<JSObject> object);
+
+ MUST_USE_RESULT MaybeObject* CreateNormalizedElements();
+
// Transform slow named properties to fast variants.
static void TransformToFastProperties(Handle<JSObject> object,
int unused_property_fields);
@@ -5298,6 +5311,9 @@ class Code: public HeapObject {
DECLARE_VERIFIER(Code)
void ClearInlineCaches();
+ void ClearInlineCaches(Kind* kind);
danno 2013/10/30 12:17:45 Shouldn't this one be private?
mvstanton 2013/10/30 18:22:28 Done.
+ void ClearInlineCaches(Kind kind);
+
void ClearTypeFeedbackCells(Heap* heap);
BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset);
@@ -5630,6 +5646,15 @@ class Map: public HeapObject {
class IsUnstable: public BitField<bool, 29, 1> {};
class IsMigrationTarget: public BitField<bool, 30, 1> {};
+ // Bit field 4.
+ inline uint32_t bit_field4();
+ inline void set_bit_field4(uint32_t bits);
+
+ class HasElementCallbacks: public BitField<int, 0, 1> {};
+
+ inline void set_has_element_callbacks(bool value);
+ inline bool has_element_callbacks();
+
// Tells whether the object in the prototype property will be used
// for instances created from this function. If the prototype
// property is set to a value that is not a JSObject, the prototype
@@ -5764,7 +5789,6 @@ class Map: public HeapObject {
Map* transitioned_map);
inline void SetTransition(int transition_index, Map* target);
inline Map* GetTransition(int transition_index);
-
static Handle<TransitionArray> AddTransition(Handle<Map> map,
Handle<Name> key,
Handle<Map> target,
@@ -5773,6 +5797,11 @@ class Map: public HeapObject {
MUST_USE_RESULT inline MaybeObject* AddTransition(Name* key,
Map* target,
SimpleTransitionFlag flag);
+ inline bool HasElementCallbacksTransition();
+ inline Map* element_callbacks_map();
+ MUST_USE_RESULT inline MaybeObject* set_element_callbacks_map(
+ Map* callbacks_map);
+
DECL_ACCESSORS(transitions, TransitionArray)
inline void ClearTransitions(Heap* heap,
WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
@@ -5786,6 +5815,8 @@ class Map: public HeapObject {
int NumberOfFields();
+ bool MayHaveIndexedCallbacksInPrototypeChain();
+
bool InstancesNeedRewriting(Map* target,
int target_number_of_fields,
int target_inobject,
@@ -6003,6 +6034,10 @@ class Map: public HeapObject {
MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind,
TransitionFlag flag);
+ MUST_USE_RESULT MaybeObject* CopyAsElementCallbacksTransition(
+ bool with_dictionary_elements);
+ static Handle<Map> CopyAsElementCallbacksTransition(
+ Handle<Map> map, bool with_dictionary_elements);
static Handle<Map> CopyForObserved(Handle<Map> map);
@@ -6180,7 +6215,8 @@ class Map: public HeapObject {
static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize;
static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize;
static const int kBitField3Offset = kDependentCodeOffset + kPointerSize;
- static const int kSize = kBitField3Offset + kPointerSize;
+ static const int kBitField4Offset = kBitField3Offset + kPointerSize;
+ static const int kSize = kBitField4Offset + kPointerSize;
// Layout of pointer fields. Heap iteration code relies on them
// being continuously allocated.

Powered by Google App Engine
This is Rietveld 408576698