Chromium Code Reviews| Index: src/objects.h | 
| diff --git a/src/objects.h b/src/objects.h | 
| index ca84064c420e34a04e5ba5f8cebbd5221dfdce9e..7cc3aad41774234bfe82e64bb2fc4fca0fb68dca 100644 | 
| --- a/src/objects.h | 
| +++ b/src/objects.h | 
| @@ -998,6 +998,7 @@ template <class C> inline bool Is(Object* obj); | 
| V(ConstantElementsPair) \ | 
| V(Constructor) \ | 
| V(Context) \ | 
| + V(CoverageInfo) \ | 
| V(DeoptimizationInputData) \ | 
| V(DeoptimizationOutputData) \ | 
| V(DependentCode) \ | 
| @@ -1574,6 +1575,10 @@ class Smi: public Object { | 
| public: | 
| // Returns the integer value. | 
| inline int value() const { return Internals::SmiValue(this); } | 
| + | 
| + // Casts o to a Smi and returns its value. | 
| + static inline int ToInt(Object* o); | 
| 
 
rmcilroy
2017/05/18 14:17:59
Is this worth adding rather than just Smi::cast(o)
 
jgruber
2017/05/22 09:43:32
Smi::cast(o)->value()
Smi::ToInt(o)
I think the l
 
rmcilroy
2017/05/22 11:08:46
Acknowledged.
 
 | 
| + | 
| inline Smi* ToUint32Smi() { | 
| if (value() <= 0) return Smi::kZero; | 
| return Smi::FromInt(static_cast<uint32_t>(value())); | 
| @@ -5999,6 +6004,11 @@ class SharedFunctionInfo: public HeapObject { | 
| // [debug info]: Debug information. | 
| DECL_ACCESSORS(debug_info, Object) | 
| + // A function has coverage info if block coverage has been enabled and the | 
| + // function is user JS. | 
| + inline bool HasCoverageInfo() const; | 
| + DECL_ACCESSORS(coverage_info, Object) | 
| + | 
| // Bit field containing various information collected for debugging. | 
| // This field is either stored on the kDebugInfo slot or inside the | 
| // debug info struct. | 
| @@ -6266,7 +6276,9 @@ class SharedFunctionInfo: public HeapObject { | 
| kInstanceClassNameOffset + kPointerSize; | 
| static const int kScriptOffset = kFunctionDataOffset + kPointerSize; | 
| static const int kDebugInfoOffset = kScriptOffset + kPointerSize; | 
| - static const int kFunctionIdentifierOffset = kDebugInfoOffset + kPointerSize; | 
| + static const int kCoverageInfoOffset = kDebugInfoOffset + kPointerSize; | 
| 
 
rmcilroy
2017/05/18 14:17:59
I don't think we want to add this as a field to SF
 
jgruber
2017/05/22 09:43:32
Ack. I discussed this with Benedikt a while ago, a
 
 | 
| + static const int kFunctionIdentifierOffset = | 
| + kCoverageInfoOffset + kPointerSize; | 
| static const int kFeedbackMetadataOffset = | 
| kFunctionIdentifierOffset + kPointerSize; | 
| static const int kFunctionLiteralIdOffset = | 
| @@ -10049,6 +10061,41 @@ class DebugInfo: public Struct { | 
| DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); | 
| }; | 
| +// Holds information related to block code coverage. | 
| +// More information at go/v8-designdoc-block-code-coverage. | 
| +class CoverageInfo : public FixedArray { | 
| 
 
marja
2017/05/18 11:30:17
Please put this in a different file than objects.h
 
jgruber
2017/05/22 09:43:32
Ack, thought so myself after uploading this CL. I'
 
 | 
| + public: | 
| + int SlotCount() const; | 
| + | 
| + int FromSourcePosition(int slot_index) const; | 
| + int ToSourcePosition(int slot_index) const; | 
| + int BlockCount(int slot_index) const; | 
| + | 
| + void InitializeSlot(int slot_index, int from_pos, int to_pos); | 
| + void IncrementBlockCount(int slot_index); | 
| + | 
| + static int FixedArrayLengthForSlotCount(int slot_count) { | 
| + return slot_count * kSlotIndexCount + kFirstSlotIndex; | 
| + } | 
| + | 
| + DECLARE_CAST(CoverageInfo) | 
| + | 
| + private: | 
| + static int FirstIndexForSlot(int slot_index) { | 
| + return kFirstSlotIndex + slot_index * kSlotIndexCount; | 
| + } | 
| + | 
| + static const int kFirstSlotIndex = 0; | 
| + | 
| + // Each slot is assigned a group of indices starting at kFirstSlotIndex. | 
| + // Within this group, semantics are as follows: | 
| + static const int kSlotFromSourcePositionIndex = 0; | 
| + static const int kSlotToSourcePositionIndex = 1; | 
| + static const int kSlotBlockCountIndex = 2; | 
| + static const int kSlotIndexCount = 3; | 
| + | 
| + DISALLOW_IMPLICIT_CONSTRUCTORS(CoverageInfo); | 
| +}; | 
| // The BreakPointInfo class holds information for break points set in a | 
| // function. The DebugInfo object holds a BreakPointInfo object for each code |