Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index 02abb4cb0f818fee0a3bbf5b5b85960b002cc3a6..05dc527ada565f94ffa93f2658ac5ed1e1ea6619 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -1726,13 +1726,22 @@ typedef Handle<Value> (*NamedPropertySetter)(Local<String> property, |
Local<Value> value, |
const AccessorInfo& info); |
- |
/** |
* Returns a non-empty handle if the interceptor intercepts the request. |
- * The result is true if the property exists and false otherwise. |
+ * The result is either boolean (true if property exists and false |
+ * otherwise) or an integer encoding property attributes. |
*/ |
+#ifdef USE_NEW_QUERY_CALLBACKS |
+typedef Handle<Integer> (*NamedPropertyQuery)(Local<String> property, |
+ const AccessorInfo& info); |
+#else |
typedef Handle<Boolean> (*NamedPropertyQuery)(Local<String> property, |
const AccessorInfo& info); |
+#endif |
+ |
+typedef Handle<Value> (*NamedPropertyQueryImpl)(Local<String> property, |
+ const AccessorInfo& info); |
+ |
/** |
@@ -1984,7 +1993,16 @@ class V8EXPORT FunctionTemplate : public Template { |
NamedPropertyQuery query, |
NamedPropertyDeleter remover, |
NamedPropertyEnumerator enumerator, |
- Handle<Value> data); |
+ Handle<Value> data) { |
+ NamedPropertyQueryImpl casted = |
+ reinterpret_cast<NamedPropertyQueryImpl>(query); |
+ SetNamedInstancePropertyHandlerImpl(getter, |
+ setter, |
+ casted, |
+ remover, |
+ enumerator, |
+ data); |
+ } |
void SetIndexedInstancePropertyHandler(IndexedPropertyGetter getter, |
IndexedPropertySetter setter, |
IndexedPropertyQuery query, |
@@ -1996,6 +2014,13 @@ class V8EXPORT FunctionTemplate : public Template { |
friend class Context; |
friend class ObjectTemplate; |
+ private: |
+ void SetNamedInstancePropertyHandlerImpl(NamedPropertyGetter getter, |
+ NamedPropertySetter setter, |
+ NamedPropertyQueryImpl query, |
+ NamedPropertyDeleter remover, |
+ NamedPropertyEnumerator enumerator, |
+ Handle<Value> data); |
}; |
@@ -2053,7 +2078,7 @@ class V8EXPORT ObjectTemplate : public Template { |
* |
* \param getter The callback to invoke when getting a property. |
* \param setter The callback to invoke when setting a property. |
- * \param query The callback to invoke to check is an object has a property. |
+ * \param query The callback to invoke to check if an object has a property. |
* \param deleter The callback to invoke when deleting a property. |
* \param enumerator The callback to invoke to enumerate all the named |
* properties of an object. |
@@ -2065,7 +2090,26 @@ class V8EXPORT ObjectTemplate : public Template { |
NamedPropertyQuery query = 0, |
NamedPropertyDeleter deleter = 0, |
NamedPropertyEnumerator enumerator = 0, |
- Handle<Value> data = Handle<Value>()); |
+ Handle<Value> data = Handle<Value>()) { |
+ NamedPropertyQueryImpl casted = |
+ reinterpret_cast<NamedPropertyQueryImpl>(query); |
+ SetNamedPropertyHandlerImpl(getter, |
+ setter, |
+ casted, |
+ deleter, |
+ enumerator, |
+ data); |
+ } |
+ |
+ private: |
+ void SetNamedPropertyHandlerImpl(NamedPropertyGetter getter, |
+ NamedPropertySetter setter, |
+ NamedPropertyQueryImpl query, |
+ NamedPropertyDeleter deleter, |
+ NamedPropertyEnumerator enumerator, |
+ Handle<Value> data); |
+ |
+ public: |
/** |
* Sets an indexed property handler on the object template. |