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

Side by Side Diff: src/runtime/runtime-object.cc

Issue 1224523002: Avoid converting key to string for deleting of elements (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « src/runtime/runtime.h ('k') | src/v8natives.js » ('j') | src/v8natives.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698