Line data Source code
1 : // Copyright 2014 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_
6 : #define V8_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_
7 :
8 : #include "src/base/compiler-specific.h"
9 : #include "src/compiler/node-aux-data.h"
10 : #include "src/globals.h"
11 : #include "src/source-position.h"
12 :
13 : namespace v8 {
14 : namespace internal {
15 : namespace compiler {
16 :
17 1104137 : class V8_EXPORT_PRIVATE SourcePositionTable final
18 : : public NON_EXPORTED_BASE(ZoneObject) {
19 : public:
20 : class Scope final {
21 : public:
22 : Scope(SourcePositionTable* source_positions, SourcePosition position)
23 : : source_positions_(source_positions),
24 112861901 : prev_position_(source_positions->current_position_) {
25 : Init(position);
26 : }
27 : Scope(SourcePositionTable* source_positions, Node* node)
28 : : source_positions_(source_positions),
29 : prev_position_(source_positions->current_position_) {
30 : Init(source_positions_->GetSourcePosition(node));
31 : }
32 112862042 : ~Scope() { source_positions_->current_position_ = prev_position_; }
33 :
34 : private:
35 : void Init(SourcePosition position) {
36 112861901 : if (position.IsKnown()) source_positions_->current_position_ = position;
37 : }
38 :
39 : SourcePositionTable* const source_positions_;
40 : SourcePosition const prev_position_;
41 : DISALLOW_COPY_AND_ASSIGN(Scope);
42 : };
43 :
44 : explicit SourcePositionTable(Graph* graph);
45 :
46 : void AddDecorator();
47 : void RemoveDecorator();
48 :
49 : SourcePosition GetSourcePosition(Node* node) const;
50 : void SetSourcePosition(Node* node, SourcePosition position);
51 :
52 : void SetCurrentPosition(const SourcePosition& pos) {
53 7780640 : current_position_ = pos;
54 : }
55 :
56 : void PrintJson(std::ostream& os) const;
57 :
58 : private:
59 : class Decorator;
60 :
61 : Graph* const graph_;
62 : Decorator* decorator_;
63 : SourcePosition current_position_;
64 : NodeAuxData<SourcePosition, SourcePosition::Unknown> table_;
65 :
66 : DISALLOW_COPY_AND_ASSIGN(SourcePositionTable);
67 : };
68 :
69 : } // namespace compiler
70 : } // namespace internal
71 : } // namespace v8
72 :
73 : #endif // V8_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_
|