diff options
Diffstat (limited to 'deps/v8/src/interpreter/bytecode-node.cc')
-rw-r--r-- | deps/v8/src/interpreter/bytecode-node.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/deps/v8/src/interpreter/bytecode-node.cc b/deps/v8/src/interpreter/bytecode-node.cc new file mode 100644 index 0000000000..2bcea0a16a --- /dev/null +++ b/deps/v8/src/interpreter/bytecode-node.cc @@ -0,0 +1,57 @@ +// 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 |