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

Side by Side Diff: src/objects.cc

Issue 371913002: Revert "Only create arguments-maps in the bootstrapper, remove now obsolete ValueType flag." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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/runtime.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 1816 matching lines...) Expand 10 before | Expand all | Expand 10 after
1827 ConstantDescriptor new_constant_desc(name, constant, attributes); 1827 ConstantDescriptor new_constant_desc(name, constant, attributes);
1828 return Map::CopyAddDescriptor(map, &new_constant_desc, flag); 1828 return Map::CopyAddDescriptor(map, &new_constant_desc, flag);
1829 } 1829 }
1830 1830
1831 1831
1832 void JSObject::AddFastProperty(Handle<JSObject> object, 1832 void JSObject::AddFastProperty(Handle<JSObject> object,
1833 Handle<Name> name, 1833 Handle<Name> name,
1834 Handle<Object> value, 1834 Handle<Object> value,
1835 PropertyAttributes attributes, 1835 PropertyAttributes attributes,
1836 StoreFromKeyed store_mode, 1836 StoreFromKeyed store_mode,
1837 ValueType value_type,
1837 TransitionFlag flag) { 1838 TransitionFlag flag) {
1838 ASSERT(!object->IsJSGlobalProxy()); 1839 ASSERT(!object->IsJSGlobalProxy());
1839 1840
1840 MaybeHandle<Map> maybe_map; 1841 MaybeHandle<Map> maybe_map;
1841 if (value->IsJSFunction()) { 1842 if (value->IsJSFunction()) {
1842 maybe_map = Map::CopyWithConstant( 1843 maybe_map = Map::CopyWithConstant(
1843 handle(object->map()), name, value, attributes, flag); 1844 handle(object->map()), name, value, attributes, flag);
1844 } else if (!object->TooManyFastProperties(store_mode)) { 1845 } else if (!object->TooManyFastProperties(store_mode)) {
1845 Isolate* isolate = object->GetIsolate(); 1846 Isolate* isolate = object->GetIsolate();
1846 Representation representation = value->OptimalRepresentation(); 1847 Representation representation = value->OptimalRepresentation(value_type);
1847 maybe_map = Map::CopyWithField( 1848 maybe_map = Map::CopyWithField(
1848 handle(object->map(), isolate), name, 1849 handle(object->map(), isolate), name,
1849 value->OptimalType(isolate, representation), 1850 value->OptimalType(isolate, representation),
1850 attributes, representation, flag); 1851 attributes, representation, flag);
1851 } 1852 }
1852 1853
1853 Handle<Map> new_map; 1854 Handle<Map> new_map;
1854 if (!maybe_map.ToHandle(&new_map)) { 1855 if (!maybe_map.ToHandle(&new_map)) {
1855 NormalizeProperties(object, CLEAR_INOBJECT_PROPERTIES, 0); 1856 NormalizeProperties(object, CLEAR_INOBJECT_PROPERTIES, 0);
1856 return; 1857 return;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 1894
1894 1895
1895 MaybeHandle<Object> JSObject::AddPropertyInternal( 1896 MaybeHandle<Object> JSObject::AddPropertyInternal(
1896 Handle<JSObject> object, 1897 Handle<JSObject> object,
1897 Handle<Name> name, 1898 Handle<Name> name,
1898 Handle<Object> value, 1899 Handle<Object> value,
1899 PropertyAttributes attributes, 1900 PropertyAttributes attributes,
1900 StrictMode strict_mode, 1901 StrictMode strict_mode,
1901 JSReceiver::StoreFromKeyed store_mode, 1902 JSReceiver::StoreFromKeyed store_mode,
1902 ExtensibilityCheck extensibility_check, 1903 ExtensibilityCheck extensibility_check,
1904 ValueType value_type,
1903 StoreMode mode, 1905 StoreMode mode,
1904 TransitionFlag transition_flag) { 1906 TransitionFlag transition_flag) {
1905 ASSERT(!object->IsJSGlobalProxy()); 1907 ASSERT(!object->IsJSGlobalProxy());
1906 Isolate* isolate = object->GetIsolate(); 1908 Isolate* isolate = object->GetIsolate();
1907 1909
1908 if (!name->IsUniqueName()) { 1910 if (!name->IsUniqueName()) {
1909 name = isolate->factory()->InternalizeString( 1911 name = isolate->factory()->InternalizeString(
1910 Handle<String>::cast(name)); 1912 Handle<String>::cast(name));
1911 } 1913 }
1912 1914
1913 if (extensibility_check == PERFORM_EXTENSIBILITY_CHECK && 1915 if (extensibility_check == PERFORM_EXTENSIBILITY_CHECK &&
1914 !object->map()->is_extensible()) { 1916 !object->map()->is_extensible()) {
1915 if (strict_mode == SLOPPY) { 1917 if (strict_mode == SLOPPY) {
1916 return value; 1918 return value;
1917 } else { 1919 } else {
1918 Handle<Object> args[1] = { name }; 1920 Handle<Object> args[1] = { name };
1919 Handle<Object> error = isolate->factory()->NewTypeError( 1921 Handle<Object> error = isolate->factory()->NewTypeError(
1920 "object_not_extensible", HandleVector(args, ARRAY_SIZE(args))); 1922 "object_not_extensible", HandleVector(args, ARRAY_SIZE(args)));
1921 return isolate->Throw<Object>(error); 1923 return isolate->Throw<Object>(error);
1922 } 1924 }
1923 } 1925 }
1924 1926
1925 if (object->HasFastProperties()) { 1927 if (object->HasFastProperties()) {
1926 AddFastProperty(object, name, value, attributes, store_mode, 1928 AddFastProperty(object, name, value, attributes, store_mode,
1927 transition_flag); 1929 value_type, transition_flag);
1928 } 1930 }
1929 1931
1930 if (!object->HasFastProperties()) { 1932 if (!object->HasFastProperties()) {
1931 AddSlowProperty(object, name, value, attributes); 1933 AddSlowProperty(object, name, value, attributes);
1932 } 1934 }
1933 1935
1934 if (object->map()->is_observed() && 1936 if (object->map()->is_observed() &&
1935 *name != isolate->heap()->hidden_string()) { 1937 *name != isolate->heap()->hidden_string()) {
1936 Handle<Object> old_value = isolate->factory()->the_hole_value(); 1938 Handle<Object> old_value = isolate->factory()->the_hole_value();
1937 EnqueueChangeRecord(object, "add", name, old_value); 1939 EnqueueChangeRecord(object, "add", name, old_value);
(...skipping 2029 matching lines...) Expand 10 before | Expand all | Expand 10 after
3967 Handle<DescriptorArray> descriptors(transition_map->instance_descriptors()); 3969 Handle<DescriptorArray> descriptors(transition_map->instance_descriptors());
3968 PropertyDetails details = descriptors->GetDetails(descriptor); 3970 PropertyDetails details = descriptors->GetDetails(descriptor);
3969 3971
3970 if (details.type() == CALLBACKS || attributes != details.attributes()) { 3972 if (details.type() == CALLBACKS || attributes != details.attributes()) {
3971 // AddPropertyInternal will either normalize the object, or create a new 3973 // AddPropertyInternal will either normalize the object, or create a new
3972 // fast copy of the map. If we get a fast copy of the map, all field 3974 // fast copy of the map. If we get a fast copy of the map, all field
3973 // representations will be tagged since the transition is omitted. 3975 // representations will be tagged since the transition is omitted.
3974 return JSObject::AddPropertyInternal( 3976 return JSObject::AddPropertyInternal(
3975 object, name, value, attributes, SLOPPY, 3977 object, name, value, attributes, SLOPPY,
3976 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED, 3978 JSReceiver::CERTAINLY_NOT_STORE_FROM_KEYED,
3977 JSReceiver::OMIT_EXTENSIBILITY_CHECK, FORCE_FIELD, OMIT_TRANSITION); 3979 JSReceiver::OMIT_EXTENSIBILITY_CHECK,
3980 JSObject::FORCE_TAGGED, FORCE_FIELD, OMIT_TRANSITION);
3978 } 3981 }
3979 3982
3980 // Keep the target CONSTANT if the same value is stored. 3983 // Keep the target CONSTANT if the same value is stored.
3981 // TODO(verwaest): Also support keeping the placeholder 3984 // TODO(verwaest): Also support keeping the placeholder
3982 // (value->IsUninitialized) as constant. 3985 // (value->IsUninitialized) as constant.
3983 if (!lookup->CanHoldValue(value)) { 3986 if (!lookup->CanHoldValue(value)) {
3984 Representation field_representation = value->OptimalRepresentation(); 3987 Representation field_representation = value->OptimalRepresentation();
3985 Handle<HeapType> field_type = value->OptimalType( 3988 Handle<HeapType> field_type = value->OptimalType(
3986 lookup->isolate(), field_representation); 3989 lookup->isolate(), field_representation);
3987 transition_map = Map::GeneralizeRepresentation( 3990 transition_map = Map::GeneralizeRepresentation(
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
4213 4216
4214 return result; 4217 return result;
4215 } 4218 }
4216 4219
4217 4220
4218 void JSObject::AddProperty( 4221 void JSObject::AddProperty(
4219 Handle<JSObject> object, 4222 Handle<JSObject> object,
4220 Handle<Name> name, 4223 Handle<Name> name,
4221 Handle<Object> value, 4224 Handle<Object> value,
4222 PropertyAttributes attributes, 4225 PropertyAttributes attributes,
4226 ValueType value_type,
4223 StoreMode store_mode) { 4227 StoreMode store_mode) {
4224 #ifdef DEBUG 4228 #ifdef DEBUG
4225 uint32_t index; 4229 uint32_t index;
4226 ASSERT(!object->IsJSProxy()); 4230 ASSERT(!object->IsJSProxy());
4227 ASSERT(!name->AsArrayIndex(&index)); 4231 ASSERT(!name->AsArrayIndex(&index));
4228 LookupIterator it(object, name, LookupIterator::CHECK_OWN_REAL); 4232 LookupIterator it(object, name, LookupIterator::CHECK_OWN_REAL);
4229 GetPropertyAttributes(&it); 4233 GetPropertyAttributes(&it);
4230 ASSERT(!it.IsFound()); 4234 ASSERT(!it.IsFound());
4231 ASSERT(object->map()->is_extensible()); 4235 ASSERT(object->map()->is_extensible());
4232 #endif 4236 #endif
4233 SetOwnPropertyIgnoreAttributes(object, name, value, attributes, store_mode, 4237 SetOwnPropertyIgnoreAttributes(
4234 OMIT_EXTENSIBILITY_CHECK).Check(); 4238 object, name, value, attributes, value_type, store_mode,
4239 OMIT_EXTENSIBILITY_CHECK).Check();
4235 } 4240 }
4236 4241
4237 4242
4238 // Set a real own property, even if it is READ_ONLY. If the property is not 4243 // Set a real own property, even if it is READ_ONLY. If the property is not
4239 // present, add it with attributes NONE. This code is an exact clone of 4244 // present, add it with attributes NONE. This code is an exact clone of
4240 // SetProperty, with the check for IsReadOnly and the check for a 4245 // SetProperty, with the check for IsReadOnly and the check for a
4241 // callback setter removed. The two lines looking up the LookupResult 4246 // callback setter removed. The two lines looking up the LookupResult
4242 // result are also added. If one of the functions is changed, the other 4247 // result are also added. If one of the functions is changed, the other
4243 // should be. 4248 // should be.
4244 MaybeHandle<Object> JSObject::SetOwnPropertyIgnoreAttributes( 4249 MaybeHandle<Object> JSObject::SetOwnPropertyIgnoreAttributes(
4245 Handle<JSObject> object, 4250 Handle<JSObject> object,
4246 Handle<Name> name, 4251 Handle<Name> name,
4247 Handle<Object> value, 4252 Handle<Object> value,
4248 PropertyAttributes attributes, 4253 PropertyAttributes attributes,
4254 ValueType value_type,
4249 StoreMode mode, 4255 StoreMode mode,
4250 ExtensibilityCheck extensibility_check, 4256 ExtensibilityCheck extensibility_check,
4251 StoreFromKeyed store_from_keyed, 4257 StoreFromKeyed store_from_keyed,
4252 ExecutableAccessorInfoHandling handling) { 4258 ExecutableAccessorInfoHandling handling) {
4253 Isolate* isolate = object->GetIsolate(); 4259 Isolate* isolate = object->GetIsolate();
4254 4260
4255 // Make sure that the top context does not change when doing callbacks or 4261 // Make sure that the top context does not change when doing callbacks or
4256 // interceptor calls. 4262 // interceptor calls.
4257 AssertNoContextChange ncc(isolate); 4263 AssertNoContextChange ncc(isolate);
4258 4264
4259 LookupResult lookup(isolate); 4265 LookupResult lookup(isolate);
4260 object->LookupOwn(name, &lookup, true); 4266 object->LookupOwn(name, &lookup, true);
4261 if (!lookup.IsFound()) { 4267 if (!lookup.IsFound()) {
4262 object->map()->LookupTransition(*object, *name, &lookup); 4268 object->map()->LookupTransition(*object, *name, &lookup);
4263 } 4269 }
4264 4270
4265 // Check access rights if needed. 4271 // Check access rights if needed.
4266 if (object->IsAccessCheckNeeded()) { 4272 if (object->IsAccessCheckNeeded()) {
4267 if (!isolate->MayNamedAccess(object, name, v8::ACCESS_SET)) { 4273 if (!isolate->MayNamedAccess(object, name, v8::ACCESS_SET)) {
4268 return SetPropertyWithFailedAccessCheck(object, &lookup, name, value, 4274 return SetPropertyWithFailedAccessCheck(object, &lookup, name, value,
4269 false, SLOPPY); 4275 false, SLOPPY);
4270 } 4276 }
4271 } 4277 }
4272 4278
4273 if (object->IsJSGlobalProxy()) { 4279 if (object->IsJSGlobalProxy()) {
4274 Handle<Object> proto(object->GetPrototype(), isolate); 4280 Handle<Object> proto(object->GetPrototype(), isolate);
4275 if (proto->IsNull()) return value; 4281 if (proto->IsNull()) return value;
4276 ASSERT(proto->IsJSGlobalObject()); 4282 ASSERT(proto->IsJSGlobalObject());
4277 return SetOwnPropertyIgnoreAttributes(Handle<JSObject>::cast(proto), name, 4283 return SetOwnPropertyIgnoreAttributes(Handle<JSObject>::cast(proto),
4278 value, attributes, mode, 4284 name, value, attributes, value_type, mode, extensibility_check);
4279 extensibility_check);
4280 } 4285 }
4281 4286
4282 if (lookup.IsInterceptor() || 4287 if (lookup.IsInterceptor() ||
4283 (lookup.IsDescriptorOrDictionary() && lookup.type() == CALLBACKS)) { 4288 (lookup.IsDescriptorOrDictionary() && lookup.type() == CALLBACKS)) {
4284 object->LookupOwnRealNamedProperty(name, &lookup); 4289 object->LookupOwnRealNamedProperty(name, &lookup);
4285 } 4290 }
4286 4291
4287 // Check for accessor in prototype chain removed here in clone. 4292 // Check for accessor in prototype chain removed here in clone.
4288 if (!lookup.IsFound()) { 4293 if (!lookup.IsFound()) {
4289 object->map()->LookupTransition(*object, *name, &lookup); 4294 object->map()->LookupTransition(*object, *name, &lookup);
4290 TransitionFlag flag = lookup.IsFound() 4295 TransitionFlag flag = lookup.IsFound()
4291 ? OMIT_TRANSITION : INSERT_TRANSITION; 4296 ? OMIT_TRANSITION : INSERT_TRANSITION;
4292 // Neither properties nor transitions found. 4297 // Neither properties nor transitions found.
4293 return AddPropertyInternal(object, name, value, attributes, SLOPPY, 4298 return AddPropertyInternal(object, name, value, attributes, SLOPPY,
4294 store_from_keyed, extensibility_check, mode, 4299 store_from_keyed, extensibility_check, value_type, mode, flag);
4295 flag);
4296 } 4300 }
4297 4301
4298 Handle<Object> old_value = isolate->factory()->the_hole_value(); 4302 Handle<Object> old_value = isolate->factory()->the_hole_value();
4299 PropertyAttributes old_attributes = ABSENT; 4303 PropertyAttributes old_attributes = ABSENT;
4300 bool is_observed = object->map()->is_observed() && 4304 bool is_observed = object->map()->is_observed() &&
4301 *name != isolate->heap()->hidden_string(); 4305 *name != isolate->heap()->hidden_string();
4302 if (is_observed && lookup.IsProperty()) { 4306 if (is_observed && lookup.IsProperty()) {
4303 if (lookup.IsDataProperty()) { 4307 if (lookup.IsDataProperty()) {
4304 old_value = Object::GetPropertyOrElement(object, name).ToHandleChecked(); 4308 old_value = Object::GetPropertyOrElement(object, name).ToHandleChecked();
4305 } 4309 }
(...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after
5249 if (descriptors->number_of_descriptors() > 0) { 5253 if (descriptors->number_of_descriptors() > 0) {
5250 int sorted_index = descriptors->GetSortedKeyIndex(0); 5254 int sorted_index = descriptors->GetSortedKeyIndex(0);
5251 if (descriptors->GetKey(sorted_index) == isolate->heap()->hidden_string() 5255 if (descriptors->GetKey(sorted_index) == isolate->heap()->hidden_string()
5252 && sorted_index < object->map()->NumberOfOwnDescriptors()) { 5256 && sorted_index < object->map()->NumberOfOwnDescriptors()) {
5253 object->WriteToField(sorted_index, *value); 5257 object->WriteToField(sorted_index, *value);
5254 return object; 5258 return object;
5255 } 5259 }
5256 } 5260 }
5257 } 5261 }
5258 5262
5259 SetOwnPropertyIgnoreAttributes(object, isolate->factory()->hidden_string(), 5263 SetOwnPropertyIgnoreAttributes(object,
5260 value, DONT_ENUM, ALLOW_AS_CONSTANT, 5264 isolate->factory()->hidden_string(),
5265 value,
5266 DONT_ENUM,
5267 OPTIMAL_REPRESENTATION,
5268 ALLOW_AS_CONSTANT,
5261 OMIT_EXTENSIBILITY_CHECK).Assert(); 5269 OMIT_EXTENSIBILITY_CHECK).Assert();
5262 return object; 5270 return object;
5263 } 5271 }
5264 5272
5265 5273
5266 Handle<Object> JSObject::DeletePropertyPostInterceptor(Handle<JSObject> object, 5274 Handle<Object> JSObject::DeletePropertyPostInterceptor(Handle<JSObject> object,
5267 Handle<Name> name, 5275 Handle<Name> name,
5268 DeleteMode mode) { 5276 DeleteMode mode) {
5269 // Check own property, ignore interceptor. 5277 // Check own property, ignore interceptor.
5270 Isolate* isolate = object->GetIsolate(); 5278 Isolate* isolate = object->GetIsolate();
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
5595 kind = arguments->IsDictionary() ? DICTIONARY_ELEMENTS : 5603 kind = arguments->IsDictionary() ? DICTIONARY_ELEMENTS :
5596 FAST_HOLEY_ELEMENTS; 5604 FAST_HOLEY_ELEMENTS;
5597 if (ReferencesObjectFromElements(arguments, kind, obj)) return true; 5605 if (ReferencesObjectFromElements(arguments, kind, obj)) return true;
5598 break; 5606 break;
5599 } 5607 }
5600 } 5608 }
5601 5609
5602 // For functions check the context. 5610 // For functions check the context.
5603 if (IsJSFunction()) { 5611 if (IsJSFunction()) {
5604 // Get the constructor function for arguments array. 5612 // Get the constructor function for arguments array.
5605 Map* arguments_map = 5613 JSObject* arguments_boilerplate =
5606 heap->isolate()->context()->native_context()->sloppy_arguments_map(); 5614 heap->isolate()->context()->native_context()->
5615 sloppy_arguments_boilerplate();
5607 JSFunction* arguments_function = 5616 JSFunction* arguments_function =
5608 JSFunction::cast(arguments_map->constructor()); 5617 JSFunction::cast(arguments_boilerplate->map()->constructor());
5609 5618
5610 // Get the context and don't check if it is the native context. 5619 // Get the context and don't check if it is the native context.
5611 JSFunction* f = JSFunction::cast(this); 5620 JSFunction* f = JSFunction::cast(this);
5612 Context* context = f->context(); 5621 Context* context = f->context();
5613 if (context->IsNativeContext()) { 5622 if (context->IsNativeContext()) {
5614 return false; 5623 return false;
5615 } 5624 }
5616 5625
5617 // Check the non-special context slots. 5626 // Check the non-special context slots.
5618 for (int i = Context::MIN_CONTEXT_SLOTS; i < context->length(); i++) { 5627 for (int i = Context::MIN_CONTEXT_SLOTS; i < context->length(); i++) {
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
5890 const bool copying_; 5899 const bool copying_;
5891 const JSObject::DeepCopyHints hints_; 5900 const JSObject::DeepCopyHints hints_;
5892 }; 5901 };
5893 5902
5894 5903
5895 template <class ContextObject> 5904 template <class ContextObject>
5896 MaybeHandle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk( 5905 MaybeHandle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
5897 Handle<JSObject> object) { 5906 Handle<JSObject> object) {
5898 Isolate* isolate = this->isolate(); 5907 Isolate* isolate = this->isolate();
5899 bool copying = this->copying(); 5908 bool copying = this->copying();
5900 bool shallow = hints_ == JSObject::kObjectIsShallow; 5909 bool shallow = hints_ == JSObject::kObjectIsShallowArray;
5901 5910
5902 if (!shallow) { 5911 if (!shallow) {
5903 StackLimitCheck check(isolate); 5912 StackLimitCheck check(isolate);
5904 5913
5905 if (check.HasOverflowed()) { 5914 if (check.HasOverflowed()) {
5906 isolate->StackOverflow(); 5915 isolate->StackOverflow();
5907 return MaybeHandle<JSObject>(); 5916 return MaybeHandle<JSObject>();
5908 } 5917 }
5909 } 5918 }
5910 5919
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
6377 return storage; 6386 return storage;
6378 } 6387 }
6379 } 6388 }
6380 6389
6381 6390
6382 MaybeHandle<FixedArray> JSReceiver::GetKeys(Handle<JSReceiver> object, 6391 MaybeHandle<FixedArray> JSReceiver::GetKeys(Handle<JSReceiver> object,
6383 KeyCollectionType type) { 6392 KeyCollectionType type) {
6384 USE(ContainsOnlyValidKeys); 6393 USE(ContainsOnlyValidKeys);
6385 Isolate* isolate = object->GetIsolate(); 6394 Isolate* isolate = object->GetIsolate();
6386 Handle<FixedArray> content = isolate->factory()->empty_fixed_array(); 6395 Handle<FixedArray> content = isolate->factory()->empty_fixed_array();
6387 Handle<JSFunction> arguments_function( 6396 Handle<JSObject> arguments_boilerplate = Handle<JSObject>(
6388 JSFunction::cast(isolate->sloppy_arguments_map()->constructor())); 6397 isolate->context()->native_context()->sloppy_arguments_boilerplate(),
6398 isolate);
6399 Handle<JSFunction> arguments_function = Handle<JSFunction>(
6400 JSFunction::cast(arguments_boilerplate->map()->constructor()),
6401 isolate);
6389 6402
6390 // Only collect keys if access is permitted. 6403 // Only collect keys if access is permitted.
6391 for (Handle<Object> p = object; 6404 for (Handle<Object> p = object;
6392 *p != isolate->heap()->null_value(); 6405 *p != isolate->heap()->null_value();
6393 p = Handle<Object>(p->GetPrototype(isolate), isolate)) { 6406 p = Handle<Object>(p->GetPrototype(isolate), isolate)) {
6394 if (p->IsJSProxy()) { 6407 if (p->IsJSProxy()) {
6395 Handle<JSProxy> proxy(JSProxy::cast(*p), isolate); 6408 Handle<JSProxy> proxy(JSProxy::cast(*p), isolate);
6396 Handle<Object> args[] = { proxy }; 6409 Handle<Object> args[] = { proxy };
6397 Handle<Object> names; 6410 Handle<Object> names;
6398 ASSIGN_RETURN_ON_EXCEPTION( 6411 ASSIGN_RETURN_ON_EXCEPTION(
(...skipping 10606 matching lines...) Expand 10 before | Expand all | Expand 10 after
17005 #define ERROR_MESSAGES_TEXTS(C, T) T, 17018 #define ERROR_MESSAGES_TEXTS(C, T) T,
17006 static const char* error_messages_[] = { 17019 static const char* error_messages_[] = {
17007 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 17020 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
17008 }; 17021 };
17009 #undef ERROR_MESSAGES_TEXTS 17022 #undef ERROR_MESSAGES_TEXTS
17010 return error_messages_[reason]; 17023 return error_messages_[reason];
17011 } 17024 }
17012 17025
17013 17026
17014 } } // namespace v8::internal 17027 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698