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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 if (index >= 0 && index < str->length()) { | 155 if (index >= 0 && index < str->length()) { |
156 return GetCharAt(str, index); | 156 return GetCharAt(str, index); |
157 } | 157 } |
158 } | 158 } |
159 | 159 |
160 // Fall back to GetObjectProperty. | 160 // Fall back to GetObjectProperty. |
161 return GetObjectProperty(isolate, receiver_obj, key_obj, language_mode); | 161 return GetObjectProperty(isolate, receiver_obj, key_obj, language_mode); |
162 } | 162 } |
163 | 163 |
164 | 164 |
| 165 MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, |
| 166 Handle<JSReceiver> receiver, |
| 167 Handle<Object> key, |
| 168 LanguageMode language_mode) { |
| 169 // Check if the given key is an array index. |
| 170 uint32_t index = 0; |
| 171 if (key->ToArrayIndex(&index)) { |
| 172 return JSReceiver::DeleteElement(receiver, index, language_mode); |
| 173 } |
| 174 |
| 175 Handle<Name> name; |
| 176 ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); |
| 177 |
| 178 return JSReceiver::DeletePropertyOrElement(receiver, name, language_mode); |
| 179 } |
| 180 |
| 181 |
165 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, | 182 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, |
166 Handle<Object> object, | 183 Handle<Object> object, |
167 Handle<Object> key, | 184 Handle<Object> key, |
168 Handle<Object> value, | 185 Handle<Object> value, |
169 LanguageMode language_mode) { | 186 LanguageMode language_mode) { |
170 if (object->IsUndefined() || object->IsNull()) { | 187 if (object->IsUndefined() || object->IsNull()) { |
171 THROW_NEW_ERROR( | 188 THROW_NEW_ERROR( |
172 isolate, | 189 isolate, |
173 NewTypeError(MessageTemplate::kNonObjectPropertyStore, key, object), | 190 NewTypeError(MessageTemplate::kNonObjectPropertyStore, key, object), |
174 Object); | 191 Object); |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 601 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
585 isolate, result, | 602 isolate, result, |
586 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); | 603 Runtime::SetObjectProperty(isolate, object, key, value, language_mode)); |
587 return *result; | 604 return *result; |
588 } | 605 } |
589 | 606 |
590 | 607 |
591 RUNTIME_FUNCTION(Runtime_DeleteProperty) { | 608 RUNTIME_FUNCTION(Runtime_DeleteProperty) { |
592 HandleScope scope(isolate); | 609 HandleScope scope(isolate); |
593 DCHECK(args.length() == 3); | 610 DCHECK(args.length() == 3); |
594 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); | 611 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0); |
595 CONVERT_ARG_HANDLE_CHECKED(Name, key, 1); | 612 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
596 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 2); | 613 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 2); |
597 Handle<Object> result; | 614 Handle<Object> result; |
598 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 615 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
599 isolate, result, | 616 isolate, result, |
600 JSReceiver::DeletePropertyOrElement(object, key, language_mode)); | 617 Runtime::DeleteObjectProperty(isolate, receiver, key, language_mode)); |
601 return *result; | 618 return *result; |
602 } | 619 } |
603 | 620 |
604 | 621 |
605 static Object* HasOwnPropertyImplementation(Isolate* isolate, | 622 static Object* HasOwnPropertyImplementation(Isolate* isolate, |
606 Handle<JSObject> object, | 623 Handle<JSObject> object, |
607 Handle<Name> key) { | 624 Handle<Name> key) { |
608 Maybe<bool> maybe = JSReceiver::HasOwnProperty(object, key); | 625 Maybe<bool> maybe = JSReceiver::HasOwnProperty(object, key); |
609 if (!maybe.IsJust()) return isolate->heap()->exception(); | 626 if (!maybe.IsJust()) return isolate->heap()->exception(); |
610 if (maybe.FromJust()) return isolate->heap()->true_value(); | 627 if (maybe.FromJust()) return isolate->heap()->true_value(); |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1415 CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3); | 1432 CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3); |
1416 | 1433 |
1417 RETURN_FAILURE_ON_EXCEPTION( | 1434 RETURN_FAILURE_ON_EXCEPTION( |
1418 isolate, | 1435 isolate, |
1419 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), | 1436 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), |
1420 setter, attrs)); | 1437 setter, attrs)); |
1421 return isolate->heap()->undefined_value(); | 1438 return isolate->heap()->undefined_value(); |
1422 } | 1439 } |
1423 } // namespace internal | 1440 } // namespace internal |
1424 } // namespace v8 | 1441 } // namespace v8 |
OLD | NEW |