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 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 | 254 |
255 template <class S> static inline Handle<T> Cast(Handle<S> that) { | 255 template <class S> static inline Handle<T> Cast(Handle<S> that) { |
256 #ifdef V8_ENABLE_CHECKS | 256 #ifdef V8_ENABLE_CHECKS |
257 // If we're going to perform the type check then we have to check | 257 // If we're going to perform the type check then we have to check |
258 // that the handle isn't empty before doing the checked cast. | 258 // that the handle isn't empty before doing the checked cast. |
259 if (that.IsEmpty()) return Handle<T>(); | 259 if (that.IsEmpty()) return Handle<T>(); |
260 #endif | 260 #endif |
261 return Handle<T>(T::Cast(*that)); | 261 return Handle<T>(T::Cast(*that)); |
262 } | 262 } |
263 | 263 |
| 264 template <class S> inline Handle<S> As() { |
| 265 return Handle<S>::Cast(*this); |
| 266 } |
| 267 |
264 private: | 268 private: |
265 T* val_; | 269 T* val_; |
266 }; | 270 }; |
267 | 271 |
268 | 272 |
269 /** | 273 /** |
270 * A light-weight stack-allocated object handle. All operations | 274 * A light-weight stack-allocated object handle. All operations |
271 * that return objects from within v8 return them in local handles. They | 275 * that return objects from within v8 return them in local handles. They |
272 * are created within HandleScopes, and all local handles allocated within a | 276 * are created within HandleScopes, and all local handles allocated within a |
273 * handle scope are destroyed when the handle scope is destroyed. Hence it | 277 * handle scope are destroyed when the handle scope is destroyed. Hence it |
(...skipping 14 matching lines...) Expand all Loading... |
288 template <class S> inline Local(S* that) : Handle<T>(that) { } | 292 template <class S> inline Local(S* that) : Handle<T>(that) { } |
289 template <class S> static inline Local<T> Cast(Local<S> that) { | 293 template <class S> static inline Local<T> Cast(Local<S> that) { |
290 #ifdef V8_ENABLE_CHECKS | 294 #ifdef V8_ENABLE_CHECKS |
291 // If we're going to perform the type check then we have to check | 295 // If we're going to perform the type check then we have to check |
292 // that the handle isn't empty before doing the checked cast. | 296 // that the handle isn't empty before doing the checked cast. |
293 if (that.IsEmpty()) return Local<T>(); | 297 if (that.IsEmpty()) return Local<T>(); |
294 #endif | 298 #endif |
295 return Local<T>(T::Cast(*that)); | 299 return Local<T>(T::Cast(*that)); |
296 } | 300 } |
297 | 301 |
| 302 template <class S> inline Local<S> As() { |
| 303 return Local<S>::Cast(*this); |
| 304 } |
| 305 |
298 /** Create a local handle for the content of another handle. | 306 /** Create a local handle for the content of another handle. |
299 * The referee is kept alive by the local handle even when | 307 * The referee is kept alive by the local handle even when |
300 * the original handle is destroyed/disposed. | 308 * the original handle is destroyed/disposed. |
301 */ | 309 */ |
302 inline static Local<T> New(Handle<T> that); | 310 inline static Local<T> New(Handle<T> that); |
303 }; | 311 }; |
304 | 312 |
305 | 313 |
306 /** | 314 /** |
307 * An object reference that is independent of any handle scope. Where | 315 * An object reference that is independent of any handle scope. Where |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 | 369 |
362 template <class S> static inline Persistent<T> Cast(Persistent<S> that) { | 370 template <class S> static inline Persistent<T> Cast(Persistent<S> that) { |
363 #ifdef V8_ENABLE_CHECKS | 371 #ifdef V8_ENABLE_CHECKS |
364 // If we're going to perform the type check then we have to check | 372 // If we're going to perform the type check then we have to check |
365 // that the handle isn't empty before doing the checked cast. | 373 // that the handle isn't empty before doing the checked cast. |
366 if (that.IsEmpty()) return Persistent<T>(); | 374 if (that.IsEmpty()) return Persistent<T>(); |
367 #endif | 375 #endif |
368 return Persistent<T>(T::Cast(*that)); | 376 return Persistent<T>(T::Cast(*that)); |
369 } | 377 } |
370 | 378 |
| 379 template <class S> inline Persistent<S> As() { |
| 380 return Persistent<S>::Cast(*this); |
| 381 } |
| 382 |
371 /** | 383 /** |
372 * Creates a new persistent handle for an existing local or | 384 * Creates a new persistent handle for an existing local or |
373 * persistent handle. | 385 * persistent handle. |
374 */ | 386 */ |
375 inline static Persistent<T> New(Handle<T> that); | 387 inline static Persistent<T> New(Handle<T> that); |
376 | 388 |
377 /** | 389 /** |
378 * Releases the storage cell referenced by this persistent handle. | 390 * Releases the storage cell referenced by this persistent handle. |
379 * Does not remove the reference to the cell from any handles. | 391 * Does not remove the reference to the cell from any handles. |
380 * This handle's reference, and any any other references to the storage | 392 * This handle's reference, and any any other references to the storage |
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1171 | 1183 |
1172 /** | 1184 /** |
1173 * A JavaScript object (ECMA-262, 4.3.3) | 1185 * A JavaScript object (ECMA-262, 4.3.3) |
1174 */ | 1186 */ |
1175 class V8EXPORT Object : public Value { | 1187 class V8EXPORT Object : public Value { |
1176 public: | 1188 public: |
1177 bool Set(Handle<Value> key, | 1189 bool Set(Handle<Value> key, |
1178 Handle<Value> value, | 1190 Handle<Value> value, |
1179 PropertyAttribute attribs = None); | 1191 PropertyAttribute attribs = None); |
1180 | 1192 |
| 1193 bool Set(uint32_t index, |
| 1194 Handle<Value> value); |
| 1195 |
1181 // Sets a local property on this object bypassing interceptors and | 1196 // Sets a local property on this object bypassing interceptors and |
1182 // overriding accessors or read-only properties. | 1197 // overriding accessors or read-only properties. |
1183 // | 1198 // |
1184 // Note that if the object has an interceptor the property will be set | 1199 // Note that if the object has an interceptor the property will be set |
1185 // locally, but since the interceptor takes precedence the local property | 1200 // locally, but since the interceptor takes precedence the local property |
1186 // will only be returned if the interceptor doesn't return a value. | 1201 // will only be returned if the interceptor doesn't return a value. |
1187 // | 1202 // |
1188 // Note also that this only works for named properties. | 1203 // Note also that this only works for named properties. |
1189 bool ForceSet(Handle<Value> key, | 1204 bool ForceSet(Handle<Value> key, |
1190 Handle<Value> value, | 1205 Handle<Value> value, |
1191 PropertyAttribute attribs = None); | 1206 PropertyAttribute attribs = None); |
1192 | 1207 |
1193 Local<Value> Get(Handle<Value> key); | 1208 Local<Value> Get(Handle<Value> key); |
1194 | 1209 |
| 1210 Local<Value> Get(uint32_t index); |
| 1211 |
1195 // TODO(1245389): Replace the type-specific versions of these | 1212 // TODO(1245389): Replace the type-specific versions of these |
1196 // functions with generic ones that accept a Handle<Value> key. | 1213 // functions with generic ones that accept a Handle<Value> key. |
1197 bool Has(Handle<String> key); | 1214 bool Has(Handle<String> key); |
1198 | 1215 |
1199 bool Delete(Handle<String> key); | 1216 bool Delete(Handle<String> key); |
1200 | 1217 |
1201 // Delete a property on this object bypassing interceptors and | 1218 // Delete a property on this object bypassing interceptors and |
1202 // ignoring dont-delete attributes. | 1219 // ignoring dont-delete attributes. |
1203 bool ForceDelete(Handle<Value> key); | 1220 bool ForceDelete(Handle<Value> key); |
1204 | 1221 |
(...skipping 2077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3282 | 3299 |
3283 } // namespace v8 | 3300 } // namespace v8 |
3284 | 3301 |
3285 | 3302 |
3286 #undef V8EXPORT | 3303 #undef V8EXPORT |
3287 #undef V8EXPORT_INLINE | 3304 #undef V8EXPORT_INLINE |
3288 #undef TYPE_CHECK | 3305 #undef TYPE_CHECK |
3289 | 3306 |
3290 | 3307 |
3291 #endif // V8_H_ | 3308 #endif // V8_H_ |
OLD | NEW |