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

Side by Side Diff: src/keys.cc

Issue 2028983002: Introduce IsUndefined(Isolate*) and IsTheHole(Isolate*) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase master Created 4 years, 6 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
« no previous file with comments | « src/json-stringifier.cc ('k') | src/log.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/keys.h" 5 #include "src/keys.h"
6 6
7 #include "src/api-arguments.h" 7 #include "src/api-arguments.h"
8 #include "src/elements.h" 8 #include "src/elements.h"
9 #include "src/factory.h" 9 #include "src/factory.h"
10 #include "src/identity-map.h" 10 #include "src/identity-map.h"
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 ? object->GetIndexedInterceptor() 432 ? object->GetIndexedInterceptor()
433 : object->GetNamedInterceptor(), 433 : object->GetNamedInterceptor(),
434 isolate); 434 isolate);
435 if ((accumulator->filter() & ONLY_ALL_CAN_READ) && 435 if ((accumulator->filter() & ONLY_ALL_CAN_READ) &&
436 !interceptor->all_can_read()) { 436 !interceptor->all_can_read()) {
437 return Just(true); 437 return Just(true);
438 } 438 }
439 PropertyCallbackArguments args(isolate, interceptor->data(), *receiver, 439 PropertyCallbackArguments args(isolate, interceptor->data(), *receiver,
440 *object, Object::DONT_THROW); 440 *object, Object::DONT_THROW);
441 Handle<JSObject> result; 441 Handle<JSObject> result;
442 if (!interceptor->enumerator()->IsUndefined()) { 442 if (!interceptor->enumerator()->IsUndefined(isolate)) {
443 Callback enum_fun = v8::ToCData<Callback>(interceptor->enumerator()); 443 Callback enum_fun = v8::ToCData<Callback>(interceptor->enumerator());
444 const char* log_tag = type == kIndexed ? "interceptor-indexed-enum" 444 const char* log_tag = type == kIndexed ? "interceptor-indexed-enum"
445 : "interceptor-named-enum"; 445 : "interceptor-named-enum";
446 LOG(isolate, ApiObjectAccess(log_tag, *object)); 446 LOG(isolate, ApiObjectAccess(log_tag, *object));
447 result = args.Call(enum_fun); 447 result = args.Call(enum_fun);
448 } 448 }
449 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<bool>()); 449 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<bool>());
450 if (result.is_null()) return Just(true); 450 if (result.is_null()) return Just(true);
451 accumulator->AddKeys( 451 accumulator->AddKeys(
452 result, type == kIndexed ? CONVERT_TO_ARRAY_INDEX : DO_NOT_CONVERT); 452 result, type == kIndexed ? CONVERT_TO_ARRAY_INDEX : DO_NOT_CONVERT);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 } 591 }
592 // 4. Let target be the value of the [[ProxyTarget]] internal slot of O. 592 // 4. Let target be the value of the [[ProxyTarget]] internal slot of O.
593 Handle<JSReceiver> target(proxy->target(), isolate_); 593 Handle<JSReceiver> target(proxy->target(), isolate_);
594 // 5. Let trap be ? GetMethod(handler, "ownKeys"). 594 // 5. Let trap be ? GetMethod(handler, "ownKeys").
595 Handle<Object> trap; 595 Handle<Object> trap;
596 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 596 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
597 isolate_, trap, Object::GetMethod(Handle<JSReceiver>::cast(handler), 597 isolate_, trap, Object::GetMethod(Handle<JSReceiver>::cast(handler),
598 isolate_->factory()->ownKeys_string()), 598 isolate_->factory()->ownKeys_string()),
599 Nothing<bool>()); 599 Nothing<bool>());
600 // 6. If trap is undefined, then 600 // 6. If trap is undefined, then
601 if (trap->IsUndefined()) { 601 if (trap->IsUndefined(isolate_)) {
602 // 6a. Return target.[[OwnPropertyKeys]](). 602 // 6a. Return target.[[OwnPropertyKeys]]().
603 return CollectOwnJSProxyTargetKeys(proxy, target); 603 return CollectOwnJSProxyTargetKeys(proxy, target);
604 } 604 }
605 // 7. Let trapResultArray be Call(trap, handler, «target»). 605 // 7. Let trapResultArray be Call(trap, handler, «target»).
606 Handle<Object> trap_result_array; 606 Handle<Object> trap_result_array;
607 Handle<Object> args[] = {target}; 607 Handle<Object> args[] = {target};
608 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 608 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
609 isolate_, trap_result_array, 609 isolate_, trap_result_array,
610 Execution::Call(isolate_, trap, handler, arraysize(args), args), 610 Execution::Call(isolate_, trap, handler, arraysize(args), args),
611 Nothing<bool>()); 611 Nothing<bool>());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 isolate_, keys, JSReceiver::OwnPropertyKeys(target), Nothing<bool>()); 730 isolate_, keys, JSReceiver::OwnPropertyKeys(target), Nothing<bool>());
731 bool prev_filter_proxy_keys_ = filter_proxy_keys_; 731 bool prev_filter_proxy_keys_ = filter_proxy_keys_;
732 filter_proxy_keys_ = false; 732 filter_proxy_keys_ = false;
733 Maybe<bool> result = AddKeysFromJSProxy(proxy, keys); 733 Maybe<bool> result = AddKeysFromJSProxy(proxy, keys);
734 filter_proxy_keys_ = prev_filter_proxy_keys_; 734 filter_proxy_keys_ = prev_filter_proxy_keys_;
735 return result; 735 return result;
736 } 736 }
737 737
738 } // namespace internal 738 } // namespace internal
739 } // namespace v8 739 } // namespace v8
OLDNEW
« no previous file with comments | « src/json-stringifier.cc ('k') | src/log.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698