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

Side by Side Diff: src/objects.cc

Issue 647015: Remove the LookupResult IsValid method because it is confusing.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ic.cc ('k') | src/property.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 return *result; 212 return *result;
213 } 213 }
214 214
215 215
216 // Only deal with CALLBACKS and INTERCEPTOR 216 // Only deal with CALLBACKS and INTERCEPTOR
217 Object* JSObject::GetPropertyWithFailedAccessCheck( 217 Object* JSObject::GetPropertyWithFailedAccessCheck(
218 Object* receiver, 218 Object* receiver,
219 LookupResult* result, 219 LookupResult* result,
220 String* name, 220 String* name,
221 PropertyAttributes* attributes) { 221 PropertyAttributes* attributes) {
222 if (result->IsValid()) { 222 if (result->IsProperty()) {
223 switch (result->type()) { 223 switch (result->type()) {
224 case CALLBACKS: { 224 case CALLBACKS: {
225 // Only allow API accessors. 225 // Only allow API accessors.
226 Object* obj = result->GetCallbackObject(); 226 Object* obj = result->GetCallbackObject();
227 if (obj->IsAccessorInfo()) { 227 if (obj->IsAccessorInfo()) {
228 AccessorInfo* info = AccessorInfo::cast(obj); 228 AccessorInfo* info = AccessorInfo::cast(obj);
229 if (info->all_can_read()) { 229 if (info->all_can_read()) {
230 *attributes = result->GetAttributes(); 230 *attributes = result->GetAttributes();
231 return GetPropertyWithCallback(receiver, 231 return GetPropertyWithCallback(receiver,
232 result->GetCallbackObject(), 232 result->GetCallbackObject(),
233 name, 233 name,
234 result->holder()); 234 result->holder());
235 } 235 }
236 } 236 }
237 break; 237 break;
238 } 238 }
239 case NORMAL: 239 case NORMAL:
240 case FIELD: 240 case FIELD:
241 case CONSTANT_FUNCTION: { 241 case CONSTANT_FUNCTION: {
242 // Search ALL_CAN_READ accessors in prototype chain. 242 // Search ALL_CAN_READ accessors in prototype chain.
243 LookupResult r; 243 LookupResult r;
244 result->holder()->LookupRealNamedPropertyInPrototypes(name, &r); 244 result->holder()->LookupRealNamedPropertyInPrototypes(name, &r);
245 if (r.IsValid()) { 245 if (r.IsProperty()) {
246 return GetPropertyWithFailedAccessCheck(receiver, 246 return GetPropertyWithFailedAccessCheck(receiver,
247 &r, 247 &r,
248 name, 248 name,
249 attributes); 249 attributes);
250 } 250 }
251 break; 251 break;
252 } 252 }
253 case INTERCEPTOR: { 253 case INTERCEPTOR: {
254 // If the object has an interceptor, try real named properties. 254 // If the object has an interceptor, try real named properties.
255 // No access check in GetPropertyAttributeWithInterceptor. 255 // No access check in GetPropertyAttributeWithInterceptor.
256 LookupResult r; 256 LookupResult r;
257 result->holder()->LookupRealNamedProperty(name, &r); 257 result->holder()->LookupRealNamedProperty(name, &r);
258 if (r.IsValid()) { 258 if (r.IsProperty()) {
259 return GetPropertyWithFailedAccessCheck(receiver, 259 return GetPropertyWithFailedAccessCheck(receiver,
260 &r, 260 &r,
261 name, 261 name,
262 attributes); 262 attributes);
263 } 263 }
264 } 264 }
265 default: { 265 default:
266 break; 266 UNREACHABLE();
267 }
268 } 267 }
269 } 268 }
270 269
271 // No accessible property found. 270 // No accessible property found.
272 *attributes = ABSENT; 271 *attributes = ABSENT;
273 Top::ReportFailedAccessCheck(this, v8::ACCESS_GET); 272 Top::ReportFailedAccessCheck(this, v8::ACCESS_GET);
274 return Heap::undefined_value(); 273 return Heap::undefined_value();
275 } 274 }
276 275
277 276
278 PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck( 277 PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
279 Object* receiver, 278 Object* receiver,
280 LookupResult* result, 279 LookupResult* result,
281 String* name, 280 String* name,
282 bool continue_search) { 281 bool continue_search) {
283 if (result->IsValid()) { 282 if (result->IsProperty()) {
284 switch (result->type()) { 283 switch (result->type()) {
285 case CALLBACKS: { 284 case CALLBACKS: {
286 // Only allow API accessors. 285 // Only allow API accessors.
287 Object* obj = result->GetCallbackObject(); 286 Object* obj = result->GetCallbackObject();
288 if (obj->IsAccessorInfo()) { 287 if (obj->IsAccessorInfo()) {
289 AccessorInfo* info = AccessorInfo::cast(obj); 288 AccessorInfo* info = AccessorInfo::cast(obj);
290 if (info->all_can_read()) { 289 if (info->all_can_read()) {
291 return result->GetAttributes(); 290 return result->GetAttributes();
292 } 291 }
293 } 292 }
294 break; 293 break;
295 } 294 }
296 295
297 case NORMAL: 296 case NORMAL:
298 case FIELD: 297 case FIELD:
299 case CONSTANT_FUNCTION: { 298 case CONSTANT_FUNCTION: {
300 if (!continue_search) break; 299 if (!continue_search) break;
301 // Search ALL_CAN_READ accessors in prototype chain. 300 // Search ALL_CAN_READ accessors in prototype chain.
302 LookupResult r; 301 LookupResult r;
303 result->holder()->LookupRealNamedPropertyInPrototypes(name, &r); 302 result->holder()->LookupRealNamedPropertyInPrototypes(name, &r);
304 if (r.IsValid()) { 303 if (r.IsProperty()) {
305 return GetPropertyAttributeWithFailedAccessCheck(receiver, 304 return GetPropertyAttributeWithFailedAccessCheck(receiver,
306 &r, 305 &r,
307 name, 306 name,
308 continue_search); 307 continue_search);
309 } 308 }
310 break; 309 break;
311 } 310 }
312 311
313 case INTERCEPTOR: { 312 case INTERCEPTOR: {
314 // If the object has an interceptor, try real named properties. 313 // If the object has an interceptor, try real named properties.
315 // No access check in GetPropertyAttributeWithInterceptor. 314 // No access check in GetPropertyAttributeWithInterceptor.
316 LookupResult r; 315 LookupResult r;
317 if (continue_search) { 316 if (continue_search) {
318 result->holder()->LookupRealNamedProperty(name, &r); 317 result->holder()->LookupRealNamedProperty(name, &r);
319 } else { 318 } else {
320 result->holder()->LocalLookupRealNamedProperty(name, &r); 319 result->holder()->LocalLookupRealNamedProperty(name, &r);
321 } 320 }
322 if (r.IsValid()) { 321 if (r.IsProperty()) {
323 return GetPropertyAttributeWithFailedAccessCheck(receiver, 322 return GetPropertyAttributeWithFailedAccessCheck(receiver,
324 &r, 323 &r,
325 name, 324 name,
326 continue_search); 325 continue_search);
327 } 326 }
328 break; 327 break;
329 } 328 }
330 329
331 default: { 330 default:
332 break; 331 UNREACHABLE();
333 }
334 } 332 }
335 } 333 }
336 334
337 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS); 335 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS);
338 return ABSENT; 336 return ABSENT;
339 } 337 }
340 338
341 339
342 Object* JSObject::GetLazyProperty(Object* receiver, 340 Object* JSObject::GetLazyProperty(Object* receiver,
343 LookupResult* result, 341 LookupResult* result,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 // Make sure that the top context does not change when doing 496 // Make sure that the top context does not change when doing
499 // callbacks or interceptor calls. 497 // callbacks or interceptor calls.
500 AssertNoContextChange ncc; 498 AssertNoContextChange ncc;
501 499
502 // Traverse the prototype chain from the current object (this) to 500 // Traverse the prototype chain from the current object (this) to
503 // the holder and check for access rights. This avoid traversing the 501 // the holder and check for access rights. This avoid traversing the
504 // objects more than once in case of interceptors, because the 502 // objects more than once in case of interceptors, because the
505 // holder will always be the interceptor holder and the search may 503 // holder will always be the interceptor holder and the search may
506 // only continue with a current object just after the interceptor 504 // only continue with a current object just after the interceptor
507 // holder in the prototype chain. 505 // holder in the prototype chain.
508 Object* last = result->IsValid() ? result->holder() : Heap::null_value(); 506 Object* last = result->IsProperty() ? result->holder() : Heap::null_value();
509 for (Object* current = this; true; current = current->GetPrototype()) { 507 for (Object* current = this; true; current = current->GetPrototype()) {
510 if (current->IsAccessCheckNeeded()) { 508 if (current->IsAccessCheckNeeded()) {
511 // Check if we're allowed to read from the current object. Note 509 // Check if we're allowed to read from the current object. Note
512 // that even though we may not actually end up loading the named 510 // that even though we may not actually end up loading the named
513 // property from the current object, we still check that we have 511 // property from the current object, we still check that we have
514 // access to it. 512 // access to it.
515 JSObject* checked = JSObject::cast(current); 513 JSObject* checked = JSObject::cast(current);
516 if (!Top::MayNamedAccess(checked, name, v8::ACCESS_GET)) { 514 if (!Top::MayNamedAccess(checked, name, v8::ACCESS_GET)) {
517 return checked->GetPropertyWithFailedAccessCheck(receiver, 515 return checked->GetPropertyWithFailedAccessCheck(receiver,
518 result, 516 result,
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 return AddSlowProperty(name, value, attributes); 1454 return AddSlowProperty(name, value, attributes);
1457 } 1455 }
1458 1456
1459 1457
1460 Object* JSObject::SetPropertyPostInterceptor(String* name, 1458 Object* JSObject::SetPropertyPostInterceptor(String* name,
1461 Object* value, 1459 Object* value,
1462 PropertyAttributes attributes) { 1460 PropertyAttributes attributes) {
1463 // Check local property, ignore interceptor. 1461 // Check local property, ignore interceptor.
1464 LookupResult result; 1462 LookupResult result;
1465 LocalLookupRealNamedProperty(name, &result); 1463 LocalLookupRealNamedProperty(name, &result);
1466 if (result.IsValid()) return SetProperty(&result, name, value, attributes); 1464 if (result.IsFound()) {
1467 // Add real property. 1465 // An existing property, a map transition or a null descriptor was
1466 // found. Use set property to handle all these cases.
1467 return SetProperty(&result, name, value, attributes);
1468 }
1469 // Add a new real property.
1468 return AddProperty(name, value, attributes); 1470 return AddProperty(name, value, attributes);
1469 } 1471 }
1470 1472
1471 1473
1472 Object* JSObject::ReplaceSlowProperty(String* name, 1474 Object* JSObject::ReplaceSlowProperty(String* name,
1473 Object* value, 1475 Object* value,
1474 PropertyAttributes attributes) { 1476 PropertyAttributes attributes) {
1475 StringDictionary* dictionary = property_dictionary(); 1477 StringDictionary* dictionary = property_dictionary();
1476 int old_index = dictionary->FindEntry(name); 1478 int old_index = dictionary->FindEntry(name);
1477 int new_enumeration_index = 0; // 0 means "Use the next available index." 1479 int new_enumeration_index = 0; // 0 means "Use the next available index."
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1689 return *value_handle; 1691 return *value_handle;
1690 } 1692 }
1691 1693
1692 1694
1693 void JSObject::LookupCallbackSetterInPrototypes(String* name, 1695 void JSObject::LookupCallbackSetterInPrototypes(String* name,
1694 LookupResult* result) { 1696 LookupResult* result) {
1695 for (Object* pt = GetPrototype(); 1697 for (Object* pt = GetPrototype();
1696 pt != Heap::null_value(); 1698 pt != Heap::null_value();
1697 pt = pt->GetPrototype()) { 1699 pt = pt->GetPrototype()) {
1698 JSObject::cast(pt)->LocalLookupRealNamedProperty(name, result); 1700 JSObject::cast(pt)->LocalLookupRealNamedProperty(name, result);
1699 if (result->IsValid()) { 1701 if (result->IsProperty()) {
1700 if (!result->IsTransitionType() && result->IsReadOnly()) { 1702 if (result->IsReadOnly()) {
1701 result->NotFound(); 1703 result->NotFound();
1702 return; 1704 return;
1703 } 1705 }
1704 if (result->type() == CALLBACKS) { 1706 if (result->type() == CALLBACKS) {
1705 return; 1707 return;
1706 } 1708 }
1707 } 1709 }
1708 } 1710 }
1709 result->NotFound(); 1711 result->NotFound();
1710 } 1712 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 LookupResult* result) { 1753 LookupResult* result) {
1752 if (IsJSGlobalProxy()) { 1754 if (IsJSGlobalProxy()) {
1753 Object* proto = GetPrototype(); 1755 Object* proto = GetPrototype();
1754 if (proto->IsNull()) return result->NotFound(); 1756 if (proto->IsNull()) return result->NotFound();
1755 ASSERT(proto->IsJSGlobalObject()); 1757 ASSERT(proto->IsJSGlobalObject());
1756 return JSObject::cast(proto)->LocalLookupRealNamedProperty(name, result); 1758 return JSObject::cast(proto)->LocalLookupRealNamedProperty(name, result);
1757 } 1759 }
1758 1760
1759 if (HasFastProperties()) { 1761 if (HasFastProperties()) {
1760 LookupInDescriptor(name, result); 1762 LookupInDescriptor(name, result);
1761 if (result->IsValid()) { 1763 if (result->IsFound()) {
1764 // A property, a map transition or a null descriptor was found.
1765 // We return all of these result types because
1766 // LocalLookupRealNamedProperty is used when setting properties
1767 // where map transitions and null descriptors are handled.
1762 ASSERT(result->holder() == this && result->type() != NORMAL); 1768 ASSERT(result->holder() == this && result->type() != NORMAL);
1763 // Disallow caching for uninitialized constants. These can only 1769 // Disallow caching for uninitialized constants. These can only
1764 // occur as fields. 1770 // occur as fields.
1765 if (result->IsReadOnly() && result->type() == FIELD && 1771 if (result->IsReadOnly() && result->type() == FIELD &&
1766 FastPropertyAt(result->GetFieldIndex())->IsTheHole()) { 1772 FastPropertyAt(result->GetFieldIndex())->IsTheHole()) {
1767 result->DisallowCaching(); 1773 result->DisallowCaching();
1768 } 1774 }
1769 return; 1775 return;
1770 } 1776 }
1771 } else { 1777 } else {
(...skipping 29 matching lines...) Expand all
1801 LookupRealNamedPropertyInPrototypes(name, result); 1807 LookupRealNamedPropertyInPrototypes(name, result);
1802 } 1808 }
1803 1809
1804 1810
1805 void JSObject::LookupRealNamedPropertyInPrototypes(String* name, 1811 void JSObject::LookupRealNamedPropertyInPrototypes(String* name,
1806 LookupResult* result) { 1812 LookupResult* result) {
1807 for (Object* pt = GetPrototype(); 1813 for (Object* pt = GetPrototype();
1808 pt != Heap::null_value(); 1814 pt != Heap::null_value();
1809 pt = JSObject::cast(pt)->GetPrototype()) { 1815 pt = JSObject::cast(pt)->GetPrototype()) {
1810 JSObject::cast(pt)->LocalLookupRealNamedProperty(name, result); 1816 JSObject::cast(pt)->LocalLookupRealNamedProperty(name, result);
1811 if (result->IsValid()) { 1817 if (result->IsProperty() && (result->type() != INTERCEPTOR)) return;
1812 switch (result->type()) {
1813 case NORMAL:
1814 case FIELD:
1815 case CONSTANT_FUNCTION:
1816 case CALLBACKS:
1817 return;
1818 default: break;
1819 }
1820 }
1821 } 1818 }
1822 result->NotFound(); 1819 result->NotFound();
1823 } 1820 }
1824 1821
1825 1822
1826 // We only need to deal with CALLBACKS and INTERCEPTORS 1823 // We only need to deal with CALLBACKS and INTERCEPTORS
1827 Object* JSObject::SetPropertyWithFailedAccessCheck(LookupResult* result, 1824 Object* JSObject::SetPropertyWithFailedAccessCheck(LookupResult* result,
1828 String* name, 1825 String* name,
1829 Object* value) { 1826 Object* value) {
1830 if (!result->IsProperty()) { 1827 if (!result->IsProperty()) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 if (proto->IsNull()) return value; 1893 if (proto->IsNull()) return value;
1897 ASSERT(proto->IsJSGlobalObject()); 1894 ASSERT(proto->IsJSGlobalObject());
1898 return JSObject::cast(proto)->SetProperty(result, name, value, attributes); 1895 return JSObject::cast(proto)->SetProperty(result, name, value, attributes);
1899 } 1896 }
1900 1897
1901 if (!result->IsProperty() && !IsJSContextExtensionObject()) { 1898 if (!result->IsProperty() && !IsJSContextExtensionObject()) {
1902 // We could not find a local property so let's check whether there is an 1899 // We could not find a local property so let's check whether there is an
1903 // accessor that wants to handle the property. 1900 // accessor that wants to handle the property.
1904 LookupResult accessor_result; 1901 LookupResult accessor_result;
1905 LookupCallbackSetterInPrototypes(name, &accessor_result); 1902 LookupCallbackSetterInPrototypes(name, &accessor_result);
1906 if (accessor_result.IsValid()) { 1903 if (accessor_result.IsProperty()) {
1907 return SetPropertyWithCallback(accessor_result.GetCallbackObject(), 1904 return SetPropertyWithCallback(accessor_result.GetCallbackObject(),
1908 name, 1905 name,
1909 value, 1906 value,
1910 accessor_result.holder()); 1907 accessor_result.holder());
1911 } 1908 }
1912 } 1909 }
1913 if (result->IsNotFound()) { 1910 if (!result->IsFound()) {
1911 // Neither properties nor transitions found.
1914 return AddProperty(name, value, attributes); 1912 return AddProperty(name, value, attributes);
1915 } 1913 }
1916 if (!result->IsLoaded()) { 1914 if (!result->IsLoaded()) {
1917 return SetLazyProperty(result, name, value, attributes); 1915 return SetLazyProperty(result, name, value, attributes);
1918 } 1916 }
1919 if (result->IsReadOnly() && result->IsProperty()) return value; 1917 if (result->IsReadOnly() && result->IsProperty()) return value;
1920 // This is a real property that is not read-only, or it is a 1918 // This is a real property that is not read-only, or it is a
1921 // transition or null descriptor and there are no setters in the prototypes. 1919 // transition or null descriptor and there are no setters in the prototypes.
1922 switch (result->type()) { 1920 switch (result->type()) {
1923 case NORMAL: 1921 case NORMAL:
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 // callback setter removed. The two lines looking up the LookupResult 1963 // callback setter removed. The two lines looking up the LookupResult
1966 // result are also added. If one of the functions is changed, the other 1964 // result are also added. If one of the functions is changed, the other
1967 // should be. 1965 // should be.
1968 Object* JSObject::IgnoreAttributesAndSetLocalProperty( 1966 Object* JSObject::IgnoreAttributesAndSetLocalProperty(
1969 String* name, 1967 String* name,
1970 Object* value, 1968 Object* value,
1971 PropertyAttributes attributes) { 1969 PropertyAttributes attributes) {
1972 // Make sure that the top context does not change when doing callbacks or 1970 // Make sure that the top context does not change when doing callbacks or
1973 // interceptor calls. 1971 // interceptor calls.
1974 AssertNoContextChange ncc; 1972 AssertNoContextChange ncc;
1975 // ADDED TO CLONE 1973 LookupResult result;
1976 LookupResult result_struct; 1974 LocalLookup(name, &result);
1977 LocalLookup(name, &result_struct);
1978 LookupResult* result = &result_struct;
1979 // END ADDED TO CLONE
1980 // Check access rights if needed. 1975 // Check access rights if needed.
1981 if (IsAccessCheckNeeded() 1976 if (IsAccessCheckNeeded()
1982 && !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) { 1977 && !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
1983 return SetPropertyWithFailedAccessCheck(result, name, value); 1978 return SetPropertyWithFailedAccessCheck(&result, name, value);
1984 } 1979 }
1985 1980
1986 if (IsJSGlobalProxy()) { 1981 if (IsJSGlobalProxy()) {
1987 Object* proto = GetPrototype(); 1982 Object* proto = GetPrototype();
1988 if (proto->IsNull()) return value; 1983 if (proto->IsNull()) return value;
1989 ASSERT(proto->IsJSGlobalObject()); 1984 ASSERT(proto->IsJSGlobalObject());
1990 return JSObject::cast(proto)->IgnoreAttributesAndSetLocalProperty( 1985 return JSObject::cast(proto)->IgnoreAttributesAndSetLocalProperty(
1991 name, 1986 name,
1992 value, 1987 value,
1993 attributes); 1988 attributes);
1994 } 1989 }
1995 1990
1996 // Check for accessor in prototype chain removed here in clone. 1991 // Check for accessor in prototype chain removed here in clone.
1997 if (result->IsNotFound()) { 1992 if (!result.IsFound()) {
1993 // Neither properties nor transitions found.
1998 return AddProperty(name, value, attributes); 1994 return AddProperty(name, value, attributes);
1999 } 1995 }
2000 if (!result->IsLoaded()) { 1996 if (!result.IsLoaded()) {
2001 return SetLazyProperty(result, name, value, attributes); 1997 return SetLazyProperty(&result, name, value, attributes);
2002 } 1998 }
2003 PropertyDetails details = PropertyDetails(attributes, NORMAL); 1999 PropertyDetails details = PropertyDetails(attributes, NORMAL);
2004 2000
2005 // Check of IsReadOnly removed from here in clone. 2001 // Check of IsReadOnly removed from here in clone.
2006 switch (result->type()) { 2002 switch (result.type()) {
2007 case NORMAL: 2003 case NORMAL:
2008 return SetNormalizedProperty(name, value, details); 2004 return SetNormalizedProperty(name, value, details);
2009 case FIELD: 2005 case FIELD:
2010 return FastPropertyAtPut(result->GetFieldIndex(), value); 2006 return FastPropertyAtPut(result.GetFieldIndex(), value);
2011 case MAP_TRANSITION: 2007 case MAP_TRANSITION:
2012 if (attributes == result->GetAttributes()) { 2008 if (attributes == result.GetAttributes()) {
2013 // Only use map transition if the attributes match. 2009 // Only use map transition if the attributes match.
2014 return AddFastPropertyUsingMap(result->GetTransitionMap(), 2010 return AddFastPropertyUsingMap(result.GetTransitionMap(),
2015 name, 2011 name,
2016 value); 2012 value);
2017 } 2013 }
2018 return ConvertDescriptorToField(name, value, attributes); 2014 return ConvertDescriptorToField(name, value, attributes);
2019 case CONSTANT_FUNCTION: 2015 case CONSTANT_FUNCTION:
2020 // Only replace the function if necessary. 2016 // Only replace the function if necessary.
2021 if (value == result->GetConstantFunction()) return value; 2017 if (value == result.GetConstantFunction()) return value;
2022 // Preserve the attributes of this existing property. 2018 // Preserve the attributes of this existing property.
2023 attributes = result->GetAttributes(); 2019 attributes = result.GetAttributes();
2024 return ConvertDescriptorToField(name, value, attributes); 2020 return ConvertDescriptorToField(name, value, attributes);
2025 case CALLBACKS: 2021 case CALLBACKS:
2026 case INTERCEPTOR: 2022 case INTERCEPTOR:
2027 // Override callback in clone 2023 // Override callback in clone
2028 return ConvertDescriptorToField(name, value, attributes); 2024 return ConvertDescriptorToField(name, value, attributes);
2029 case CONSTANT_TRANSITION: 2025 case CONSTANT_TRANSITION:
2030 // Replace with a MAP_TRANSITION to a new map with a FIELD, even 2026 // Replace with a MAP_TRANSITION to a new map with a FIELD, even
2031 // if the value is a function. 2027 // if the value is a function.
2032 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes); 2028 return ConvertDescriptorToFieldAndMapTransition(name, value, attributes);
2033 case NULL_DESCRIPTOR: 2029 case NULL_DESCRIPTOR:
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2129 String* name, 2125 String* name,
2130 bool continue_search) { 2126 bool continue_search) {
2131 // Check access rights if needed. 2127 // Check access rights if needed.
2132 if (IsAccessCheckNeeded() && 2128 if (IsAccessCheckNeeded() &&
2133 !Top::MayNamedAccess(this, name, v8::ACCESS_HAS)) { 2129 !Top::MayNamedAccess(this, name, v8::ACCESS_HAS)) {
2134 return GetPropertyAttributeWithFailedAccessCheck(receiver, 2130 return GetPropertyAttributeWithFailedAccessCheck(receiver,
2135 result, 2131 result,
2136 name, 2132 name,
2137 continue_search); 2133 continue_search);
2138 } 2134 }
2139 if (result->IsValid()) { 2135 if (result->IsProperty()) {
2140 switch (result->type()) { 2136 switch (result->type()) {
2141 case NORMAL: // fall through 2137 case NORMAL: // fall through
2142 case FIELD: 2138 case FIELD:
2143 case CONSTANT_FUNCTION: 2139 case CONSTANT_FUNCTION:
2144 case CALLBACKS: 2140 case CALLBACKS:
2145 return result->GetAttributes(); 2141 return result->GetAttributes();
2146 case INTERCEPTOR: 2142 case INTERCEPTOR:
2147 return result->holder()-> 2143 return result->holder()->
2148 GetPropertyAttributeWithInterceptor(receiver, name, continue_search); 2144 GetPropertyAttributeWithInterceptor(receiver, name, continue_search);
2149 case MAP_TRANSITION:
2150 case CONSTANT_TRANSITION:
2151 case NULL_DESCRIPTOR:
2152 return ABSENT;
2153 default: 2145 default:
2154 UNREACHABLE(); 2146 UNREACHABLE();
2155 break;
2156 } 2147 }
2157 } 2148 }
2158 return ABSENT; 2149 return ABSENT;
2159 } 2150 }
2160 2151
2161 2152
2162 PropertyAttributes JSObject::GetLocalPropertyAttribute(String* name) { 2153 PropertyAttributes JSObject::GetLocalPropertyAttribute(String* name) {
2163 // Check whether the name is an array index. 2154 // Check whether the name is an array index.
2164 uint32_t index = 0; 2155 uint32_t index = 0;
2165 if (name->AsArrayIndex(&index)) { 2156 if (name->AsArrayIndex(&index)) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2318 #endif 2309 #endif
2319 2310
2320 return this; 2311 return this;
2321 } 2312 }
2322 2313
2323 2314
2324 Object* JSObject::DeletePropertyPostInterceptor(String* name, DeleteMode mode) { 2315 Object* JSObject::DeletePropertyPostInterceptor(String* name, DeleteMode mode) {
2325 // Check local property, ignore interceptor. 2316 // Check local property, ignore interceptor.
2326 LookupResult result; 2317 LookupResult result;
2327 LocalLookupRealNamedProperty(name, &result); 2318 LocalLookupRealNamedProperty(name, &result);
2328 if (!result.IsValid()) return Heap::true_value(); 2319 if (!result.IsProperty()) return Heap::true_value();
2329 2320
2330 // Normalize object if needed. 2321 // Normalize object if needed.
2331 Object* obj = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0); 2322 Object* obj = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
2332 if (obj->IsFailure()) return obj; 2323 if (obj->IsFailure()) return obj;
2333 2324
2334 return DeleteNormalizedProperty(name, mode); 2325 return DeleteNormalizedProperty(name, mode);
2335 } 2326 }
2336 2327
2337 2328
2338 Object* JSObject::DeletePropertyWithInterceptor(String* name) { 2329 Object* JSObject::DeletePropertyWithInterceptor(String* name) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2502 ASSERT(proto->IsJSGlobalObject()); 2493 ASSERT(proto->IsJSGlobalObject());
2503 return JSGlobalObject::cast(proto)->DeleteProperty(name, mode); 2494 return JSGlobalObject::cast(proto)->DeleteProperty(name, mode);
2504 } 2495 }
2505 2496
2506 uint32_t index = 0; 2497 uint32_t index = 0;
2507 if (name->AsArrayIndex(&index)) { 2498 if (name->AsArrayIndex(&index)) {
2508 return DeleteElement(index, mode); 2499 return DeleteElement(index, mode);
2509 } else { 2500 } else {
2510 LookupResult result; 2501 LookupResult result;
2511 LocalLookup(name, &result); 2502 LocalLookup(name, &result);
2512 if (!result.IsValid()) return Heap::true_value(); 2503 if (!result.IsProperty()) return Heap::true_value();
2513 // Ignore attributes if forcing a deletion. 2504 // Ignore attributes if forcing a deletion.
2514 if (result.IsDontDelete() && mode != FORCE_DELETION) { 2505 if (result.IsDontDelete() && mode != FORCE_DELETION) {
2515 return Heap::false_value(); 2506 return Heap::false_value();
2516 } 2507 }
2517 // Check for interceptor. 2508 // Check for interceptor.
2518 if (result.type() == INTERCEPTOR) { 2509 if (result.type() == INTERCEPTOR) {
2519 // Skip interceptor if forcing a deletion. 2510 // Skip interceptor if forcing a deletion.
2520 if (mode == FORCE_DELETION) { 2511 if (mode == FORCE_DELETION) {
2521 return DeletePropertyPostInterceptor(name, mode); 2512 return DeletePropertyPostInterceptor(name, mode);
2522 } 2513 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
2737 LocalLookupRealNamedProperty(name, result); 2728 LocalLookupRealNamedProperty(name, result);
2738 } 2729 }
2739 2730
2740 2731
2741 void JSObject::Lookup(String* name, LookupResult* result) { 2732 void JSObject::Lookup(String* name, LookupResult* result) {
2742 // Ecma-262 3rd 8.6.2.4 2733 // Ecma-262 3rd 8.6.2.4
2743 for (Object* current = this; 2734 for (Object* current = this;
2744 current != Heap::null_value(); 2735 current != Heap::null_value();
2745 current = JSObject::cast(current)->GetPrototype()) { 2736 current = JSObject::cast(current)->GetPrototype()) {
2746 JSObject::cast(current)->LocalLookup(name, result); 2737 JSObject::cast(current)->LocalLookup(name, result);
2747 if (result->IsValid() && !result->IsTransitionType()) return; 2738 if (result->IsProperty()) return;
2748 } 2739 }
2749 result->NotFound(); 2740 result->NotFound();
2750 } 2741 }
2751 2742
2752 2743
2753 // Search object and it's prototype chain for callback properties. 2744 // Search object and it's prototype chain for callback properties.
2754 void JSObject::LookupCallback(String* name, LookupResult* result) { 2745 void JSObject::LookupCallback(String* name, LookupResult* result) {
2755 for (Object* current = this; 2746 for (Object* current = this;
2756 current != Heap::null_value(); 2747 current != Heap::null_value();
2757 current = JSObject::cast(current)->GetPrototype()) { 2748 current = JSObject::cast(current)->GetPrototype()) {
2758 JSObject::cast(current)->LocalLookupRealNamedProperty(name, result); 2749 JSObject::cast(current)->LocalLookupRealNamedProperty(name, result);
2759 if (result->IsValid() && result->type() == CALLBACKS) return; 2750 if (result->IsProperty() && result->type() == CALLBACKS) return;
2760 } 2751 }
2761 result->NotFound(); 2752 result->NotFound();
2762 } 2753 }
2763 2754
2764 2755
2765 Object* JSObject::DefineGetterSetter(String* name, 2756 Object* JSObject::DefineGetterSetter(String* name,
2766 PropertyAttributes attributes) { 2757 PropertyAttributes attributes) {
2767 // Make sure that the top context does not change when doing callbacks or 2758 // Make sure that the top context does not change when doing callbacks or
2768 // interceptor calls. 2759 // interceptor calls.
2769 AssertNoContextChange ncc; 2760 AssertNoContextChange ncc;
2770 2761
2771 // Check access rights if needed. 2762 // Check access rights if needed.
2772 if (IsAccessCheckNeeded() && 2763 if (IsAccessCheckNeeded() &&
2773 !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) { 2764 !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
2774 Top::ReportFailedAccessCheck(this, v8::ACCESS_SET); 2765 Top::ReportFailedAccessCheck(this, v8::ACCESS_SET);
2775 return Heap::undefined_value(); 2766 return Heap::undefined_value();
2776 } 2767 }
2777 2768
2778 // Try to flatten before operating on the string. 2769 // Try to flatten before operating on the string.
2779 name->TryFlattenIfNotFlat(); 2770 name->TryFlattenIfNotFlat();
2780 2771
2781 // Check if there is an API defined callback object which prohibits 2772 // Check if there is an API defined callback object which prohibits
2782 // callback overwriting in this object or it's prototype chain. 2773 // callback overwriting in this object or it's prototype chain.
2783 // This mechanism is needed for instance in a browser setting, where 2774 // This mechanism is needed for instance in a browser setting, where
2784 // certain accessors such as window.location should not be allowed 2775 // certain accessors such as window.location should not be allowed
2785 // to be overwritten because allowing overwriting could potentially 2776 // to be overwritten because allowing overwriting could potentially
2786 // cause security problems. 2777 // cause security problems.
2787 LookupResult callback_result; 2778 LookupResult callback_result;
2788 LookupCallback(name, &callback_result); 2779 LookupCallback(name, &callback_result);
2789 if (callback_result.IsValid()) { 2780 if (callback_result.IsFound()) {
2790 Object* obj = callback_result.GetCallbackObject(); 2781 Object* obj = callback_result.GetCallbackObject();
2791 if (obj->IsAccessorInfo() && 2782 if (obj->IsAccessorInfo() &&
2792 AccessorInfo::cast(obj)->prohibits_overwriting()) { 2783 AccessorInfo::cast(obj)->prohibits_overwriting()) {
2793 return Heap::undefined_value(); 2784 return Heap::undefined_value();
2794 } 2785 }
2795 } 2786 }
2796 2787
2797 uint32_t index; 2788 uint32_t index;
2798 bool is_element = name->AsArrayIndex(&index); 2789 bool is_element = name->AsArrayIndex(&index);
2799 if (is_element && IsJSArray()) return Heap::undefined_value(); 2790 if (is_element && IsJSArray()) return Heap::undefined_value();
(...skipping 30 matching lines...) Expand all
2830 break; 2821 break;
2831 } 2822 }
2832 default: 2823 default:
2833 UNREACHABLE(); 2824 UNREACHABLE();
2834 break; 2825 break;
2835 } 2826 }
2836 } else { 2827 } else {
2837 // Lookup the name. 2828 // Lookup the name.
2838 LookupResult result; 2829 LookupResult result;
2839 LocalLookup(name, &result); 2830 LocalLookup(name, &result);
2840 if (result.IsValid()) { 2831 if (result.IsProperty()) {
2841 if (result.IsReadOnly()) return Heap::undefined_value(); 2832 if (result.IsReadOnly()) return Heap::undefined_value();
2842 if (result.type() == CALLBACKS) { 2833 if (result.type() == CALLBACKS) {
2843 Object* obj = result.GetCallbackObject(); 2834 Object* obj = result.GetCallbackObject();
2844 if (obj->IsFixedArray()) { 2835 if (obj->IsFixedArray()) {
2845 // The object might be in fast mode even though it has 2836 // The object might be in fast mode even though it has
2846 // a getter/setter. 2837 // a getter/setter.
2847 Object* ok = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0); 2838 Object* ok = NormalizeProperties(CLEAR_INOBJECT_PROPERTIES, 0);
2848 if (ok->IsFailure()) return ok; 2839 if (ok->IsFailure()) return ok;
2849 2840
2850 PropertyDetails details = PropertyDetails(attributes, CALLBACKS); 2841 PropertyDetails details = PropertyDetails(attributes, CALLBACKS);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
2952 } 2943 }
2953 } 2944 }
2954 } 2945 }
2955 } 2946 }
2956 } else { 2947 } else {
2957 for (Object* obj = this; 2948 for (Object* obj = this;
2958 obj != Heap::null_value(); 2949 obj != Heap::null_value();
2959 obj = JSObject::cast(obj)->GetPrototype()) { 2950 obj = JSObject::cast(obj)->GetPrototype()) {
2960 LookupResult result; 2951 LookupResult result;
2961 JSObject::cast(obj)->LocalLookup(name, &result); 2952 JSObject::cast(obj)->LocalLookup(name, &result);
2962 if (result.IsValid()) { 2953 if (result.IsProperty()) {
2963 if (result.IsReadOnly()) return Heap::undefined_value(); 2954 if (result.IsReadOnly()) return Heap::undefined_value();
2964 if (result.type() == CALLBACKS) { 2955 if (result.type() == CALLBACKS) {
2965 Object* obj = result.GetCallbackObject(); 2956 Object* obj = result.GetCallbackObject();
2966 if (obj->IsFixedArray()) { 2957 if (obj->IsFixedArray()) {
2967 return FixedArray::cast(obj)->get(accessor_index); 2958 return FixedArray::cast(obj)->get(accessor_index);
2968 } 2959 }
2969 } 2960 }
2970 } 2961 }
2971 } 2962 }
2972 } 2963 }
(...skipping 1871 matching lines...) Expand 10 before | Expand all | Expand 10 after
4844 // Traverse the proposed prototype chain looking for setters for properties of 4835 // Traverse the proposed prototype chain looking for setters for properties of
4845 // the same names as are set by the inline constructor. 4836 // the same names as are set by the inline constructor.
4846 for (Object* obj = prototype; 4837 for (Object* obj = prototype;
4847 obj != Heap::null_value(); 4838 obj != Heap::null_value();
4848 obj = obj->GetPrototype()) { 4839 obj = obj->GetPrototype()) {
4849 JSObject* js_object = JSObject::cast(obj); 4840 JSObject* js_object = JSObject::cast(obj);
4850 for (int i = 0; i < this_property_assignments_count(); i++) { 4841 for (int i = 0; i < this_property_assignments_count(); i++) {
4851 LookupResult result; 4842 LookupResult result;
4852 String* name = GetThisPropertyAssignmentName(i); 4843 String* name = GetThisPropertyAssignmentName(i);
4853 js_object->LocalLookupRealNamedProperty(name, &result); 4844 js_object->LocalLookupRealNamedProperty(name, &result);
4854 if (result.IsValid() && result.type() == CALLBACKS) { 4845 if (result.IsProperty() && result.type() == CALLBACKS) {
4855 return false; 4846 return false;
4856 } 4847 }
4857 } 4848 }
4858 } 4849 }
4859 4850
4860 return true; 4851 return true;
4861 } 4852 }
4862 4853
4863 4854
4864 void SharedFunctionInfo::SetThisPropertyAssignmentsInfo( 4855 void SharedFunctionInfo::SetThisPropertyAssignmentsInfo(
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after
6245 return InterceptorInfo::cast(result); 6236 return InterceptorInfo::cast(result);
6246 } 6237 }
6247 6238
6248 6239
6249 Object* JSObject::GetPropertyPostInterceptor(JSObject* receiver, 6240 Object* JSObject::GetPropertyPostInterceptor(JSObject* receiver,
6250 String* name, 6241 String* name,
6251 PropertyAttributes* attributes) { 6242 PropertyAttributes* attributes) {
6252 // Check local property in holder, ignore interceptor. 6243 // Check local property in holder, ignore interceptor.
6253 LookupResult result; 6244 LookupResult result;
6254 LocalLookupRealNamedProperty(name, &result); 6245 LocalLookupRealNamedProperty(name, &result);
6255 if (result.IsValid()) return GetProperty(receiver, &result, name, attributes); 6246 if (result.IsProperty()) {
6247 return GetProperty(receiver, &result, name, attributes);
6248 }
6256 // Continue searching via the prototype chain. 6249 // Continue searching via the prototype chain.
6257 Object* pt = GetPrototype(); 6250 Object* pt = GetPrototype();
6258 *attributes = ABSENT; 6251 *attributes = ABSENT;
6259 if (pt == Heap::null_value()) return Heap::undefined_value(); 6252 if (pt == Heap::null_value()) return Heap::undefined_value();
6260 return pt->GetPropertyWithReceiver(receiver, name, attributes); 6253 return pt->GetPropertyWithReceiver(receiver, name, attributes);
6261 } 6254 }
6262 6255
6263 6256
6264 Object* JSObject::GetLocalPropertyPostInterceptor( 6257 Object* JSObject::GetLocalPropertyPostInterceptor(
6265 JSObject* receiver, 6258 JSObject* receiver,
6266 String* name, 6259 String* name,
6267 PropertyAttributes* attributes) { 6260 PropertyAttributes* attributes) {
6268 // Check local property in holder, ignore interceptor. 6261 // Check local property in holder, ignore interceptor.
6269 LookupResult result; 6262 LookupResult result;
6270 LocalLookupRealNamedProperty(name, &result); 6263 LocalLookupRealNamedProperty(name, &result);
6271 if (!result.IsValid()) return Heap::undefined_value(); 6264 if (result.IsProperty()) {
6272 return GetProperty(receiver, &result, name, attributes); 6265 return GetProperty(receiver, &result, name, attributes);
6266 }
6267 return Heap::undefined_value();
6273 } 6268 }
6274 6269
6275 6270
6276 Object* JSObject::GetPropertyWithInterceptor( 6271 Object* JSObject::GetPropertyWithInterceptor(
6277 JSObject* receiver, 6272 JSObject* receiver,
6278 String* name, 6273 String* name,
6279 PropertyAttributes* attributes) { 6274 PropertyAttributes* attributes) {
6280 InterceptorInfo* interceptor = GetNamedInterceptor(); 6275 InterceptorInfo* interceptor = GetNamedInterceptor();
6281 HandleScope scope; 6276 HandleScope scope;
6282 Handle<JSObject> receiver_handle(receiver); 6277 Handle<JSObject> receiver_handle(receiver);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
6314 bool JSObject::HasRealNamedProperty(String* key) { 6309 bool JSObject::HasRealNamedProperty(String* key) {
6315 // Check access rights if needed. 6310 // Check access rights if needed.
6316 if (IsAccessCheckNeeded() && 6311 if (IsAccessCheckNeeded() &&
6317 !Top::MayNamedAccess(this, key, v8::ACCESS_HAS)) { 6312 !Top::MayNamedAccess(this, key, v8::ACCESS_HAS)) {
6318 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS); 6313 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS);
6319 return false; 6314 return false;
6320 } 6315 }
6321 6316
6322 LookupResult result; 6317 LookupResult result;
6323 LocalLookupRealNamedProperty(key, &result); 6318 LocalLookupRealNamedProperty(key, &result);
6324 if (result.IsValid()) { 6319 return result.IsProperty() && (result.type() != INTERCEPTOR);
6325 switch (result.type()) {
6326 case NORMAL: // fall through.
6327 case FIELD: // fall through.
6328 case CALLBACKS: // fall through.
6329 case CONSTANT_FUNCTION:
6330 return true;
6331 case INTERCEPTOR:
6332 case MAP_TRANSITION:
6333 case CONSTANT_TRANSITION:
6334 case NULL_DESCRIPTOR:
6335 return false;
6336 default:
6337 UNREACHABLE();
6338 }
6339 }
6340
6341 return false;
6342 } 6320 }
6343 6321
6344 6322
6345 bool JSObject::HasRealElementProperty(uint32_t index) { 6323 bool JSObject::HasRealElementProperty(uint32_t index) {
6346 // Check access rights if needed. 6324 // Check access rights if needed.
6347 if (IsAccessCheckNeeded() && 6325 if (IsAccessCheckNeeded() &&
6348 !Top::MayIndexedAccess(this, index, v8::ACCESS_HAS)) { 6326 !Top::MayIndexedAccess(this, index, v8::ACCESS_HAS)) {
6349 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS); 6327 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS);
6350 return false; 6328 return false;
6351 } 6329 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
6393 bool JSObject::HasRealNamedCallbackProperty(String* key) { 6371 bool JSObject::HasRealNamedCallbackProperty(String* key) {
6394 // Check access rights if needed. 6372 // Check access rights if needed.
6395 if (IsAccessCheckNeeded() && 6373 if (IsAccessCheckNeeded() &&
6396 !Top::MayNamedAccess(this, key, v8::ACCESS_HAS)) { 6374 !Top::MayNamedAccess(this, key, v8::ACCESS_HAS)) {
6397 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS); 6375 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS);
6398 return false; 6376 return false;
6399 } 6377 }
6400 6378
6401 LookupResult result; 6379 LookupResult result;
6402 LocalLookupRealNamedProperty(key, &result); 6380 LocalLookupRealNamedProperty(key, &result);
6403 return result.IsValid() && (result.type() == CALLBACKS); 6381 return result.IsProperty() && (result.type() == CALLBACKS);
6404 } 6382 }
6405 6383
6406 6384
6407 int JSObject::NumberOfLocalProperties(PropertyAttributes filter) { 6385 int JSObject::NumberOfLocalProperties(PropertyAttributes filter) {
6408 if (HasFastProperties()) { 6386 if (HasFastProperties()) {
6409 DescriptorArray* descs = map()->instance_descriptors(); 6387 DescriptorArray* descs = map()->instance_descriptors();
6410 int result = 0; 6388 int result = 0;
6411 for (int i = 0; i < descs->number_of_descriptors(); i++) { 6389 for (int i = 0; i < descs->number_of_descriptors(); i++) {
6412 PropertyDetails details = descs->GetDetails(i); 6390 PropertyDetails details = descs->GetDetails(i);
6413 if (details.IsProperty() && (details.attributes() & filter) == 0) { 6391 if (details.IsProperty() && (details.attributes() & filter) == 0) {
(...skipping 1968 matching lines...) Expand 10 before | Expand all | Expand 10 after
8382 if (break_point_objects()->IsUndefined()) return 0; 8360 if (break_point_objects()->IsUndefined()) return 0;
8383 // Single beak point. 8361 // Single beak point.
8384 if (!break_point_objects()->IsFixedArray()) return 1; 8362 if (!break_point_objects()->IsFixedArray()) return 1;
8385 // Multiple break points. 8363 // Multiple break points.
8386 return FixedArray::cast(break_point_objects())->length(); 8364 return FixedArray::cast(break_point_objects())->length();
8387 } 8365 }
8388 #endif 8366 #endif
8389 8367
8390 8368
8391 } } // namespace v8::internal 8369 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic.cc ('k') | src/property.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698