| // Copyright 2017 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. | |
| #include "src/interpreter/bytecode-node.h" | |
| #include <iomanip> | |
| #include "src/source-position-table.h" | |
| namespace v8 { | |
| namespace internal { | |
| namespace interpreter { | |
| void BytecodeNode::Print(std::ostream& os) const { | |
| #ifdef DEBUG | |
| std::ios saved_state(nullptr); | |
| saved_state.copyfmt(os); | |
| os << Bytecodes::ToString(bytecode_); | |
| for (int i = 0; i < operand_count(); ++i) { | |
| os << ' ' << std::setw(8) << std::setfill('0') << std::hex << operands_[i]; | |
| } | |
| os.copyfmt(saved_state); | |
| if (source_info_.is_valid()) { | |
| os << ' ' << source_info_; | |
| } | |
| os << '\n'; | |
| #else | |
| os << static_cast<const void*>(this); | |
| #endif // DEBUG | |
| } | |
| bool BytecodeNode::operator==(const BytecodeNode& other) const { | |
| if (this == &other) { | |
| return true; | |
| } else if (this->bytecode() != other.bytecode() || | |
| this->source_info() != other.source_info()) { | |
| return false; | |
| } else { | |
| for (int i = 0; i < this->operand_count(); ++i) { | |
| if (this->operand(i) != other.operand(i)) { | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| } | |
| std::ostream& operator<<(std::ostream& os, const BytecodeNode& node) { | |
| node.Print(os); | |
| return os; | |
| } | |
| } // namespace interpreter | |
| } // namespace internal | |
| } // namespace v8 |