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 #include "src/compiler/source-position.h" 6 #include "src/compiler/graph.h" 7 #include "src/compiler/node-aux-data-inl.h" 8 9 namespace v8 { 10 namespace internal { 11 namespace compiler { 12 13 class SourcePositionTable::Decorator : public GraphDecorator { 14 public: Decorator(SourcePositionTable * source_positions)15 explicit Decorator(SourcePositionTable* source_positions) 16 : source_positions_(source_positions) {} 17 Decorate(Node * node)18 virtual void Decorate(Node* node) { 19 DCHECK(!source_positions_->current_position_.IsInvalid()); 20 source_positions_->table_.Set(node, source_positions_->current_position_); 21 } 22 23 private: 24 SourcePositionTable* source_positions_; 25 }; 26 27 SourcePositionTable(Graph * graph)28SourcePositionTable::SourcePositionTable(Graph* graph) 29 : graph_(graph), 30 decorator_(NULL), 31 current_position_(SourcePosition::Invalid()), 32 table_(graph->zone()) {} 33 34 AddDecorator()35void SourcePositionTable::AddDecorator() { 36 DCHECK(decorator_ == NULL); 37 decorator_ = new (graph_->zone()) Decorator(this); 38 graph_->AddDecorator(decorator_); 39 } 40 41 RemoveDecorator()42void SourcePositionTable::RemoveDecorator() { 43 DCHECK(decorator_ != NULL); 44 graph_->RemoveDecorator(decorator_); 45 decorator_ = NULL; 46 } 47 48 GetSourcePosition(Node * node)49SourcePosition SourcePositionTable::GetSourcePosition(Node* node) { 50 return table_.Get(node); 51 } 52 53 } // namespace compiler 54 } // namespace internal 55 } // namespace v8 56