28 #ifndef V8_PROPERTY_H_
29 #define V8_PROPERTY_H_
51 if (!StringShape(key_).IsSymbol()) {
52 MaybeObject* maybe_result =
HEAP->LookupSymbol(key_);
53 if (!maybe_result->To(&key_))
return maybe_result;
63 void Print(FILE* out);
67 ASSERT(PropertyDetails::IsValidIndex(index));
68 details_ = PropertyDetails(details_.attributes(), details_.type(), index);
71 bool ContainsTransition();
76 PropertyDetails details_;
99 details_(attributes, type, index) { }
132 : Descriptor(key,
Smi::FromInt(field_index), attributes,
FIELD, index) {}
152 : Descriptor(key, foreign, attributes,
CALLBACKS, index) {}
158 switch (desc->type()) {
166 Object* callback_object = desc->GetCallbackObject();
171 return (!callback_object->IsAccessorPair() ||
188 next_(isolate->top_lookup_result()),
189 lookup_type_(NOT_FOUND),
197 ASSERT(isolate_->top_lookup_result() ==
this);
198 isolate_->SetTopLookupResult(next_);
202 lookup_type_ = DESCRIPTOR_TYPE;
209 lookup_type_ = CONSTANT_TYPE;
212 PropertyDetails(static_cast<PropertyAttributes>(
DONT_ENUM |
219 lookup_type_ = DICTIONARY_TYPE;
226 lookup_type_ = HANDLER_TYPE;
233 lookup_type_ = INTERCEPTOR_TYPE;
239 lookup_type_ = NOT_FOUND;
255 return details_.type();
260 return details_.attributes();
271 bool IsFound() {
return lookup_type_ != NOT_FOUND; }
272 bool IsHandler() {
return lookup_type_ == HANDLER_TYPE; }
285 return holder()->FastPropertyAt(GetFieldIndex());
288 value = holder()->property_dictionary()->ValueAt(GetDictionaryEntry());
289 if (holder()->IsGlobalObject()) {
295 return GetConstantFunction();
303 ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
310 ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
312 return Map::cast(map->instance_descriptors()->GetValue(number_));
316 ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
318 return Descriptor::IndexFromValue(GetValue());
322 ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
324 return Descriptor::IndexFromValue(
325 map->instance_descriptors()->GetValue(number_)) -
330 ASSERT(lookup_type_ == DICTIONARY_TYPE);
340 ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
346 if (lookup_type_ == CONSTANT_TYPE) {
348 return HEAP->prototype_accessors();
354 void Print(FILE* out);
358 if (lookup_type_ == DESCRIPTOR_TYPE) {
360 return descriptors->
GetValue(number_);
363 ASSERT(lookup_type_ == DICTIONARY_TYPE);
364 return holder()->GetNormalizedProperty(
this);
367 void Iterate(ObjectVisitor* visitor);
386 PropertyDetails details_;
392 #endif // V8_PROPERTY_H_
void DescriptorResult(JSObject *holder, PropertyDetails details, int number)
void ConstantResult(JSObject *holder)
int GetLocalFieldIndexFromMap(Map *map)
int inobject_properties()
MUST_USE_RESULT MaybeObject * KeyToSymbol()
Descriptor(String *key, Object *value, PropertyAttributes attributes, PropertyType type, int index=0)
static Smi * FromInt(int value)
static AccessorPair * cast(Object *obj)
static Map * cast(Object *obj)
ConstTransitionDescriptor(String *key, Map *map)
#define ASSERT(condition)
v8::Handle< v8::Value > Print(const v8::Arguments &args)
void SetEnumerationIndex(int index)
Object * GetCallbackObject()
ConstantFunctionDescriptor(String *key, JSFunction *function, PropertyAttributes attributes, int index=0)
PropertyDetails GetPropertyDetails()
Object * GetValue(int descriptor_number)
static Smi * cast(Object *object)
bool IsPropertyDescriptor(T *desc)
MapTransitionDescriptor(String *key, Map *map, PropertyAttributes attributes)
static int IndexFromValue(Object *value)
LookupResult(Isolate *isolate)
PropertyAttributes GetAttributes()
FieldDescriptor(String *key, int field_index, PropertyAttributes attributes, int index=0)
Descriptor(String *key, Object *value, PropertyDetails details)
JSFunction * GetConstantFunctionFromMap(Map *map)
void SetTopLookupResult(LookupResult *top)
#define T(name, string, precedence)
void HandlerResult(JSProxy *proxy)
static JSGlobalPropertyCell * cast(Object *obj)
PropertyDetails DetailsAt(int entry)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
static JSProxy * cast(Object *obj)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping true
void InterceptorResult(JSObject *holder)
void DictionaryResult(JSObject *holder, int entry)
Map * GetTransitionMapFromMap(Map *map)
CallbacksDescriptor(String *key, Object *foreign, PropertyAttributes attributes, int index=0)
JSFunction * GetConstantFunction()
void Init(String *key, Object *value, PropertyDetails details)
StringDictionary * property_dictionary()
static JSObject * cast(Object *obj)
PropertyDetails GetDetails()
static JSFunction * cast(Object *obj)