| Index: src/compiler.h
|
| diff --git a/src/compiler.h b/src/compiler.h
|
| index 1b787dce02fc3c1da918593791b117d38faf9df8..c9d91c24a43e8939b6c3075d2e50acf164fdfcad 100644
|
| --- a/src/compiler.h
|
| +++ b/src/compiler.h
|
| @@ -30,6 +30,62 @@ struct OffsetRange {
|
| };
|
|
|
|
|
| +// This class encapsulates encoding and decoding of sources positions from
|
| +// which hydrogen values originated.
|
| +// When FLAG_track_hydrogen_positions is set this object encodes the
|
| +// identifier of the inlining and absolute offset from the start of the
|
| +// inlined function.
|
| +// When the flag is not set we simply track absolute offset from the
|
| +// script start.
|
| +class SourcePosition {
|
| + public:
|
| + SourcePosition(const SourcePosition& other) : value_(other.value_) {}
|
| +
|
| + static SourcePosition Unknown() {
|
| + return SourcePosition(RelocInfo::kNoPosition);
|
| + }
|
| +
|
| + bool IsUnknown() const { return value_ == RelocInfo::kNoPosition; }
|
| +
|
| + int position() const { return PositionField::decode(value_); }
|
| + void set_position(int position) {
|
| + if (FLAG_hydrogen_track_positions) {
|
| + value_ = static_cast<int>(PositionField::update(value_, position));
|
| + } else {
|
| + value_ = position;
|
| + }
|
| + }
|
| +
|
| + int inlining_id() const { return InliningIdField::decode(value_); }
|
| + void set_inlining_id(int inlining_id) {
|
| + if (FLAG_hydrogen_track_positions) {
|
| + value_ = static_cast<int>(InliningIdField::update(value_, inlining_id));
|
| + }
|
| + }
|
| +
|
| + int raw() const { return value_; }
|
| +
|
| + private:
|
| + typedef BitField<int, 0, 9> InliningIdField;
|
| +
|
| + // Offset from the start of the inlined function.
|
| + typedef BitField<int, 9, 23> PositionField;
|
| +
|
| + explicit SourcePosition(int value) : value_(value) {}
|
| +
|
| + friend class HPositionInfo;
|
| + friend class LCodeGenBase;
|
| +
|
| + // If FLAG_hydrogen_track_positions is set contains bitfields InliningIdField
|
| + // and PositionField.
|
| + // Otherwise contains absolute offset from the script start.
|
| + int value_;
|
| +};
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, const SourcePosition& p);
|
| +
|
| +
|
| class InlinedFunctionInfo {
|
| public:
|
| explicit InlinedFunctionInfo(Handle<SharedFunctionInfo> shared)
|
| @@ -403,7 +459,8 @@ class CompilationInfo {
|
| List<int>* inlining_id_to_function_id() {
|
| return inlining_id_to_function_id_;
|
| }
|
| - int TraceInlinedFunction(Handle<SharedFunctionInfo> shared, int raw_position);
|
| + int TraceInlinedFunction(Handle<SharedFunctionInfo> shared,
|
| + SourcePosition position);
|
|
|
| Handle<Foreign> object_wrapper() {
|
| if (object_wrapper_.is_null()) {
|
|
|