diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-08-24 19:13:42 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-08-24 19:13:42 +0000 |
commit | 24764326390575e5d248b1768f74f941560f6cfe (patch) | |
tree | c377e34b5ca74f0eab28a64defbde634166f51d3 /llvm/lib/MC/MCParser/AsmParser.cpp | |
parent | 94b84a19b9ff4f35b6145c39b57a7b512e89516d (diff) | |
download | bcm5719-llvm-24764326390575e5d248b1768f74f941560f6cfe.tar.gz bcm5719-llvm-24764326390575e5d248b1768f74f941560f6cfe.zip |
MC/AsmParser: Change ParseExpression to use ParseIdentifier(), to support
dollars in identifiers.
llvm-svn: 111946
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 6d4b96098ae..747b0097e1e 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -449,10 +449,17 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) { return true; Res = MCUnaryExpr::CreateLNot(Res, getContext()); return false; + case AsmToken::Dollar: case AsmToken::String: case AsmToken::Identifier: { + EndLoc = Lexer.getLoc(); + + StringRef Identifier; + if (ParseIdentifier(Identifier)) + return false; + // This is a symbol reference. - std::pair<StringRef, StringRef> Split = getTok().getIdentifier().split('@'); + std::pair<StringRef, StringRef> Split = Identifier.split('@'); MCSymbol *Sym = getContext().GetOrCreateSymbol(Split.first); // Mark the symbol as used in an expression. @@ -460,12 +467,9 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) { // Lookup the symbol variant if used. MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None; - if (Split.first.size() != getTok().getIdentifier().size()) + if (Split.first.size() != Identifier.size()) Variant = MCSymbolRefExpr::getVariantKindForName(Split.second); - EndLoc = Lexer.getLoc(); - Lex(); // Eat identifier. - // If this is an absolute variable reference, substitute it now to preserve // semantics in the face of reassignment. if (Sym->isVariable() && isa<MCConstantExpr>(Sym->getVariableValue())) { |