summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/MIRParser/MILexer.cpp
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2015-08-06 23:17:42 +0000
committerAlex Lorenz <arphaman@gmail.com>2015-08-06 23:17:42 +0000
commit3fb77686c1d63cb3ef0322bed341c67e10d1d88b (patch)
tree959ec194b11c15024e52d4161641e1231ada2c5a /llvm/lib/CodeGen/MIRParser/MILexer.cpp
parenta11903215f0920e790316ed3d0bb71b9a681646c (diff)
downloadbcm5719-llvm-3fb77686c1d63cb3ef0322bed341c67e10d1d88b.tar.gz
bcm5719-llvm-3fb77686c1d63cb3ef0322bed341c67e10d1d88b.zip
MIR Parser: Simplify the token's string value handling.
This commit removes the 'StringOffset' and 'HasStringValue' fields from the MIToken struct and simplifies the 'stringValue' method which now returns the new 'StringValue' field. This commit also adopts a different way of initializing the lexed tokens - instead of constructing a new MIToken instance, the lexer resets the old token using the new 'reset' method and sets its attributes using the new 'setStringValue', 'setOwnedStringValue', and 'setIntegerValue' methods. Reviewers: Sean Silva Differential Revision: http://reviews.llvm.org/D11792 llvm-svn: 244295
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser/MILexer.cpp')
-rw-r--r--llvm/lib/CodeGen/MIRParser/MILexer.cpp75
1 files changed, 51 insertions, 24 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 310ac7b4d71..99029a93c7b 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -55,6 +55,28 @@ public:
} // end anonymous namespace
+MIToken &MIToken::reset(TokenKind Kind, StringRef Range) {
+ this->Kind = Kind;
+ this->Range = Range;
+ return *this;
+}
+
+MIToken &MIToken::setStringValue(StringRef StrVal) {
+ StringValue = StrVal;
+ return *this;
+}
+
+MIToken &MIToken::setOwnedStringValue(std::string StrVal) {
+ StringValueStorage = std::move(StrVal);
+ StringValue = StringValueStorage;
+ return *this;
+}
+
+MIToken &MIToken::setIntegerValue(APSInt IntVal) {
+ this->IntVal = std::move(IntVal);
+ return *this;
+}
+
/// Skip the leading whitespace characters and return the updated cursor.
static Cursor skipWhitespace(Cursor C) {
while (isspace(C.peek()))
@@ -124,17 +146,18 @@ static Cursor lexName(
if (C.peek() == '"') {
if (Cursor R = lexStringConstant(C, ErrorCallback)) {
StringRef String = Range.upto(R);
- Token = MIToken(Type, String,
- unescapeQuotedString(String.drop_front(PrefixLength)),
- PrefixLength);
+ Token.reset(Type, String)
+ .setOwnedStringValue(
+ unescapeQuotedString(String.drop_front(PrefixLength)));
return R;
}
- Token = MIToken(MIToken::Error, Range.remaining());
+ Token.reset(MIToken::Error, Range.remaining());
return Range;
}
while (isIdentifierChar(C.peek()))
C.advance();
- Token = MIToken(Type, Range.upto(C), PrefixLength);
+ Token.reset(Type, Range.upto(C))
+ .setStringValue(Range.upto(C).drop_front(PrefixLength));
return C;
}
@@ -145,7 +168,7 @@ static Cursor maybeLexIntegerType(Cursor C, MIToken &Token) {
C.advance(); // Skip 'i'
while (isdigit(C.peek()))
C.advance();
- Token = MIToken(MIToken::IntegerType, Range.upto(C));
+ Token.reset(MIToken::IntegerType, Range.upto(C));
return C;
}
@@ -187,7 +210,8 @@ static Cursor maybeLexIdentifier(Cursor C, MIToken &Token) {
while (isIdentifierChar(C.peek()))
C.advance();
auto Identifier = Range.upto(C);
- Token = MIToken(getIdentifierKind(Identifier), Identifier);
+ Token.reset(getIdentifierKind(Identifier), Identifier)
+ .setStringValue(Identifier);
return C;
}
@@ -199,7 +223,7 @@ static Cursor maybeLexMachineBasicBlock(
auto Range = C;
C.advance(4); // Skip '%bb.'
if (!isdigit(C.peek())) {
- Token = MIToken(MIToken::Error, C.remaining());
+ Token.reset(MIToken::Error, C.remaining());
ErrorCallback(C.location(), "expected a number after '%bb.'");
return C;
}
@@ -214,8 +238,9 @@ static Cursor maybeLexMachineBasicBlock(
while (isIdentifierChar(C.peek()))
C.advance();
}
- Token = MIToken(MIToken::MachineBasicBlock, Range.upto(C), APSInt(Number),
- StringOffset);
+ Token.reset(MIToken::MachineBasicBlock, Range.upto(C))
+ .setIntegerValue(APSInt(Number))
+ .setStringValue(Range.upto(C).drop_front(StringOffset));
return C;
}
@@ -228,7 +253,7 @@ static Cursor maybeLexIndex(Cursor C, MIToken &Token, StringRef Rule,
auto NumberRange = C;
while (isdigit(C.peek()))
C.advance();
- Token = MIToken(Kind, Range.upto(C), APSInt(NumberRange.upto(C)));
+ Token.reset(Kind, Range.upto(C)).setIntegerValue(APSInt(NumberRange.upto(C)));
return C;
}
@@ -249,7 +274,9 @@ static Cursor maybeLexIndexAndName(Cursor C, MIToken &Token, StringRef Rule,
while (isIdentifierChar(C.peek()))
C.advance();
}
- Token = MIToken(Kind, Range.upto(C), APSInt(Number), StringOffset);
+ Token.reset(Kind, Range.upto(C))
+ .setIntegerValue(APSInt(Number))
+ .setStringValue(Range.upto(C).drop_front(StringOffset));
return C;
}
@@ -295,8 +322,8 @@ static Cursor lexVirtualRegister(Cursor C, MIToken &Token) {
auto NumberRange = C;
while (isdigit(C.peek()))
C.advance();
- Token = MIToken(MIToken::VirtualRegister, Range.upto(C),
- APSInt(NumberRange.upto(C)));
+ Token.reset(MIToken::VirtualRegister, Range.upto(C))
+ .setIntegerValue(APSInt(NumberRange.upto(C)));
return C;
}
@@ -309,8 +336,8 @@ static Cursor maybeLexRegister(Cursor C, MIToken &Token) {
C.advance(); // Skip '%'
while (isIdentifierChar(C.peek()))
C.advance();
- Token = MIToken(MIToken::NamedRegister, Range.upto(C),
- /*StringOffset=*/1); // Drop the '%'
+ Token.reset(MIToken::NamedRegister, Range.upto(C))
+ .setStringValue(Range.upto(C).drop_front(1)); // Drop the '%'
return C;
}
@@ -327,8 +354,8 @@ static Cursor maybeLexGlobalValue(
auto NumberRange = C;
while (isdigit(C.peek()))
C.advance();
- Token =
- MIToken(MIToken::GlobalValue, Range.upto(C), APSInt(NumberRange.upto(C)));
+ Token.reset(MIToken::GlobalValue, Range.upto(C))
+ .setIntegerValue(APSInt(NumberRange.upto(C)));
return C;
}
@@ -354,7 +381,7 @@ static Cursor maybeLexHexFloatingPointLiteral(Cursor C, MIToken &Token) {
C.advance();
while (isxdigit(C.peek()))
C.advance();
- Token = MIToken(MIToken::FloatingPointLiteral, Range.upto(C));
+ Token.reset(MIToken::FloatingPointLiteral, Range.upto(C));
return C;
}
@@ -370,7 +397,7 @@ static Cursor lexFloatingPointLiteral(Cursor Range, Cursor C, MIToken &Token) {
while (isdigit(C.peek()))
C.advance();
}
- Token = MIToken(MIToken::FloatingPointLiteral, Range.upto(C));
+ Token.reset(MIToken::FloatingPointLiteral, Range.upto(C));
return C;
}
@@ -384,7 +411,7 @@ static Cursor maybeLexNumericalLiteral(Cursor C, MIToken &Token) {
if (C.peek() == '.')
return lexFloatingPointLiteral(Range, C, Token);
StringRef StrVal = Range.upto(C);
- Token = MIToken(MIToken::IntegerLiteral, StrVal, APSInt(StrVal));
+ Token.reset(MIToken::IntegerLiteral, StrVal).setIntegerValue(APSInt(StrVal));
return C;
}
@@ -423,7 +450,7 @@ static Cursor maybeLexSymbol(Cursor C, MIToken &Token) {
return None;
auto Range = C;
C.advance(Length);
- Token = MIToken(Kind, Range.upto(C));
+ Token.reset(Kind, Range.upto(C));
return C;
}
@@ -432,7 +459,7 @@ StringRef llvm::lexMIToken(
function_ref<void(StringRef::iterator Loc, const Twine &)> ErrorCallback) {
auto C = skipWhitespace(Cursor(Source));
if (C.isEOF()) {
- Token = MIToken(MIToken::Eof, C.remaining());
+ Token.reset(MIToken::Eof, C.remaining());
return C.remaining();
}
@@ -467,7 +494,7 @@ StringRef llvm::lexMIToken(
if (Cursor R = maybeLexSymbol(C, Token))
return R.remaining();
- Token = MIToken(MIToken::Error, C.remaining());
+ Token.reset(MIToken::Error, C.remaining());
ErrorCallback(C.location(),
Twine("unexpected character '") + Twine(C.peek()) + "'");
return C.remaining();
OpenPOWER on IntegriCloud