Skip to content

Commit 2b11c7d

Browse files
committed
Add MCAsmLexer interface.
- This provides the AsmLexer interface to the target specific assembly parsers. llvm-svn: 76460
1 parent 027d9f9 commit 2b11c7d

File tree

7 files changed

+91
-13
lines changed

7 files changed

+91
-13
lines changed

llvm/include/llvm/MC/MCAsmLexer.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//===-- llvm/MC/MCAsmLexer.h - Abstract Asm Lexer Interface -----*- C++ -*-===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#ifndef LLVM_MC_MCASMLEXER_H
11+
#define LLVM_MC_MCASMLEXER_H
12+
13+
namespace llvm {
14+
class MCAsmLexer;
15+
class MCInst;
16+
class Target;
17+
18+
/// MCAsmLexer - Generic assembler lexer interface, for use by target specific
19+
/// assembly lexers.
20+
class MCAsmLexer {
21+
MCAsmLexer(const MCAsmLexer &); // DO NOT IMPLEMENT
22+
void operator=(const MCAsmLexer &); // DO NOT IMPLEMENT
23+
protected: // Can only create subclasses.
24+
MCAsmLexer();
25+
26+
public:
27+
virtual ~MCAsmLexer();
28+
};
29+
30+
} // End llvm namespace
31+
32+
#endif

llvm/include/llvm/MC/MCAsmParser.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
#define LLVM_MC_MCASMPARSER_H
1212

1313
namespace llvm {
14-
class MCAsmParser;
15-
class MCInst;
16-
class Target;
17-
class TargetAsmParser;
14+
class MCAsmLexer;
1815

1916
/// MCAsmParser - Generic assembler parser interface, for use by target specific
2017
/// assembly parsers.
@@ -26,6 +23,8 @@ class MCAsmParser {
2623

2724
public:
2825
virtual ~MCAsmParser();
26+
27+
virtual MCAsmLexer &getLexer() = 0;
2928
};
3029

3130
} // End llvm namespace

llvm/lib/MC/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
add_llvm_library(LLVMMC
2+
MCAsmLexer.cpp
23
MCAsmParser.cpp
34
MCAsmStreamer.cpp
45
MCContext.cpp

llvm/lib/MC/MCAsmLexer.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//===-- MCAsmLexer.cpp - Abstract Asm Lexer Interface ---------------------===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#include "llvm/MC/MCAsmLexer.h"
11+
12+
using namespace llvm;
13+
14+
MCAsmLexer::MCAsmLexer() {
15+
}
16+
17+
MCAsmLexer::~MCAsmLexer() {
18+
}

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,55 @@
88
//===----------------------------------------------------------------------===//
99

1010
#include "X86.h"
11+
#include "llvm/ADT/SmallVector.h"
1112
#include "llvm/MC/MCAsmParser.h"
1213
#include "llvm/Target/TargetRegistry.h"
1314
#include "llvm/Target/TargetAsmParser.h"
1415
using namespace llvm;
1516

1617
namespace {
18+
struct X86Operand {
19+
};
1720

18-
class X86ATTAsmParser : public TargetAsmParser {
19-
public:
20-
explicit X86ATTAsmParser(const Target &);
21-
22-
virtual bool ParseInstruction(MCAsmParser &AP, const char *Name,
23-
MCInst &Inst);
24-
};
21+
class X86ATTAsmParser : public TargetAsmParser {
22+
bool ParseOperand(X86Operand &Op);
23+
24+
bool MatchInstruction(const char *Name,
25+
llvm::SmallVector<X86Operand, 3> &Operands,
26+
MCInst &Inst);
2527

28+
public:
29+
explicit X86ATTAsmParser(const Target &);
30+
31+
virtual bool ParseInstruction(MCAsmParser &AP, const char *Name,
32+
MCInst &Inst);
33+
};
2634
}
2735

2836
X86ATTAsmParser::X86ATTAsmParser(const Target &T)
2937
: TargetAsmParser(T)
3038
{
3139
}
3240

41+
bool X86ATTAsmParser::ParseOperand(X86Operand &Op) {
42+
return true;
43+
}
44+
45+
bool
46+
X86ATTAsmParser::MatchInstruction(const char *Name,
47+
llvm::SmallVector<X86Operand, 3> &Operands,
48+
MCInst &Inst) {
49+
return false;
50+
}
51+
3352
bool X86ATTAsmParser::ParseInstruction(MCAsmParser &AP, const char *Name,
3453
MCInst &Inst) {
35-
return true;
54+
MCAsmLexer &Lexer = AP.getLexer();
55+
llvm::SmallVector<X86Operand, 3> Operands;
56+
(void) Lexer;
57+
(void) Operands;
58+
59+
return MatchInstruction(Name, Operands, Inst);
3660
}
3761

3862
namespace {

llvm/tools/llvm-mc/AsmLexer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef ASMLEXER_H
1515
#define ASMLEXER_H
1616

17+
#include "llvm/MC/MCAsmLexer.h"
1718
#include "llvm/Support/DataTypes.h"
1819
#include <string>
1920
#include <cassert>
@@ -52,7 +53,7 @@ namespace asmtok {
5253
}
5354

5455
/// AsmLexer - Lexer class for assembly files.
55-
class AsmLexer {
56+
class AsmLexer : public MCAsmLexer {
5657
SourceMgr &SrcMgr;
5758

5859
const char *CurPtr;

llvm/tools/llvm-mc/AsmParser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class MCContext;
2424
class MCInst;
2525
class MCStreamer;
2626
class MCValue;
27+
class TargetAsmParser;
2728

2829
class AsmParser : MCAsmParser {
2930
public:
@@ -46,6 +47,8 @@ class AsmParser : MCAsmParser {
4647
public:
4748
TargetAsmParser &getTargetParser() const { return TargetParser; }
4849

50+
virtual MCAsmLexer &getLexer() { return Lexer; }
51+
4952
private:
5053
bool ParseStatement();
5154

0 commit comments

Comments
 (0)