Skip to content

Commit 5c032ce

Browse files
committed
[Asm] Refactor debug printing of AsmToken
* Move printing from llvm-mc to the AsmToken class, so that it can be used elsewhere. * Add 5 cases which were missed: BigNum, Comment, HashDirective, Space and BackSlash, and remove the default case so that -Wswitch will catch this error in future. This is almost NFC, except for the fact that llvm-mc can now print those 5 tokens in -as-lex mode. Differential revision: https://reviews.llvm.org/D43936 llvm-svn: 326794
1 parent 517dc51 commit 5c032ce

File tree

3 files changed

+100
-137
lines changed

3 files changed

+100
-137
lines changed

llvm/include/llvm/MC/MCParser/MCAsmLexer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "llvm/ADT/ArrayRef.h"
1515
#include "llvm/ADT/SmallVector.h"
1616
#include "llvm/ADT/StringRef.h"
17+
#include "llvm/Support/Debug.h"
1718
#include "llvm/Support/SMLoc.h"
1819
#include <algorithm>
1920
#include <cassert>
@@ -128,6 +129,9 @@ class AsmToken {
128129
"This token isn't an integer!");
129130
return IntVal;
130131
}
132+
133+
void dump(raw_ostream &OS) const;
134+
void dump() const { dump(dbgs()); }
131135
};
132136

133137
/// A callback class which is notified of each comment in an assembly file as

llvm/lib/MC/MCParser/MCAsmLexer.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include "llvm/MC/MCParser/MCAsmLexer.h"
1111
#include "llvm/ADT/StringRef.h"
1212
#include "llvm/Support/SMLoc.h"
13+
#include "llvm/Support/Debug.h"
14+
#include "llvm/Support/raw_ostream.h"
1315

1416
using namespace llvm;
1517

