summaryrefslogtreecommitdiff
path: root/test/gtest/wat-parser.cpp
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2022-05-25 12:45:04 -0700
committerGitHub <noreply@github.com>2022-05-25 12:45:04 -0700
commit7476d64271354d42d864e1ed21f87f514949bc64 (patch)
tree70162f169c2d7f928828eb31a332290240e35d0e /test/gtest/wat-parser.cpp
parent65301697b3603ec8d21615e50f0cf5b9a2a2b02f (diff)
downloadbinaryen-7476d64271354d42d864e1ed21f87f514949bc64.tar.gz
binaryen-7476d64271354d42d864e1ed21f87f514949bc64.tar.bz2
binaryen-7476d64271354d42d864e1ed21f87f514949bc64.zip
[Parser] Lex keywords (#4688)
Also include reserved words that look like keywords to avoid having to find and enumerate all the valid keywords. Invalid keywords will be rejected at a higher level in the parser instead.
Diffstat (limited to 'test/gtest/wat-parser.cpp')
-rw-r--r--test/gtest/wat-parser.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/gtest/wat-parser.cpp b/test/gtest/wat-parser.cpp
index be6d76eac..a48efd894 100644
--- a/test/gtest/wat-parser.cpp
+++ b/test/gtest/wat-parser.cpp
@@ -469,3 +469,32 @@ TEST(ParserTest, LexString) {
ASSERT_EQ(lexer, lexer.end());
}
}
+
+TEST(ParserTest, LexKeywords) {
+ Token module{"module"sv, KeywordTok{}};
+ Token type{"type"sv, KeywordTok{}};
+ Token func{"func"sv, KeywordTok{}};
+ Token import{"import"sv, KeywordTok{}};
+ Token reserved{"rEsErVeD"sv, KeywordTok{}};
+
+ Lexer lexer("module type func import rEsErVeD");
+
+ auto it = lexer.begin();
+ ASSERT_NE(it, lexer.end());
+ Token t1 = *it++;
+ ASSERT_NE(it, lexer.end());
+ Token t2 = *it++;
+ ASSERT_NE(it, lexer.end());
+ Token t3 = *it++;
+ ASSERT_NE(it, lexer.end());
+ Token t4 = *it++;
+ ASSERT_NE(it, lexer.end());
+ Token t5 = *it++;
+ EXPECT_EQ(it, lexer.end());
+
+ EXPECT_EQ(t1, module);
+ EXPECT_EQ(t2, type);
+ EXPECT_EQ(t3, func);
+ EXPECT_EQ(t4, import);
+ EXPECT_EQ(t5, reserved);
+}