OLD | NEW |
1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1817 * Returns the value if the setter intercepts the request. | 1817 * Returns the value if the setter intercepts the request. |
1818 * Otherwise, returns an empty handle. | 1818 * Otherwise, returns an empty handle. |
1819 */ | 1819 */ |
1820 typedef Handle<Value> (*IndexedPropertySetter)(uint32_t index, | 1820 typedef Handle<Value> (*IndexedPropertySetter)(uint32_t index, |
1821 Local<Value> value, | 1821 Local<Value> value, |
1822 const AccessorInfo& info); | 1822 const AccessorInfo& info); |
1823 | 1823 |
1824 | 1824 |
1825 /** | 1825 /** |
1826 * Returns a non-empty handle if the interceptor intercepts the request. | 1826 * Returns a non-empty handle if the interceptor intercepts the request. |
1827 * The result is true if the property exists and false otherwise. | 1827 * The result is true if either a boolean (true if property exists and false |
| 1828 * otherwise) or an integer encoding property attributes. |
1828 */ | 1829 */ |
| 1830 #ifdef USE_NEW_QUERY_CALLBACKS |
| 1831 typedef Handle<Integer> (*IndexedPropertyQuery)(uint32_t index, |
| 1832 const AccessorInfo& info); |
| 1833 #else |
1829 typedef Handle<Boolean> (*IndexedPropertyQuery)(uint32_t index, | 1834 typedef Handle<Boolean> (*IndexedPropertyQuery)(uint32_t index, |
1830 const AccessorInfo& info); | 1835 const AccessorInfo& info); |
| 1836 #endif |
| 1837 |
| 1838 typedef Handle<Value> (*IndexedPropertyQueryImpl)(uint32_t index, |
| 1839 const AccessorInfo& info); |
1831 | 1840 |
1832 /** | 1841 /** |
1833 * Returns a non-empty handle if the deleter intercepts the request. | 1842 * Returns a non-empty handle if the deleter intercepts the request. |
1834 * The return value is true if the property could be deleted and false | 1843 * The return value is true if the property could be deleted and false |
1835 * otherwise. | 1844 * otherwise. |
1836 */ | 1845 */ |
1837 typedef Handle<Boolean> (*IndexedPropertyDeleter)(uint32_t index, | 1846 typedef Handle<Boolean> (*IndexedPropertyDeleter)(uint32_t index, |
1838 const AccessorInfo& info); | 1847 const AccessorInfo& info); |
1839 | 1848 |
1840 /** | 1849 /** |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2038 NamedPropertySetter setter, | 2047 NamedPropertySetter setter, |
2039 NamedPropertyQuery query, | 2048 NamedPropertyQuery query, |
2040 NamedPropertyDeleter remover, | 2049 NamedPropertyDeleter remover, |
2041 NamedPropertyEnumerator enumerator, | 2050 NamedPropertyEnumerator enumerator, |
2042 Handle<Value> data); | 2051 Handle<Value> data); |
2043 void SetIndexedInstancePropertyHandler(IndexedPropertyGetter getter, | 2052 void SetIndexedInstancePropertyHandler(IndexedPropertyGetter getter, |
2044 IndexedPropertySetter setter, | 2053 IndexedPropertySetter setter, |
2045 IndexedPropertyQuery query, | 2054 IndexedPropertyQuery query, |
2046 IndexedPropertyDeleter remover, | 2055 IndexedPropertyDeleter remover, |
2047 IndexedPropertyEnumerator enumerator, | 2056 IndexedPropertyEnumerator enumerator, |
2048 Handle<Value> data); | 2057 Handle<Value> data) { |
| 2058 IndexedPropertyQueryImpl casted = |
| 2059 reinterpret_cast<IndexedPropertyQueryImpl>(query); |
| 2060 SetIndexedInstancePropertyHandlerImpl(getter, |
| 2061 setter, |
| 2062 casted, |
| 2063 remover, |
| 2064 enumerator, |
| 2065 data); |
| 2066 } |
| 2067 void SetIndexedInstancePropertyHandlerImpl( |
| 2068 IndexedPropertyGetter getter, |
| 2069 IndexedPropertySetter setter, |
| 2070 IndexedPropertyQueryImpl query, |
| 2071 IndexedPropertyDeleter remover, |
| 2072 IndexedPropertyEnumerator enumerator, |
| 2073 Handle<Value> data); |
2049 void SetInstanceCallAsFunctionHandler(InvocationCallback callback, | 2074 void SetInstanceCallAsFunctionHandler(InvocationCallback callback, |
2050 Handle<Value> data); | 2075 Handle<Value> data); |
2051 | 2076 |
2052 friend class Context; | 2077 friend class Context; |
2053 friend class ObjectTemplate; | 2078 friend class ObjectTemplate; |
2054 }; | 2079 }; |
2055 | 2080 |
2056 | 2081 |
2057 /** | 2082 /** |
2058 * An ObjectTemplate is used to create objects at runtime. | 2083 * An ObjectTemplate is used to create objects at runtime. |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2137 * \param enumerator The callback to invoke to enumerate all the indexed | 2162 * \param enumerator The callback to invoke to enumerate all the indexed |
2138 * properties of an object. | 2163 * properties of an object. |
2139 * \param data A piece of data that will be passed to the callbacks | 2164 * \param data A piece of data that will be passed to the callbacks |
2140 * whenever they are invoked. | 2165 * whenever they are invoked. |
2141 */ | 2166 */ |
2142 void SetIndexedPropertyHandler(IndexedPropertyGetter getter, | 2167 void SetIndexedPropertyHandler(IndexedPropertyGetter getter, |
2143 IndexedPropertySetter setter = 0, | 2168 IndexedPropertySetter setter = 0, |
2144 IndexedPropertyQuery query = 0, | 2169 IndexedPropertyQuery query = 0, |
2145 IndexedPropertyDeleter deleter = 0, | 2170 IndexedPropertyDeleter deleter = 0, |
2146 IndexedPropertyEnumerator enumerator = 0, | 2171 IndexedPropertyEnumerator enumerator = 0, |
2147 Handle<Value> data = Handle<Value>()); | 2172 Handle<Value> data = Handle<Value>()) { |
| 2173 IndexedPropertyQueryImpl casted = |
| 2174 reinterpret_cast<IndexedPropertyQueryImpl>(query); |
| 2175 SetIndexedPropertyHandlerImpl(getter, |
| 2176 setter, |
| 2177 casted, |
| 2178 deleter, |
| 2179 enumerator, |
| 2180 data); |
| 2181 } |
| 2182 private: |
| 2183 void SetIndexedPropertyHandlerImpl(IndexedPropertyGetter getter, |
| 2184 IndexedPropertySetter setter, |
| 2185 IndexedPropertyQueryImpl query, |
| 2186 IndexedPropertyDeleter deleter, |
| 2187 IndexedPropertyEnumerator enumerator, |
| 2188 Handle<Value> data); |
| 2189 public: |
| 2190 |
2148 /** | 2191 /** |
2149 * Sets the callback to be used when calling instances created from | 2192 * Sets the callback to be used when calling instances created from |
2150 * this template as a function. If no callback is set, instances | 2193 * this template as a function. If no callback is set, instances |
2151 * behave like normal JavaScript objects that cannot be called as a | 2194 * behave like normal JavaScript objects that cannot be called as a |
2152 * function. | 2195 * function. |
2153 */ | 2196 */ |
2154 void SetCallAsFunctionHandler(InvocationCallback callback, | 2197 void SetCallAsFunctionHandler(InvocationCallback callback, |
2155 Handle<Value> data = Handle<Value>()); | 2198 Handle<Value> data = Handle<Value>()); |
2156 | 2199 |
2157 /** | 2200 /** |
(...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3612 | 3655 |
3613 | 3656 |
3614 } // namespace v8 | 3657 } // namespace v8 |
3615 | 3658 |
3616 | 3659 |
3617 #undef V8EXPORT | 3660 #undef V8EXPORT |
3618 #undef TYPE_CHECK | 3661 #undef TYPE_CHECK |
3619 | 3662 |
3620 | 3663 |
3621 #endif // V8_H_ | 3664 #endif // V8_H_ |
OLD | NEW |