mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-01 09:18:45 +00:00
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:
parent
c47a474802
commit
1f1b865c40
@ -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;
|
||||
|
5
test/MC/AsmParser/dollars-in-identifiers.s
Normal file
5
test/MC/AsmParser/dollars-in-identifiers.s
Normal file
@ -0,0 +1,5 @@
|
||||
# RUN: llvm-mc -triple i386-unknown-unknown %s > %t
|
||||
# RUN: FileCheck < %t %s
|
||||
|
||||
// CHECK: .globl $foo
|
||||
.globl $foo
|
Loading…
Reference in New Issue
Block a user