1ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 2ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 3ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_PROPERTY_H_ 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_PROPERTY_H_ 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/factory.h" 9e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org#include "src/field-index.h" 10e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org#include "src/field-index-inl.h" 114b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/isolate.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/types.h" 131c09276ce2ac5214e81ca554360b9f101187893blrn@chromium.org 1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass OStream; 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Abstraction for elements in instance-descriptor arrays. 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Each descriptor has a key, property attributes, property type, 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// property index (in the actual instance-descriptor array) and 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// optionally a piece of data. 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass Descriptor BASE_EMBEDDED { 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 265b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org void KeyToUniqueName() { 27750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org if (!key_->IsUniqueName()) { 285b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org key_ = key_->GetIsolate()->factory()->InternalizeString( 295b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<String>::cast(key_)); 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org Handle<Name> GetKey() const { return key_; } 34f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org Handle<Object> GetValue() const { return value_; } 35f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org PropertyDetails GetDetails() const { return details_; } 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); } 3846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 405b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<Name> key_; 415b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<Object> value_; 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyDetails details_; 4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Descriptor() : details_(Smi::FromInt(0)) {} 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 475b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org void Init(Handle<Name> key, Handle<Object> value, PropertyDetails details) { 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen key_ = key; 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen value_ = value; 5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen details_ = details; 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 535b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Descriptor(Handle<Name> key, Handle<Object> value, PropertyDetails details) 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : key_(key), 5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen value_(value), 5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen details_(details) { } 5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 585b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Descriptor(Handle<Name> key, 595b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<Object> value, 6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyAttributes attributes, 6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyType type, 6279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org Representation representation, 6379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org int field_index = 0) 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : key_(key), 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen value_(value), 6679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org details_(attributes, type, representation, field_index) { } 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen friend class DescriptorArray; 69a70700b91bc28abeed6373b856017f7f9cc8273bmachenbach@chromium.org friend class Map; 7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 73f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.orgOStream& operator<<(OStream& os, const Descriptor& d); 74f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 75f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 76ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass FieldDescriptor FINAL : public Descriptor { 7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 785b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org FieldDescriptor(Handle<Name> key, 7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int field_index, 8043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyAttributes attributes, 8157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Representation representation) 82e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org : Descriptor(key, HeapType::Any(key->GetIsolate()), attributes, 8379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org FIELD, representation, field_index) {} 84e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org FieldDescriptor(Handle<Name> key, 85e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org int field_index, 86e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org Handle<HeapType> field_type, 87e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org PropertyAttributes attributes, 88e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org Representation representation) 89e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org : Descriptor(key, field_type, attributes, FIELD, 90e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org representation, field_index) { } 9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass ConstantDescriptor FINAL : public Descriptor { 9543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 965b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org ConstantDescriptor(Handle<Name> key, 975b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<Object> value, 98fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org PropertyAttributes attributes) 99fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org : Descriptor(key, value, attributes, CONSTANT, 100fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org value->OptimalRepresentation()) {} 10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass CallbacksDescriptor FINAL : public Descriptor { 10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 1065b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org CallbacksDescriptor(Handle<Name> key, 1075b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org Handle<Object> foreign, 10857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org PropertyAttributes attributes) 109f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org : Descriptor(key, foreign, attributes, CALLBACKS, 11057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org Representation::Tagged()) {} 11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 114ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass LookupResult FINAL BASE_EMBEDDED { 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 116394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com explicit LookupResult(Isolate* isolate) 117394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com : isolate_(isolate), 118394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com next_(isolate->top_lookup_result()), 119394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com lookup_type_(NOT_FOUND), 120394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com holder_(NULL), 121bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org transition_(NULL), 122f1a5a1dc668380a183184ee7629703846eefcfaemachenbach@chromium.org details_(NONE, NORMAL, Representation::None()) { 123f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org isolate->set_top_lookup_result(this); 124394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 125394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 126394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ~LookupResult() { 127e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(isolate()->top_lookup_result() == this); 128f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org isolate()->set_top_lookup_result(next_); 129394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1318432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org Isolate* isolate() const { return isolate_; } 1328432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.org 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void DescriptorResult(JSObject* holder, PropertyDetails details, int number) { 13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen lookup_type_ = DESCRIPTOR_TYPE; 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen holder_ = holder; 136f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org transition_ = NULL; 13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen details_ = details; 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen number_ = number; 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org void TransitionResult(JSObject* holder, Map* target) { 14299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org lookup_type_ = TRANSITION_TYPE; 1438f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org number_ = target->LastAdded(); 1448f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org details_ = target->instance_descriptors()->GetDetails(number_); 14599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org holder_ = holder; 146bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org transition_ = target; 14799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 14899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void NotFound() { 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen lookup_type_ = NOT_FOUND; 151f1a5a1dc668380a183184ee7629703846eefcfaemachenbach@chromium.org details_ = PropertyDetails(NONE, NORMAL, Representation::None()); 152394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com holder_ = NULL; 153f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org transition_ = NULL; 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 156f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org Representation representation() const { 157e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(IsFound()); 158f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return details_.representation(); 159f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org } 160f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 16199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org // Property callbacks does not include transitions to callbacks. 162f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsPropertyCallbacks() const { 163e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!(details_.type() == CALLBACKS && !IsFound())); 1648f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org return !IsTransition() && details_.type() == CALLBACKS; 165de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org } 166de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 167f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsReadOnly() const { 168e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(IsFound()); 16999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return details_.IsReadOnly(); 170de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org } 171de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 172f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsField() const { 173e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!(details_.type() == FIELD && !IsFound())); 174fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org return lookup_type_ == DESCRIPTOR_TYPE && details_.type() == FIELD; 175de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org } 176de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 177f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsConstant() const { 178e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(!(details_.type() == CONSTANT && !IsFound())); 179fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org return lookup_type_ == DESCRIPTOR_TYPE && details_.type() == CONSTANT; 180fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org } 181fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 182f1a5a1dc668380a183184ee7629703846eefcfaemachenbach@chromium.org bool IsConfigurable() const { return details_.IsConfigurable(); } 183f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsFound() const { return lookup_type_ != NOT_FOUND; } 184f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsTransition() const { return lookup_type_ == TRANSITION_TYPE; } 18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1869a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org // Is the result is a property excluding transitions and the null descriptor? 187f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsProperty() const { 18899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return IsFound() && !IsTransition(); 1895c838251403b0be9a882540f1922577abba4c872ager@chromium.org } 1905c838251403b0be9a882540f1922577abba4c872ager@chromium.org 191f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org Map* GetTransitionTarget() const { 192e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(IsTransition()); 1938f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org return transition_; 19499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 19599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 196f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool IsTransitionToField() const { 1978f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org return IsTransition() && details_.type() == FIELD; 198b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org } 199b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org 200f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org int GetLocalFieldIndexFromMap(Map* map) const { 20179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org return GetFieldIndexFromMap(map) - map->inobject_properties(); 202a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 203a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 204f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org Object* GetConstantFromMap(Map* map) const { 205fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org DCHECK(details_.type() == CONSTANT); 206fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return GetValueFromMap(map); 207fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org } 208fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 20999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org Object* GetValueFromMap(Map* map) const { 210e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(lookup_type_ == DESCRIPTOR_TYPE || 2118f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org lookup_type_ == TRANSITION_TYPE); 212e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(number_ < map->NumberOfOwnDescriptors()); 21399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return map->instance_descriptors()->GetValue(number_); 21499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 21599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 21679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org int GetFieldIndexFromMap(Map* map) const { 217e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(lookup_type_ == DESCRIPTOR_TYPE || 2188f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org lookup_type_ == TRANSITION_TYPE); 219e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(number_ < map->NumberOfOwnDescriptors()); 22079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org return map->instance_descriptors()->GetFieldIndex(number_); 22179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org } 22279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 223e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org HeapType* GetFieldTypeFromMap(Map* map) const { 224fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org DCHECK_NE(NOT_FOUND, lookup_type_); 225e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(number_ < map->NumberOfOwnDescriptors()); 226e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return map->instance_descriptors()->GetFieldType(number_); 227e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org } 228e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 229e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org Map* GetFieldOwnerFromMap(Map* map) const { 230e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(lookup_type_ == DESCRIPTOR_TYPE || 231e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org lookup_type_ == TRANSITION_TYPE); 232e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(number_ < map->NumberOfOwnDescriptors()); 233e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return map->FindFieldOwner(number_); 234e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org } 235e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 236394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com void Iterate(ObjectVisitor* visitor); 237394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 239394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com Isolate* isolate_; 240394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com LookupResult* next_; 241394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 242c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org // Where did we find the result; 243fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org enum { NOT_FOUND, DESCRIPTOR_TYPE, TRANSITION_TYPE } lookup_type_; 244c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org 245c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com JSReceiver* holder_; 246bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org Map* transition_; 24743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int number_; 24843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen PropertyDetails details_; 24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 251f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org 252f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.orgOStream& operator<<(OStream& os, const LookupResult& r); 25343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 25443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // V8_PROPERTY_H_ 256