OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/objects.h" | 5 #include "src/objects.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <iomanip> | 8 #include <iomanip> |
9 #include <memory> | 9 #include <memory> |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 JSObject::GetPropertyWithInterceptor(it, &done), Object); | 988 JSObject::GetPropertyWithInterceptor(it, &done), Object); |
989 if (done) return result; | 989 if (done) return result; |
990 break; | 990 break; |
991 } | 991 } |
992 case LookupIterator::ACCESS_CHECK: | 992 case LookupIterator::ACCESS_CHECK: |
993 if (it->HasAccess()) break; | 993 if (it->HasAccess()) break; |
994 return JSObject::GetPropertyWithFailedAccessCheck(it); | 994 return JSObject::GetPropertyWithFailedAccessCheck(it); |
995 case LookupIterator::ACCESSOR: | 995 case LookupIterator::ACCESSOR: |
996 return GetPropertyWithAccessor(it); | 996 return GetPropertyWithAccessor(it); |
997 case LookupIterator::INTEGER_INDEXED_EXOTIC: | 997 case LookupIterator::INTEGER_INDEXED_EXOTIC: |
998 return ReadAbsentProperty(it); | 998 return it->isolate()->factory()->undefined_value(); |
999 case LookupIterator::DATA: | 999 case LookupIterator::DATA: |
1000 return it->GetDataValue(); | 1000 return it->GetDataValue(); |
1001 } | 1001 } |
1002 } | 1002 } |
1003 return ReadAbsentProperty(it); | 1003 return it->isolate()->factory()->undefined_value(); |
1004 } | 1004 } |
1005 | 1005 |
1006 | 1006 |
1007 // static | 1007 // static |
1008 MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate, | 1008 MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate, |
1009 Handle<JSProxy> proxy, | 1009 Handle<JSProxy> proxy, |
1010 Handle<Name> name, | 1010 Handle<Name> name, |
1011 Handle<Object> receiver, | 1011 Handle<Object> receiver, |
1012 bool* was_found) { | 1012 bool* was_found) { |
1013 *was_found = true; | 1013 *was_found = true; |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 if (info->is_sloppy() && !receiver->IsJSReceiver()) { | 1342 if (info->is_sloppy() && !receiver->IsJSReceiver()) { |
1343 ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver, | 1343 ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver, |
1344 Object::ConvertReceiver(isolate, receiver), | 1344 Object::ConvertReceiver(isolate, receiver), |
1345 Object); | 1345 Object); |
1346 } | 1346 } |
1347 | 1347 |
1348 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder, | 1348 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder, |
1349 Object::DONT_THROW); | 1349 Object::DONT_THROW); |
1350 Handle<Object> result = args.Call(call_fun, name); | 1350 Handle<Object> result = args.Call(call_fun, name); |
1351 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); | 1351 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
1352 if (result.is_null()) return ReadAbsentProperty(isolate, receiver, name); | 1352 if (result.is_null()) return isolate->factory()->undefined_value(); |
1353 // Rebox handle before return. | 1353 // Rebox handle before return. |
1354 return handle(*result, isolate); | 1354 return handle(*result, isolate); |
1355 } | 1355 } |
1356 | 1356 |
1357 // Regular accessor. | 1357 // Regular accessor. |
1358 Handle<Object> getter(AccessorPair::cast(*structure)->getter(), isolate); | 1358 Handle<Object> getter(AccessorPair::cast(*structure)->getter(), isolate); |
1359 if (getter->IsFunctionTemplateInfo()) { | 1359 if (getter->IsFunctionTemplateInfo()) { |
1360 return Builtins::InvokeApiFunction( | 1360 return Builtins::InvokeApiFunction( |
1361 isolate, false, Handle<FunctionTemplateInfo>::cast(getter), receiver, 0, | 1361 isolate, false, Handle<FunctionTemplateInfo>::cast(getter), receiver, 0, |
1362 nullptr, isolate->factory()->undefined_value()); | 1362 nullptr, isolate->factory()->undefined_value()); |
1363 } else if (getter->IsCallable()) { | 1363 } else if (getter->IsCallable()) { |
1364 // TODO(rossberg): nicer would be to cast to some JSCallable here... | 1364 // TODO(rossberg): nicer would be to cast to some JSCallable here... |
1365 return Object::GetPropertyWithDefinedGetter( | 1365 return Object::GetPropertyWithDefinedGetter( |
1366 receiver, Handle<JSReceiver>::cast(getter)); | 1366 receiver, Handle<JSReceiver>::cast(getter)); |
1367 } | 1367 } |
1368 // Getter is not a function. | 1368 // Getter is not a function. |
1369 return ReadAbsentProperty(isolate, receiver, it->GetName()); | 1369 return isolate->factory()->undefined_value(); |
1370 } | 1370 } |
1371 | 1371 |
1372 // static | 1372 // static |
1373 Address AccessorInfo::redirect(Isolate* isolate, Address address, | 1373 Address AccessorInfo::redirect(Isolate* isolate, Address address, |
1374 AccessorComponent component) { | 1374 AccessorComponent component) { |
1375 ApiFunction fun(address); | 1375 ApiFunction fun(address); |
1376 DCHECK_EQ(ACCESSOR_GETTER, component); | 1376 DCHECK_EQ(ACCESSOR_GETTER, component); |
1377 ExternalReference::Type type = ExternalReference::DIRECT_GETTER_CALL; | 1377 ExternalReference::Type type = ExternalReference::DIRECT_GETTER_CALL; |
1378 return ExternalReference(&fun, type, isolate).address(); | 1378 return ExternalReference(&fun, type, isolate).address(); |
1379 } | 1379 } |
(...skipping 3432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4812 | 4812 |
4813 case LookupIterator::NOT_FOUND: | 4813 case LookupIterator::NOT_FOUND: |
4814 case LookupIterator::TRANSITION: | 4814 case LookupIterator::TRANSITION: |
4815 UNREACHABLE(); | 4815 UNREACHABLE(); |
4816 } | 4816 } |
4817 } | 4817 } |
4818 | 4818 |
4819 return AddDataProperty(&own_lookup, value, NONE, should_throw, store_mode); | 4819 return AddDataProperty(&own_lookup, value, NONE, should_throw, store_mode); |
4820 } | 4820 } |
4821 | 4821 |
4822 MaybeHandle<Object> Object::ReadAbsentProperty(LookupIterator* it) { | |
4823 return it->isolate()->factory()->undefined_value(); | |
4824 } | |
4825 | |
4826 MaybeHandle<Object> Object::ReadAbsentProperty(Isolate* isolate, | |
4827 Handle<Object> receiver, | |
4828 Handle<Object> name) { | |
4829 return isolate->factory()->undefined_value(); | |
4830 } | |
4831 | |
4832 | |
4833 Maybe<bool> Object::CannotCreateProperty(Isolate* isolate, | 4822 Maybe<bool> Object::CannotCreateProperty(Isolate* isolate, |
4834 Handle<Object> receiver, | 4823 Handle<Object> receiver, |
4835 Handle<Object> name, | 4824 Handle<Object> name, |
4836 Handle<Object> value, | 4825 Handle<Object> value, |
4837 ShouldThrow should_throw) { | 4826 ShouldThrow should_throw) { |
4838 RETURN_FAILURE( | 4827 RETURN_FAILURE( |
4839 isolate, should_throw, | 4828 isolate, should_throw, |
4840 NewTypeError(MessageTemplate::kStrictCannotCreateProperty, name, | 4829 NewTypeError(MessageTemplate::kStrictCannotCreateProperty, name, |
4841 Object::TypeOf(isolate, receiver), receiver)); | 4830 Object::TypeOf(isolate, receiver), receiver)); |
4842 } | 4831 } |
(...skipping 14574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19417 for (PrototypeIterator iter(isolate, this, kStartAtReceiver, | 19406 for (PrototypeIterator iter(isolate, this, kStartAtReceiver, |
19418 PrototypeIterator::END_AT_NULL); | 19407 PrototypeIterator::END_AT_NULL); |
19419 !iter.IsAtEnd(); iter.AdvanceIgnoringProxies()) { | 19408 !iter.IsAtEnd(); iter.AdvanceIgnoringProxies()) { |
19420 if (iter.GetCurrent<Object>()->IsJSProxy()) return true; | 19409 if (iter.GetCurrent<Object>()->IsJSProxy()) return true; |
19421 } | 19410 } |
19422 return false; | 19411 return false; |
19423 } | 19412 } |
19424 | 19413 |
19425 } // namespace internal | 19414 } // namespace internal |
19426 } // namespace v8 | 19415 } // namespace v8 |
OLD | NEW |