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 | 1689e0cf55205042b830fdbe3fc5f7b483997334 (patch) | |
tree | 43fdece8e9cfa0080b29d40031bb043d860aaf49 /lib/MC/MCSymbol.cpp | |
parent | 2c11624b65a65fe487f335603dc0bf6372a50a89 (diff) | |
download | external_llvm-1689e0cf55205042b830fdbe3fc5f7b483997334.zip external_llvm-1689e0cf55205042b830fdbe3fc5f7b483997334.tar.gz external_llvm-1689e0cf55205042b830fdbe3fc5f7b483997334.tar.bz2 |
Add MCSymbol::{print, dump}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78983 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCSymbol.cpp')
-rw-r--r-- | lib/MC/MCSymbol.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp new file mode 100644 index 0000000..d032017 --- /dev/null +++ b/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()); +} |