@@ -34,3 +36,94 @@ SMLoc AsmToken::getEndLoc() const {
3436
SMRange AsmToken::getLocRange() const {
3537
return SMRange(getLoc(), getEndLoc());
3638
}
39+
40+
void AsmToken::dump(raw_ostream &OS) const {
41+
switch (Kind) {
42+
case AsmToken::Error:
43+
OS << "error";
44+
break;
45+
case AsmToken::Identifier:
46+
OS << "identifier: " << getString();
47+
break;
48+
case AsmToken::Integer:
49+
OS << "int: " << getString();
50+
break;
51+
case AsmToken::Real:
52+
OS << "real: " << getString();
53+
break;
54+
case AsmToken::String:
55+
OS << "string: " << getString();
56+
break;
57+
58+
case AsmToken::Amp: OS << "Amp"; break;
59+
case AsmToken::AmpAmp: OS << "AmpAmp"; break;
60+
case AsmToken::At: OS << "At"; break;
61+
case AsmToken::BackSlash: OS << "BackSlash"; break;
62+
case AsmToken::BigNum: OS << "BigNum"; break;
63+
case AsmToken::Caret: OS << "Caret"; break;
64+
case AsmToken::Colon: OS << "Colon"; break;
65+
case AsmToken::Comma: OS << "Comma"; break;
66+
case AsmToken::Comment: OS << "Comment"; break;
67+
case AsmToken::Dollar: OS << "Dollar"; break;
68+
case AsmToken::Dot: OS << "Dot"; break;
69+
case AsmToken::EndOfStatement: OS << "EndOfStatement"; break;
70+
case AsmToken::Eof: OS << "Eof"; break;
71+
case AsmToken::Equal: OS << "Equal"; break;
72+
case AsmToken::EqualEqual: OS << "EqualEqual"; break;
73+
case AsmToken::Exclaim: OS << "Exclaim"; break;
74+
case AsmToken::ExclaimEqual: OS << "ExclaimEqual"; break;
75+
case AsmToken::Greater: OS << "Greater"; break;
76+
case AsmToken::GreaterEqual: OS << "GreaterEqual"; break;
77+
case AsmToken::GreaterGreater: OS << "GreaterGreater"; break;
78+
case AsmToken::Hash: OS << "Hash"; break;
79+
case AsmToken::HashDirective: OS << "HashDirective"; break;
80+
case AsmToken::LBrac: OS << "LBrac"; break;
81+
case AsmToken::LCurly: OS << "LCurly"; break;
82+
case AsmToken::LParen: OS << "LParen"; break;
83+
case AsmToken::Less: OS << "Less"; break;
84+
case AsmToken::LessEqual: OS << "LessEqual"; break;
85+
case AsmToken::LessGreater: OS << "LessGreater"; break;
86+
case AsmToken::LessLess: OS << "LessLess"; break;
87+
case AsmToken::Minus: OS << "Minus"; break;
88+
case AsmToken::Percent: OS << "Percent"; break;
89+
case AsmToken::Pipe: OS << "Pipe"; break;
90+
case AsmToken::PipePipe: OS << "PipePipe"; break;
91+
case AsmToken::Plus: OS << "Plus"; break;
92+
case AsmToken::RBrac: OS << "RBrac"; break;
93+
case AsmToken::RCurly: OS << "RCurly"; break;
94+
case AsmToken::RParen: OS << "RParen"; break;
95+
case AsmToken::Slash: OS << "Slash"; break;
96+
case AsmToken::Space: OS << "Space"; break;
97+
case AsmToken::Star: OS << "Star"; break;
98+
case AsmToken::Tilde: OS << "Tilde"; break;
99+
case AsmToken::PercentCall16: OS << "PercentCall16"; break;
100+
case AsmToken::PercentCall_Hi: OS << "PercentCall_Hi"; break;
101+
case AsmToken::PercentCall_Lo: OS << "PercentCall_Lo"; break;
102+
case AsmToken::PercentDtprel_Hi: OS << "PercentDtprel_Hi"; break;
103+
case AsmToken::PercentDtprel_Lo: OS << "PercentDtprel_Lo"; break;
104+
case AsmToken::PercentGot: OS << "PercentGot"; break;
105+
case AsmToken::PercentGot_Disp: OS << "PercentGot_Disp"; break;
106+
case AsmToken::PercentGot_Hi: OS << "PercentGot_Hi"; break;
107+
case AsmToken::PercentGot_Lo: OS << "PercentGot_Lo"; break;
108+
case AsmToken::PercentGot_Ofst: OS << "PercentGot_Ofst"; break;
109+
case AsmToken::PercentGot_Page: OS << "PercentGot_Page"; break;
110+
case AsmToken::PercentGottprel: OS << "PercentGottprel"; break;
111+
case AsmToken::PercentGp_Rel: OS << "PercentGp_Rel"; break;
112+
case AsmToken::PercentHi: OS << "PercentHi"; break;
113+
case AsmToken::PercentHigher: OS << "PercentHigher"; break;
114+
case AsmToken::PercentHighest: OS << "PercentHighest"; break;
115+
case AsmToken::PercentLo: OS << "PercentLo"; break;
116+
case AsmToken::PercentNeg: OS << "PercentNeg"; break;
117+
case AsmToken::PercentPcrel_Hi: OS << "PercentPcrel_Hi"; break;
118+
case AsmToken::PercentPcrel_Lo: OS << "PercentPcrel_Lo"; break;
119+
case AsmToken::PercentTlsgd: OS << "PercentTlsgd"; break;
120+
case AsmToken::PercentTlsldm: OS << "PercentTlsldm"; break;
121+
case AsmToken::PercentTprel_Hi: OS << "PercentTprel_Hi"; break;
122+
case AsmToken::PercentTprel_Lo: OS << "PercentTprel_Lo"; break;
123+
}
124+
125+
// Print the token string.
126+
OS << " (\"";
127+
OS.write_escaped(getString());
128+
OS << "\")";
129+
}

llvm/tools/llvm-mc/llvm-mc.cpp

Lines changed: 3 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -238,144 +238,10 @@ static int AsLexInput(SourceMgr &SrcMgr, MCAsmInfo &MAI,
238238

239239
bool Error = false;
240240
while (Lexer.Lex().isNot(AsmToken::Eof)) {
241-
const AsmToken &Tok = Lexer.getTok();
242-
243-
switch (Tok.getKind()) {
244-
default:
245-
SrcMgr.PrintMessage(Lexer.getLoc(), SourceMgr::DK_Warning,
246-
"unknown token");
241+
Lexer.getTok().dump(OS);
242+
OS << "\n";
243+
if (Lexer.getTok().getKind() == AsmToken::Error)
247244
Error = true;
248-
break;
249-
case AsmToken::Error:
250-
Error = true; // error already printed.
251-
break;
252-
case AsmToken::Identifier:
253-
OS << "identifier: " << Lexer.getTok().getString();
254-
break;
255-
case AsmToken::Integer:
256-
OS << "int: " << Lexer.getTok().getString();
257-
break;
258-
case AsmToken::Real:
259-
OS << "real: " << Lexer.getTok().getString();
260-
break;
261-
case AsmToken::String:
262-
OS << "string: " << Lexer.getTok().getString();
263-
break;
264-
265-
case AsmToken::Amp: OS << "Amp"; break;
266-
case AsmToken::AmpAmp: OS << "AmpAmp"; break;
267-
case AsmToken::At: OS << "At"; break;
268-
case AsmToken::Caret: OS << "Caret"; break;
269-
case AsmToken::Colon: OS << "Colon"; break;
270-
case AsmToken::Comma: OS << "Comma"; break;
271-
case AsmToken::Dollar: OS << "Dollar"; break;
272-
case AsmToken::Dot: OS << "Dot"; break;
273-
case AsmToken::EndOfStatement: OS << "EndOfStatement"; break;
274-
case AsmToken::Eof: OS << "Eof"; break;
275-
case AsmToken::Equal: OS << "Equal"; break;
276-
case AsmToken::EqualEqual: OS << "EqualEqual"; break;
277-
case AsmToken::Exclaim: OS << "Exclaim"; break;
278-
case AsmToken::ExclaimEqual: OS << "ExclaimEqual"; break;
279-
case AsmToken::Greater: OS << "Greater"; break;
280-
case AsmToken::GreaterEqual: OS << "GreaterEqual"; break;
281-
case AsmToken::GreaterGreater: OS << "GreaterGreater"; break;
282-
case AsmToken::Hash: OS << "Hash"; break;
283-
case AsmToken::LBrac: OS << "LBrac"; break;
284-
case AsmToken::LCurly: OS << "LCurly"; break;
285-
case AsmToken::LParen: OS << "LParen"; break;
286-
case AsmToken::Less: OS << "Less"; break;
287-
case AsmToken::LessEqual: OS << "LessEqual"; break;
288-
case AsmToken::LessGreater: OS << "LessGreater"; break;
289-
case AsmToken::LessLess: OS << "LessLess"; break;
290-
case AsmToken::Minus: OS << "Minus"; break;
291-
case AsmToken::Percent: OS << "Percent"; break;
292-
case AsmToken::Pipe: OS << "Pipe"; break;
293-
case AsmToken::PipePipe: OS << "PipePipe"; break;
294-
case AsmToken::Plus: OS << "Plus"; break;
295-
case AsmToken::RBrac: OS << "RBrac"; break;
296-
case AsmToken::RCurly: OS << "RCurly"; break;
297-
case AsmToken::RParen: OS << "RParen"; break;
298-
case AsmToken::Slash: OS << "Slash"; break;
299-
case AsmToken::Star: OS << "Star"; break;
300-
case AsmToken::Tilde: OS << "Tilde"; break;
301-
case AsmToken::PercentCall16:
302-
OS << "PercentCall16";
303-
break;
304-
case AsmToken::PercentCall_Hi:
305-
OS << "PercentCall_Hi";
306-
break;
307-
case AsmToken::PercentCall_Lo:
308-
OS << "PercentCall_Lo";
309-
break;
310-
case AsmToken::PercentDtprel_Hi:
311-
OS << "PercentDtprel_Hi";
312-
break;
313-
case AsmToken::PercentDtprel_Lo:
314-
OS << "PercentDtprel_Lo";
315-
break;
316-
case AsmToken::PercentGot:
317-
OS << "PercentGot";
318-
break;
319-
case AsmToken::PercentGot_Disp:
320-
OS << "PercentGot_Disp";
321-
break;
322-
case AsmToken::PercentGot_Hi:
323-
OS << "PercentGot_Hi";
324-
break;
325-
case AsmToken::PercentGot_Lo:
326-
OS << "PercentGot_Lo";
327-
break;
328-
case AsmToken::PercentGot_Ofst:
329-
OS << "PercentGot_Ofst";
330-
break;
331-
case AsmToken::PercentGot_Page:
332-
OS << "PercentGot_Page";
333-
break;
334-
case AsmToken::PercentGottprel:
335-
OS << "PercentGottprel";
336-
break;
337-
case AsmToken::PercentGp_Rel:
338-
OS << "PercentGp_Rel";
339-
break;
340-
case AsmToken::PercentHi:
341-
OS << "PercentHi";
342-
break;
343-
case AsmToken::PercentHigher:
344-
OS << "PercentHigher";
345-
break;
346-
case AsmToken::PercentHighest:
347-
OS << "PercentHighest";
348-
break;
349-
case AsmToken::PercentLo:
350-
OS << "PercentLo";
351-
break;
352-
case AsmToken::PercentNeg:
353-
OS << "PercentNeg";
354-
break;
355-
case AsmToken::PercentPcrel_Hi:
356-
OS << "PercentPcrel_Hi";
357-
break;
358-
case AsmToken::PercentPcrel_Lo:
359-
OS << "PercentPcrel_Lo";
360-
break;
361-
case AsmToken::PercentTlsgd:
362-
OS << "PercentTlsgd";
363-
break;
364-
case AsmToken::PercentTlsldm:
365-
OS << "PercentTlsldm";
366-
break;
367-
case AsmToken::PercentTprel_Hi:
368-
OS << "PercentTprel_Hi";
369-
break;
370-
case AsmToken::PercentTprel_Lo:
371-
OS << "PercentTprel_Lo";
372-
break;
373-
}
374-
375-
// Print the token string.
376-
OS << " (\"";
377-
OS.write_escaped(Tok.getString());
378-
OS << "\")\n";
379245
}
380246

381247
return Error;

0 commit comments

Comments
 (0)