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

Unified Diff: src/api.cc

Issue 2196533003: [api] Cleaning up: Replace NeanderArray with FixedArray implementation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: mind the pointers Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/api.h ('k') | src/api-natives.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index e0caca6f664a820382bde5c73b726891e6de45a3..2e82e05c99dfbd9a5b6e684b64dc6421f968dd0c 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -1052,49 +1052,6 @@ int NeanderObject::size() {
}
-NeanderArray::NeanderArray(v8::internal::Isolate* isolate) : obj_(isolate, 2) {
- obj_.set(0, i::Smi::FromInt(0));
-}
-
-
-int NeanderArray::length() {
- return i::Smi::cast(obj_.get(0))->value();
-}
-
-
-i::Object* NeanderArray::get(int offset) {
- DCHECK_LE(0, offset);
- DCHECK_LT(offset, length());
- return obj_.get(offset + 1);
-}
-
-
-// This method cannot easily return an error value, therefore it is necessary
-// to check for a dead VM with ON_BAILOUT before calling it. To remind you
-// about this there is no HandleScope in this method. When you add one to the
-// site calling this method you should check that you ensured the VM was not
-// dead first.
-void NeanderArray::add(i::Isolate* isolate, i::Handle<i::Object> value) {
- int length = this->length();
- int size = obj_.size();
- if (length == size - 1) {
- i::Factory* factory = isolate->factory();
- i::Handle<i::FixedArray> new_elms = factory->NewFixedArray(2 * size);
- for (int i = 0; i < length; i++)
- new_elms->set(i + 1, get(i));
- obj_.value()->set_elements(*new_elms);
- }
- obj_.set(length + 1, *value);
- obj_.set(0, i::Smi::FromInt(length + 1));
-}
-
-
-void NeanderArray::set(int index, i::Object* value) {
- if (index < 0 || index >= this->length()) return;
- obj_.set(index + 1, value);
-}
-
-
// --- T e m p l a t e ---
@@ -7982,12 +7939,13 @@ bool Isolate::AddMessageListener(MessageCallback that, Local<Value> data) {
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
ENTER_V8(isolate);
i::HandleScope scope(isolate);
- NeanderArray listeners(isolate->factory()->message_listeners());
+ i::Handle<i::TemplateList> list = isolate->factory()->message_listeners();
NeanderObject obj(isolate, 2);
obj.set(0, *isolate->factory()->NewForeign(FUNCTION_ADDR(that)));
obj.set(1, data.IsEmpty() ? isolate->heap()->undefined_value()
: *Utils::OpenHandle(*data));
- listeners.add(isolate, obj.value());
+ list = i::TemplateList::Add(isolate, list, obj.value());
+ isolate->heap()->SetMessageListeners(*list);
return true;
}
@@ -7996,14 +7954,15 @@ void Isolate::RemoveMessageListeners(MessageCallback that) {
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
ENTER_V8(isolate);
i::HandleScope scope(isolate);
- NeanderArray listeners(isolate->factory()->message_listeners());
- for (int i = 0; i < listeners.length(); i++) {
- if (listeners.get(i)->IsUndefined(isolate)) continue; // skip deleted ones
+ i::DisallowHeapAllocation no_gc;
+ i::TemplateList* listeners = isolate->heap()->message_listeners();
+ for (int i = 0; i < listeners->length(); i++) {
+ if (listeners->get(i)->IsUndefined(isolate)) continue; // skip deleted ones
- NeanderObject listener(i::JSObject::cast(listeners.get(i)));
- i::Handle<i::Foreign> callback_obj(i::Foreign::cast(listener.get(0)));
+ NeanderObject listener(i::JSObject::cast(listeners->get(i)));
+ i::Foreign* callback_obj = i::Foreign::cast(listener.get(0));
if (callback_obj->foreign_address() == FUNCTION_ADDR(that)) {
- listeners.set(i, isolate->heap()->undefined_value());
+ listeners->set(i, isolate->heap()->undefined_value());
}
}
}
« no previous file with comments | « src/api.h ('k') | src/api-natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698