teak-llvm/clang/lib/Driver/InputInfo.h
Reid Kleckner 898229ab4b [Driver] Refactor clang driver to use LLVM's Option library
The big changes are:
- Deleting Driver/(Arg|Opt)*
- Rewriting includes to llvm/Option/ and re-sorting
- 'using namespace llvm::opt' in clang::driver
- Fixing the autoconf build by adding option everywhere

As discussed in the review, this change includes using directives in
header files.  I'll make follow up changes to remove those in favor of
name specifiers.

Reviewers: espindola

Differential Revision: http://llvm-reviews.chandlerc.com/D975

llvm-svn: 183989
2013-06-14 17:17:23 +00:00

89 lines
2.4 KiB
C++

//===--- InputInfo.h - Input Source & Type Information ----------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef CLANG_LIB_DRIVER_INPUTINFO_H_
#define CLANG_LIB_DRIVER_INPUTINFO_H_
#include "clang/Driver/Types.h"
#include "llvm/Option/Arg.h"
#include <cassert>
#include <string>
namespace clang {
namespace driver {
/// InputInfo - Wrapper for information about an input source.
class InputInfo {
// FIXME: The distinction between filenames and inputarg here is
// gross; we should probably drop the idea of a "linker
// input". Doing so means tweaking pipelining to still create link
// steps when it sees linker inputs (but not treat them as
// arguments), and making sure that arguments get rendered
// correctly.
enum Class {
Nothing,
Filename,
InputArg,
Pipe
};
union {
const char *Filename;
const Arg *InputArg;
} Data;
Class Kind;
types::ID Type;
const char *BaseInput;
public:
InputInfo() {}
InputInfo(types::ID _Type, const char *_BaseInput)
: Kind(Nothing), Type(_Type), BaseInput(_BaseInput) {
}
InputInfo(const char *_Filename, types::ID _Type, const char *_BaseInput)
: Kind(Filename), Type(_Type), BaseInput(_BaseInput) {
Data.Filename = _Filename;
}
InputInfo(const Arg *_InputArg, types::ID _Type, const char *_BaseInput)
: Kind(InputArg), Type(_Type), BaseInput(_BaseInput) {
Data.InputArg = _InputArg;
}
bool isNothing() const { return Kind == Nothing; }
bool isFilename() const { return Kind == Filename; }
bool isInputArg() const { return Kind == InputArg; }
types::ID getType() const { return Type; }
const char *getBaseInput() const { return BaseInput; }
const char *getFilename() const {
assert(isFilename() && "Invalid accessor.");
return Data.Filename;
}
const Arg &getInputArg() const {
assert(isInputArg() && "Invalid accessor.");
return *Data.InputArg;
}
/// getAsString - Return a string name for this input, for
/// debugging.
std::string getAsString() const {
if (isFilename())
return std::string("\"") + getFilename() + '"';
else if (isInputArg())
return "(input arg)";
else
return "(nothing)";
}
};
} // end namespace driver
} // end namespace clang
#endif