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 9namespace v8 { 10namespace internal { 11namespace compiler { 12 13class SourcePositionTable::Decorator : public GraphDecorator { 14 public: 15 explicit Decorator(SourcePositionTable* source_positions) 16 : source_positions_(source_positions) {} 17 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 28SourcePositionTable::SourcePositionTable(Graph* graph) 29 : graph_(graph), 30 decorator_(NULL), 31 current_position_(SourcePosition::Invalid()), 32 table_(graph->zone()) {} 33 34 35void SourcePositionTable::AddDecorator() { 36 DCHECK(decorator_ == NULL); 37 decorator_ = new (graph_->zone()) Decorator(this); 38 graph_->AddDecorator(decorator_); 39} 40 41 42void SourcePositionTable::RemoveDecorator() { 43 DCHECK(decorator_ != NULL); 44 graph_->RemoveDecorator(decorator_); 45 decorator_ = NULL; 46} 47 48 49SourcePosition SourcePositionTable::GetSourcePosition(Node* node) { 50 return table_.Get(node); 51} 52 53} // namespace compiler 54} // namespace internal 55} // namespace v8 56