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/v8.h" | 5 #include "src/v8.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.h" | 9 #include "src/debug.h" |
10 #include "src/messages.h" | 10 #include "src/messages.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 // TODO(verwaest): Make sure GetProperty(LookupIterator*) can handle this, and | 75 // TODO(verwaest): Make sure GetProperty(LookupIterator*) can handle this, and |
76 // remove the special casing here. | 76 // remove the special casing here. |
77 if (name->AsArrayIndex(&index)) { | 77 if (name->AsArrayIndex(&index)) { |
78 return GetElementOrCharAt(isolate, object, index); | 78 return GetElementOrCharAt(isolate, object, index); |
79 } else { | 79 } else { |
80 return Object::GetProperty(object, name); | 80 return Object::GetProperty(object, name); |
81 } | 81 } |
82 } | 82 } |
83 | 83 |
84 | 84 |
| 85 MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, |
| 86 Handle<JSReceiver> receiver, |
| 87 Handle<Object> key, |
| 88 LanguageMode language_mode) { |
| 89 // Check if the given key is an array index. |
| 90 uint32_t index = 0; |
| 91 if (key->ToArrayIndex(&index)) { |
| 92 return JSReceiver::DeleteElement(receiver, index, language_mode); |
| 93 } |
| 94 |
| 95 Handle<Name> name; |
| 96 ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); |
| 97 |
| 98 return JSReceiver::DeletePropertyOrElement(receiver, name, language_mode); |
| 99 } |
| 100 |
| 101 |
85 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, | 102 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
86 Handle<Object> object, | 103 Handle<Object> object, |
87 Handle<Object> key, | 104 Handle<Object> key, |
88 Handle<Object> value, | 105 Handle<Object> value, |
89 LanguageMode language_mode) { | 106 LanguageMode language_mode) { |
90 if (object->IsUndefined() || object->IsNull()) { | 107 if (object->IsUndefined() || object->IsNull()) { |
91 THROW_NEW_ERROR( | 108 THROW_NEW_ERROR( |
92 isolate, | 109 isolate, |
93 NewTypeError(MessageTemplate::kNonObjectPropertyStore, key, object), | 110 NewTypeError(MessageTemplate::kNonObjectPropertyStore, key, object), |
94 Object); | 111 Object); |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 590 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
574 isolate, result, | 591 isolate, result, |
575 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); | 592 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); |
576 return *result; | 593 return *result; |
577 } | 594 } |
578 | 595 |
579 | 596 |
580 RUNTIME_FUNCTION(Runtime_DeleteProperty) { | 597 RUNTIME_FUNCTION(Runtime_DeleteProperty) { |
581 HandleScope scope(isolate); | 598 HandleScope scope(isolate); |
582 DCHECK(args.length() == 3); | 599 DCHECK(args.length() == 3); |
583 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); | 600 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0); |
584 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); | 601 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
585 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 2); | 602 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 2); |
586 Handle<Object> result; | 603 Handle<Object> result; |
587 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 604 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
588 isolate, result, | 605 isolate, result, |
589 JSReceiver::DeletePropertyOrElement(object, key, language_mode)); | 606 Runtime::DeleteObjectProperty(isolate, receiver, key, language_mode)); |
590 return *result; | 607 return *result; |
591 } | 608 } |
592 | 609 |
593 | 610 |
594 static Object* HasOwnPropertyImplementation(Isolate* isolate, | 611 static Object* HasOwnPropertyImplementation(Isolate* isolate, |
595 Handle<JSObject> object, | 612 Handle<JSObject> object, |
596 Handle<Name> key) { | 613 Handle<Name> key) { |
597 Maybe<bool> maybe = JSReceiver::HasOwnProperty(object, key); | 614 Maybe<bool> maybe = JSReceiver::HasOwnProperty(object, key); |
598 if (!maybe.IsJust()) return isolate->heap()->exception(); | 615 if (!maybe.IsJust()) return isolate->heap()->exception(); |
599 if (maybe.FromJust()) return isolate->heap()->true_value(); | 616 if (maybe.FromJust()) return isolate->heap()->true_value(); |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1404 CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3); | 1421 CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3); |
1405 | 1422 |
1406 RETURN_FAILURE_ON_EXCEPTION( | 1423 RETURN_FAILURE_ON_EXCEPTION( |
1407 isolate, | 1424 isolate, |
1408 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), | 1425 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), |
1409 setter, attrs)); | 1426 setter, attrs)); |
1410 return isolate->heap()->undefined_value(); | 1427 return isolate->heap()->undefined_value(); |
1411 } | 1428 } |
1412 } // namespace internal | 1429 } // namespace internal |
1413 } // namespace v8 | 1430 } // namespace v8 |
OLD | NEW |