diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-08-14 03:41:23 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-14 03:41:23 +0000 |
| commit | 1a019d85540068969c12a5dfe8336f228137975d (patch) | |
| tree | 4a520bf2df40497cd7fa8c876093f96bd9d64239 /llvm/lib/MC | |
| parent | afe6603590f38d854c54f2f48ff84080b2d6c06f (diff) | |
| download | bcm5719-llvm-1a019d85540068969c12a5dfe8336f228137975d.tar.gz bcm5719-llvm-1a019d85540068969c12a5dfe8336f228137975d.zip | |
Add MCSymbol::{print, dump}
llvm-svn: 78983
Diffstat (limited to 'llvm/lib/MC')
| -rw-r--r-- | llvm/lib/MC/MCSymbol.cpp | 49 | ||||
| -rw-r--r-- | llvm/lib/MC/MCValue.cpp | 10 |
2 files changed, 56 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCSymbol.cpp b/llvm/lib/MC/MCSymbol.cpp new file mode 100644 index 00000000000..d032017ca47 --- /dev/null +++ b/llvm/lib/MC/MCSymbol.cpp @@ -0,0 +1,49 @@ +//===- lib/MC/MCSymbol.cpp - MCSymbol implementation ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCSymbol.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +/// NeedsQuoting - Return true if the string \arg Str needs quoting, i.e., it +/// does not match [a-zA-Z_.][a-zA-Z0-9_.]*. +// +// FIXME: This could be more permissive, do we care? +static inline bool NeedsQuoting(const StringRef &Str) { + if (Str.empty()) + return true; + + // Check that first character is in [a-zA-Z_.]. + if (!((Str[0] >= 'a' && Str[0] <= 'z') || + (Str[0] >= 'A' && Str[0] <= 'Z') || + (Str[0] == '_' || Str[0] == '.'))) + return true; + + // Check subsequent characters are in [a-zA-Z0-9_.]. + for (unsigned i = 1, e = Str.size(); i != e; ++i) + if (!((Str[i] >= 'a' && Str[i] <= 'z') || + (Str[i] >= 'A' && Str[i] <= 'Z') || + (Str[i] >= '0' && Str[i] <= '9') || + (Str[i] == '_' || Str[i] == '.'))) + return true; + + return false; +} + +void MCSymbol::print(raw_ostream &OS) const { + if (NeedsQuoting(getName())) + OS << '"' << getName() << '"'; + else + OS << getName(); +} + +void MCSymbol::dump() const { + print(errs()); +} diff --git a/llvm/lib/MC/MCValue.cpp b/llvm/lib/MC/MCValue.cpp index 9c7317096ce..c7923da764e 100644 --- a/llvm/lib/MC/MCValue.cpp +++ b/llvm/lib/MC/MCValue.cpp @@ -18,9 +18,13 @@ void MCValue::print(raw_ostream &OS) const { return; } - OS << getSymA(); - if (getSymB()) - OS << " - " << getSymB(); + getSymA()->print(OS); + + if (getSymB()) { + OS << " - "; + getSymB()->print(OS); + } + if (getConstant()) OS << " + " << getConstant(); } |

