Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index 510f4e93bff99d6a166bd902d3e06abcdd82a529..60e40d63f20a7432ddc9053b8e35d5142d0f79da 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -767,44 +767,45 @@ STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType); |
| std::ostream& operator<<(std::ostream& os, InstanceType instance_type); |
| -#define FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(V) \ |
| - V(CODE_STUBS_TABLE_SUB_TYPE) \ |
| - V(CONTEXT_SUB_TYPE) \ |
| - V(COPY_ON_WRITE_SUB_TYPE) \ |
| - V(DEOPTIMIZATION_DATA_SUB_TYPE) \ |
| - V(DESCRIPTOR_ARRAY_SUB_TYPE) \ |
| - V(EMBEDDED_OBJECT_SUB_TYPE) \ |
| - V(ENUM_CACHE_SUB_TYPE) \ |
| - V(ENUM_INDICES_CACHE_SUB_TYPE) \ |
| - V(DEPENDENT_CODE_SUB_TYPE) \ |
| - V(DICTIONARY_ELEMENTS_SUB_TYPE) \ |
| - V(DICTIONARY_PROPERTIES_SUB_TYPE) \ |
| - V(EMPTY_PROPERTIES_DICTIONARY_SUB_TYPE) \ |
| - V(FAST_ELEMENTS_SUB_TYPE) \ |
| - V(FAST_PROPERTIES_SUB_TYPE) \ |
| - V(HANDLER_TABLE_SUB_TYPE) \ |
| - V(INTRINSIC_FUNCTION_NAMES_SUB_TYPE) \ |
| - V(JS_COLLECTION_SUB_TYPE) \ |
| - V(JS_WEAK_COLLECTION_SUB_TYPE) \ |
| - V(LITERALS_ARRAY_SUB_TYPE) \ |
| - V(MAP_CODE_CACHE_SUB_TYPE) \ |
| - V(NOSCRIPT_SHARED_FUNCTION_INFOS_SUB_TYPE) \ |
| - V(NUMBER_STRING_CACHE_SUB_TYPE) \ |
| - V(OBJECT_TO_CODE_SUB_TYPE) \ |
| - V(OPTIMIZED_CODE_MAP_SUB_TYPE) \ |
| - V(PROTOTYPE_USERS_SUB_TYPE) \ |
| - V(REGEXP_MULTIPLE_CACHE_SUB_TYPE) \ |
| - V(RETAINED_MAPS_SUB_TYPE) \ |
| - V(SCOPE_INFO_SUB_TYPE) \ |
| - V(SCRIPT_LIST_SUB_TYPE) \ |
| - V(SERIALIZED_TEMPLATES_SUB_TYPE) \ |
| - V(SHARED_FUNCTION_INFOS_SUB_TYPE) \ |
| - V(SINGLE_CHARACTER_STRING_CACHE_SUB_TYPE) \ |
| - V(STRING_SPLIT_CACHE_SUB_TYPE) \ |
| - V(STRING_TABLE_SUB_TYPE) \ |
| - V(TEMPLATE_INSTANTIATIONS_CACHE_SUB_TYPE) \ |
| - V(TYPE_FEEDBACK_VECTOR_SUB_TYPE) \ |
| - V(TYPE_FEEDBACK_METADATA_SUB_TYPE) \ |
| +#define FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(V) \ |
| + V(CODE_STUBS_TABLE_SUB_TYPE) \ |
| + V(CONTEXT_SUB_TYPE) \ |
| + V(COPY_ON_WRITE_SUB_TYPE) \ |
| + V(DEOPTIMIZATION_DATA_SUB_TYPE) \ |
| + V(DESCRIPTOR_ARRAY_SUB_TYPE) \ |
| + V(EMBEDDED_OBJECT_SUB_TYPE) \ |
| + V(ENUM_CACHE_SUB_TYPE) \ |
| + V(ENUM_INDICES_CACHE_SUB_TYPE) \ |
| + V(DEPENDENT_CODE_SUB_TYPE) \ |
| + V(DICTIONARY_ELEMENTS_SUB_TYPE) \ |
| + V(DICTIONARY_PROPERTIES_SUB_TYPE) \ |
| + V(EMPTY_PROPERTIES_DICTIONARY_SUB_TYPE) \ |
| + V(FAST_ELEMENTS_SUB_TYPE) \ |
| + V(FAST_PROPERTIES_SUB_TYPE) \ |
| + V(FAST_TEMPLATE_INSTANTIATIONS_CACHE_SUB_TYPE) \ |
| + V(HANDLER_TABLE_SUB_TYPE) \ |
| + V(INTRINSIC_FUNCTION_NAMES_SUB_TYPE) \ |
| + V(JS_COLLECTION_SUB_TYPE) \ |
| + V(JS_WEAK_COLLECTION_SUB_TYPE) \ |
| + V(LITERALS_ARRAY_SUB_TYPE) \ |
| + V(MAP_CODE_CACHE_SUB_TYPE) \ |
| + V(NOSCRIPT_SHARED_FUNCTION_INFOS_SUB_TYPE) \ |
| + V(NUMBER_STRING_CACHE_SUB_TYPE) \ |
| + V(OBJECT_TO_CODE_SUB_TYPE) \ |
| + V(OPTIMIZED_CODE_MAP_SUB_TYPE) \ |
| + V(PROTOTYPE_USERS_SUB_TYPE) \ |
| + V(REGEXP_MULTIPLE_CACHE_SUB_TYPE) \ |
| + V(RETAINED_MAPS_SUB_TYPE) \ |
| + V(SCOPE_INFO_SUB_TYPE) \ |
| + V(SCRIPT_LIST_SUB_TYPE) \ |
| + V(SERIALIZED_TEMPLATES_SUB_TYPE) \ |
| + V(SHARED_FUNCTION_INFOS_SUB_TYPE) \ |
| + V(SINGLE_CHARACTER_STRING_CACHE_SUB_TYPE) \ |
| + V(SLOW_TEMPLATE_INSTANTIATIONS_CACHE_SUB_TYPE) \ |
| + V(STRING_SPLIT_CACHE_SUB_TYPE) \ |
| + V(STRING_TABLE_SUB_TYPE) \ |
| + V(TYPE_FEEDBACK_VECTOR_SUB_TYPE) \ |
| + V(TYPE_FEEDBACK_METADATA_SUB_TYPE) \ |
| V(WEAK_NEW_SPACE_OBJECT_TO_CODE_SUB_TYPE) |
| enum FixedArraySubInstanceType { |
| @@ -2671,10 +2672,14 @@ class FixedArray: public FixedArrayBase { |
| static inline Handle<Object> get(FixedArray* array, int index, |
| Isolate* isolate); |
| template <class T> |
| - MaybeHandle<T> GetValue(int index) const; |
| + MaybeHandle<T> GetValue(Isolate* isolate, int index) const; |
| template <class T> |
| - Handle<T> GetValueChecked(int index) const; |
| + Handle<T> GetValueChecked(Isolate* isolate, int index) const; |
|
Mircea Trofin
2016/08/01 23:40:02
Why was it necessary to pass the isolate explicitl
Camillo Bruni
2016/08/02 07:27:54
The calls to GetValueChecked happen in loops and d
|
| + |
| + // Return a grown copy if the index is bigger than the array's length. |
| + static Handle<FixedArray> SetAndGrow(Handle<FixedArray> array, int index, |
| + Handle<Object> value); |
| // Setter that uses write barrier. |
| inline void set(int index, Object* value); |
| @@ -4859,7 +4864,7 @@ class LiteralsArray : public FixedArray { |
| static Handle<LiteralsArray> New(Isolate* isolate, |
| Handle<TypeFeedbackVector> vector, |
| int number_of_literals, |
| - PretenureFlag pretenure); |
| + PretenureFlag pretenure = TENURED); |
| DECLARE_CAST(LiteralsArray) |
| @@ -7735,7 +7740,7 @@ class JSFunction: public JSObject { |
| // necessary so that we do not dynamically lookup the object, regexp |
| // or array functions. Performing a dynamic lookup, we might end up |
| // using the functions from a new context that we should not have |
| - // access to. |
| + // access to. For API objects we store the boilerplate in the literal array. |
| DECL_ACCESSORS(literals, LiteralsArray) |
| static void EnsureLiterals(Handle<JSFunction> function); |
| @@ -10691,6 +10696,8 @@ class TemplateInfo: public Struct { |
| kPropertyAccessorsOffset + kPointerSize; |
| static const int kHeaderSize = kPropertyIntrinsicsOffset + kPointerSize; |
| + static const int kFastTemplateInstantiationsCacheSize = 1 * KB; |
| + |
| private: |
| DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); |
| }; |
| @@ -10709,6 +10716,7 @@ class FunctionTemplateInfo: public TemplateInfo { |
| DECL_ACCESSORS(instance_call_handler, Object) |
| DECL_ACCESSORS(access_check_info, Object) |
| DECL_ACCESSORS(shared_function_info, Object) |
| + DECL_ACCESSORS(js_function, Object) |
| DECL_INT_ACCESSORS(flag) |
| inline int length() const; |
| @@ -10755,6 +10763,8 @@ class FunctionTemplateInfo: public TemplateInfo { |
| static Handle<SharedFunctionInfo> GetOrCreateSharedFunctionInfo( |
| Isolate* isolate, Handle<FunctionTemplateInfo> info); |
| + // Returns parent function template or null. |
| + inline FunctionTemplateInfo* GetParent(Isolate* isolate); |
| // Returns true if |object| is an instance of this function template. |
| inline bool IsTemplateFor(JSObject* object); |
| bool IsTemplateFor(Map* map); |
| @@ -10792,6 +10802,10 @@ class ObjectTemplateInfo: public TemplateInfo { |
| static const int kDataOffset = kConstructorOffset + kPointerSize; |
| static const int kSize = kDataOffset + kPointerSize; |
| + // Starting from given object template's constructor walk up the inheritance |
| + // chain till a function template that has an instance template is found. |
| + inline ObjectTemplateInfo* GetParent(Isolate* isolate); |
| + |
| private: |
| class IsImmutablePrototype : public BitField<bool, 0, 1> {}; |
| class InternalFieldCount |