Index: src/global-handles.h |
diff --git a/src/global-handles.h b/src/global-handles.h |
index b3756d0e62035f41d980f5efbe17538414ec2eb8..fe9ed5a2585afccd400b3f94c1efd3e504736527 100644 |
--- a/src/global-handles.h |
+++ b/src/global-handles.h |
@@ -98,9 +98,15 @@ struct ObjectGroupRetainerInfo { |
enum WeaknessType { |
- NORMAL_WEAK, // Embedder gets a handle to the dying object. |
- PHANTOM_WEAK, // Embedder gets the parameter they passed in earlier. |
- INTERNAL_FIELDS_WEAK // Embedder gets 2 internal fields from dying object. |
+ NORMAL_WEAK, // Embedder gets a handle to the dying object. |
+ // In the following cases, the embedder gets the parameter they passed in |
+ // earlier, and the 0, 1 or 2 first internal fields. Note that the internal |
+ // fields must contain aligned non-V8 pointers. Getting pointers to V8 |
+ // objects through this interface would be GC unsafe so in that case the |
+ // embedder gets a null pointer instead. |
+ PHANTOM_WEAK_0_INTERNAL_FIELDS, |
+ PHANTOM_WEAK_1_INTERNAL_FIELDS, |
+ PHANTOM_WEAK_2_INTERNAL_FIELDS |
}; |
@@ -139,14 +145,9 @@ class GlobalHandles { |
// It would be nice to template this one, but it's really hard to get |
// the template instantiator to work right if you do. |
- static void MakePhantom(Object** location, void* parameter, |
- PhantomCallbackData<void>::Callback weak_callback); |
- |
static void MakePhantom( |
- Object** location, |
- v8::InternalFieldsCallbackData<void, void>::Callback weak_callback, |
- int16_t internal_field_index1, |
- int16_t internal_field_index2 = v8::Object::kNoInternalFieldIndex); |
+ Object** location, void* parameter, int number_of_internal_fields, |
+ PhantomCallbackData<void, void, void>::Callback weak_callback); |
void RecordStats(HeapStats* stats); |
@@ -302,7 +303,6 @@ class GlobalHandles { |
class NodeBlock; |
class NodeIterator; |
class PendingPhantomCallback; |
- class PendingInternalFieldsCallback; |
Isolate* isolate_; |
@@ -336,7 +336,6 @@ class GlobalHandles { |
List<ObjectGroupConnection> implicit_ref_connections_; |
List<PendingPhantomCallback> pending_phantom_callbacks_; |
- List<PendingInternalFieldsCallback> pending_internal_fields_callbacks_; |
friend class Isolate; |
@@ -346,7 +345,7 @@ class GlobalHandles { |
class GlobalHandles::PendingPhantomCallback { |
public: |
- typedef PhantomCallbackData<void> Data; |
+ typedef PhantomCallbackData<void, void, void> Data; |
PendingPhantomCallback(Node* node, Data data, Data::Callback callback) |
: node_(node), data_(data), callback_(callback) {} |
@@ -361,20 +360,6 @@ class GlobalHandles::PendingPhantomCallback { |
}; |
-class GlobalHandles::PendingInternalFieldsCallback { |
- public: |
- typedef InternalFieldsCallbackData<void, void> Data; |
- PendingInternalFieldsCallback(Data data, Data::Callback callback) |
- : data_(data), callback_(callback) {} |
- |
- void invoke() { callback_(data_); } |
- |
- private: |
- Data data_; |
- Data::Callback callback_; |
-}; |
- |
- |
class EternalHandles { |
public: |
enum SingletonHandle { |