OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithDefinedSetter( | 1199 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithDefinedSetter( |
1200 Handle<Object> receiver, | 1200 Handle<Object> receiver, |
1201 Handle<JSReceiver> setter, | 1201 Handle<JSReceiver> setter, |
1202 Handle<Object> value); | 1202 Handle<Object> value); |
1203 | 1203 |
1204 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( | 1204 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( |
1205 Isolate* isolate, | 1205 Isolate* isolate, |
1206 Handle<Object> object, | 1206 Handle<Object> object, |
1207 uint32_t index); | 1207 uint32_t index); |
1208 | 1208 |
1209 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithReceiver( | |
1210 Isolate* isolate, | |
1211 Handle<Object> object, | |
1212 Handle<Object> receiver, | |
1213 uint32_t index); | |
1214 | |
1215 MUST_USE_RESULT static MaybeHandle<Object> SetElementWithReceiver( | 1209 MUST_USE_RESULT static MaybeHandle<Object> SetElementWithReceiver( |
1216 Isolate* isolate, Handle<Object> object, Handle<Object> receiver, | 1210 Isolate* isolate, Handle<Object> object, Handle<Object> receiver, |
1217 uint32_t index, Handle<Object> value, LanguageMode language_mode); | 1211 uint32_t index, Handle<Object> value, LanguageMode language_mode); |
1218 | 1212 |
1219 static inline Handle<Object> GetPrototypeSkipHiddenPrototypes( | 1213 static inline Handle<Object> GetPrototypeSkipHiddenPrototypes( |
1220 Isolate* isolate, Handle<Object> receiver); | 1214 Isolate* isolate, Handle<Object> receiver); |
1221 | 1215 |
1222 // Returns the permanent hash code associated with this object. May return | 1216 // Returns the permanent hash code associated with this object. May return |
1223 // undefined if not yet created. | 1217 // undefined if not yet created. |
1224 Object* GetHash(); | 1218 Object* GetHash(); |
1225 | 1219 |
1226 // Returns the permanent hash code associated with this object depending on | 1220 // Returns the permanent hash code associated with this object depending on |
1227 // the actual object type. May create and store a hash code if needed and none | 1221 // the actual object type. May create and store a hash code if needed and none |
1228 // exists. | 1222 // exists. |
1229 static Handle<Smi> GetOrCreateHash(Isolate* isolate, Handle<Object> object); | 1223 static Handle<Smi> GetOrCreateHash(Isolate* isolate, Handle<Object> object); |
1230 | 1224 |
1231 // Checks whether this object has the same value as the given one. This | 1225 // Checks whether this object has the same value as the given one. This |
1232 // function is implemented according to ES5, section 9.12 and can be used | 1226 // function is implemented according to ES5, section 9.12 and can be used |
1233 // to implement the Harmony "egal" function. | 1227 // to implement the Harmony "egal" function. |
1234 bool SameValue(Object* other); | 1228 bool SameValue(Object* other); |
1235 | 1229 |
1236 // Checks whether this object has the same value as the given one. | 1230 // Checks whether this object has the same value as the given one. |
1237 // +0 and -0 are treated equal. Everything else is the same as SameValue. | 1231 // +0 and -0 are treated equal. Everything else is the same as SameValue. |
1238 // This function is implemented according to ES6, section 7.2.4 and is used | 1232 // This function is implemented according to ES6, section 7.2.4 and is used |
1239 // by ES6 Map and Set. | 1233 // by ES6 Map and Set. |
1240 bool SameValueZero(Object* other); | 1234 bool SameValueZero(Object* other); |
1241 | 1235 |
1242 // Tries to convert an object to an array index. Returns true and sets | 1236 // Tries to convert an object to an array length. Returns true and sets the |
1243 // the output parameter if it succeeds. | 1237 // output parameter if it succeeds. |
| 1238 inline bool ToArrayLength(uint32_t* index); |
| 1239 |
| 1240 // Tries to convert an object to an array index. Returns true and sets the |
| 1241 // output parameter if it succeeds. Equivalent to ToArrayLength, but does not |
| 1242 // allow kMaxUInt32. |
1244 inline bool ToArrayIndex(uint32_t* index); | 1243 inline bool ToArrayIndex(uint32_t* index); |
1245 | 1244 |
1246 // Returns true if this is a JSValue containing a string and the index is | 1245 // Returns true if this is a JSValue containing a string and the index is |
1247 // < the length of the string. Used to implement [] on strings. | 1246 // < the length of the string. Used to implement [] on strings. |
1248 inline bool IsStringObjectWithCharacterAt(uint32_t index); | 1247 inline bool IsStringObjectWithCharacterAt(uint32_t index); |
1249 | 1248 |
1250 DECLARE_VERIFIER(Object) | 1249 DECLARE_VERIFIER(Object) |
1251 #ifdef VERIFY_HEAP | 1250 #ifdef VERIFY_HEAP |
1252 // Verify a pointer is a valid object pointer. | 1251 // Verify a pointer is a valid object pointer. |
1253 static void VerifyPointer(Object* p); | 1252 static void VerifyPointer(Object* p); |
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElement( | 1979 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElement( |
1981 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 1980 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
1982 PropertyAttributes attributes, LanguageMode language_mode); | 1981 PropertyAttributes attributes, LanguageMode language_mode); |
1983 | 1982 |
1984 // Empty handle is returned if the element cannot be set to the given value. | 1983 // Empty handle is returned if the element cannot be set to the given value. |
1985 MUST_USE_RESULT static MaybeHandle<Object> SetElement( | 1984 MUST_USE_RESULT static MaybeHandle<Object> SetElement( |
1986 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 1985 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
1987 PropertyAttributes attributes, LanguageMode language_mode, | 1986 PropertyAttributes attributes, LanguageMode language_mode, |
1988 bool check_prototype = true, SetPropertyMode set_mode = SET_PROPERTY); | 1987 bool check_prototype = true, SetPropertyMode set_mode = SET_PROPERTY); |
1989 | 1988 |
1990 // Returns the index'th element. | |
1991 // The undefined object if index is out of bounds. | |
1992 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithInterceptor( | |
1993 Handle<JSObject> object, Handle<Object> receiver, uint32_t index, | |
1994 bool check_prototype); | |
1995 | |
1996 enum SetFastElementsCapacitySmiMode { | 1989 enum SetFastElementsCapacitySmiMode { |
1997 kAllowSmiElements, | 1990 kAllowSmiElements, |
1998 kForceSmiElements, | 1991 kForceSmiElements, |
1999 kDontAllowSmiElements | 1992 kDontAllowSmiElements |
2000 }; | 1993 }; |
2001 | 1994 |
2002 static Handle<FixedArray> SetFastElementsCapacity( | 1995 static Handle<FixedArray> SetFastElementsCapacity( |
2003 Handle<JSObject> object, int capacity, | 1996 Handle<JSObject> object, int capacity, |
2004 SetFastElementsCapacitySmiMode smi_mode); | 1997 SetFastElementsCapacitySmiMode smi_mode); |
2005 static Handle<FixedArrayBase> SetFastDoubleElementsCapacity( | 1998 static Handle<FixedArrayBase> SetFastDoubleElementsCapacity( |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2281 Handle<Map> new_map, | 2274 Handle<Map> new_map, |
2282 int expected_additional_properties); | 2275 int expected_additional_properties); |
2283 | 2276 |
2284 static void UpdateAllocationSite(Handle<JSObject> object, | 2277 static void UpdateAllocationSite(Handle<JSObject> object, |
2285 ElementsKind to_kind); | 2278 ElementsKind to_kind); |
2286 | 2279 |
2287 // Used from Object::GetProperty(). | 2280 // Used from Object::GetProperty(). |
2288 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( | 2281 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( |
2289 LookupIterator* it); | 2282 LookupIterator* it); |
2290 | 2283 |
2291 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithCallback( | |
2292 Handle<JSObject> object, | |
2293 Handle<Object> receiver, | |
2294 Handle<Object> structure, | |
2295 uint32_t index, | |
2296 Handle<Object> holder); | |
2297 | |
2298 MUST_USE_RESULT static Maybe<PropertyAttributes> | 2284 MUST_USE_RESULT static Maybe<PropertyAttributes> |
2299 GetElementAttributeWithInterceptor(Handle<JSObject> object, | 2285 GetElementAttributeWithInterceptor(Handle<JSObject> object, |
2300 Handle<JSReceiver> receiver, | 2286 Handle<JSReceiver> receiver, |
2301 uint32_t index, bool continue_search); | 2287 uint32_t index, bool continue_search); |
2302 | 2288 |
2303 // Queries indexed interceptor on an object for property attributes. | 2289 // Queries indexed interceptor on an object for property attributes. |
2304 // | 2290 // |
2305 // We determine property attributes as follows: | 2291 // We determine property attributes as follows: |
2306 // - if interceptor has a query callback, then the property attributes are | 2292 // - if interceptor has a query callback, then the property attributes are |
2307 // the result of query callback for index. | 2293 // the result of query callback for index. |
(...skipping 28 matching lines...) Expand all Loading... |
2336 static MaybeHandle<Object> SetElementWithCallbackSetterInPrototypes( | 2322 static MaybeHandle<Object> SetElementWithCallbackSetterInPrototypes( |
2337 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2323 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
2338 bool* found, LanguageMode language_mode); | 2324 bool* found, LanguageMode language_mode); |
2339 MUST_USE_RESULT static MaybeHandle<Object> SetDictionaryElement( | 2325 MUST_USE_RESULT static MaybeHandle<Object> SetDictionaryElement( |
2340 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2326 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
2341 PropertyAttributes attributes, LanguageMode language_mode, | 2327 PropertyAttributes attributes, LanguageMode language_mode, |
2342 bool check_prototype, SetPropertyMode set_mode = SET_PROPERTY); | 2328 bool check_prototype, SetPropertyMode set_mode = SET_PROPERTY); |
2343 MUST_USE_RESULT static MaybeHandle<Object> SetFastDoubleElement( | 2329 MUST_USE_RESULT static MaybeHandle<Object> SetFastDoubleElement( |
2344 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2330 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
2345 LanguageMode language_mode, bool check_prototype = true); | 2331 LanguageMode language_mode, bool check_prototype = true); |
2346 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithFailedAccessCheck( | |
2347 Isolate* isolate, Handle<JSObject> object, Handle<Object> receiver, | |
2348 uint32_t index); | |
2349 MUST_USE_RESULT static Maybe<PropertyAttributes> | 2332 MUST_USE_RESULT static Maybe<PropertyAttributes> |
2350 GetElementAttributesWithFailedAccessCheck(Isolate* isolate, | 2333 GetElementAttributesWithFailedAccessCheck(Isolate* isolate, |
2351 Handle<JSObject> object, | 2334 Handle<JSObject> object, |
2352 Handle<Object> receiver, | 2335 Handle<Object> receiver, |
2353 uint32_t index); | 2336 uint32_t index); |
2354 | 2337 |
2355 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithFailedAccessCheck( | 2338 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithFailedAccessCheck( |
2356 LookupIterator* it, Handle<Object> value, LanguageMode language_mode); | 2339 LookupIterator* it, Handle<Object> value, LanguageMode language_mode); |
2357 | 2340 |
2358 // Add a property to a slow-case object. | 2341 // Add a property to a slow-case object. |
(...skipping 7599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9958 | 9941 |
9959 // [hash]: The hash code property (undefined if not initialized yet). | 9942 // [hash]: The hash code property (undefined if not initialized yet). |
9960 DECL_ACCESSORS(hash, Object) | 9943 DECL_ACCESSORS(hash, Object) |
9961 | 9944 |
9962 DECLARE_CAST(JSProxy) | 9945 DECLARE_CAST(JSProxy) |
9963 | 9946 |
9964 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithHandler( | 9947 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithHandler( |
9965 Handle<JSProxy> proxy, | 9948 Handle<JSProxy> proxy, |
9966 Handle<Object> receiver, | 9949 Handle<Object> receiver, |
9967 Handle<Name> name); | 9950 Handle<Name> name); |
9968 MUST_USE_RESULT static inline MaybeHandle<Object> GetElementWithHandler( | |
9969 Handle<JSProxy> proxy, | |
9970 Handle<Object> receiver, | |
9971 uint32_t index); | |
9972 | 9951 |
9973 // If the handler defines an accessor property with a setter, invoke it. | 9952 // If the handler defines an accessor property with a setter, invoke it. |
9974 // If it defines an accessor property without a setter, or a data property | 9953 // If it defines an accessor property without a setter, or a data property |
9975 // that is read-only, throw. In all these cases set '*done' to true, | 9954 // that is read-only, throw. In all these cases set '*done' to true, |
9976 // otherwise set it to false. | 9955 // otherwise set it to false. |
9977 MUST_USE_RESULT | 9956 MUST_USE_RESULT |
9978 static MaybeHandle<Object> SetPropertyViaPrototypesWithHandler( | 9957 static MaybeHandle<Object> SetPropertyViaPrototypesWithHandler( |
9979 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, | 9958 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
9980 Handle<Object> value, LanguageMode language_mode, bool* done); | 9959 Handle<Object> value, LanguageMode language_mode, bool* done); |
9981 | 9960 |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10355 #endif | 10334 #endif |
10356 | 10335 |
10357 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 10336 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
10358 }; | 10337 }; |
10359 | 10338 |
10360 | 10339 |
10361 class JSTypedArray: public JSArrayBufferView { | 10340 class JSTypedArray: public JSArrayBufferView { |
10362 public: | 10341 public: |
10363 // [length]: length of typed array in elements. | 10342 // [length]: length of typed array in elements. |
10364 DECL_ACCESSORS(length, Object) | 10343 DECL_ACCESSORS(length, Object) |
| 10344 inline uint32_t length_value() const; |
10365 | 10345 |
10366 DECLARE_CAST(JSTypedArray) | 10346 DECLARE_CAST(JSTypedArray) |
10367 | 10347 |
10368 ExternalArrayType type(); | 10348 ExternalArrayType type(); |
10369 size_t element_size(); | 10349 size_t element_size(); |
10370 | 10350 |
10371 Handle<JSArrayBuffer> GetBuffer(); | 10351 Handle<JSArrayBuffer> GetBuffer(); |
10372 | 10352 |
10373 // Dispatched behavior. | 10353 // Dispatched behavior. |
10374 DECLARE_PRINTER(JSTypedArray) | 10354 DECLARE_PRINTER(JSTypedArray) |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11146 } else { | 11126 } else { |
11147 value &= ~(1 << bit_position); | 11127 value &= ~(1 << bit_position); |
11148 } | 11128 } |
11149 return value; | 11129 return value; |
11150 } | 11130 } |
11151 }; | 11131 }; |
11152 | 11132 |
11153 } } // namespace v8::internal | 11133 } } // namespace v8::internal |
11154 | 11134 |
11155 #endif // V8_OBJECTS_H_ | 11135 #endif // V8_OBJECTS_H_ |
OLD | NEW |