Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index 51fae0e564f0c752284a77e411fd37378c7a84c6..07449def48a8c2ddb6c0f6093dfa985d517663ed 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -471,6 +471,9 @@ template <class T> class Eternal { |
}; |
+static const int kInternalFieldsInWeakCallback = 2; |
+ |
+ |
template <typename T> |
class WeakCallbackInfo { |
public: |
@@ -478,21 +481,28 @@ class WeakCallbackInfo { |
WeakCallbackInfo(Isolate* isolate, T* parameter, void* internal_field1, |
void* internal_field2) |
- : isolate_(isolate), |
- parameter_(parameter), |
- internal_field1_(internal_field1), |
- internal_field2_(internal_field2) {} |
+ : isolate_(isolate), parameter_(parameter) { |
+ internal_fields_[0] = internal_field1; |
+ internal_fields_[1] = internal_field2; |
+ } |
V8_INLINE Isolate* GetIsolate() const { return isolate_; } |
V8_INLINE T* GetParameter() const { return parameter_; } |
- V8_INLINE void* GetInternalField1() const { return internal_field1_; } |
- V8_INLINE void* GetInternalField2() const { return internal_field2_; } |
+ V8_INLINE void* GetInternalField(int index) const; |
+ |
+ V8_INLINE V8_DEPRECATE_SOON("use indexed version", |
+ void* GetInternalField1()) const { |
+ return internal_fields_[0]; |
+ } |
+ V8_INLINE V8_DEPRECATE_SOON("use indexed version", |
+ void* GetInternalField2()) const { |
+ return internal_fields_[1]; |
+ } |
private: |
Isolate* isolate_; |
T* parameter_; |
- void* internal_field1_; |
- void* internal_field2_; |
+ void* internal_fields_[2]; |
}; |
@@ -5974,6 +5984,7 @@ class V8_EXPORT V8 { |
static void CheckIsJust(bool is_just); |
static void ToLocalEmpty(); |
+ static void InternalFieldOutOfBounds(int index); |
template <class T> friend class Handle; |
template <class T> friend class Local; |
@@ -5981,6 +5992,8 @@ class V8_EXPORT V8 { |
friend class MaybeLocal; |
template <class T> |
friend class Maybe; |
+ template <class T> |
+ friend class WeakCallbackInfo; |
template <class T> friend class Eternal; |
template <class T> friend class PersistentBase; |
template <class T, class M> friend class Persistent; |
@@ -6833,6 +6846,17 @@ Local<T> MaybeLocal<T>::ToLocalChecked() { |
template <class T> |
+void* WeakCallbackInfo<T>::GetInternalField(int index) const { |
+#ifdef V8_ENABLE_CHECKS |
+ if (index < 0 || index >= kInternalFieldsInWeakCallback) { |
+ V8::InternalFieldOutOfBounds(index); |
+ } |
+#endif |
+ return internal_fields_[index]; |
+} |
+ |
+ |
+template <class T> |
T* PersistentBase<T>::New(Isolate* isolate, T* that) { |
if (that == NULL) return NULL; |
internal::Object** p = reinterpret_cast<internal::Object**>(that); |