Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Side by Side Diff: src/objects.h

Issue 1413033006: Reland "[es6] Better support for built-ins subclassing." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: We don't need TypedArray map smashing anymore Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 2239 matching lines...) Expand 10 before | Expand all | Expand 10 after
2250 // Support functions for v8 api (needed for correct interceptor behavior). 2250 // Support functions for v8 api (needed for correct interceptor behavior).
2251 MUST_USE_RESULT static Maybe<bool> HasRealNamedProperty( 2251 MUST_USE_RESULT static Maybe<bool> HasRealNamedProperty(
2252 Handle<JSObject> object, Handle<Name> name); 2252 Handle<JSObject> object, Handle<Name> name);
2253 MUST_USE_RESULT static Maybe<bool> HasRealElementProperty( 2253 MUST_USE_RESULT static Maybe<bool> HasRealElementProperty(
2254 Handle<JSObject> object, uint32_t index); 2254 Handle<JSObject> object, uint32_t index);
2255 MUST_USE_RESULT static Maybe<bool> HasRealNamedCallbackProperty( 2255 MUST_USE_RESULT static Maybe<bool> HasRealNamedCallbackProperty(
2256 Handle<JSObject> object, Handle<Name> name); 2256 Handle<JSObject> object, Handle<Name> name);
2257 2257
2258 // Get the header size for a JSObject. Used to compute the index of 2258 // Get the header size for a JSObject. Used to compute the index of
2259 // internal fields as well as the number of internal fields. 2259 // internal fields as well as the number of internal fields.
2260 static inline int GetHeaderSize(InstanceType instance_type);
2260 inline int GetHeaderSize(); 2261 inline int GetHeaderSize();
2261 2262
2263 static inline int GetInternalFieldCount(Map* map);
2262 inline int GetInternalFieldCount(); 2264 inline int GetInternalFieldCount();
2263 inline int GetInternalFieldOffset(int index); 2265 inline int GetInternalFieldOffset(int index);
2264 inline Object* GetInternalField(int index); 2266 inline Object* GetInternalField(int index);
2265 inline void SetInternalField(int index, Object* value); 2267 inline void SetInternalField(int index, Object* value);
2266 inline void SetInternalField(int index, Smi* value); 2268 inline void SetInternalField(int index, Smi* value);
2267 2269
2268 // Returns the number of properties on this object filtering out properties 2270 // Returns the number of properties on this object filtering out properties
2269 // with the specified attributes (ignoring interceptors). 2271 // with the specified attributes (ignoring interceptors).
2270 int NumberOfOwnProperties(PropertyAttributes filter = NONE); 2272 int NumberOfOwnProperties(PropertyAttributes filter = NONE);
2271 // Fill in details for properties into storage starting at the specified 2273 // Fill in details for properties into storage starting at the specified
(...skipping 3520 matching lines...) Expand 10 before | Expand all | Expand 10 after
5792 // is found by re-transitioning from the root of the transition tree using the 5794 // is found by re-transitioning from the root of the transition tree using the
5793 // descriptor array of the map. Returns MaybeHandle<Map>() if no updated map 5795 // descriptor array of the map. Returns MaybeHandle<Map>() if no updated map
5794 // is found. 5796 // is found.
5795 static MaybeHandle<Map> TryUpdate(Handle<Map> map) WARN_UNUSED_RESULT; 5797 static MaybeHandle<Map> TryUpdate(Handle<Map> map) WARN_UNUSED_RESULT;
5796 5798
5797 // Returns a non-deprecated version of the input. This method may deprecate 5799 // Returns a non-deprecated version of the input. This method may deprecate
5798 // existing maps along the way if encodings conflict. Not for use while 5800 // existing maps along the way if encodings conflict. Not for use while
5799 // gathering type feedback. Use TryUpdate in those cases instead. 5801 // gathering type feedback. Use TryUpdate in those cases instead.
5800 static Handle<Map> Update(Handle<Map> map); 5802 static Handle<Map> Update(Handle<Map> map);
5801 5803
5804 static inline Handle<Map> CopyInitialMap(Handle<Map> map);
5805 static Handle<Map> CopyInitialMap(Handle<Map> map, int instance_size,
5806 int in_object_properties,
5807 int unused_property_fields);
5802 static Handle<Map> CopyDropDescriptors(Handle<Map> map); 5808 static Handle<Map> CopyDropDescriptors(Handle<Map> map);
5803 static Handle<Map> CopyInsertDescriptor(Handle<Map> map, 5809 static Handle<Map> CopyInsertDescriptor(Handle<Map> map,
5804 Descriptor* descriptor, 5810 Descriptor* descriptor,
5805 TransitionFlag flag); 5811 TransitionFlag flag);
5806 5812
5807 MUST_USE_RESULT static MaybeHandle<Map> CopyWithField( 5813 MUST_USE_RESULT static MaybeHandle<Map> CopyWithField(
5808 Handle<Map> map, 5814 Handle<Map> map,
5809 Handle<Name> name, 5815 Handle<Name> name,
5810 Handle<HeapType> type, 5816 Handle<HeapType> type,
5811 PropertyAttributes attributes, 5817 PropertyAttributes attributes,
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
6823 6829
6824 // Whether this function is defined in native code or extensions. 6830 // Whether this function is defined in native code or extensions.
6825 inline bool IsBuiltin(); 6831 inline bool IsBuiltin();
6826 6832
6827 // Check whether or not this function is inlineable. 6833 // Check whether or not this function is inlineable.
6828 bool IsInlineable(); 6834 bool IsInlineable();
6829 6835
6830 // Source size of this function. 6836 // Source size of this function.
6831 int SourceSize(); 6837 int SourceSize();
6832 6838
6833 // Calculate the instance size.
6834 int CalculateInstanceSize();
6835
6836 // Calculate the number of in-object properties.
6837 int CalculateInObjectProperties();
6838
6839 inline bool has_simple_parameters(); 6839 inline bool has_simple_parameters();
6840 6840
6841 // Initialize a SharedFunctionInfo from a parsed function literal. 6841 // Initialize a SharedFunctionInfo from a parsed function literal.
6842 static void InitFromFunctionLiteral(Handle<SharedFunctionInfo> shared_info, 6842 static void InitFromFunctionLiteral(Handle<SharedFunctionInfo> shared_info,
6843 FunctionLiteral* lit); 6843 FunctionLiteral* lit);
6844 6844
6845 // Dispatched behavior. 6845 // Dispatched behavior.
6846 DECLARE_PRINTER(SharedFunctionInfo) 6846 DECLARE_PRINTER(SharedFunctionInfo)
6847 DECLARE_VERIFIER(SharedFunctionInfo) 6847 DECLARE_VERIFIER(SharedFunctionInfo)
6848 6848
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
7322 7322
7323 inline BindingsArray* function_bindings(); 7323 inline BindingsArray* function_bindings();
7324 inline void set_function_bindings(BindingsArray* bindings); 7324 inline void set_function_bindings(BindingsArray* bindings);
7325 7325
7326 // The initial map for an object created by this constructor. 7326 // The initial map for an object created by this constructor.
7327 inline Map* initial_map(); 7327 inline Map* initial_map();
7328 static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map, 7328 static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map,
7329 Handle<Object> prototype); 7329 Handle<Object> prototype);
7330 inline bool has_initial_map(); 7330 inline bool has_initial_map();
7331 static void EnsureHasInitialMap(Handle<JSFunction> function); 7331 static void EnsureHasInitialMap(Handle<JSFunction> function);
7332 // Ensures that the |original_constructor| has correct initial map and
7333 // returns it. If the |original_constructor| is not a subclass constructor
7334 // its initial map is left unmodified.
7335 static Handle<Map> EnsureDerivedHasInitialMap(
7336 Handle<JSFunction> original_constructor, Handle<JSFunction> constructor);
7332 7337
7333 // Get and set the prototype property on a JSFunction. If the 7338 // Get and set the prototype property on a JSFunction. If the
7334 // function has an initial map the prototype is set on the initial 7339 // function has an initial map the prototype is set on the initial
7335 // map. Otherwise, the prototype is put in the initial map field 7340 // map. Otherwise, the prototype is put in the initial map field
7336 // until an initial map is needed. 7341 // until an initial map is needed.
7337 inline bool has_prototype(); 7342 inline bool has_prototype();
7338 inline bool has_instance_prototype(); 7343 inline bool has_instance_prototype();
7339 inline Object* prototype(); 7344 inline Object* prototype();
7340 inline Object* instance_prototype(); 7345 inline Object* instance_prototype();
7341 static void SetPrototype(Handle<JSFunction> function, 7346 static void SetPrototype(Handle<JSFunction> function,
(...skipping 28 matching lines...) Expand all
7370 // of optimized functions hanging off the native_context. The CodeFlusher 7375 // of optimized functions hanging off the native_context. The CodeFlusher
7371 // uses this link to chain together flushing candidates. Treated weakly 7376 // uses this link to chain together flushing candidates. Treated weakly
7372 // by the garbage collector. 7377 // by the garbage collector.
7373 DECL_ACCESSORS(next_function_link, Object) 7378 DECL_ACCESSORS(next_function_link, Object)
7374 7379
7375 // Prints the name of the function using PrintF. 7380 // Prints the name of the function using PrintF.
7376 void PrintName(FILE* out = stdout); 7381 void PrintName(FILE* out = stdout);
7377 7382
7378 DECLARE_CAST(JSFunction) 7383 DECLARE_CAST(JSFunction)
7379 7384
7385 // Calculate the instance size and in-object properties count.
7386 void CalculateInstanceSize(InstanceType instance_type,
7387 int requested_internal_fields, int* instance_size,
7388 int* in_object_properties);
7389 void CalculateInstanceSizeForDerivedClass(InstanceType instance_type,
7390 int requested_internal_fields,
7391 int* instance_size,
7392 int* in_object_properties);
7393
7380 // Iterates the objects, including code objects indirectly referenced 7394 // Iterates the objects, including code objects indirectly referenced
7381 // through pointers to the first instruction in the code object. 7395 // through pointers to the first instruction in the code object.
7382 void JSFunctionIterateBody(int object_size, ObjectVisitor* v); 7396 void JSFunctionIterateBody(int object_size, ObjectVisitor* v);
7383 7397
7384 // Dispatched behavior. 7398 // Dispatched behavior.
7385 DECLARE_PRINTER(JSFunction) 7399 DECLARE_PRINTER(JSFunction)
7386 DECLARE_VERIFIER(JSFunction) 7400 DECLARE_VERIFIER(JSFunction)
7387 7401
7388 // Returns the number of allocated literals. 7402 // Returns the number of allocated literals.
7389 inline int NumberOfLiterals(); 7403 inline int NumberOfLiterals();
(...skipping 3439 matching lines...) Expand 10 before | Expand all | Expand 10 after
10829 // (elements + properties) in the current level. 10843 // (elements + properties) in the current level.
10830 int levelLength_ = 0; 10844 int levelLength_ = 0;
10831 10845
10832 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); 10846 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator);
10833 }; 10847 };
10834 10848
10835 } // NOLINT, false-positive due to second-order macros. 10849 } // NOLINT, false-positive due to second-order macros.
10836 } // NOLINT, false-positive due to second-order macros. 10850 } // NOLINT, false-positive due to second-order macros.
10837 10851
10838 #endif // V8_OBJECTS_H_ 10852 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698