diff options
author | Chris Lattner <sabre@nondot.org> | 2010-04-14 04:40:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-04-14 04:40:28 +0000 |
commit | d305035155ef3d138e102434bf5a733ea2e32405 (patch) | |
tree | f1cb1e92a945673af6516c893e00eceebfc044b2 /lib/MC/MCParser/AsmLexer.cpp | |
parent | ff1ef6bdf18abbd2303d5081c1ba812304c2f039 (diff) |
implement mc asmparser support for '.', which gets the
current PC. rdar://7834775
We now produce an identical .o file compared to the cctools
assembler for something like this:
_f0:
L0:
jmp L1
.long . - L0
L1:
jmp A
.long . - L1
.zerofill __DATA,_bss,A,0
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101227 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser/AsmLexer.cpp')
-rw-r--r-- | lib/MC/MCParser/AsmLexer.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/MC/MCParser/AsmLexer.cpp b/lib/MC/MCParser/AsmLexer.cpp index 22c8d762df..1183312784 100644 --- a/lib/MC/MCParser/AsmLexer.cpp +++ b/lib/MC/MCParser/AsmLexer.cpp @@ -74,6 +74,11 @@ AsmToken AsmLexer::LexIdentifier() { while (isalnum(*CurPtr) || *CurPtr == '_' || *CurPtr == '$' || *CurPtr == '.' || *CurPtr == '@') ++CurPtr; + + // Handle . as a special case. + if (CurPtr == TokStart+1 && TokStart[0] == '.') + return AsmToken(AsmToken::Dot, StringRef(TokStart, 1)); + return AsmToken(AsmToken::Identifier, StringRef(TokStart, CurPtr - TokStart)); } |