source-position-matcher.h 1.69 KB
Newer Older
1 2 3 4 5 6 7
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TEST_CCTEST_INTERPRETER_SOURCE_POSITION_COMPARER_H_
#define TEST_CCTEST_INTERPRETER_SOURCE_POSITION_COMPARER_H_

8
#include "src/codegen/source-position-table.h"
9
#include "src/init/v8.h"
10
#include "src/interpreter/bytecode-array-iterator.h"
11
#include "src/objects/objects.h"
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

namespace v8 {
namespace internal {
namespace interpreter {

class SourcePositionMatcher final {
 public:
  bool Match(Handle<BytecodeArray> original, Handle<BytecodeArray> optimized);

 private:
  bool HasNewExpressionPositionsInOptimized(
      const std::vector<PositionTableEntry>* const original_positions,
      const std::vector<PositionTableEntry>* const optimized_positions);

  bool CompareExpressionPositions(
      const std::vector<PositionTableEntry>* const original_positions,
      const std::vector<PositionTableEntry>* const optimized_positions);

  void StripUnneededExpressionPositions(
      Handle<BytecodeArray> bytecode_array,
      std::vector<PositionTableEntry>* positions,
      int next_statement_bytecode_offset);

  bool ExpressionPositionIsNeeded(Handle<BytecodeArray> bytecode_array,
                                  int start_offset, int end_offset);

  void MoveToNextStatement(
      SourcePositionTableIterator* iterator,
      std::vector<PositionTableEntry>* expression_positions);

  void AdvanceBytecodeIterator(BytecodeArrayIterator* iterator,
                               int bytecode_offset);
};

}  // namespace interpreter
}  // namespace internal
}  // namespace v8

#endif  // TEST_CCTEST_INTERPRETER_SOURCE_POSITION_COMPARER_H_