OLD | NEW |
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 2058 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2069 // Tests for the fast common case for property enumeration. | 2069 // Tests for the fast common case for property enumeration. |
2070 bool IsSimpleEnum(); | 2070 bool IsSimpleEnum(); |
2071 | 2071 |
2072 // Returns the class name ([[Class]] property in the specification). | 2072 // Returns the class name ([[Class]] property in the specification). |
2073 String* class_name(); | 2073 String* class_name(); |
2074 | 2074 |
2075 // Returns the constructor name (the name (possibly, inferred name) of the | 2075 // Returns the constructor name (the name (possibly, inferred name) of the |
2076 // function that was used to instantiate the object). | 2076 // function that was used to instantiate the object). |
2077 String* constructor_name(); | 2077 String* constructor_name(); |
2078 | 2078 |
2079 inline PropertyAttributes GetPropertyAttribute(Name* name); | 2079 static inline PropertyAttributes GetPropertyAttribute( |
2080 PropertyAttributes GetPropertyAttributeWithReceiver(JSReceiver* receiver, | 2080 Handle<JSReceiver> object, |
2081 Name* name); | 2081 Handle<Name> name); |
2082 PropertyAttributes GetLocalPropertyAttribute(Name* name); | 2082 static PropertyAttributes GetPropertyAttributeWithReceiver( |
| 2083 Handle<JSReceiver> object, |
| 2084 Handle<JSReceiver> receiver, |
| 2085 Handle<Name> name); |
| 2086 static PropertyAttributes GetLocalPropertyAttribute( |
| 2087 Handle<JSReceiver> object, |
| 2088 Handle<Name> name); |
2083 | 2089 |
2084 inline PropertyAttributes GetElementAttribute(uint32_t index); | 2090 static inline PropertyAttributes GetElementAttribute( |
2085 inline PropertyAttributes GetLocalElementAttribute(uint32_t index); | 2091 Handle<JSReceiver> object, |
| 2092 uint32_t index); |
| 2093 static inline PropertyAttributes GetLocalElementAttribute( |
| 2094 Handle<JSReceiver> object, |
| 2095 uint32_t index); |
2086 | 2096 |
2087 // Return the object's prototype (might be Heap::null_value()). | 2097 // Return the object's prototype (might be Heap::null_value()). |
2088 inline Object* GetPrototype(); | 2098 inline Object* GetPrototype(); |
2089 | 2099 |
2090 // Return the constructor function (may be Heap::null_value()). | 2100 // Return the constructor function (may be Heap::null_value()). |
2091 inline Object* GetConstructor(); | 2101 inline Object* GetConstructor(); |
2092 | 2102 |
2093 // Retrieves a permanent object identity hash code. The undefined value might | 2103 // Retrieves a permanent object identity hash code. The undefined value might |
2094 // be returned in case no hash was created yet. | 2104 // be returned in case no hash was created yet. |
2095 inline Object* GetIdentityHash(); | 2105 inline Object* GetIdentityHash(); |
(...skipping 10 matching lines...) Expand all Loading... |
2106 void Lookup(Name* name, LookupResult* result); | 2116 void Lookup(Name* name, LookupResult* result); |
2107 | 2117 |
2108 protected: | 2118 protected: |
2109 Smi* GenerateIdentityHash(); | 2119 Smi* GenerateIdentityHash(); |
2110 | 2120 |
2111 static Handle<Object> SetPropertyWithDefinedSetter(Handle<JSReceiver> object, | 2121 static Handle<Object> SetPropertyWithDefinedSetter(Handle<JSReceiver> object, |
2112 Handle<JSReceiver> setter, | 2122 Handle<JSReceiver> setter, |
2113 Handle<Object> value); | 2123 Handle<Object> value); |
2114 | 2124 |
2115 private: | 2125 private: |
2116 PropertyAttributes GetPropertyAttributeForResult(JSReceiver* receiver, | 2126 static PropertyAttributes GetPropertyAttributeForResult( |
2117 LookupResult* result, | 2127 Handle<JSReceiver> object, |
2118 Name* name, | 2128 Handle<JSReceiver> receiver, |
2119 bool continue_search); | 2129 LookupResult* result, |
| 2130 Handle<Name> name, |
| 2131 bool continue_search); |
2120 | 2132 |
2121 static Handle<Object> SetProperty(Handle<JSReceiver> receiver, | 2133 static Handle<Object> SetProperty(Handle<JSReceiver> receiver, |
2122 LookupResult* result, | 2134 LookupResult* result, |
2123 Handle<Name> key, | 2135 Handle<Name> key, |
2124 Handle<Object> value, | 2136 Handle<Object> value, |
2125 PropertyAttributes attributes, | 2137 PropertyAttributes attributes, |
2126 StrictMode strict_mode, | 2138 StrictMode strict_mode, |
2127 StoreFromKeyed store_from_keyed); | 2139 StoreFromKeyed store_from_keyed); |
2128 | 2140 |
2129 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); | 2141 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2300 Handle<Object> value, | 2312 Handle<Object> value, |
2301 PropertyDetails details); | 2313 PropertyDetails details); |
2302 | 2314 |
2303 static void OptimizeAsPrototype(Handle<JSObject> object); | 2315 static void OptimizeAsPrototype(Handle<JSObject> object); |
2304 | 2316 |
2305 // Retrieve interceptors. | 2317 // Retrieve interceptors. |
2306 InterceptorInfo* GetNamedInterceptor(); | 2318 InterceptorInfo* GetNamedInterceptor(); |
2307 InterceptorInfo* GetIndexedInterceptor(); | 2319 InterceptorInfo* GetIndexedInterceptor(); |
2308 | 2320 |
2309 // Used from JSReceiver. | 2321 // Used from JSReceiver. |
2310 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver, | 2322 static PropertyAttributes GetPropertyAttributePostInterceptor( |
2311 Name* name, | 2323 Handle<JSObject> object, |
2312 bool continue_search); | 2324 Handle<JSObject> receiver, |
2313 PropertyAttributes GetPropertyAttributeWithInterceptor(JSObject* receiver, | 2325 Handle<Name> name, |
2314 Name* name, | 2326 bool continue_search); |
2315 bool continue_search); | 2327 static PropertyAttributes GetPropertyAttributeWithInterceptor( |
2316 PropertyAttributes GetPropertyAttributeWithFailedAccessCheck( | 2328 Handle<JSObject> object, |
2317 Object* receiver, | 2329 Handle<JSObject> receiver, |
| 2330 Handle<Name> name, |
| 2331 bool continue_search); |
| 2332 static PropertyAttributes GetPropertyAttributeWithFailedAccessCheck( |
| 2333 Handle<JSObject> object, |
2318 LookupResult* result, | 2334 LookupResult* result, |
2319 Name* name, | 2335 Handle<Name> name, |
2320 bool continue_search); | 2336 bool continue_search); |
2321 PropertyAttributes GetElementAttributeWithReceiver(JSReceiver* receiver, | 2337 static PropertyAttributes GetElementAttributeWithReceiver( |
2322 uint32_t index, | 2338 Handle<JSObject> object, |
2323 bool continue_search); | 2339 Handle<JSReceiver> receiver, |
| 2340 uint32_t index, |
| 2341 bool continue_search); |
2324 | 2342 |
2325 // Retrieves an AccessorPair property from the given object. Might return | 2343 // Retrieves an AccessorPair property from the given object. Might return |
2326 // undefined if the property doesn't exist or is of a different kind. | 2344 // undefined if the property doesn't exist or is of a different kind. |
2327 static Handle<Object> GetAccessor(Handle<JSObject> object, | 2345 static Handle<Object> GetAccessor(Handle<JSObject> object, |
2328 Handle<Name> name, | 2346 Handle<Name> name, |
2329 AccessorComponent component); | 2347 AccessorComponent component); |
2330 | 2348 |
2331 // Defines an AccessorPair property on the given object. | 2349 // Defines an AccessorPair property on the given object. |
2332 // TODO(mstarzinger): Rename to SetAccessor() and return empty handle on | 2350 // TODO(mstarzinger): Rename to SetAccessor() and return empty handle on |
2333 // exception instead of letting callers check for scheduled exception. | 2351 // exception instead of letting callers check for scheduled exception. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2377 Handle<Object> value); | 2395 Handle<Object> value); |
2378 // Gets the value of a hidden property with the given key. Returns the hole | 2396 // Gets the value of a hidden property with the given key. Returns the hole |
2379 // if the property doesn't exist (or if called on a detached proxy), | 2397 // if the property doesn't exist (or if called on a detached proxy), |
2380 // otherwise returns the value set for the key. | 2398 // otherwise returns the value set for the key. |
2381 Object* GetHiddenProperty(Name* key); | 2399 Object* GetHiddenProperty(Name* key); |
2382 // Deletes a hidden property. Deleting a non-existing property is | 2400 // Deletes a hidden property. Deleting a non-existing property is |
2383 // considered successful. | 2401 // considered successful. |
2384 static void DeleteHiddenProperty(Handle<JSObject> object, | 2402 static void DeleteHiddenProperty(Handle<JSObject> object, |
2385 Handle<Name> key); | 2403 Handle<Name> key); |
2386 // Returns true if the object has a property with the hidden string as name. | 2404 // Returns true if the object has a property with the hidden string as name. |
2387 bool HasHiddenProperties(); | 2405 static bool HasHiddenProperties(Handle<JSObject> object); |
2388 | 2406 |
2389 static void SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash); | 2407 static void SetIdentityHash(Handle<JSObject> object, Handle<Smi> hash); |
2390 | 2408 |
2391 inline void ValidateElements(); | 2409 inline void ValidateElements(); |
2392 | 2410 |
2393 // Makes sure that this object can contain HeapObject as elements. | 2411 // Makes sure that this object can contain HeapObject as elements. |
2394 static inline void EnsureCanContainHeapObjectElements(Handle<JSObject> obj); | 2412 static inline void EnsureCanContainHeapObjectElements(Handle<JSObject> obj); |
2395 | 2413 |
2396 // Makes sure that this object can contain the specified elements. | 2414 // Makes sure that this object can contain the specified elements. |
2397 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements( | 2415 MUST_USE_RESULT inline MaybeObject* EnsureCanContainElements( |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2750 Handle<JSObject> object, | 2768 Handle<JSObject> object, |
2751 Handle<Object> receiver, | 2769 Handle<Object> receiver, |
2752 LookupResult* result, | 2770 LookupResult* result, |
2753 Handle<Name> name, | 2771 Handle<Name> name, |
2754 PropertyAttributes* attributes); | 2772 PropertyAttributes* attributes); |
2755 | 2773 |
2756 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, | 2774 MUST_USE_RESULT MaybeObject* GetElementWithCallback(Object* receiver, |
2757 Object* structure, | 2775 Object* structure, |
2758 uint32_t index, | 2776 uint32_t index, |
2759 Object* holder); | 2777 Object* holder); |
2760 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithInterceptor( | 2778 static PropertyAttributes GetElementAttributeWithInterceptor( |
2761 JSReceiver* receiver, | 2779 Handle<JSObject> object, |
| 2780 Handle<JSReceiver> receiver, |
2762 uint32_t index, | 2781 uint32_t index, |
2763 bool continue_search); | 2782 bool continue_search); |
2764 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithoutInterceptor( | 2783 static PropertyAttributes GetElementAttributeWithoutInterceptor( |
2765 JSReceiver* receiver, | 2784 Handle<JSObject> object, |
| 2785 Handle<JSReceiver> receiver, |
2766 uint32_t index, | 2786 uint32_t index, |
2767 bool continue_search); | 2787 bool continue_search); |
2768 static Handle<Object> SetElementWithCallback( | 2788 static Handle<Object> SetElementWithCallback( |
2769 Handle<JSObject> object, | 2789 Handle<JSObject> object, |
2770 Handle<Object> structure, | 2790 Handle<Object> structure, |
2771 uint32_t index, | 2791 uint32_t index, |
2772 Handle<Object> value, | 2792 Handle<Object> value, |
2773 Handle<JSObject> holder, | 2793 Handle<JSObject> holder, |
2774 StrictMode strict_mode); | 2794 StrictMode strict_mode); |
2775 static Handle<Object> SetElementWithInterceptor( | 2795 static Handle<Object> SetElementWithInterceptor( |
(...skipping 6815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9591 // otherwise set it to false. | 9611 // otherwise set it to false. |
9592 static Handle<Object> SetPropertyViaPrototypesWithHandler( | 9612 static Handle<Object> SetPropertyViaPrototypesWithHandler( |
9593 Handle<JSProxy> proxy, | 9613 Handle<JSProxy> proxy, |
9594 Handle<JSReceiver> receiver, | 9614 Handle<JSReceiver> receiver, |
9595 Handle<Name> name, | 9615 Handle<Name> name, |
9596 Handle<Object> value, | 9616 Handle<Object> value, |
9597 PropertyAttributes attributes, | 9617 PropertyAttributes attributes, |
9598 StrictMode strict_mode, | 9618 StrictMode strict_mode, |
9599 bool* done); | 9619 bool* done); |
9600 | 9620 |
9601 MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler( | 9621 static PropertyAttributes GetPropertyAttributeWithHandler( |
9602 JSReceiver* receiver, | 9622 Handle<JSProxy> proxy, |
9603 Name* name); | 9623 Handle<JSReceiver> receiver, |
9604 MUST_USE_RESULT PropertyAttributes GetElementAttributeWithHandler( | 9624 Handle<Name> name); |
9605 JSReceiver* receiver, | 9625 static PropertyAttributes GetElementAttributeWithHandler( |
| 9626 Handle<JSProxy> proxy, |
| 9627 Handle<JSReceiver> receiver, |
9606 uint32_t index); | 9628 uint32_t index); |
9607 | 9629 |
9608 // Turn the proxy into an (empty) JSObject. | 9630 // Turn the proxy into an (empty) JSObject. |
9609 static void Fix(Handle<JSProxy> proxy); | 9631 static void Fix(Handle<JSProxy> proxy); |
9610 | 9632 |
9611 // Initializes the body after the handler slot. | 9633 // Initializes the body after the handler slot. |
9612 inline void InitializeBody(int object_size, Object* value); | 9634 inline void InitializeBody(int object_size, Object* value); |
9613 | 9635 |
9614 // Invoke a trap by name. If the trap does not exist on this's handler, | 9636 // Invoke a trap by name. If the trap does not exist on this's handler, |
9615 // but derived_trap is non-NULL, invoke that instead. May cause GC. | 9637 // but derived_trap is non-NULL, invoke that instead. May cause GC. |
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10759 } else { | 10781 } else { |
10760 value &= ~(1 << bit_position); | 10782 value &= ~(1 << bit_position); |
10761 } | 10783 } |
10762 return value; | 10784 return value; |
10763 } | 10785 } |
10764 }; | 10786 }; |
10765 | 10787 |
10766 } } // namespace v8::internal | 10788 } } // namespace v8::internal |
10767 | 10789 |
10768 #endif // V8_OBJECTS_H_ | 10790 #endif // V8_OBJECTS_H_ |
OLD | NEW |