| 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 |