Reviewers: Kasper Lund, Description: Introduce faster utilty methods for storing and retrieving native pointers in internal fields.
Please review this at http://codereview.chromium.org/155635 Affected files: M include/v8.h M src/api.cc Index: include/v8.h diff --git a/include/v8.h b/include/v8.h index 8f22c81b651ef6a07c8e2e87c0b1a0e7743a9e39..4d4e0554e47b95a36faf6c6b602e83e2580b7588 100644 --- a/include/v8.h +++ b/include/v8.h @@ -1110,8 +1110,12 @@ class V8EXPORT Object : public Value { int InternalFieldCount(); /** Gets the value in an internal field. */ Local<Value> GetInternalField(int index); + /** Gets a native pointer from an internal field. */ + void* GetPointerFromInternalField(int index); /** Sets the value in an internal field. */ void SetInternalField(int index, Handle<Value> value); + /** Sets a native pointer in an internal field. */ + void SetPointerInInternalField(int index, void* ptr); // Testers for local properties. bool HasRealNamedProperty(Handle<String> key); Index: src/api.cc diff --git a/src/api.cc b/src/api.cc index 145fa9d9b82760a62072278e3cd643344f37021c..13849c2b361d6f506a695242b986a42c0ee7c838 100644 --- a/src/api.cc +++ b/src/api.cc @@ -2451,6 +2451,13 @@ Local<Value> v8::Object::GetInternalField(int index) { } +void* v8::Object::GetPointerFromInternalField(int index) { + i::Handle<i::JSObject> obj = Utils::OpenHandle(this); + int value = i::Smi::cast(obj->GetInternalField(index))->value(); + return reinterpret_cast<void*>(value << 1); +} + + void v8::Object::SetInternalField(int index, v8::Handle<Value> value) { if (IsDeadCheck("v8::Object::SetInternalField()")) return; i::Handle<i::JSObject> obj = Utils::OpenHandle(this); @@ -2465,6 +2472,14 @@ void v8::Object::SetInternalField(int index, v8::Handle<Value> value) { } +void v8::Object::SetPointerInInternalField(int index, void* ptr) { + i::Handle<i::JSObject> obj = Utils::OpenHandle(this); + int value = reinterpret_cast<int>(ptr); + ASSERT(value & 0x1 == 0); + obj->SetInternalField(index, i::Smi::FromInt(value >> 1)); +} + + // --- E n v i r o n m e n t --- bool v8::V8::Initialize() { --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
