| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
| 6 | 6 |
| 7 #include "src/arguments.h" | 7 #include "src/arguments.h" |
| 8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
| 9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
| 10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 // Well, there is one exception: Handle [] on strings. | 746 // Well, there is one exception: Handle [] on strings. |
| 747 Handle<String> string = Handle<String>::cast(object); | 747 Handle<String> string = Handle<String>::cast(object); |
| 748 if (index < static_cast<uint32_t>(string->length())) { | 748 if (index < static_cast<uint32_t>(string->length())) { |
| 749 return isolate->heap()->true_value(); | 749 return isolate->heap()->true_value(); |
| 750 } | 750 } |
| 751 } | 751 } |
| 752 return isolate->heap()->false_value(); | 752 return isolate->heap()->false_value(); |
| 753 } | 753 } |
| 754 | 754 |
| 755 | 755 |
| 756 // ES6 section 12.9.3, operator in. |
| 756 RUNTIME_FUNCTION(Runtime_HasProperty) { | 757 RUNTIME_FUNCTION(Runtime_HasProperty) { |
| 757 HandleScope scope(isolate); | 758 HandleScope scope(isolate); |
| 758 DCHECK(args.length() == 2); | 759 DCHECK_EQ(2, args.length()); |
| 759 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0); | 760 CONVERT_ARG_HANDLE_CHECKED(Object, key, 0); |
| 760 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 761 CONVERT_ARG_HANDLE_CHECKED(Object, object, 1); |
| 761 | 762 |
| 763 // Check that {object} is actually a receiver. |
| 764 if (!object->IsJSReceiver()) { |
| 765 THROW_NEW_ERROR_RETURN_FAILURE( |
| 766 isolate, |
| 767 NewTypeError(MessageTemplate::kInvalidInOperatorUse, key, object)); |
| 768 } |
| 769 Handle<JSReceiver> receiver = Handle<JSReceiver>::cast(object); |
| 770 |
| 771 // Convert the {key} to a name. |
| 762 Handle<Name> name; | 772 Handle<Name> name; |
| 763 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, | 773 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, |
| 764 Object::ToName(isolate, key)); | 774 Object::ToName(isolate, key)); |
| 775 |
| 776 // Lookup the {name} on {receiver}. |
| 765 Maybe<bool> maybe = JSReceiver::HasProperty(receiver, name); | 777 Maybe<bool> maybe = JSReceiver::HasProperty(receiver, name); |
| 766 if (!maybe.IsJust()) return isolate->heap()->exception(); | 778 if (!maybe.IsJust()) return isolate->heap()->exception(); |
| 767 return isolate->heap()->ToBoolean(maybe.FromJust()); | 779 return isolate->heap()->ToBoolean(maybe.FromJust()); |
| 768 } | 780 } |
| 769 | |
| 770 | |
| 771 RUNTIME_FUNCTION(Runtime_HasElement) { | |
| 772 HandleScope scope(isolate); | |
| 773 DCHECK(args.length() == 2); | |
| 774 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0); | |
| 775 CONVERT_SMI_ARG_CHECKED(index, 1); | |
| 776 | |
| 777 Maybe<bool> maybe = JSReceiver::HasElement(receiver, index); | |
| 778 if (!maybe.IsJust()) return isolate->heap()->exception(); | |
| 779 return isolate->heap()->ToBoolean(maybe.FromJust()); | |
| 780 } | |
| 781 | 781 |
| 782 | 782 |
| 783 RUNTIME_FUNCTION(Runtime_IsPropertyEnumerable) { | 783 RUNTIME_FUNCTION(Runtime_IsPropertyEnumerable) { |
| 784 HandleScope scope(isolate); | 784 HandleScope scope(isolate); |
| 785 DCHECK(args.length() == 2); | 785 DCHECK(args.length() == 2); |
| 786 | 786 |
| 787 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 787 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
| 788 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); | 788 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); |
| 789 | 789 |
| 790 Maybe<PropertyAttributes> maybe = | 790 Maybe<PropertyAttributes> maybe = |
| (...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1563 RUNTIME_FUNCTION(Runtime_CreateIterResultObject) { | 1563 RUNTIME_FUNCTION(Runtime_CreateIterResultObject) { |
| 1564 HandleScope scope(isolate); | 1564 HandleScope scope(isolate); |
| 1565 DCHECK_EQ(2, args.length()); | 1565 DCHECK_EQ(2, args.length()); |
| 1566 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); | 1566 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); |
| 1567 CONVERT_ARG_HANDLE_CHECKED(Object, done, 1); | 1567 CONVERT_ARG_HANDLE_CHECKED(Object, done, 1); |
| 1568 return *isolate->factory()->NewJSIteratorResult(value, done); | 1568 return *isolate->factory()->NewJSIteratorResult(value, done); |
| 1569 } | 1569 } |
| 1570 | 1570 |
| 1571 } // namespace internal | 1571 } // namespace internal |
| 1572 } // namespace v8 | 1572 } // namespace v8 |
| OLD | NEW |