Changeset 154300 in webkit for trunk/Source/JavaScriptCore/runtime/JSObject.cpp
- Timestamp:
- Aug 19, 2013, 2:44:17 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSObject.cpp
r154253 r154300 2382 2382 } 2383 2383 2384 bool JSObject::getOwnPropertyDescriptor(JSObject* object, ExecState* exec, PropertyName propertyName, PropertyDescriptor& descriptor) 2385 { 2386 unsigned attributes = 0; 2387 JSCell* cell = 0; 2388 PropertyOffset offset = object->structure()->get(exec->vm(), propertyName, attributes, cell); 2389 if (isValidOffset(offset)) { 2390 descriptor.setDescriptor(object->getDirect(offset), attributes); 2391 return true; 2392 } 2393 2394 unsigned i = propertyName.asIndex(); 2395 if (i == PropertyName::NotAnIndex) 2396 return false; 2397 2398 switch (object->structure()->indexingType()) { 2399 case ALL_BLANK_INDEXING_TYPES: 2400 case ALL_UNDECIDED_INDEXING_TYPES: 2401 return false; 2402 2403 case ALL_INT32_INDEXING_TYPES: 2404 case ALL_CONTIGUOUS_INDEXING_TYPES: { 2405 Butterfly* butterfly = object->m_butterfly; 2406 if (i >= butterfly->vectorLength()) 2407 return false; 2408 JSValue value = butterfly->contiguous()[i].get(); 2409 if (!value) 2410 return false; 2411 descriptor.setDescriptor(value, 0); 2412 return true; 2413 } 2414 2415 case ALL_DOUBLE_INDEXING_TYPES: { 2416 Butterfly* butterfly = object->m_butterfly; 2417 if (i >= butterfly->vectorLength()) 2418 return false; 2419 double value = butterfly->contiguousDouble()[i]; 2420 if (value != value) 2421 return false; 2422 descriptor.setDescriptor(JSValue(JSValue::EncodeAsDouble, value), 0); 2423 return true; 2424 } 2425 2426 case ALL_ARRAY_STORAGE_INDEXING_TYPES: { 2427 ArrayStorage* storage = object->m_butterfly->arrayStorage(); 2428 if (i >= storage->length()) 2429 return false; 2430 if (i < storage->vectorLength()) { 2431 WriteBarrier<Unknown>& value = storage->m_vector[i]; 2432 if (!value) 2433 return false; 2434 descriptor.setDescriptor(value.get(), 0); 2435 return true; 2436 } 2437 if (SparseArrayValueMap* map = storage->m_sparseMap.get()) { 2438 SparseArrayValueMap::iterator it = map->find(i); 2439 if (it == map->notFound()) 2440 return false; 2441 it->value.get(descriptor); 2442 return true; 2443 } 2444 return false; 2445 } 2446 2447 default: 2448 RELEASE_ASSERT_NOT_REACHED(); 2449 return false; 2450 } 2451 } 2384 GET_OWN_PROPERTY_DESCRIPTOR_IMPL(JSObject) 2452 2385 2453 2386 bool JSObject::getPropertyDescriptor(ExecState* exec, PropertyName propertyName, PropertyDescriptor& descriptor)
Note:
See TracChangeset
for help on using the changeset viewer.