Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 0b1c761281c7238c1a99fe511aab195e3104aedc..9a56c58dfe6578cadcf260648cba247c3870600f 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -439,7 +439,8 @@ const int kVariableSizeSentinel = 0; |
V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \ |
V(SCRIPT, Script, script) \ |
V(CODE_CACHE, CodeCache, code_cache) \ |
- V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) |
+ V(POLYMORPHIC_CODE_CACHE, PolymorphicCodeCache, polymorphic_code_cache) \ |
+ V(TYPE_FEEDBACK_INFO, TypeFeedbackInfo, type_feedback_info) |
#ifdef ENABLE_DEBUGGER_SUPPORT |
#define STRUCT_LIST_DEBUGGER(V) \ |
@@ -594,6 +595,7 @@ enum InstanceType { |
SCRIPT_TYPE, |
CODE_CACHE_TYPE, |
POLYMORPHIC_CODE_CACHE_TYPE, |
+ TYPE_FEEDBACK_INFO_TYPE, |
// The following two instance types are only used when ENABLE_DEBUGGER_SUPPORT |
// is defined. However as include/v8.h contain some of the instance type |
// constants always having them avoids them getting different numbers |
@@ -4032,6 +4034,7 @@ class TypeFeedbackCells: public FixedArray { |
// Forward declaration. |
class SafepointEntry; |
+class TypeFeedbackInfo; |
// Code describes objects with on-the-fly generated machine code. |
class Code: public HeapObject { |
@@ -4103,8 +4106,9 @@ class Code: public HeapObject { |
// [deoptimization_data]: Array containing data for deopt. |
DECL_ACCESSORS(deoptimization_data, FixedArray) |
- // [type_feedback_cells]: Array containing cache cells used for type feedback. |
- DECL_ACCESSORS(type_feedback_cells, TypeFeedbackCells) |
+ // [type_feedback_info]: Struct containing type feedback information. |
+ // Will contain either a TypeFeedbackInfo object, or undefined. |
+ DECL_ACCESSORS(type_feedback_info, Object) |
// [gc_metadata]: Field used to hold GC related metadata. The contents of this |
// field does not have to be traced during garbage collection since |
@@ -4355,9 +4359,9 @@ class Code: public HeapObject { |
static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; |
static const int kDeoptimizationDataOffset = |
kHandlerTableOffset + kPointerSize; |
- static const int kTypeFeedbackCellsOffset = |
+ static const int kTypeFeedbackInfoOffset = |
kDeoptimizationDataOffset + kPointerSize; |
- static const int kGCMetadataOffset = kTypeFeedbackCellsOffset + kPointerSize; |
+ static const int kGCMetadataOffset = kTypeFeedbackInfoOffset + kPointerSize; |
static const int kFlagsOffset = kGCMetadataOffset + kPointerSize; |
static const int kKindSpecificFlagsOffset = kFlagsOffset + kIntSize; |
@@ -6361,6 +6365,40 @@ class PolymorphicCodeCacheHashTable |
}; |
+class TypeFeedbackInfo: public Struct { |
+ public: |
+ inline int ic_total_count(); |
+ inline void set_ic_total_count(int count); |
+ |
+ inline int ic_with_typeinfo_count(); |
+ inline void set_ic_with_typeinfo_count(int count); |
+ |
+ DECL_ACCESSORS(type_feedback_cells, TypeFeedbackCells) |
+ |
+ static inline TypeFeedbackInfo* cast(Object* obj); |
+ |
+#ifdef OBJECT_PRINT |
+ inline void TypeFeedbackInfoPrint() { |
+ TypeFeedbackInfoPrint(stdout); |
+ } |
+ void TypeFeedbackInfoPrint(FILE* out); |
+#endif |
+#ifdef DEBUG |
+ void TypeFeedbackInfoVerify(); |
+#endif |
+ |
+ static const int kIcTotalCountOffset = HeapObject::kHeaderSize; |
+ static const int kIcWithTypeinfoCountOffset = |
+ kIcTotalCountOffset + kPointerSize; |
+ static const int kTypeFeedbackCellsOffset = |
+ kIcWithTypeinfoCountOffset + kPointerSize; |
+ static const int kSize = kTypeFeedbackCellsOffset + kPointerSize; |
+ |
+ private: |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(TypeFeedbackInfo); |
+}; |
+ |
+ |
enum AllowNullsFlag {ALLOW_NULLS, DISALLOW_NULLS}; |
enum RobustnessFlag {ROBUST_STRING_TRAVERSAL, FAST_STRING_TRAVERSAL}; |