Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: include/v8.h

Issue 12494012: new style of property/function callbacks (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 class ImplementationUtilities; 118 class ImplementationUtilities;
119 class Signature; 119 class Signature;
120 class AccessorSignature; 120 class AccessorSignature;
121 template <class T> class Handle; 121 template <class T> class Handle;
122 template <class T> class Local; 122 template <class T> class Local;
123 template <class T> class Persistent; 123 template <class T> class Persistent;
124 class FunctionTemplate; 124 class FunctionTemplate;
125 class ObjectTemplate; 125 class ObjectTemplate;
126 class Data; 126 class Data;
127 class AccessorInfo; 127 class AccessorInfo;
128 template<typename T> class PropertyCallbackInfo;
128 class StackTrace; 129 class StackTrace;
129 class StackFrame; 130 class StackFrame;
130 class Isolate; 131 class Isolate;
131 class DeclaredAccessorDescriptor; 132 class DeclaredAccessorDescriptor;
132 class ObjectOperationDescriptor; 133 class ObjectOperationDescriptor;
133 class RawOperationDescriptor; 134 class RawOperationDescriptor;
134 135
135 namespace internal { 136 namespace internal {
136 137
137 class Arguments; 138 class Arguments;
(...skipping 1382 matching lines...) Expand 10 before | Expand all | Expand 10 after
1520 kExternalPixelArray 1521 kExternalPixelArray
1521 }; 1522 };
1522 1523
1523 /** 1524 /**
1524 * Accessor[Getter|Setter] are used as callback functions when 1525 * Accessor[Getter|Setter] are used as callback functions when
1525 * setting|getting a particular property. See Object and ObjectTemplate's 1526 * setting|getting a particular property. See Object and ObjectTemplate's
1526 * method SetAccessor. 1527 * method SetAccessor.
1527 */ 1528 */
1528 typedef Handle<Value> (*AccessorGetter)(Local<String> property, 1529 typedef Handle<Value> (*AccessorGetter)(Local<String> property,
1529 const AccessorInfo& info); 1530 const AccessorInfo& info);
1531 typedef void (*AccessorGetterCallback)(
1532 Local<String> property,
1533 const PropertyCallbackInfo<Value>& info);
1530 1534
1531 1535
1532 typedef void (*AccessorSetter)(Local<String> property, 1536 typedef void (*AccessorSetter)(Local<String> property,
1533 Local<Value> value, 1537 Local<Value> value,
1534 const AccessorInfo& info); 1538 const AccessorInfo& info);
1539 typedef void (*AccessorSetterCallback)(
1540 Local<String> property,
1541 Local<Value> value,
1542 const PropertyCallbackInfo<void>& info);
1535 1543
1536 1544
1537 /** 1545 /**
1538 * Access control specifications. 1546 * Access control specifications.
1539 * 1547 *
1540 * Some accessors should be accessible across contexts. These 1548 * Some accessors should be accessible across contexts. These
1541 * accessors have an explicit access control parameter which specifies 1549 * accessors have an explicit access control parameter which specifies
1542 * the kind of cross-context access that should be allowed. 1550 * the kind of cross-context access that should be allowed.
1543 * 1551 *
1544 * Additionally, for security, accessors can prohibit overwriting by 1552 * Additionally, for security, accessors can prohibit overwriting by
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 bool Has(uint32_t index); 1610 bool Has(uint32_t index);
1603 1611
1604 bool Delete(uint32_t index); 1612 bool Delete(uint32_t index);
1605 1613
1606 bool SetAccessor(Handle<String> name, 1614 bool SetAccessor(Handle<String> name,
1607 AccessorGetter getter, 1615 AccessorGetter getter,
1608 AccessorSetter setter = 0, 1616 AccessorSetter setter = 0,
1609 Handle<Value> data = Handle<Value>(), 1617 Handle<Value> data = Handle<Value>(),
1610 AccessControl settings = DEFAULT, 1618 AccessControl settings = DEFAULT,
1611 PropertyAttribute attribute = None); 1619 PropertyAttribute attribute = None);
1620 bool SetAccessor(Handle<String> name,
1621 AccessorGetterCallback getter,
1622 AccessorSetterCallback setter = 0,
1623 Handle<Value> data = Handle<Value>(),
1624 AccessControl settings = DEFAULT,
1625 PropertyAttribute attribute = None);
1612 1626
1613 // This function is not yet stable and should not be used at this time. 1627 // This function is not yet stable and should not be used at this time.
1614 bool SetAccessor(Handle<String> name, 1628 bool SetAccessor(Handle<String> name,
1615 Handle<DeclaredAccessorDescriptor> descriptor, 1629 Handle<DeclaredAccessorDescriptor> descriptor,
1616 AccessControl settings = DEFAULT, 1630 AccessControl settings = DEFAULT,
1617 PropertyAttribute attribute = None); 1631 PropertyAttribute attribute = None);
1618 1632
1619 /** 1633 /**
1620 * Returns an array containing the names of the enumerable properties 1634 * Returns an array containing the names of the enumerable properties
1621 * of this object, including properties from prototype objects. The 1635 * of this object, including properties from prototype objects. The
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 PropertyAttribute attributes = None); 2067 PropertyAttribute attributes = None);
2054 V8_INLINE(void Set(const char* name, Handle<Data> value)); 2068 V8_INLINE(void Set(const char* name, Handle<Data> value));
2055 private: 2069 private:
2056 Template(); 2070 Template();
2057 2071
2058 friend class ObjectTemplate; 2072 friend class ObjectTemplate;
2059 friend class FunctionTemplate; 2073 friend class FunctionTemplate;
2060 }; 2074 };
2061 2075
2062 2076
2077 template<typename T>
2078 class V8EXPORT ReturnHandler {
Michael Starzinger 2013/03/18 13:57:05 As discussed offline: Let's name this class Return
2079 public:
2080 V8_INLINE(explicit ReturnHandler(T* slot)) : slot_(slot) {}
2081 V8_INLINE(void SetReturnValue(Persistent<T> handle)) { slot_ = *handle; }
Michael Starzinger 2013/03/18 13:57:05 As discussed offline: Let's name these setters jus
2082 V8_INLINE(void SetReturnValue(Handle<T> handle)) { slot_ = *handle; }
2083 private:
2084 T* slot_;
2085 };
2086
2087
2063 /** 2088 /**
2064 * The argument information given to function call callbacks. This 2089 * The argument information given to function call callbacks. This
2065 * class provides access to information about the context of the call, 2090 * class provides access to information about the context of the call,
2066 * including the receiver, the number and values of arguments, and 2091 * including the receiver, the number and values of arguments, and
2067 * the holder of the function. 2092 * the holder of the function.
2068 */ 2093 */
2069 class V8EXPORT Arguments { 2094 template<typename T>
2095 class V8EXPORT FunctionCallbackInfo {
2070 public: 2096 public:
2071 V8_INLINE(int Length() const); 2097 V8_INLINE(int Length() const);
2072 V8_INLINE(Local<Value> operator[](int i) const); 2098 V8_INLINE(Local<Value> operator[](int i) const);
2073 V8_INLINE(Local<Function> Callee() const); 2099 V8_INLINE(Local<Function> Callee() const);
2074 V8_INLINE(Local<Object> This() const); 2100 V8_INLINE(Local<Object> This() const);
2075 V8_INLINE(Local<Object> Holder() const); 2101 V8_INLINE(Local<Object> Holder() const);
2076 V8_INLINE(bool IsConstructCall() const); 2102 V8_INLINE(bool IsConstructCall() const);
2077 V8_INLINE(Local<Value> Data() const); 2103 V8_INLINE(Local<Value> Data() const);
2078 V8_INLINE(Isolate* GetIsolate() const); 2104 V8_INLINE(Isolate* GetIsolate() const);
2105 V8_INLINE(ReturnHandler<T> GetReturnHandler() const);
2079 2106
2080 private: 2107 protected:
2081 static const int kIsolateIndex = 0; 2108 static const int kIsolateIndex = 0;
2082 static const int kDataIndex = -1; 2109 static const int kDataIndex = -1;
2083 static const int kCalleeIndex = -2; 2110 static const int kCalleeIndex = -2;
2084 static const int kHolderIndex = -3; 2111 static const int kHolderIndex = -3;
2112 static const int kReturnValueIndex = -4;
2085 2113
2086 friend class ImplementationUtilities; 2114 friend class ImplementationUtilities;
2087 V8_INLINE(Arguments(internal::Object** implicit_args, 2115 V8_INLINE(FunctionCallbackInfo(internal::Object** implicit_args,
2088 internal::Object** values, 2116 internal::Object** values,
2089 int length, 2117 int length,
2090 bool is_construct_call)); 2118 bool is_construct_call));
2091 internal::Object** implicit_args_; 2119 internal::Object** implicit_args_;
2092 internal::Object** values_; 2120 internal::Object** values_;
2093 int length_; 2121 int length_;
2094 bool is_construct_call_; 2122 bool is_construct_call_;
2095 }; 2123 };
2096 2124
2097 2125
2126 class V8EXPORT Arguments : public FunctionCallbackInfo<Value> {
2127 private:
2128 friend class ImplementationUtilities;
2129 V8_INLINE(Arguments(internal::Object** implicit_args,
2130 internal::Object** values,
2131 int length,
2132 bool is_construct_call));
2133 };
2134
2135
2098 /** 2136 /**
2099 * The information passed to an accessor callback about the context 2137 * The information passed to a property callback about the context
2100 * of the property access. 2138 * of the property access.
2101 */ 2139 */
2102 class V8EXPORT AccessorInfo { 2140 template<typename T>
2141 class V8EXPORT PropertyCallbackInfo {
2103 public: 2142 public:
2104 V8_INLINE(AccessorInfo(internal::Object** args)) 2143 V8_INLINE(PropertyCallbackInfo(internal::Object** args))
2105 : args_(args) { } 2144 : args_(args) { }
2106 V8_INLINE(Isolate* GetIsolate() const); 2145 V8_INLINE(Isolate* GetIsolate() const);
2107 V8_INLINE(Local<Value> Data() const); 2146 V8_INLINE(Local<Value> Data() const);
2108 V8_INLINE(Local<Object> This() const); 2147 V8_INLINE(Local<Object> This() const);
2109 V8_INLINE(Local<Object> Holder() const); 2148 V8_INLINE(Local<Object> Holder() const);
2149 V8_INLINE(ReturnHandler<T> GetReturnHandler() const);
2110 2150
2111 private: 2151 private:
2152 static const int kIsolateIndex = -3;
2153 static const int kDataIndex = -2;
2154 static const int kThisIndex = 0;
2155 static const int kHolderIndex = -1;
2156 static const int kReturnValueIndex = -4;
2157
2112 internal::Object** args_; 2158 internal::Object** args_;
2113 }; 2159 };
2114 2160
2115 2161
2162 class V8EXPORT AccessorInfo : public PropertyCallbackInfo<Value> {
2163 public:
2164 V8_INLINE(AccessorInfo(internal::Object** args))
2165 : PropertyCallbackInfo<Value>(args) { }
2166 };
2167
2168
2116 typedef Handle<Value> (*InvocationCallback)(const Arguments& args); 2169 typedef Handle<Value> (*InvocationCallback)(const Arguments& args);
2170 typedef void (*FunctionCallback)(const FunctionCallbackInfo<Value>& info);
2171
2117 2172
2118 /** 2173 /**
2119 * NamedProperty[Getter|Setter] are used as interceptors on object. 2174 * NamedProperty[Getter|Setter] are used as interceptors on object.
2120 * See ObjectTemplate::SetNamedPropertyHandler. 2175 * See ObjectTemplate::SetNamedPropertyHandler.
2121 */ 2176 */
2122 typedef Handle<Value> (*NamedPropertyGetter)(Local<String> property, 2177 typedef Handle<Value> (*NamedPropertyGetter)(Local<String> property,
2123 const AccessorInfo& info); 2178 const AccessorInfo& info);
2179 typedef void (*NamedPropertyGetterCallback)(
2180 Local<String> property,
2181 const PropertyCallbackInfo<Value>& info);
2124 2182
2125 2183
2126 /** 2184 /**
2127 * Returns the value if the setter intercepts the request. 2185 * Returns the value if the setter intercepts the request.
2128 * Otherwise, returns an empty handle. 2186 * Otherwise, returns an empty handle.
2129 */ 2187 */
2130 typedef Handle<Value> (*NamedPropertySetter)(Local<String> property, 2188 typedef Handle<Value> (*NamedPropertySetter)(Local<String> property,
2131 Local<Value> value, 2189 Local<Value> value,
2132 const AccessorInfo& info); 2190 const AccessorInfo& info);
2191 typedef void (*NamedPropertySetterCallback)(
2192 Local<String> property,
2193 Local<Value> value,
2194 const PropertyCallbackInfo<Value>& info);
2195
2133 2196
2134 /** 2197 /**
2135 * Returns a non-empty handle if the interceptor intercepts the request. 2198 * Returns a non-empty handle if the interceptor intercepts the request.
2136 * The result is an integer encoding property attributes (like v8::None, 2199 * The result is an integer encoding property attributes (like v8::None,
2137 * v8::DontEnum, etc.) 2200 * v8::DontEnum, etc.)
2138 */ 2201 */
2139 typedef Handle<Integer> (*NamedPropertyQuery)(Local<String> property, 2202 typedef Handle<Integer> (*NamedPropertyQuery)(Local<String> property,
2140 const AccessorInfo& info); 2203 const AccessorInfo& info);
2204 typedef void (*NamedPropertyQueryCallback)(
2205 Local<String> property,
2206 const PropertyCallbackInfo<Integer>& info);
2141 2207
2142 2208
2143 /** 2209 /**
2144 * Returns a non-empty handle if the deleter intercepts the request. 2210 * Returns a non-empty handle if the deleter intercepts the request.
2145 * The return value is true if the property could be deleted and false 2211 * The return value is true if the property could be deleted and false
2146 * otherwise. 2212 * otherwise.
2147 */ 2213 */
2148 typedef Handle<Boolean> (*NamedPropertyDeleter)(Local<String> property, 2214 typedef Handle<Boolean> (*NamedPropertyDeleter)(Local<String> property,
2149 const AccessorInfo& info); 2215 const AccessorInfo& info);
2216 typedef void (*NamedPropertyDeleterCallback)(
2217 Local<String> property,
2218 const PropertyCallbackInfo<Boolean>& info);
2219
2150 2220
2151 /** 2221 /**
2152 * Returns an array containing the names of the properties the named 2222 * Returns an array containing the names of the properties the named
2153 * property getter intercepts. 2223 * property getter intercepts.
2154 */ 2224 */
2155 typedef Handle<Array> (*NamedPropertyEnumerator)(const AccessorInfo& info); 2225 typedef Handle<Array> (*NamedPropertyEnumerator)(const AccessorInfo& info);
2226 typedef void (*NamedPropertyEnumeratorCallback)(
2227 const PropertyCallbackInfo<Array>& info);
2156 2228
2157 2229
2158 /** 2230 /**
2159 * Returns the value of the property if the getter intercepts the 2231 * Returns the value of the property if the getter intercepts the
2160 * request. Otherwise, returns an empty handle. 2232 * request. Otherwise, returns an empty handle.
2161 */ 2233 */
2162 typedef Handle<Value> (*IndexedPropertyGetter)(uint32_t index, 2234 typedef Handle<Value> (*IndexedPropertyGetter)(uint32_t index,
2163 const AccessorInfo& info); 2235 const AccessorInfo& info);
2236 typedef void (*IndexedPropertyGetterCallback)(
2237 uint32_t index,
2238 const PropertyCallbackInfo<Value>& info);
2164 2239
2165 2240
2166 /** 2241 /**
2167 * Returns the value if the setter intercepts the request. 2242 * Returns the value if the setter intercepts the request.
2168 * Otherwise, returns an empty handle. 2243 * Otherwise, returns an empty handle.
2169 */ 2244 */
2170 typedef Handle<Value> (*IndexedPropertySetter)(uint32_t index, 2245 typedef Handle<Value> (*IndexedPropertySetter)(uint32_t index,
2171 Local<Value> value, 2246 Local<Value> value,
2172 const AccessorInfo& info); 2247 const AccessorInfo& info);
2248 typedef void (*IndexedPropertySetterCallback)(
2249 uint32_t index,
2250 Local<Value> value,
2251 const PropertyCallbackInfo<Value>& info);
2173 2252
2174 2253
2175 /** 2254 /**
2176 * Returns a non-empty handle if the interceptor intercepts the request. 2255 * Returns a non-empty handle if the interceptor intercepts the request.
2177 * The result is an integer encoding property attributes. 2256 * The result is an integer encoding property attributes.
2178 */ 2257 */
2179 typedef Handle<Integer> (*IndexedPropertyQuery)(uint32_t index, 2258 typedef Handle<Integer> (*IndexedPropertyQuery)(uint32_t index,
2180 const AccessorInfo& info); 2259 const AccessorInfo& info);
2260 typedef void (*IndexedPropertyQueryCallback)(
2261 uint32_t index,
2262 const PropertyCallbackInfo<Integer>& info);
2263
2181 2264
2182 /** 2265 /**
2183 * Returns a non-empty handle if the deleter intercepts the request. 2266 * Returns a non-empty handle if the deleter intercepts the request.
2184 * The return value is true if the property could be deleted and false 2267 * The return value is true if the property could be deleted and false
2185 * otherwise. 2268 * otherwise.
2186 */ 2269 */
2187 typedef Handle<Boolean> (*IndexedPropertyDeleter)(uint32_t index, 2270 typedef Handle<Boolean> (*IndexedPropertyDeleter)(uint32_t index,
2188 const AccessorInfo& info); 2271 const AccessorInfo& info);
2272 typedef void (*IndexedPropertyDeleterCallback)(
2273 uint32_t index,
2274 const PropertyCallbackInfo<Boolean>& info);
2275
2189 2276
2190 /** 2277 /**
2191 * Returns an array containing the indices of the properties the 2278 * Returns an array containing the indices of the properties the
2192 * indexed property getter intercepts. 2279 * indexed property getter intercepts.
2193 */ 2280 */
2194 typedef Handle<Array> (*IndexedPropertyEnumerator)(const AccessorInfo& info); 2281 typedef Handle<Array> (*IndexedPropertyEnumerator)(const AccessorInfo& info);
2282 typedef void (*IndexedPropertyEnumeratorCallback)(
2283 const PropertyCallbackInfo<Array>& info);
2195 2284
2196 2285
2197 /** 2286 /**
2198 * Access type specification. 2287 * Access type specification.
2199 */ 2288 */
2200 enum AccessType { 2289 enum AccessType {
2201 ACCESS_GET, 2290 ACCESS_GET,
2202 ACCESS_SET, 2291 ACCESS_SET,
2203 ACCESS_HAS, 2292 ACCESS_HAS,
2204 ACCESS_DELETE, 2293 ACCESS_DELETE,
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2319 * \endcode 2408 * \endcode
2320 */ 2409 */
2321 class V8EXPORT FunctionTemplate : public Template { 2410 class V8EXPORT FunctionTemplate : public Template {
2322 public: 2411 public:
2323 /** Creates a function template.*/ 2412 /** Creates a function template.*/
2324 static Local<FunctionTemplate> New( 2413 static Local<FunctionTemplate> New(
2325 InvocationCallback callback = 0, 2414 InvocationCallback callback = 0,
2326 Handle<Value> data = Handle<Value>(), 2415 Handle<Value> data = Handle<Value>(),
2327 Handle<Signature> signature = Handle<Signature>(), 2416 Handle<Signature> signature = Handle<Signature>(),
2328 int length = 0); 2417 int length = 0);
2418 static Local<FunctionTemplate> New(
2419 FunctionCallback callback, // TODO(dcarney): add back default param.
2420 Handle<Value> data = Handle<Value>(),
2421 Handle<Signature> signature = Handle<Signature>(),
2422 int length = 0);
2423
2329 /** Returns the unique function instance in the current execution context.*/ 2424 /** Returns the unique function instance in the current execution context.*/
2330 Local<Function> GetFunction(); 2425 Local<Function> GetFunction();
2331 2426
2332 /** 2427 /**
2333 * Set the call-handler callback for a FunctionTemplate. This 2428 * Set the call-handler callback for a FunctionTemplate. This
2334 * callback is called whenever the function created from this 2429 * callback is called whenever the function created from this
2335 * FunctionTemplate is called. 2430 * FunctionTemplate is called.
2336 */ 2431 */
2337 void SetCallHandler(InvocationCallback callback, 2432 void SetCallHandler(InvocationCallback callback,
2338 Handle<Value> data = Handle<Value>()); 2433 Handle<Value> data = Handle<Value>());
2434 void SetCallHandler(FunctionCallback callback,
2435 Handle<Value> data = Handle<Value>());
2339 2436
2340 /** Set the predefined length property for the FunctionTemplate. */ 2437 /** Set the predefined length property for the FunctionTemplate. */
2341 void SetLength(int length); 2438 void SetLength(int length);
2342 2439
2343 /** Get the InstanceTemplate. */ 2440 /** Get the InstanceTemplate. */
2344 Local<ObjectTemplate> InstanceTemplate(); 2441 Local<ObjectTemplate> InstanceTemplate();
2345 2442
2346 /** Causes the function template to inherit from a parent function template.*/ 2443 /** Causes the function template to inherit from a parent function template.*/
2347 void Inherit(Handle<FunctionTemplate> parent); 2444 void Inherit(Handle<FunctionTemplate> parent);
2348 2445
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2451 * thrown and no callback is invoked. 2548 * thrown and no callback is invoked.
2452 */ 2549 */
2453 void SetAccessor(Handle<String> name, 2550 void SetAccessor(Handle<String> name,
2454 AccessorGetter getter, 2551 AccessorGetter getter,
2455 AccessorSetter setter = 0, 2552 AccessorSetter setter = 0,
2456 Handle<Value> data = Handle<Value>(), 2553 Handle<Value> data = Handle<Value>(),
2457 AccessControl settings = DEFAULT, 2554 AccessControl settings = DEFAULT,
2458 PropertyAttribute attribute = None, 2555 PropertyAttribute attribute = None,
2459 Handle<AccessorSignature> signature = 2556 Handle<AccessorSignature> signature =
2460 Handle<AccessorSignature>()); 2557 Handle<AccessorSignature>());
2558 void SetAccessor(Handle<String> name,
2559 AccessorGetterCallback getter,
2560 AccessorSetterCallback setter = 0,
2561 Handle<Value> data = Handle<Value>(),
2562 AccessControl settings = DEFAULT,
2563 PropertyAttribute attribute = None,
2564 Handle<AccessorSignature> signature =
2565 Handle<AccessorSignature>());
2461 2566
2462 // This function is not yet stable and should not be used at this time. 2567 // This function is not yet stable and should not be used at this time.
2463 bool SetAccessor(Handle<String> name, 2568 bool SetAccessor(Handle<String> name,
2464 Handle<DeclaredAccessorDescriptor> descriptor, 2569 Handle<DeclaredAccessorDescriptor> descriptor,
2465 AccessControl settings = DEFAULT, 2570 AccessControl settings = DEFAULT,
2466 PropertyAttribute attribute = None, 2571 PropertyAttribute attribute = None,
2467 Handle<AccessorSignature> signature = 2572 Handle<AccessorSignature> signature =
2468 Handle<AccessorSignature>()); 2573 Handle<AccessorSignature>());
2469 2574
2470 /** 2575 /**
(...skipping 12 matching lines...) Expand all
2483 * properties of an object. 2588 * properties of an object.
2484 * \param data A piece of data that will be passed to the callbacks 2589 * \param data A piece of data that will be passed to the callbacks
2485 * whenever they are invoked. 2590 * whenever they are invoked.
2486 */ 2591 */
2487 void SetNamedPropertyHandler(NamedPropertyGetter getter, 2592 void SetNamedPropertyHandler(NamedPropertyGetter getter,
2488 NamedPropertySetter setter = 0, 2593 NamedPropertySetter setter = 0,
2489 NamedPropertyQuery query = 0, 2594 NamedPropertyQuery query = 0,
2490 NamedPropertyDeleter deleter = 0, 2595 NamedPropertyDeleter deleter = 0,
2491 NamedPropertyEnumerator enumerator = 0, 2596 NamedPropertyEnumerator enumerator = 0,
2492 Handle<Value> data = Handle<Value>()); 2597 Handle<Value> data = Handle<Value>());
2598 void SetNamedPropertyHandler(
2599 NamedPropertyGetterCallback getter,
2600 NamedPropertySetterCallback setter = 0,
2601 NamedPropertyQueryCallback query = 0,
2602 NamedPropertyDeleterCallback deleter = 0,
2603 NamedPropertyEnumeratorCallback enumerator = 0,
2604 Handle<Value> data = Handle<Value>());
2493 2605
2494 /** 2606 /**
2495 * Sets an indexed property handler on the object template. 2607 * Sets an indexed property handler on the object template.
2496 * 2608 *
2497 * Whenever an indexed property is accessed on objects created from 2609 * Whenever an indexed property is accessed on objects created from
2498 * this object template, the provided callback is invoked instead of 2610 * this object template, the provided callback is invoked instead of
2499 * accessing the property directly on the JavaScript object. 2611 * accessing the property directly on the JavaScript object.
2500 * 2612 *
2501 * \param getter The callback to invoke when getting a property. 2613 * \param getter The callback to invoke when getting a property.
2502 * \param setter The callback to invoke when setting a property. 2614 * \param setter The callback to invoke when setting a property.
2503 * \param query The callback to invoke to check if an object has a property. 2615 * \param query The callback to invoke to check if an object has a property.
2504 * \param deleter The callback to invoke when deleting a property. 2616 * \param deleter The callback to invoke when deleting a property.
2505 * \param enumerator The callback to invoke to enumerate all the indexed 2617 * \param enumerator The callback to invoke to enumerate all the indexed
2506 * properties of an object. 2618 * properties of an object.
2507 * \param data A piece of data that will be passed to the callbacks 2619 * \param data A piece of data that will be passed to the callbacks
2508 * whenever they are invoked. 2620 * whenever they are invoked.
2509 */ 2621 */
2510 void SetIndexedPropertyHandler(IndexedPropertyGetter getter, 2622 void SetIndexedPropertyHandler(IndexedPropertyGetter getter,
2511 IndexedPropertySetter setter = 0, 2623 IndexedPropertySetter setter = 0,
2512 IndexedPropertyQuery query = 0, 2624 IndexedPropertyQuery query = 0,
2513 IndexedPropertyDeleter deleter = 0, 2625 IndexedPropertyDeleter deleter = 0,
2514 IndexedPropertyEnumerator enumerator = 0, 2626 IndexedPropertyEnumerator enumerator = 0,
2515 Handle<Value> data = Handle<Value>()); 2627 Handle<Value> data = Handle<Value>());
2628 void SetIndexedPropertyHandler(
2629 IndexedPropertyGetterCallback getter,
2630 IndexedPropertySetterCallback setter = 0,
2631 IndexedPropertyQueryCallback query = 0,
2632 IndexedPropertyDeleterCallback deleter = 0,
2633 IndexedPropertyEnumeratorCallback enumerator = 0,
2634 Handle<Value> data = Handle<Value>());
2516 2635
2517 /** 2636 /**
2518 * Sets the callback to be used when calling instances created from 2637 * Sets the callback to be used when calling instances created from
2519 * this template as a function. If no callback is set, instances 2638 * this template as a function. If no callback is set, instances
2520 * behave like normal JavaScript objects that cannot be called as a 2639 * behave like normal JavaScript objects that cannot be called as a
2521 * function. 2640 * function.
2522 */ 2641 */
2523 void SetCallAsFunctionHandler(InvocationCallback callback, 2642 void SetCallAsFunctionHandler(InvocationCallback callback,
2524 Handle<Value> data = Handle<Value>()); 2643 Handle<Value> data = Handle<Value>());
2644 void SetCallAsFunctionHandler(FunctionCallback callback,
2645 Handle<Value> data = Handle<Value>());
2525 2646
2526 /** 2647 /**
2527 * Mark object instances of the template as undetectable. 2648 * Mark object instances of the template as undetectable.
2528 * 2649 *
2529 * In many ways, undetectable objects behave as though they are not 2650 * In many ways, undetectable objects behave as though they are not
2530 * there. They behave like 'undefined' in conditionals and when 2651 * there. They behave like 'undefined' in conditionals and when
2531 * printed. However, properties can be accessed and called as on 2652 * printed. However, properties can be accessed and called as on
2532 * normal objects. 2653 * normal objects.
2533 */ 2654 */
2534 void MarkAsUndetectable(); 2655 void MarkAsUndetectable();
(...skipping 2066 matching lines...) Expand 10 before | Expand all | Expand 10 after
4601 template <class T> 4722 template <class T>
4602 uint16_t Persistent<T>::WrapperClassId(Isolate* isolate) const { 4723 uint16_t Persistent<T>::WrapperClassId(Isolate* isolate) const {
4603 typedef internal::Internals I; 4724 typedef internal::Internals I;
4604 if (this->IsEmpty()) return 0; 4725 if (this->IsEmpty()) return 0;
4605 if (!I::IsInitialized(isolate)) return 0; 4726 if (!I::IsInitialized(isolate)) return 0;
4606 internal::Object** obj = reinterpret_cast<internal::Object**>(**this); 4727 internal::Object** obj = reinterpret_cast<internal::Object**>(**this);
4607 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset; 4728 uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + I::kNodeClassIdOffset;
4608 return *reinterpret_cast<uint16_t*>(addr); 4729 return *reinterpret_cast<uint16_t*>(addr);
4609 } 4730 }
4610 4731
4611 Arguments::Arguments(internal::Object** implicit_args, 4732 template<typename T>
4612 internal::Object** values, int length, 4733 FunctionCallbackInfo<T>::FunctionCallbackInfo(internal::Object** implicit_args,
4613 bool is_construct_call) 4734 internal::Object** values,
4735 int length,
4736 bool is_construct_call)
4614 : implicit_args_(implicit_args), 4737 : implicit_args_(implicit_args),
4615 values_(values), 4738 values_(values),
4616 length_(length), 4739 length_(length),
4617 is_construct_call_(is_construct_call) { } 4740 is_construct_call_(is_construct_call) { }
4618 4741
4619 4742
4620 Local<Value> Arguments::operator[](int i) const { 4743 Arguments::Arguments(internal::Object** args,
4744 internal::Object** values,
4745 int length,
4746 bool is_construct_call)
4747 : FunctionCallbackInfo<Value>(args, values, length, is_construct_call) { }
4748
4749
4750 template<typename T>
4751 Local<Value> FunctionCallbackInfo<T>::operator[](int i) const {
4621 if (i < 0 || length_ <= i) return Local<Value>(*Undefined()); 4752 if (i < 0 || length_ <= i) return Local<Value>(*Undefined());
4622 return Local<Value>(reinterpret_cast<Value*>(values_ - i)); 4753 return Local<Value>(reinterpret_cast<Value*>(values_ - i));
4623 } 4754 }
4624 4755
4625 4756
4626 Local<Function> Arguments::Callee() const { 4757 template<typename T>
4758 Local<Function> FunctionCallbackInfo<T>::Callee() const {
4627 return Local<Function>(reinterpret_cast<Function*>( 4759 return Local<Function>(reinterpret_cast<Function*>(
4628 &implicit_args_[kCalleeIndex])); 4760 &implicit_args_[kCalleeIndex]));
4629 } 4761 }
4630 4762
4631 4763
4632 Local<Object> Arguments::This() const { 4764 template<typename T>
4765 Local<Object> FunctionCallbackInfo<T>::This() const {
4633 return Local<Object>(reinterpret_cast<Object*>(values_ + 1)); 4766 return Local<Object>(reinterpret_cast<Object*>(values_ + 1));
4634 } 4767 }
4635 4768
4636 4769
4637 Local<Object> Arguments::Holder() const { 4770 template<typename T>
4771 Local<Object> FunctionCallbackInfo<T>::Holder() const {
4638 return Local<Object>(reinterpret_cast<Object*>( 4772 return Local<Object>(reinterpret_cast<Object*>(
4639 &implicit_args_[kHolderIndex])); 4773 &implicit_args_[kHolderIndex]));
4640 } 4774 }
4641 4775
4642 4776
4643 Local<Value> Arguments::Data() const { 4777 template<typename T>
4778 Local<Value> FunctionCallbackInfo<T>::Data() const {
4644 return Local<Value>(reinterpret_cast<Value*>(&implicit_args_[kDataIndex])); 4779 return Local<Value>(reinterpret_cast<Value*>(&implicit_args_[kDataIndex]));
4645 } 4780 }
4646 4781
4647 4782
4648 Isolate* Arguments::GetIsolate() const { 4783 template<typename T>
4784 Isolate* FunctionCallbackInfo<T>::GetIsolate() const {
4649 return *reinterpret_cast<Isolate**>(&implicit_args_[kIsolateIndex]); 4785 return *reinterpret_cast<Isolate**>(&implicit_args_[kIsolateIndex]);
4650 } 4786 }
4651 4787
4652 4788
4653 bool Arguments::IsConstructCall() const { 4789 template<typename T>
4790 ReturnHandler<T> FunctionCallbackInfo<T>::GetReturnHandler() const {
4791 return ReturnHandler<T>(
4792 reinterpret_cast<T*>(&implicit_args_[kReturnValueIndex]));
4793 }
4794
4795
4796 template<typename T>
4797 bool FunctionCallbackInfo<T>::IsConstructCall() const {
4654 return is_construct_call_; 4798 return is_construct_call_;
4655 } 4799 }
4656 4800
4657 4801
4658 int Arguments::Length() const { 4802 template<typename T>
4803 int FunctionCallbackInfo<T>::Length() const {
4659 return length_; 4804 return length_;
4660 } 4805 }
4661 4806
4662 4807
4663 template <class T> 4808 template <class T>
4664 Local<T> HandleScope::Close(Handle<T> value) { 4809 Local<T> HandleScope::Close(Handle<T> value) {
4665 internal::Object** before = reinterpret_cast<internal::Object**>(*value); 4810 internal::Object** before = reinterpret_cast<internal::Object**>(*value);
4666 internal::Object** after = RawClose(before); 4811 internal::Object** after = RawClose(before);
4667 return Local<T>(reinterpret_cast<T*>(after)); 4812 return Local<T>(reinterpret_cast<T*>(after));
4668 } 4813 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
4915 5060
4916 5061
4917 External* External::Cast(v8::Value* value) { 5062 External* External::Cast(v8::Value* value) {
4918 #ifdef V8_ENABLE_CHECKS 5063 #ifdef V8_ENABLE_CHECKS
4919 CheckCast(value); 5064 CheckCast(value);
4920 #endif 5065 #endif
4921 return static_cast<External*>(value); 5066 return static_cast<External*>(value);
4922 } 5067 }
4923 5068
4924 5069
4925 Isolate* AccessorInfo::GetIsolate() const { 5070 template<typename T>
4926 return *reinterpret_cast<Isolate**>(&args_[-3]); 5071 Isolate* PropertyCallbackInfo<T>::GetIsolate() const {
5072 return *reinterpret_cast<Isolate**>(&args_[kIsolateIndex]);
4927 } 5073 }
4928 5074
4929 5075
4930 Local<Value> AccessorInfo::Data() const { 5076 template<typename T>
4931 return Local<Value>(reinterpret_cast<Value*>(&args_[-2])); 5077 Local<Value> PropertyCallbackInfo<T>::Data() const {
5078 return Local<Value>(reinterpret_cast<Value*>(&args_[kDataIndex]));
4932 } 5079 }
4933 5080
4934 5081
4935 Local<Object> AccessorInfo::This() const { 5082 template<typename T>
4936 return Local<Object>(reinterpret_cast<Object*>(&args_[0])); 5083 Local<Object> PropertyCallbackInfo<T>::This() const {
5084 return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex]));
4937 } 5085 }
4938 5086
4939 5087
4940 Local<Object> AccessorInfo::Holder() const { 5088 template<typename T>
4941 return Local<Object>(reinterpret_cast<Object*>(&args_[-1])); 5089 Local<Object> PropertyCallbackInfo<T>::Holder() const {
5090 return Local<Object>(reinterpret_cast<Object*>(&args_[kHolderIndex]));
4942 } 5091 }
4943 5092
4944 5093
5094 template<typename T>
5095 ReturnHandler<T> PropertyCallbackInfo<T>::GetReturnHandler() const {
5096 return ReturnHandler<T>(
5097 reinterpret_cast<T*>(&args_[kReturnValueIndex]));
5098 }
5099
5100
4945 Handle<Primitive> Undefined(Isolate* isolate) { 5101 Handle<Primitive> Undefined(Isolate* isolate) {
4946 typedef internal::Object* S; 5102 typedef internal::Object* S;
4947 typedef internal::Internals I; 5103 typedef internal::Internals I;
4948 if (!I::IsInitialized(isolate)) return Undefined(); 5104 if (!I::IsInitialized(isolate)) return Undefined();
4949 S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex); 5105 S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex);
4950 return Handle<Primitive>(reinterpret_cast<Primitive*>(slot)); 5106 return Handle<Primitive>(reinterpret_cast<Primitive*>(slot));
4951 } 5107 }
4952 5108
4953 5109
4954 Handle<Primitive> Null(Isolate* isolate) { 5110 Handle<Primitive> Null(Isolate* isolate) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
5025 5181
5026 5182
5027 } // namespace v8 5183 } // namespace v8
5028 5184
5029 5185
5030 #undef V8EXPORT 5186 #undef V8EXPORT
5031 #undef TYPE_CHECK 5187 #undef TYPE_CHECK
5032 5188
5033 5189
5034 #endif // V8_H_ 5190 #endif // V8_H_
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698