| 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 1230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 // ES6 [[Set]] (when passed DONT_THROW) | 1241 // ES6 [[Set]] (when passed DONT_THROW) |
| 1242 // Invariants for this and related functions (unless stated otherwise): | 1242 // Invariants for this and related functions (unless stated otherwise): |
| 1243 // 1) When the result is Nothing, an exception is pending. | 1243 // 1) When the result is Nothing, an exception is pending. |
| 1244 // 2) When passed THROW_ON_ERROR, the result is never Just(false). | 1244 // 2) When passed THROW_ON_ERROR, the result is never Just(false). |
| 1245 // In some cases, an exception is thrown regardless of the ShouldThrow | 1245 // In some cases, an exception is thrown regardless of the ShouldThrow |
| 1246 // argument. These cases are either in accordance with the spec or not | 1246 // argument. These cases are either in accordance with the spec or not |
| 1247 // covered by it (eg., concerning API callbacks). | 1247 // covered by it (eg., concerning API callbacks). |
| 1248 MUST_USE_RESULT static Maybe<bool> SetProperty(LookupIterator* it, | 1248 MUST_USE_RESULT static Maybe<bool> SetProperty(LookupIterator* it, |
| 1249 Handle<Object> value, | 1249 Handle<Object> value, |
| 1250 LanguageMode language_mode, | 1250 LanguageMode language_mode, |
| 1251 ShouldThrow should_throw, | |
| 1252 StoreFromKeyed store_mode); | 1251 StoreFromKeyed store_mode); |
| 1253 MUST_USE_RESULT static MaybeHandle<Object> SetProperty( | 1252 MUST_USE_RESULT static MaybeHandle<Object> SetProperty( |
| 1254 Handle<Object> object, Handle<Name> name, Handle<Object> value, | 1253 Handle<Object> object, Handle<Name> name, Handle<Object> value, |
| 1255 LanguageMode language_mode, | 1254 LanguageMode language_mode, |
| 1256 StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED); | 1255 StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED); |
| 1257 MUST_USE_RESULT static MaybeHandle<Object> SetProperty( | 1256 |
| 1257 MUST_USE_RESULT static Maybe<bool> SetSuperProperty( |
| 1258 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, | 1258 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, |
| 1259 StoreFromKeyed store_mode); | 1259 StoreFromKeyed store_mode); |
| 1260 | 1260 |
| 1261 MUST_USE_RESULT static MaybeHandle<Object> SetSuperProperty( | |
| 1262 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, | |
| 1263 StoreFromKeyed store_mode); | |
| 1264 | |
| 1265 MUST_USE_RESULT static MaybeHandle<Object> ReadAbsentProperty( | 1261 MUST_USE_RESULT static MaybeHandle<Object> ReadAbsentProperty( |
| 1266 LookupIterator* it, LanguageMode language_mode); | 1262 LookupIterator* it, LanguageMode language_mode); |
| 1267 MUST_USE_RESULT static MaybeHandle<Object> ReadAbsentProperty( | 1263 MUST_USE_RESULT static MaybeHandle<Object> ReadAbsentProperty( |
| 1268 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, | 1264 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, |
| 1269 LanguageMode language_mode); | 1265 LanguageMode language_mode); |
| 1270 MUST_USE_RESULT static Maybe<bool> CannotCreateProperty( | 1266 MUST_USE_RESULT static Maybe<bool> CannotCreateProperty( |
| 1271 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, | 1267 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, |
| 1272 Handle<Object> value, LanguageMode language_mode, | 1268 Handle<Object> value, ShouldThrow should_throw); |
| 1273 ShouldThrow should_throw); | |
| 1274 MUST_USE_RESULT static Maybe<bool> WriteToReadOnlyProperty( | 1269 MUST_USE_RESULT static Maybe<bool> WriteToReadOnlyProperty( |
| 1275 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, | 1270 LookupIterator* it, Handle<Object> value, ShouldThrow should_throw); |
| 1276 ShouldThrow should_throw); | |
| 1277 MUST_USE_RESULT static Maybe<bool> WriteToReadOnlyProperty( | 1271 MUST_USE_RESULT static Maybe<bool> WriteToReadOnlyProperty( |
| 1278 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, | 1272 Isolate* isolate, Handle<Object> receiver, Handle<Object> name, |
| 1279 Handle<Object> value, LanguageMode language_mode, | 1273 Handle<Object> value, ShouldThrow should_throw); |
| 1274 MUST_USE_RESULT static Maybe<bool> RedefineNonconfigurableProperty( |
| 1275 Isolate* isolate, Handle<Object> name, Handle<Object> value, |
| 1280 ShouldThrow should_throw); | 1276 ShouldThrow should_throw); |
| 1281 MUST_USE_RESULT static MaybeHandle<Object> RedefineNonconfigurableProperty( | |
| 1282 Isolate* isolate, Handle<Object> name, Handle<Object> value, | |
| 1283 LanguageMode language_mode); | |
| 1284 MUST_USE_RESULT static Maybe<bool> SetDataProperty(LookupIterator* it, | 1277 MUST_USE_RESULT static Maybe<bool> SetDataProperty(LookupIterator* it, |
| 1285 Handle<Object> value, | 1278 Handle<Object> value, |
| 1286 ShouldThrow should_throw); | 1279 ShouldThrow should_throw); |
| 1287 MUST_USE_RESULT static MaybeHandle<Object> AddDataProperty( | |
| 1288 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, | |
| 1289 LanguageMode language_mode, StoreFromKeyed store_mode); | |
| 1290 MUST_USE_RESULT static Maybe<bool> AddDataProperty( | 1280 MUST_USE_RESULT static Maybe<bool> AddDataProperty( |
| 1291 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, | 1281 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, |
| 1292 LanguageMode language_mode, ShouldThrow should_throw, | 1282 ShouldThrow should_throw, StoreFromKeyed store_mode); |
| 1293 StoreFromKeyed store_mode); | |
| 1294 MUST_USE_RESULT static inline MaybeHandle<Object> GetPropertyOrElement( | 1283 MUST_USE_RESULT static inline MaybeHandle<Object> GetPropertyOrElement( |
| 1295 Handle<Object> object, Handle<Name> name, | 1284 Handle<Object> object, Handle<Name> name, |
| 1296 LanguageMode language_mode = SLOPPY); | 1285 LanguageMode language_mode = SLOPPY); |
| 1297 MUST_USE_RESULT static inline MaybeHandle<Object> GetPropertyOrElement( | 1286 MUST_USE_RESULT static inline MaybeHandle<Object> GetPropertyOrElement( |
| 1298 Handle<JSReceiver> holder, Handle<Name> name, Handle<Object> receiver, | 1287 Handle<JSReceiver> holder, Handle<Name> name, Handle<Object> receiver, |
| 1299 LanguageMode language_mode = SLOPPY); | 1288 LanguageMode language_mode = SLOPPY); |
| 1300 MUST_USE_RESULT static inline MaybeHandle<Object> GetProperty( | 1289 MUST_USE_RESULT static inline MaybeHandle<Object> GetProperty( |
| 1301 Isolate* isolate, Handle<Object> object, const char* key, | 1290 Isolate* isolate, Handle<Object> object, const char* key, |
| 1302 LanguageMode language_mode = SLOPPY); | 1291 LanguageMode language_mode = SLOPPY); |
| 1303 MUST_USE_RESULT static inline MaybeHandle<Object> GetProperty( | 1292 MUST_USE_RESULT static inline MaybeHandle<Object> GetProperty( |
| 1304 Handle<Object> object, Handle<Name> name, | 1293 Handle<Object> object, Handle<Name> name, |
| 1305 LanguageMode language_mode = SLOPPY); | 1294 LanguageMode language_mode = SLOPPY); |
| 1306 | 1295 |
| 1307 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithAccessor( | 1296 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithAccessor( |
| 1308 LookupIterator* it, LanguageMode language_mode); | 1297 LookupIterator* it, LanguageMode language_mode); |
| 1309 MUST_USE_RESULT static Maybe<bool> SetPropertyWithAccessor( | 1298 MUST_USE_RESULT static Maybe<bool> SetPropertyWithAccessor( |
| 1310 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, | 1299 LookupIterator* it, Handle<Object> value, ShouldThrow should_throw); |
| 1311 ShouldThrow should_throw); | |
| 1312 | 1300 |
| 1313 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithDefinedGetter( | 1301 MUST_USE_RESULT static MaybeHandle<Object> GetPropertyWithDefinedGetter( |
| 1314 Handle<Object> receiver, | 1302 Handle<Object> receiver, |
| 1315 Handle<JSReceiver> getter); | 1303 Handle<JSReceiver> getter); |
| 1316 MUST_USE_RESULT static Maybe<bool> SetPropertyWithDefinedSetter( | 1304 MUST_USE_RESULT static Maybe<bool> SetPropertyWithDefinedSetter( |
| 1317 Handle<Object> receiver, Handle<JSReceiver> setter, Handle<Object> value, | 1305 Handle<Object> receiver, Handle<JSReceiver> setter, Handle<Object> value, |
| 1318 ShouldThrow should_throw); | 1306 ShouldThrow should_throw); |
| 1319 | 1307 |
| 1320 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( | 1308 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( |
| 1321 Isolate* isolate, Handle<Object> object, uint32_t index, | 1309 Isolate* isolate, Handle<Object> object, uint32_t index, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1405 friend class LookupIterator; | 1393 friend class LookupIterator; |
| 1406 friend class PrototypeIterator; | 1394 friend class PrototypeIterator; |
| 1407 | 1395 |
| 1408 // Return the map of the root of object's prototype chain. | 1396 // Return the map of the root of object's prototype chain. |
| 1409 Map* GetRootMap(Isolate* isolate); | 1397 Map* GetRootMap(Isolate* isolate); |
| 1410 | 1398 |
| 1411 // Helper for SetProperty and SetSuperProperty. | 1399 // Helper for SetProperty and SetSuperProperty. |
| 1412 // Return value is only meaningful if [found] is set to true on return. | 1400 // Return value is only meaningful if [found] is set to true on return. |
| 1413 MUST_USE_RESULT static Maybe<bool> SetPropertyInternal( | 1401 MUST_USE_RESULT static Maybe<bool> SetPropertyInternal( |
| 1414 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, | 1402 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, |
| 1415 ShouldThrow should_throw, StoreFromKeyed store_mode, bool* found); | 1403 StoreFromKeyed store_mode, bool* found); |
| 1416 | 1404 |
| 1417 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); | 1405 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); |
| 1418 }; | 1406 }; |
| 1419 | 1407 |
| 1420 | 1408 |
| 1421 // In objects.h to be usable without objects-inl.h inclusion. | 1409 // In objects.h to be usable without objects-inl.h inclusion. |
| 1422 bool Object::IsSmi() const { return HAS_SMI_TAG(this); } | 1410 bool Object::IsSmi() const { return HAS_SMI_TAG(this); } |
| 1423 bool Object::IsHeapObject() const { return Internals::HasHeapObjectTag(this); } | 1411 bool Object::IsHeapObject() const { return Internals::HasHeapObjectTag(this); } |
| 1424 | 1412 |
| 1425 | 1413 |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2058 LookupIterator* it, Handle<Object> value); | 2046 LookupIterator* it, Handle<Object> value); |
| 2059 | 2047 |
| 2060 // SetLocalPropertyIgnoreAttributes converts callbacks to fields. We need to | 2048 // SetLocalPropertyIgnoreAttributes converts callbacks to fields. We need to |
| 2061 // grant an exemption to ExecutableAccessor callbacks in some cases. | 2049 // grant an exemption to ExecutableAccessor callbacks in some cases. |
| 2062 enum ExecutableAccessorInfoHandling { DEFAULT_HANDLING, DONT_FORCE_FIELD }; | 2050 enum ExecutableAccessorInfoHandling { DEFAULT_HANDLING, DONT_FORCE_FIELD }; |
| 2063 | 2051 |
| 2064 MUST_USE_RESULT static MaybeHandle<Object> DefineOwnPropertyIgnoreAttributes( | 2052 MUST_USE_RESULT static MaybeHandle<Object> DefineOwnPropertyIgnoreAttributes( |
| 2065 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, | 2053 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, |
| 2066 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); | 2054 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); |
| 2067 | 2055 |
| 2056 MUST_USE_RESULT static Maybe<bool> DefineOwnPropertyIgnoreAttributes( |
| 2057 LookupIterator* it, Handle<Object> value, PropertyAttributes attributes, |
| 2058 ShouldThrow should_throw, |
| 2059 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); |
| 2060 |
| 2068 MUST_USE_RESULT static MaybeHandle<Object> SetOwnPropertyIgnoreAttributes( | 2061 MUST_USE_RESULT static MaybeHandle<Object> SetOwnPropertyIgnoreAttributes( |
| 2069 Handle<JSObject> object, Handle<Name> name, Handle<Object> value, | 2062 Handle<JSObject> object, Handle<Name> name, Handle<Object> value, |
| 2070 PropertyAttributes attributes, | 2063 PropertyAttributes attributes, |
| 2071 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); | 2064 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); |
| 2072 | 2065 |
| 2073 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElementIgnoreAttributes( | 2066 MUST_USE_RESULT static MaybeHandle<Object> SetOwnElementIgnoreAttributes( |
| 2074 Handle<JSObject> object, uint32_t index, Handle<Object> value, | 2067 Handle<JSObject> object, uint32_t index, Handle<Object> value, |
| 2075 PropertyAttributes attributes, | 2068 PropertyAttributes attributes, |
| 2076 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); | 2069 ExecutableAccessorInfoHandling handling = DEFAULT_HANDLING); |
| 2077 | 2070 |
| (...skipping 7484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9562 Handle<Name> name); | 9555 Handle<Name> name); |
| 9563 | 9556 |
| 9564 // If the handler defines an accessor property with a setter, invoke it. | 9557 // If the handler defines an accessor property with a setter, invoke it. |
| 9565 // If it defines an accessor property without a setter, or a data property | 9558 // If it defines an accessor property without a setter, or a data property |
| 9566 // that is read-only, fail. In all these cases set '*done' to true. | 9559 // that is read-only, fail. In all these cases set '*done' to true. |
| 9567 // Otherwise set it to false, in which case the return value is not | 9560 // Otherwise set it to false, in which case the return value is not |
| 9568 // meaningful. | 9561 // meaningful. |
| 9569 MUST_USE_RESULT | 9562 MUST_USE_RESULT |
| 9570 static Maybe<bool> SetPropertyViaPrototypesWithHandler( | 9563 static Maybe<bool> SetPropertyViaPrototypesWithHandler( |
| 9571 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, | 9564 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
| 9572 Handle<Object> value, LanguageMode language_mode, | 9565 Handle<Object> value, ShouldThrow should_throw, bool* done); |
| 9573 ShouldThrow should_throw, bool* done); | |
| 9574 | 9566 |
| 9575 MUST_USE_RESULT static Maybe<PropertyAttributes> | 9567 MUST_USE_RESULT static Maybe<PropertyAttributes> |
| 9576 GetPropertyAttributesWithHandler(Handle<JSProxy> proxy, | 9568 GetPropertyAttributesWithHandler(Handle<JSProxy> proxy, |
| 9577 Handle<Object> receiver, | 9569 Handle<Object> receiver, |
| 9578 Handle<Name> name); | 9570 Handle<Name> name); |
| 9579 MUST_USE_RESULT static Maybe<bool> SetPropertyWithHandler( | 9571 MUST_USE_RESULT static Maybe<bool> SetPropertyWithHandler( |
| 9580 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, | 9572 Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
| 9581 Handle<Object> value, LanguageMode language_mode, | 9573 Handle<Object> value, ShouldThrow should_throw); |
| 9582 ShouldThrow should_throw); | |
| 9583 | 9574 |
| 9584 // Turn the proxy into an (empty) JSObject. | 9575 // Turn the proxy into an (empty) JSObject. |
| 9585 static void Fix(Handle<JSProxy> proxy); | 9576 static void Fix(Handle<JSProxy> proxy); |
| 9586 | 9577 |
| 9587 // Initializes the body after the handler slot. | 9578 // Initializes the body after the handler slot. |
| 9588 inline void InitializeBody(int object_size, Object* value); | 9579 inline void InitializeBody(int object_size, Object* value); |
| 9589 | 9580 |
| 9590 // Invoke a trap by name. If the trap does not exist on this's handler, | 9581 // Invoke a trap by name. If the trap does not exist on this's handler, |
| 9591 // but derived_trap is non-NULL, invoke that instead. May cause GC. | 9582 // but derived_trap is non-NULL, invoke that instead. May cause GC. |
| 9592 MUST_USE_RESULT static MaybeHandle<Object> CallTrap( | 9583 MUST_USE_RESULT static MaybeHandle<Object> CallTrap( |
| (...skipping 1245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10838 // (elements + properties) in the current level. | 10829 // (elements + properties) in the current level. |
| 10839 int levelLength_ = 0; | 10830 int levelLength_ = 0; |
| 10840 | 10831 |
| 10841 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); | 10832 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); |
| 10842 }; | 10833 }; |
| 10843 | 10834 |
| 10844 } // NOLINT, false-positive due to second-order macros. | 10835 } // NOLINT, false-positive due to second-order macros. |
| 10845 } // NOLINT, false-positive due to second-order macros. | 10836 } // NOLINT, false-positive due to second-order macros. |
| 10846 | 10837 |
| 10847 #endif // V8_OBJECTS_H_ | 10838 #endif // V8_OBJECTS_H_ |
| OLD | NEW |