bool UseMasmDefaultRadix = false;
unsigned DefaultRadix = 10;
bool LexHLASMIntegers = false;
+ bool LexHLASMStrings = false;
AsmCommentConsumer *CommentConsumer = nullptr;
MCAsmLexer();
/// Set whether to lex HLASM-flavour integers. For now this is only [0-9]*
void setLexHLASMIntegers(bool V) { LexHLASMIntegers = V; }
+
+ /// Set whether to "lex" HLASM-flavour character and string literals. For now,
+ /// setting this option to true, will disable lexing for character and string
+ /// literals.
+ void setLexHLASMStrings(bool V) { LexHLASMStrings = V; }
};
} // end namespace llvm
AsmToken AsmLexer::LexSingleQuote() {
int CurChar = getNextChar();
+ if (LexHLASMStrings)
+ return ReturnError(TokStart, "invalid usage of character literals");
+
if (LexMasmStrings) {
while (CurChar != EOF) {
if (CurChar != '\'') {
/// LexQuote: String: "..."
AsmToken AsmLexer::LexQuote() {
int CurChar = getNextChar();
+ if (LexHLASMStrings)
+ return ReturnError(TokStart, "invalid usage of string literals");
+
if (LexMasmStrings) {
while (CurChar != EOF) {
if (CurChar != '"') {
EXPECT_EQ(ParsePrimaryExpr, true);
EXPECT_EQ(Parser->hasPendingError(), true);
}
+
+TEST_F(SystemZAsmLexerTest, CheckRejectCharLiterals) {
+ StringRef AsmStr = "abc 'd'";
+
+ // Setup.
+ setupCallToAsmParser(AsmStr);
+ Parser->getLexer().setLexHLASMStrings(true);
+
+ // Lex initially to get the string.
+ Parser->getLexer().Lex();
+
+ SmallVector<AsmToken::TokenKind> ExpectedTokens(
+ {AsmToken::Identifier, AsmToken::Error, AsmToken::Error,
+ AsmToken::EndOfStatement, AsmToken::Eof});
+ lexAndCheckTokens(AsmStr, ExpectedTokens);
+}
+
+TEST_F(SystemZAsmLexerTest, CheckRejectStringLiterals) {
+ StringRef AsmStr = "abc \"ef\"";
+
+ // Setup.
+ setupCallToAsmParser(AsmStr);
+ Parser->getLexer().setLexHLASMStrings(true);
+
+ // Lex initially to get the string.
+ Parser->getLexer().Lex();
+
+ SmallVector<AsmToken::TokenKind> ExpectedTokens(
+ {AsmToken::Identifier, AsmToken::Error, AsmToken::Identifier,
+ AsmToken::Error, AsmToken::EndOfStatement, AsmToken::Eof});
+ lexAndCheckTokens(AsmStr, ExpectedTokens);
+}
} // end anonymous namespace