MC/Parser: Accept leading dollar signs in identifiers.

- Implemented by manually splicing the tokens. If this turns out to be
   problematically platform specific, a more elegant solution would be to
   implement some context dependent lexing support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111934 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-08-24 18:12:12 +00:00
parent c47a474802
commit 1f1b865c40
2 changed files with 29 additions and 0 deletions

View File

@ -1127,6 +1127,30 @@ bool AsmParser::ParseAssignment(StringRef Name) {
/// ::= identifier
/// ::= string
bool AsmParser::ParseIdentifier(StringRef &Res) {
// The assembler has relaxed rules for accepting identifiers, in particular we
// allow things like '.globl $foo', which would normally be separate
// tokens. At this level, we have already lexed so we cannot (currently)
// handle this as a context dependent token, instead we detect adjacent tokens
// and return the combined identifier.
if (Lexer.is(AsmToken::Dollar)) {
SMLoc DollarLoc = getLexer().getLoc();
// Consume the dollar sign, and check for a following identifier.
Lex();
if (Lexer.isNot(AsmToken::Identifier))
return true;
// We have a '$' followed by an identifier, make sure they are adjacent.
if (DollarLoc.getPointer() + 1 != getTok().getLoc().getPointer())
return true;
// Construct the joined identifier and consume the token.
Res = StringRef(DollarLoc.getPointer(),
getTok().getIdentifier().size() + 1);
Lex();
return false;
}
if (Lexer.isNot(AsmToken::Identifier) &&
Lexer.isNot(AsmToken::String))
return true;

View File

@ -0,0 +1,5 @@
# RUN: llvm-mc -triple i386-unknown-unknown %s > %t
# RUN: FileCheck < %t %s
// CHECK: .globl $foo
.globl $foo