Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: test/cctest/asmjs/test-asm-lexer.cc

Issue 2751693002: [wasm][asm.js] Adding custom asm.js lexer. (Closed)
Patch Set: fix warning Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/asmjs/test-asm-lexer.cc
diff --git a/test/cctest/asmjs/test-asm-lexer.cc b/test/cctest/asmjs/test-asm-lexer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9bc630d518ea4ad64ce7db21d77f611388738a24
--- /dev/null
+++ b/test/cctest/asmjs/test-asm-lexer.cc
@@ -0,0 +1,219 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
vogelheim 2017/03/14 13:36:38 nitpick: 2017
vogelheim 2017/03/14 13:36:38 Please consider using unittests/.., rather than cc
bradn 2017/03/15 07:53:04 Done.
bradn 2017/03/15 07:53:04 Done. Thanks for the suggestion!
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/asmjs/asm-lexer.h"
+#include "src/v8.h"
+#include "test/cctest/cctest.h"
+
+namespace v8 {
+namespace internal {
+
+#define SKIP(t) \
+ do { \
+ CHECK_EQ((t), lexer.Token()); \
+ lexer.Next(); \
+ } while (0);
+
+#define TOK(t) AsmJsLexer::kToken_##t
+
+#define SKIP_GLOBAL() \
+ do { \
+ CHECK(lexer.IsGlobal()); \
+ lexer.Next(); \
+ } while (0);
+
+#define SKIP_LOCAL() \
+ do { \
+ CHECK(lexer.IsLocal()); \
+ lexer.Next(); \
+ } while (0);
+
+#define CHECK_FOR_END() CHECK(lexer.Token() == AsmJsLexer::kEndOfInput);
+
+#define SETUP_SOURCE(ssource) \
+ v8::V8::Initialize(); \
+ v8::Isolate* isolate = CcTest::isolate(); \
+ v8::HandleScope handles(isolate); \
+ i::Isolate* i_isolate = CcTest::i_isolate(); \
+ i::Factory* factory = i_isolate->factory(); \
+ i::Handle<i::String> source = factory->InternalizeUtf8String(ssource); \
+ i::Handle<i::Script> script = factory->NewScript(source); \
+ AsmJsLexer lexer(i_isolate, script, 0, source->length());
+
+TEST(SimpleFunction) {
+ SETUP_SOURCE("function foo() { return; }");
+ SKIP(TOK(function));
+ DCHECK_EQ("foo", lexer.name());
+ SKIP_GLOBAL();
+ SKIP('(');
+ SKIP(')');
+ SKIP('{');
+ SKIP(TOK(return ));
+ SKIP(';');
+ SKIP('}');
+ CHECK_FOR_END();
+}
+
+TEST(JSKeywords) {
+ SETUP_SOURCE(
+ "arguments break case const continue\n"
+ "default do else eval for function\n"
+ "if new return switch var while\n");
+ SKIP(TOK(arguments));
+ SKIP(TOK(break));
+ SKIP(TOK(case));
+ SKIP(TOK(const));
+ SKIP(TOK(continue));
+ SKIP(TOK(default));
+ SKIP(TOK(do));
+ SKIP(TOK(else));
+ SKIP(TOK(eval));
+ SKIP(TOK(for));
+ SKIP(TOK(function));
+ SKIP(TOK(if));
+ SKIP(TOK(new));
+ SKIP(TOK(return ));
+ SKIP(TOK(switch));
+ SKIP(TOK(var));
+ SKIP(TOK(while));
+ CHECK_FOR_END();
+}
+
+TEST(JSOperatorsSpread) {
+ SETUP_SOURCE(
+ "+ - * / % & | ^ ~ << >> >>>\n"
+ "< > <= >= == !=\n");
+ SKIP('+');
+ SKIP('-');
+ SKIP('*');
+ SKIP('/');
+ SKIP('%');
+ SKIP('&');
+ SKIP('|');
+ SKIP('^');
+ SKIP('~');
+ SKIP(TOK(SHL));
+ SKIP(TOK(SAR));
+ SKIP(TOK(SHR));
+ SKIP('<');
+ SKIP('>');
+ SKIP(TOK(LE));
+ SKIP(TOK(GE));
+ SKIP(TOK(EQ));
+ SKIP(TOK(NE));
+ CHECK_FOR_END();
+}
+
+TEST(JSOperatorsTight) {
+ SETUP_SOURCE(
+ "+-*/%&|^~<<>> >>>\n"
+ "<><=>= ==!=\n");
+ SKIP('+');
+ SKIP('-');
+ SKIP('*');
+ SKIP('/');
+ SKIP('%');
+ SKIP('&');
+ SKIP('|');
+ SKIP('^');
+ SKIP('~');
+ SKIP(TOK(SHL));
+ SKIP(TOK(SAR));
+ SKIP(TOK(SHR));
+ SKIP('<');
+ SKIP('>');
+ SKIP(TOK(LE));
+ SKIP(TOK(GE));
+ SKIP(TOK(EQ));
+ SKIP(TOK(NE));
+ CHECK_FOR_END();
+}
+
+TEST(UsesOfAsm) {
+ SETUP_SOURCE("'use asm' \"use asm\"\n");
+ SKIP(TOK(UseAsm));
+ SKIP(TOK(UseAsm));
+ CHECK_FOR_END();
+}
+
+TEST(GlobalAssignment) {
+ SETUP_SOURCE("var x = x + x;");
+ SKIP(TOK(var));
+ CHECK_EQ("x", lexer.name());
+ AsmJsLexer::token_t x = lexer.Token();
+ SKIP_GLOBAL();
+ SKIP('=');
+ SKIP(x);
+ SKIP('+');
+ SKIP(x);
+ SKIP(';');
+ CHECK_FOR_END();
+}
+
+TEST(LocalAssignment) {
+ SETUP_SOURCE("var x = x + x;");
+ lexer.SetLocalScope(true);
+ SKIP(TOK(var));
+ CHECK_EQ("x", lexer.name());
+ AsmJsLexer::token_t x = lexer.Token();
+ SKIP_LOCAL();
+ SKIP('=');
+ SKIP(x);
+ SKIP('+');
+ SKIP(x);
+ SKIP(';');
+ CHECK_FOR_END();
+}
+
+TEST(Numbers) {
+ SETUP_SOURCE("1 1.2 0x1f 1.e3");
+
+ CHECK(lexer.IsUnsigned());
+ CHECK_EQ(1, lexer.AsUnsigned());
+ lexer.Next();
+
+ CHECK(lexer.IsDouble());
+ CHECK_EQ(1.2, lexer.AsDouble());
+ lexer.Next();
+
+ CHECK(lexer.IsUnsigned());
+ CHECK_EQ(31, lexer.AsUnsigned());
+ lexer.Next();
+
+ CHECK(lexer.IsDouble());
+ CHECK_EQ(1.0e3, lexer.AsDouble());
+ lexer.Next();
+
+ CHECK_FOR_END();
+}
+
+TEST(Rewind1) {
+ SETUP_SOURCE("+ - * /");
+ SKIP('+');
+ lexer.Rewind();
+ SKIP('+');
+ SKIP('-');
+ lexer.Rewind();
+ SKIP('-');
+ SKIP('*');
+ lexer.Rewind();
+ SKIP('*');
+ SKIP('/');
+ lexer.Rewind();
+ SKIP('/');
+ CHECK_FOR_END();
+}
+
+TEST(Comments) {
+ SETUP_SOURCE(
+ "var // This is a test /* */\n"
+ "function /* this */ ^");
+ SKIP(TOK(var));
+ SKIP(TOK(function));
+ SKIP('^');
+ CHECK_FOR_END();
+}
+
+} // namespace internal
+} // namespace v8
« src/asmjs/asm-names.h ('K') | « test/cctest/BUILD.gn ('k') | test/cctest/cctest.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698