| //===-- Action.cpp --------------------------------------------------------===// |
| // |
| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Gollvm driver helper class Action methods. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "Action.h" |
| #include "Artifact.h" |
| |
| #include "llvm/Support/raw_ostream.h" |
| |
| #include <sstream> |
| |
| namespace gollvm { |
| namespace driver { |
| |
| const char *Action::getName() const |
| { |
| switch (type_) { |
| case A_ReadStdin: return "readstdin"; |
| case A_InputFile: return "inputfile"; |
| case A_CompileAndAssemble: return "compile+assemble"; |
| case A_Compile: return "compile"; |
| case A_Assemble: return "assemble"; |
| case A_Link: return "link"; |
| default: |
| assert(false); |
| return "<unknown action type>"; |
| } |
| return nullptr; |
| } |
| |
| const char *Action::resultFileSuffix() const |
| { |
| switch (type_) { |
| case A_ReadStdin: { |
| const ReadStdinAction *rsia = this->castToReadStdinAction(); |
| return rsia->suffix(); |
| } |
| case A_InputFile: return "i"; |
| case A_Compile: return "s"; |
| case A_Assemble: |
| case A_CompileAndAssemble: return "o"; |
| case A_Link: return "e"; |
| default: |
| assert(false); |
| return "x"; |
| } |
| return nullptr; |
| } |
| |
| std::string Action::toString() |
| { |
| std::stringstream s; |
| s << "Action " << getName() << std::endl << " inputs:\n"; |
| for (auto inp : inputs()) { |
| s << " " << inp->getName() << " "; |
| InputAction *ia = inp->castToInputAction(); |
| if (ia) |
| s << ia->input()->toString(); |
| s << "\n"; |
| } |
| return s.str(); |
| } |
| |
| void Action::dump() |
| { |
| llvm::errs() << toString(); |
| } |
| |
| } // end namespace driver |
| } // end namespace gollvm |