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

Side by Side Diff: src/objects.cc

Issue 7366: Split window support from V8. ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('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-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 return this_handle->GetPropertyWithReceiver(*receiver_handle, 281 return this_handle->GetPropertyWithReceiver(*receiver_handle,
282 *name_handle, 282 *name_handle,
283 attributes); 283 attributes);
284 } 284 }
285 285
286 286
287 Object* JSObject::SetLazyProperty(LookupResult* result, 287 Object* JSObject::SetLazyProperty(LookupResult* result,
288 String* name, 288 String* name,
289 Object* value, 289 Object* value,
290 PropertyAttributes attributes) { 290 PropertyAttributes attributes) {
291 ASSERT(!IsJSGlobalProxy());
291 HandleScope scope; 292 HandleScope scope;
292 Handle<JSObject> this_handle(this); 293 Handle<JSObject> this_handle(this);
293 Handle<String> name_handle(name); 294 Handle<String> name_handle(name);
294 Handle<Object> value_handle(value); 295 Handle<Object> value_handle(value);
295 bool pending_exception; 296 bool pending_exception;
296 LoadLazy(Handle<JSFunction>(JSFunction::cast(result->GetValue())), 297 LoadLazy(Handle<JSFunction>(JSFunction::cast(result->GetValue())),
297 &pending_exception); 298 &pending_exception);
298 if (pending_exception) return Failure::Exception(); 299 if (pending_exception) return Failure::Exception();
299 return this_handle->SetProperty(*name_handle, *value_handle, attributes); 300 return this_handle->SetProperty(*name_handle, *value_handle, attributes);
300 } 301 }
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 accumulator->Put('>'); 630 accumulator->Put('>');
630 printed = true; 631 printed = true;
631 } 632 }
632 } 633 }
633 if (!printed) { 634 if (!printed) {
634 accumulator->Add("<JS Function>"); 635 accumulator->Add("<JS Function>");
635 } 636 }
636 break; 637 break;
637 } 638 }
638 // All other JSObjects are rather similar to each other (JSObject, 639 // All other JSObjects are rather similar to each other (JSObject,
639 // JSGlobalObject, JSUndetectableObject, JSValue). 640 // JSGlobalProxy, JSGlobalObject, JSUndetectableObject, JSValue).
640 default: { 641 default: {
641 Object* constructor = map()->constructor(); 642 Object* constructor = map()->constructor();
642 bool printed = false; 643 bool printed = false;
643 if (constructor->IsHeapObject() && 644 if (constructor->IsHeapObject() &&
644 !Heap::Contains(HeapObject::cast(constructor))) { 645 !Heap::Contains(HeapObject::cast(constructor))) {
645 accumulator->Add("!!!INVALID CONSTRUCTOR!!!"); 646 accumulator->Add("!!!INVALID CONSTRUCTOR!!!");
646 } else { 647 } else {
647 bool global_object = IsJSGlobalObject(); 648 bool global_object = IsJSGlobalProxy();
648 if (constructor->IsJSFunction()) { 649 if (constructor->IsJSFunction()) {
649 if (!Heap::Contains(JSFunction::cast(constructor)->shared())) { 650 if (!Heap::Contains(JSFunction::cast(constructor)->shared())) {
650 accumulator->Add("!!!INVALID SHARED ON CONSTRUCTOR!!!"); 651 accumulator->Add("!!!INVALID SHARED ON CONSTRUCTOR!!!");
651 } else { 652 } else {
652 Object* constructor_name = 653 Object* constructor_name =
653 JSFunction::cast(constructor)->shared()->name(); 654 JSFunction::cast(constructor)->shared()->name();
654 if (constructor_name->IsString()) { 655 if (constructor_name->IsString()) {
655 String* str = String::cast(constructor_name); 656 String* str = String::cast(constructor_name);
656 if (str->length() > 0) { 657 if (str->length() > 0) {
657 bool vowel = AnWord(str); 658 bool vowel = AnWord(str);
658 accumulator->Add("<%sa%s ", 659 accumulator->Add("<%sa%s ",
659 global_object ? "JS Global Object: " : "", 660 global_object ? "Global Object: " : "",
660 vowel ? "n" : ""); 661 vowel ? "n" : "");
661 accumulator->Put(str); 662 accumulator->Put(str);
662 accumulator->Put('>'); 663 accumulator->Put('>');
663 printed = true; 664 printed = true;
664 } 665 }
665 } 666 }
666 } 667 }
667 } 668 }
668 if (!printed) { 669 if (!printed) {
669 accumulator->Add("<JS %sObject", global_object ? "Global " : ""); 670 accumulator->Add("<JS %sObject", global_object ? "Global " : "");
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 814
814 switch (type) { 815 switch (type) {
815 case FIXED_ARRAY_TYPE: 816 case FIXED_ARRAY_TYPE:
816 reinterpret_cast<FixedArray*>(this)->FixedArrayIterateBody(v); 817 reinterpret_cast<FixedArray*>(this)->FixedArrayIterateBody(v);
817 break; 818 break;
818 case JS_OBJECT_TYPE: 819 case JS_OBJECT_TYPE:
819 case JS_VALUE_TYPE: 820 case JS_VALUE_TYPE:
820 case JS_ARRAY_TYPE: 821 case JS_ARRAY_TYPE:
821 case JS_REGEXP_TYPE: 822 case JS_REGEXP_TYPE:
822 case JS_FUNCTION_TYPE: 823 case JS_FUNCTION_TYPE:
824 case JS_GLOBAL_PROXY_TYPE:
823 case JS_GLOBAL_OBJECT_TYPE: 825 case JS_GLOBAL_OBJECT_TYPE:
824 reinterpret_cast<JSObject*>(this)->JSObjectIterateBody(object_size, v);
825 break;
826 case JS_BUILTINS_OBJECT_TYPE: 826 case JS_BUILTINS_OBJECT_TYPE:
827 reinterpret_cast<JSObject*>(this)->JSObjectIterateBody(object_size, v); 827 reinterpret_cast<JSObject*>(this)->JSObjectIterateBody(object_size, v);
828 break; 828 break;
829 case ODDBALL_TYPE: 829 case ODDBALL_TYPE:
830 reinterpret_cast<Oddball*>(this)->OddballIterateBody(v); 830 reinterpret_cast<Oddball*>(this)->OddballIterateBody(v);
831 break; 831 break;
832 case PROXY_TYPE: 832 case PROXY_TYPE:
833 reinterpret_cast<Proxy*>(this)->ProxyIterateBody(v); 833 reinterpret_cast<Proxy*>(this)->ProxyIterateBody(v);
834 break; 834 break;
835 case MAP_TYPE: 835 case MAP_TYPE:
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 if (property_dictionary() != result) { 1078 if (property_dictionary() != result) {
1079 set_properties(Dictionary::cast(result)); 1079 set_properties(Dictionary::cast(result));
1080 } 1080 }
1081 return value; 1081 return value;
1082 } 1082 }
1083 1083
1084 1084
1085 Object* JSObject::AddProperty(String* name, 1085 Object* JSObject::AddProperty(String* name,
1086 Object* value, 1086 Object* value,
1087 PropertyAttributes attributes) { 1087 PropertyAttributes attributes) {
1088 ASSERT(!IsJSGlobalProxy());
1088 if (HasFastProperties()) { 1089 if (HasFastProperties()) {
1089 // Ensure the descriptor array does not get too big. 1090 // Ensure the descriptor array does not get too big.
1090 if (map()->instance_descriptors()->number_of_descriptors() < 1091 if (map()->instance_descriptors()->number_of_descriptors() <
1091 DescriptorArray::kMaxNumberOfDescriptors) { 1092 DescriptorArray::kMaxNumberOfDescriptors) {
1092 if (value->IsJSFunction()) { 1093 if (value->IsJSFunction()) {
1093 return AddConstantFunctionProperty(name, 1094 return AddConstantFunctionProperty(name,
1094 JSFunction::cast(value), 1095 JSFunction::cast(value),
1095 attributes); 1096 attributes);
1096 } else { 1097 } else {
1097 return AddFastProperty(name, value, attributes); 1098 return AddFastProperty(name, value, attributes);
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 if (number != DescriptorArray::kNotFound) { 1362 if (number != DescriptorArray::kNotFound) {
1362 result->DescriptorResult(this, descriptors->GetDetails(number), number); 1363 result->DescriptorResult(this, descriptors->GetDetails(number), number);
1363 } else { 1364 } else {
1364 result->NotFound(); 1365 result->NotFound();
1365 } 1366 }
1366 } 1367 }
1367 1368
1368 1369
1369 void JSObject::LocalLookupRealNamedProperty(String* name, 1370 void JSObject::LocalLookupRealNamedProperty(String* name,
1370 LookupResult* result) { 1371 LookupResult* result) {
1372 if (IsJSGlobalProxy()) {
1373 Object* proto = GetPrototype();
1374 if (proto->IsNull()) return result->NotFound();
1375 ASSERT(proto->IsJSGlobalObject());
1376 return JSObject::cast(proto)->LocalLookupRealNamedProperty(name, result);
1377 }
1378
1371 if (HasFastProperties()) { 1379 if (HasFastProperties()) {
1372 LookupInDescriptor(name, result); 1380 LookupInDescriptor(name, result);
1373 if (result->IsValid()) { 1381 if (result->IsValid()) {
1374 ASSERT(result->holder() == this && result->type() != NORMAL); 1382 ASSERT(result->holder() == this && result->type() != NORMAL);
1375 // Disallow caching for uninitialized constants. These can only 1383 // Disallow caching for uninitialized constants. These can only
1376 // occur as fields. 1384 // occur as fields.
1377 if (result->IsReadOnly() && result->type() == FIELD && 1385 if (result->IsReadOnly() && result->type() == FIELD &&
1378 FastPropertyAt(result->GetFieldIndex())->IsTheHole()) { 1386 FastPropertyAt(result->GetFieldIndex())->IsTheHole()) {
1379 result->DisallowCaching(); 1387 result->DisallowCaching();
1380 } 1388 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 PropertyAttributes attributes) { 1487 PropertyAttributes attributes) {
1480 // Make sure that the top context does not change when doing callbacks or 1488 // Make sure that the top context does not change when doing callbacks or
1481 // interceptor calls. 1489 // interceptor calls.
1482 AssertNoContextChange ncc; 1490 AssertNoContextChange ncc;
1483 1491
1484 // Check access rights if needed. 1492 // Check access rights if needed.
1485 if (IsAccessCheckNeeded() 1493 if (IsAccessCheckNeeded()
1486 && !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) { 1494 && !Top::MayNamedAccess(this, name, v8::ACCESS_SET)) {
1487 return SetPropertyWithFailedAccessCheck(result, name, value); 1495 return SetPropertyWithFailedAccessCheck(result, name, value);
1488 } 1496 }
1497
1498 if (IsJSGlobalProxy()) {
1499 Object* proto = GetPrototype();
1500 if (proto->IsNull()) return value;
1501 ASSERT(proto->IsJSGlobalObject());
1502 return JSObject::cast(proto)->SetProperty(result, name, value, attributes);
1503 }
1504
1489 if (result->IsNotFound() || !result->IsProperty()) { 1505 if (result->IsNotFound() || !result->IsProperty()) {
1490 // We could not find a local property so let's check whether there is an 1506 // We could not find a local property so let's check whether there is an
1491 // accessor that wants to handle the property. 1507 // accessor that wants to handle the property.
1492 LookupResult accessor_result; 1508 LookupResult accessor_result;
1493 LookupCallbackSetterInPrototypes(name, &accessor_result); 1509 LookupCallbackSetterInPrototypes(name, &accessor_result);
1494 if (accessor_result.IsValid()) { 1510 if (accessor_result.IsValid()) {
1495 return SetPropertyWithCallback(accessor_result.GetCallbackObject(), 1511 return SetPropertyWithCallback(accessor_result.GetCallbackObject(),
1496 name, 1512 name,
1497 value, 1513 value,
1498 accessor_result.holder()); 1514 accessor_result.holder());
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 ASSERT(result->IsBoolean()); 1987 ASSERT(result->IsBoolean());
1972 return *v8::Utils::OpenHandle(*result); 1988 return *v8::Utils::OpenHandle(*result);
1973 } 1989 }
1974 Object* raw_result = this_handle->DeleteElementPostInterceptor(index); 1990 Object* raw_result = this_handle->DeleteElementPostInterceptor(index);
1975 RETURN_IF_SCHEDULED_EXCEPTION(); 1991 RETURN_IF_SCHEDULED_EXCEPTION();
1976 return raw_result; 1992 return raw_result;
1977 } 1993 }
1978 1994
1979 1995
1980 Object* JSObject::DeleteElement(uint32_t index) { 1996 Object* JSObject::DeleteElement(uint32_t index) {
1997 // Check access rights if needed.
1998 if (IsAccessCheckNeeded() &&
1999 !Top::MayIndexedAccess(this, index, v8::ACCESS_DELETE)) {
2000 Top::ReportFailedAccessCheck(this, v8::ACCESS_DELETE);
2001 return Heap::false_value();
2002 }
2003
2004 if (IsJSGlobalProxy()) {
2005 Object* proto = GetPrototype();
2006 if (proto->IsNull()) return Heap::false_value();
2007 ASSERT(proto->IsJSGlobalObject());
2008 return JSGlobalObject::cast(proto)->DeleteElement(index);
2009 }
2010
1981 if (HasIndexedInterceptor()) { 2011 if (HasIndexedInterceptor()) {
1982 return DeleteElementWithInterceptor(index); 2012 return DeleteElementWithInterceptor(index);
1983 } 2013 }
1984 2014
1985 if (HasFastElements()) { 2015 if (HasFastElements()) {
1986 uint32_t length = IsJSArray() ? 2016 uint32_t length = IsJSArray() ?
1987 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) : 2017 static_cast<uint32_t>(Smi::cast(JSArray::cast(this)->length())->value()) :
1988 static_cast<uint32_t>(FixedArray::cast(elements())->length()); 2018 static_cast<uint32_t>(FixedArray::cast(elements())->length());
1989 if (index < length) { 2019 if (index < length) {
1990 FixedArray::cast(elements())->set_the_hole(index); 2020 FixedArray::cast(elements())->set_the_hole(index);
1991 } 2021 }
1992 return Heap::true_value(); 2022 return Heap::true_value();
1993 } else { 2023 } else {
1994 Dictionary* dictionary = element_dictionary(); 2024 Dictionary* dictionary = element_dictionary();
1995 int entry = dictionary->FindNumberEntry(index); 2025 int entry = dictionary->FindNumberEntry(index);
1996 if (entry != -1) return dictionary->DeleteProperty(entry); 2026 if (entry != -1) return dictionary->DeleteProperty(entry);
1997 } 2027 }
1998 return Heap::true_value(); 2028 return Heap::true_value();
1999 } 2029 }
2000 2030
2001 2031
2002 Object* JSObject::DeleteProperty(String* name) { 2032 Object* JSObject::DeleteProperty(String* name) {
2033 // ECMA-262, 3rd, 8.6.2.5
2034 ASSERT(name->IsString());
2035
2003 // Check access rights if needed. 2036 // Check access rights if needed.
2004 if (IsAccessCheckNeeded() && 2037 if (IsAccessCheckNeeded() &&
2005 !Top::MayNamedAccess(this, name, v8::ACCESS_DELETE)) { 2038 !Top::MayNamedAccess(this, name, v8::ACCESS_DELETE)) {
2006 Top::ReportFailedAccessCheck(this, v8::ACCESS_DELETE); 2039 Top::ReportFailedAccessCheck(this, v8::ACCESS_DELETE);
2007 return Heap::false_value(); 2040 return Heap::false_value();
2008 } 2041 }
2009 2042
2010 // ECMA-262, 3rd, 8.6.2.5 2043 if (IsJSGlobalProxy()) {
2011 ASSERT(name->IsString()); 2044 Object* proto = GetPrototype();
2045 if (proto->IsNull()) return Heap::false_value();
2046 ASSERT(proto->IsJSGlobalObject());
2047 return JSGlobalObject::cast(proto)->DeleteProperty(name);
2048 }
2012 2049
2013 uint32_t index = 0; 2050 uint32_t index = 0;
2014 if (name->AsArrayIndex(&index)) { 2051 if (name->AsArrayIndex(&index)) {
2015 return DeleteElement(index); 2052 return DeleteElement(index);
2016 } else { 2053 } else {
2017 LookupResult result; 2054 LookupResult result;
2018 LocalLookup(name, &result); 2055 LocalLookup(name, &result);
2019 if (!result.IsValid()) return Heap::true_value(); 2056 if (!result.IsValid()) return Heap::true_value();
2020 if (result.IsDontDelete()) return Heap::false_value(); 2057 if (result.IsDontDelete()) return Heap::false_value();
2021 // Check for interceptor. 2058 // Check for interceptor.
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
2184 for (DescriptorReader r(instance_descriptors()); !r.eos(); r.advance()) { 2221 for (DescriptorReader r(instance_descriptors()); !r.eos(); r.advance()) {
2185 if (r.Equals(name) && r.type() == CALLBACKS) return r.GetCallbacks(); 2222 if (r.Equals(name) && r.type() == CALLBACKS) return r.GetCallbacks();
2186 } 2223 }
2187 return NULL; 2224 return NULL;
2188 } 2225 }
2189 2226
2190 2227
2191 void JSObject::LocalLookup(String* name, LookupResult* result) { 2228 void JSObject::LocalLookup(String* name, LookupResult* result) {
2192 ASSERT(name->IsString()); 2229 ASSERT(name->IsString());
2193 2230
2231 if (IsJSGlobalProxy()) {
2232 Object* proto = GetPrototype();
2233 if (proto->IsNull()) return result->NotFound();
2234 ASSERT(proto->IsJSGlobalObject());
2235 return JSObject::cast(proto)->LocalLookup(name, result);
2236 }
2237
2194 // Do not use inline caching if the object is a non-global object 2238 // Do not use inline caching if the object is a non-global object
2195 // that requires access checks. 2239 // that requires access checks.
2196 if (!IsJSGlobalObject() && IsAccessCheckNeeded()) { 2240 if (!IsJSGlobalProxy() && IsAccessCheckNeeded()) {
2197 result->DisallowCaching(); 2241 result->DisallowCaching();
2198 } 2242 }
2199 2243
2200 // Check __proto__ before interceptor. 2244 // Check __proto__ before interceptor.
2201 if (name->Equals(Heap::Proto_symbol())) { 2245 if (name->Equals(Heap::Proto_symbol())) {
2202 result->ConstantResult(this); 2246 result->ConstantResult(this);
2203 return; 2247 return;
2204 } 2248 }
2205 2249
2206 // Check for lookup interceptor except when bootstrapping. 2250 // Check for lookup interceptor except when bootstrapping.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2273 if (dict->IsFailure()) return dict; 2317 if (dict->IsFailure()) return dict;
2274 2318
2275 // Set the potential new dictionary on the object. 2319 // Set the potential new dictionary on the object.
2276 set_properties(Dictionary::cast(dict)); 2320 set_properties(Dictionary::cast(dict));
2277 return array; 2321 return array;
2278 } 2322 }
2279 2323
2280 2324
2281 Object* JSObject::DefineAccessor(String* name, bool is_getter, JSFunction* fun, 2325 Object* JSObject::DefineAccessor(String* name, bool is_getter, JSFunction* fun,
2282 PropertyAttributes attributes) { 2326 PropertyAttributes attributes) {
2327 // Check access rights if needed.
2328 if (IsAccessCheckNeeded() &&
2329 !Top::MayNamedAccess(this, name, v8::ACCESS_HAS)) {
2330 Top::ReportFailedAccessCheck(this, v8::ACCESS_HAS);
2331 return Heap::undefined_value();
2332 }
2333
2334 if (IsJSGlobalProxy()) {
2335 Object* proto = GetPrototype();
2336 if (proto->IsNull()) return this;
2337 ASSERT(proto->IsJSGlobalObject());
2338 return JSObject::cast(proto)->DefineAccessor(name, is_getter,
2339 fun, attributes);
2340 }
2341
2283 Object* array = DefineGetterSetter(name, attributes); 2342 Object* array = DefineGetterSetter(name, attributes);
2284 if (array->IsFailure() || array->IsUndefined()) return array; 2343 if (array->IsFailure() || array->IsUndefined()) return array;
2285 FixedArray::cast(array)->set(is_getter ? 0 : 1, fun); 2344 FixedArray::cast(array)->set(is_getter ? 0 : 1, fun);
2286 return this; 2345 return this;
2287 } 2346 }
2288 2347
2289 2348
2290 Object* JSObject::LookupAccessor(String* name, bool is_getter) { 2349 Object* JSObject::LookupAccessor(String* name, bool is_getter) {
2291 // Make sure that the top context does not change when doing callbacks or 2350 // Make sure that the top context does not change when doing callbacks or
2292 // interceptor calls. 2351 // interceptor calls.
(...skipping 2443 matching lines...) Expand 10 before | Expand all | Expand 10 after
4736 } 4795 }
4737 4796
4738 Object* JSObject::SetElement(uint32_t index, Object* value) { 4797 Object* JSObject::SetElement(uint32_t index, Object* value) {
4739 // Check access rights if needed. 4798 // Check access rights if needed.
4740 if (IsAccessCheckNeeded() && 4799 if (IsAccessCheckNeeded() &&
4741 !Top::MayIndexedAccess(this, index, v8::ACCESS_SET)) { 4800 !Top::MayIndexedAccess(this, index, v8::ACCESS_SET)) {
4742 Top::ReportFailedAccessCheck(this, v8::ACCESS_SET); 4801 Top::ReportFailedAccessCheck(this, v8::ACCESS_SET);
4743 return value; 4802 return value;
4744 } 4803 }
4745 4804
4805 if (IsJSGlobalProxy()) {
4806 Object* proto = GetPrototype();
4807 if (proto->IsNull()) return value;
4808 ASSERT(proto->IsJSGlobalObject());
4809 return JSObject::cast(proto)->SetElement(index, value);
4810 }
4811
4746 // Check for lookup interceptor 4812 // Check for lookup interceptor
4747 if (HasIndexedInterceptor()) { 4813 if (HasIndexedInterceptor()) {
4748 return SetElementWithInterceptor(index, value); 4814 return SetElementWithInterceptor(index, value);
4749 } 4815 }
4750 4816
4751 // Fast case. 4817 // Fast case.
4752 if (HasFastElements()) return SetFastElement(index, value); 4818 if (HasFastElements()) return SetFastElement(index, value);
4753 4819
4754 // Dictionary case. 4820 // Dictionary case.
4755 ASSERT(!HasFastElements()); 4821 ASSERT(!HasFastElements());
(...skipping 1722 matching lines...) Expand 10 before | Expand all | Expand 10 after
6478 // No break point. 6544 // No break point.
6479 if (break_point_objects()->IsUndefined()) return 0; 6545 if (break_point_objects()->IsUndefined()) return 0;
6480 // Single beak point. 6546 // Single beak point.
6481 if (!break_point_objects()->IsFixedArray()) return 1; 6547 if (!break_point_objects()->IsFixedArray()) return 1;
6482 // Multiple break points. 6548 // Multiple break points.
6483 return FixedArray::cast(break_point_objects())->length(); 6549 return FixedArray::cast(break_point_objects())->length();
6484 } 6550 }
6485 6551
6486 6552
6487 } } // namespace v8::internal 6553 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698