citrun

watch C/C++ source code execute
Log | Files | Refs | LICENSE

commit 967e2aea5d31a93e847e58331b435aa5b6e8b3cd
parent 6964a2dd86f62c412dd2920ef2353d59aa784e5d
Author: Kyle Milz <kyle@0x30.net>
Date:   Sat, 13 Aug 2016 17:10:28 -0600

src: break log implementation out into file

Diffstat:
Msrc/Jamfile | 1+
Asrc/inst_log.cc | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/inst_log.h | 61+++++++++++--------------------------------------------------
3 files changed, 75 insertions(+), 50 deletions(-)

diff --git a/src/Jamfile b/src/Jamfile @@ -54,6 +54,7 @@ Main citrun-gl : $(GL_SRCS) ; # citrun-inst # INST_SRCS = + inst_log.cc inst_main.cc inst_frontend.cc inst_action.cc diff --git a/src/inst_log.cc b/src/inst_log.cc @@ -0,0 +1,63 @@ +#include "inst_log.h" + +#include <llvm/Support/FileSystem.h> // llvm::sys::fs::F_Append +#include <err.h> + +InstrumentLogger::InstrumentLogger(const bool &is_citruninst) : + m_pid(getpid()), + m_needs_prefix(true), + m_delete(true) +{ + if (is_citruninst) { + m_output = &llvm::outs(); + m_delete = false; + } else { + std::error_code ec; + m_output = new llvm::raw_fd_ostream("citrun.log", ec, llvm::sys::fs::F_Append); + + if (ec.value()) { + warnx("citrun.log: %s", ec.message().c_str()); + m_output = &llvm::nulls(); + m_delete = false; + } + } +} + +InstrumentLogger::InstrumentLogger(InstrumentLogger &o) : + m_pid(o.m_pid), + m_output(o.m_output), + m_needs_prefix(o.m_needs_prefix), + m_delete(false) +{} + +InstrumentLogger::~InstrumentLogger() +{ + if (m_delete) + delete m_output; +} + +InstrumentLogger& +operator<<(InstrumentLogger& out, const char *rhs) +{ + out.print_prefix(); + *out.m_output << rhs; + out.check_newline(rhs); + + return out; +} + +void +InstrumentLogger::print_prefix() +{ + if (m_needs_prefix) { + *m_output << m_pid << ": "; + m_needs_prefix = false; + } +} + +void +InstrumentLogger::check_newline(const std::string &rhs) +{ + if (std::find(rhs.begin(), rhs.end(), '\n') != rhs.end()) + m_needs_prefix = true; +} diff --git a/src/inst_log.h b/src/inst_log.h @@ -1,38 +1,14 @@ #ifndef __INST_LOG_H_ #define __INST_LOG_H_ -#include <err.h> #include <llvm/Support/raw_ostream.h> -#include <unistd.h> // getpid +#include <unistd.h> // pid_t class InstrumentLogger { public: - InstrumentLogger(const bool &is_citruninst) : - m_pid(getpid()), - m_needs_prefix(true), - m_delete(true) - { - if (is_citruninst) { - m_output = &llvm::outs(); - m_delete = false; - } else { - std::error_code ec; - m_output = new llvm::raw_fd_ostream("citrun.log", ec, llvm::sys::fs::F_Append); - - if (ec.value()) { - warnx("citrun.log: %s", ec.message().c_str()); - m_output = &llvm::nulls(); - m_delete = false; - } - } - }; - InstrumentLogger(InstrumentLogger &o) : - m_pid(o.m_pid), - m_output(o.m_output), - m_needs_prefix(o.m_needs_prefix), - m_delete(false) - {} - ~InstrumentLogger() { if (m_delete) delete m_output; }; + InstrumentLogger(const bool &); + InstrumentLogger(InstrumentLogger &o); + ~InstrumentLogger(); template <typename T> friend InstrumentLogger& operator<<(InstrumentLogger& out, const T &rhs) @@ -41,32 +17,17 @@ public: *out.m_output << rhs; return out; } - friend InstrumentLogger& operator<<(InstrumentLogger& out, const char *rhs) - { - out.print_prefix(); - *out.m_output << rhs; - out.check_newline(rhs); - return out; - } + friend InstrumentLogger& operator<<(InstrumentLogger&, const char *); - pid_t m_pid; - llvm::raw_ostream *m_output; - bool m_needs_prefix; + pid_t m_pid; + llvm::raw_ostream *m_output; + bool m_needs_prefix; private: - void print_prefix() { - if (m_needs_prefix) { - *m_output << m_pid << ": "; - m_needs_prefix = false; - } - }; - - void check_newline(const std::string &rhs) { - if (std::find(rhs.begin(), rhs.end(), '\n') != rhs.end()) - m_needs_prefix = true; - }; + void print_prefix(); + void check_newline(const std::string &); - bool m_delete; + bool m_delete; }; #endif // _INST_LOG_H_