| 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 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithDefinedSetter( | 1207 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithDefinedSetter( |
| 1208 Handle<Object> receiver, | 1208 Handle<Object> receiver, |
| 1209 Handle<JSReceiver> setter, | 1209 Handle<JSReceiver> setter, |
| 1210 Handle<Object> value); | 1210 Handle<Object> value); |
| 1211 | 1211 |
| 1212 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( | 1212 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( |
| 1213 Isolate* isolate, | 1213 Isolate* isolate, |
| 1214 Handle<Object> object, | 1214 Handle<Object> object, |
| 1215 uint32_t index); | 1215 uint32_t index); |
| 1216 | 1216 |
| 1217 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithReceiver( | |
| 1218 Isolate* isolate, | |
| 1219 Handle<Object> object, | |
| 1220 Handle<Object> receiver, | |
| 1221 uint32_t index); | |
| 1222 | |
| 1223 MUST_USE_RESULT static MaybeHandle<Object> SetElementWithReceiver( | 1217 MUST_USE_RESULT static MaybeHandle<Object> SetElementWithReceiver( |
| 1224 Isolate* isolate, Handle<Object> object, Handle<Object> receiver, | 1218 Isolate* isolate, Handle<Object> object, Handle<Object> receiver, |
| 1225 uint32_t index, Handle<Object> value, LanguageMode language_mode); | 1219 uint32_t index, Handle<Object> value, LanguageMode language_mode); |
| 1226 | 1220 |
| 1227 static inline Handle<Object> GetPrototypeSkipHiddenPrototypes( | 1221 static inline Handle<Object> GetPrototypeSkipHiddenPrototypes( |
| 1228 Isolate* isolate, Handle<Object> receiver); | 1222 Isolate* isolate, Handle<Object> receiver); |
| 1229 | 1223 |
| 1230 // Returns the permanent hash code associated with this object. May return | 1224 // Returns the permanent hash code associated with this object. May return |
| 1231 // undefined if not yet created. | 1225 // undefined if not yet created. |
| 1232 Object* GetHash(); | 1226 Object* GetHash(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1245 // function is implemented according to ES5, section 9.12 and can be used | 1239 // function is implemented according to ES5, section 9.12 and can be used |
| 1246 // to implement the Harmony "egal" function. | 1240 // to implement the Harmony "egal" function. |
| 1247 bool SameValue(Object* other); | 1241 bool SameValue(Object* other); |
| 1248 | 1242 |
| 1249 // Checks whether this object has the same value as the given one. | 1243 // Checks whether this object has the same value as the given one. |
| 1250 // +0 and -0 are treated equal. Everything else is the same as SameValue. | 1244 // +0 and -0 are treated equal. Everything else is the same as SameValue. |
| 1251 // This function is implemented according to ES6, section 7.2.4 and is used | 1245 // This function is implemented according to ES6, section 7.2.4 and is used |
| 1252 // by ES6 Map and Set. | 1246 // by ES6 Map and Set. |
| 1253 bool SameValueZero(Object* other); | 1247 bool SameValueZero(Object* other); |
| 1254 | 1248 |
| 1255 // Tries to convert an object to an array index. Returns true and sets | 1249 // Tries to convert an object to an array length. Returns true and sets the |
| 1256 // the output parameter if it succeeds. | 1250 // output parameter if it succeeds. |
| 1251 inline bool ToArrayLength(uint32_t* index); |
| 1252 |
| 1253 // Tries to convert an object to an array index. Returns true and sets the |
| 1254 // output parameter if it succeeds. Equivalent to ToArrayLength, but does not |
| 1255 // allow kMaxUInt32. |
| 1257 inline bool ToArrayIndex(uint32_t* index); | 1256 inline bool ToArrayIndex(uint32_t* index); |
| 1258 | 1257 |
| 1259 // Returns true if this is a JSValue containing a string and the index is | 1258 // Returns true if this is a JSValue containing a string and the index is |
| 1260 // < the length of the string. Used to implement [] on strings. | 1259 // < the length of the string. Used to implement [] on strings. |
| 1261 inline bool IsStringObjectWithCharacterAt(uint32_t index); | 1260 inline bool IsStringObjectWithCharacterAt(uint32_t index); |
| 1262 | 1261 |
| 1263 DECLARE_VERIFIER(Object) | 1262 DECLARE_VERIFIER(Object) |
| 1264 #ifdef VERIFY_HEAP | 1263 #ifdef VERIFY_HEAP |
| 1265 // Verify a pointer is a valid object pointer. | 1264 // Verify a pointer is a valid object pointer. |
| 1266 static void VerifyPointer(Object* p); | 1265 static void VerifyPointer(Object* p); |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1996 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElement( | 1995 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElement( |
| 1997 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 1996 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 1998 PropertyAttributes attributes, LanguageMode language_mode); | 1997 PropertyAttributes attributes, LanguageMode language_mode); |
| 1999 | 1998 |
| 2000 // Empty handle is returned if the element cannot be set to the given value. | 1999 // Empty handle is returned if the element cannot be set to the given value. |
| 2001 MUST_USE_RESULT static MaybeHandle<Object> SetElement( | 2000 MUST_USE_RESULT static MaybeHandle<Object> SetElement( |
| 2002 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2001 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 2003 PropertyAttributes attributes, LanguageMode language_mode, | 2002 PropertyAttributes attributes, LanguageMode language_mode, |
| 2004 bool check_prototype = true, SetPropertyMode set_mode = SET_PROPERTY); | 2003 bool check_prototype = true, SetPropertyMode set_mode = SET_PROPERTY); |
| 2005 | 2004 |
| 2006 // Returns the index'th element. | |
| 2007 // The undefined object if index is out of bounds. | |
| 2008 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithInterceptor( | |
| 2009 Handle<JSObject> object, Handle<Object> receiver, uint32_t index, | |
| 2010 bool check_prototype); | |
| 2011 | |
| 2012 enum SetFastElementsCapacitySmiMode { | 2005 enum SetFastElementsCapacitySmiMode { |
| 2013 kAllowSmiElements, | 2006 kAllowSmiElements, |
| 2014 kForceSmiElements, | 2007 kForceSmiElements, |
| 2015 kDontAllowSmiElements | 2008 kDontAllowSmiElements |
| 2016 }; | 2009 }; |
| 2017 | 2010 |
| 2018 static Handle<FixedArray> SetFastElementsCapacity( | 2011 static Handle<FixedArray> SetFastElementsCapacity( |
| 2019 Handle<JSObject> object, int capacity, | 2012 Handle<JSObject> object, int capacity, |
| 2020 SetFastElementsCapacitySmiMode smi_mode); | 2013 SetFastElementsCapacitySmiMode smi_mode); |
| 2021 static Handle<FixedArrayBase> SetFastDoubleElementsCapacity( | 2014 static Handle<FixedArrayBase> SetFastDoubleElementsCapacity( |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2299 Handle<Map> new_map, | 2292 Handle<Map> new_map, |
| 2300 int expected_additional_properties); | 2293 int expected_additional_properties); |
| 2301 | 2294 |
| 2302 static void UpdateAllocationSite(Handle<JSObject> object, | 2295 static void UpdateAllocationSite(Handle<JSObject> object, |
| 2303 ElementsKind to_kind); | 2296 ElementsKind to_kind); |
| 2304 | 2297 |
| 2305 // Used from Object::GetProperty(). | 2298 // Used from Object::GetProperty(). |
| 2306 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( | 2299 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithFailedAccessCheck( |
| 2307 LookupIterator* it); | 2300 LookupIterator* it); |
| 2308 | 2301 |
| 2309 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithCallback( | |
| 2310 Handle<JSObject> object, | |
| 2311 Handle<Object> receiver, | |
| 2312 Handle<Object> structure, | |
| 2313 uint32_t index, | |
| 2314 Handle<Object> holder); | |
| 2315 | |
| 2316 MUST_USE_RESULT static Maybe<PropertyAttributes> | 2302 MUST_USE_RESULT static Maybe<PropertyAttributes> |
| 2317 GetElementAttributeWithInterceptor(Handle<JSObject> object, | 2303 GetElementAttributeWithInterceptor(Handle<JSObject> object, |
| 2318 Handle<JSReceiver> receiver, | 2304 Handle<JSReceiver> receiver, |
| 2319 uint32_t index, bool continue_search); | 2305 uint32_t index, bool continue_search); |
| 2320 | 2306 |
| 2321 // Queries indexed interceptor on an object for property attributes. | 2307 // Queries indexed interceptor on an object for property attributes. |
| 2322 // | 2308 // |
| 2323 // We determine property attributes as follows: | 2309 // We determine property attributes as follows: |
| 2324 // - if interceptor has a query callback, then the property attributes are | 2310 // - if interceptor has a query callback, then the property attributes are |
| 2325 // the result of query callback for index. | 2311 // the result of query callback for index. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2354 static MaybeHandle<Object> SetElementWithCallbackSetterInPrototypes( | 2340 static MaybeHandle<Object> SetElementWithCallbackSetterInPrototypes( |
| 2355 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2341 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 2356 bool* found, LanguageMode language_mode); | 2342 bool* found, LanguageMode language_mode); |
| 2357 MUST_USE_RESULT static MaybeHandle<Object> SetDictionaryElement( | 2343 MUST_USE_RESULT static MaybeHandle<Object> SetDictionaryElement( |
| 2358 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2344 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 2359 PropertyAttributes attributes, LanguageMode language_mode, | 2345 PropertyAttributes attributes, LanguageMode language_mode, |
| 2360 bool check_prototype, SetPropertyMode set_mode = SET_PROPERTY); | 2346 bool check_prototype, SetPropertyMode set_mode = SET_PROPERTY); |
| 2361 MUST_USE_RESULT static MaybeHandle<Object> SetFastDoubleElement( | 2347 MUST_USE_RESULT static MaybeHandle<Object> SetFastDoubleElement( |
| 2362 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2348 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 2363 LanguageMode language_mode, bool check_prototype = true); | 2349 LanguageMode language_mode, bool check_prototype = true); |
| 2364 MUST_USE_RESULT static MaybeHandle<Object> GetElementWithFailedAccessCheck( | |
| 2365 Isolate* isolate, Handle<JSObject> object, Handle<Object> receiver, | |
| 2366 uint32_t index); | |
| 2367 MUST_USE_RESULT static Maybe<PropertyAttributes> | 2350 MUST_USE_RESULT static Maybe<PropertyAttributes> |
| 2368 GetElementAttributesWithFailedAccessCheck(Isolate* isolate, | 2351 GetElementAttributesWithFailedAccessCheck(Isolate* isolate, |
| 2369 Handle<JSObject> object, | 2352 Handle<JSObject> object, |
| 2370 Handle<Object> receiver, | 2353 Handle<Object> receiver, |
| 2371 uint32_t index); | 2354 uint32_t index); |
| 2372 | 2355 |
| 2373 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithFailedAccessCheck( | 2356 MUST_USE_RESULT static MaybeHandle<Object> SetPropertyWithFailedAccessCheck( |
| 2374 LookupIterator* it, Handle<Object> value, LanguageMode language_mode); | 2357 LookupIterator* it, Handle<Object> value, LanguageMode language_mode); |
| 2375 | 2358 |
| 2376 // Add a property to a slow-case object. | 2359 // Add a property to a slow-case object. |
| (...skipping 7597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9974 | 9957 |
| 9975 // [hash]: The hash code property (undefined if not initialized yet). | 9958 // [hash]: The hash code property (undefined if not initialized yet). |
| 9976 DECL_ACCESSORS(hash, Object) | 9959 DECL_ACCESSORS(hash, Object) |
| 9977 | 9960 |
| 9978 DECLARE_CAST(JSProxy) | 9961 DECLARE_CAST(JSProxy) |
| 9979 | 9962 |
| 9980 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithHandler( | 9963 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithHandler( |
| 9981 Handle<JSProxy> proxy, | 9964 Handle<JSProxy> proxy, |
| 9982 Handle<Object> receiver, | 9965 Handle<Object> receiver, |
| 9983 Handle<Name> name); | 9966 Handle<Name> name); |
| 9984 MUST_USE_RESULT static inline MaybeHandle<Object> GetElementWithHandler( | |
| 9985 Handle<JSProxy> proxy, | |
| 9986 Handle<Object> receiver, | |
| 9987 uint32_t index); | |
| 9988 | 9967 |
| 9989 // If the handler defines an accessor property with a setter, invoke it. | 9968 // If the handler defines an accessor property with a setter, invoke it. |
| 9990 // If it defines an accessor property without a setter, or a data property | 9969 // If it defines an accessor property without a setter, or a data property |
| 9991 // that is read-only, throw. In all these cases set '*done' to true, | 9970 // that is read-only, throw. In all these cases set '*done' to true, |
| 9992 // otherwise set it to false. | 9971 // otherwise set it to false. |
| 9993 MUST_USE_RESULT | 9972 MUST_USE_RESULT |
| 9994 static MaybeHandle<Object> SetPropertyViaPrototypesWithHandler( | 9973 static MaybeHandle<Object> SetPropertyViaPrototypesWithHandler( |
| 9995 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, | 9974 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
| 9996 Handle<Object> value, LanguageMode language_mode, bool* done); | 9975 Handle<Object> value, LanguageMode language_mode, bool* done); |
| 9997 | 9976 |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10379 #endif | 10358 #endif |
| 10380 | 10359 |
| 10381 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 10360 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
| 10382 }; | 10361 }; |
| 10383 | 10362 |
| 10384 | 10363 |
| 10385 class JSTypedArray: public JSArrayBufferView { | 10364 class JSTypedArray: public JSArrayBufferView { |
| 10386 public: | 10365 public: |
| 10387 // [length]: length of typed array in elements. | 10366 // [length]: length of typed array in elements. |
| 10388 DECL_ACCESSORS(length, Object) | 10367 DECL_ACCESSORS(length, Object) |
| 10368 inline uint32_t length_value() const; |
| 10389 | 10369 |
| 10390 DECLARE_CAST(JSTypedArray) | 10370 DECLARE_CAST(JSTypedArray) |
| 10391 | 10371 |
| 10392 ExternalArrayType type(); | 10372 ExternalArrayType type(); |
| 10393 size_t element_size(); | 10373 size_t element_size(); |
| 10394 | 10374 |
| 10395 Handle<JSArrayBuffer> GetBuffer(); | 10375 Handle<JSArrayBuffer> GetBuffer(); |
| 10396 | 10376 |
| 10397 // Dispatched behavior. | 10377 // Dispatched behavior. |
| 10398 DECLARE_PRINTER(JSTypedArray) | 10378 DECLARE_PRINTER(JSTypedArray) |
| (...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11170 } else { | 11150 } else { |
| 11171 value &= ~(1 << bit_position); | 11151 value &= ~(1 << bit_position); |
| 11172 } | 11152 } |
| 11173 return value; | 11153 return value; |
| 11174 } | 11154 } |
| 11175 }; | 11155 }; |
| 11176 | 11156 |
| 11177 } } // namespace v8::internal | 11157 } } // namespace v8::internal |
| 11178 | 11158 |
| 11179 #endif // V8_OBJECTS_H_ | 11159 #endif // V8_OBJECTS_H_ |
| OLD | NEW |