| Index: src/lexer/lexer-shell.cc
|
| diff --git a/src/lexer/lexer-shell.cc b/src/lexer/lexer-shell.cc
|
| index 71ab3176cd7fd7bde6adb9582a70ba65460442cc..bdf8ac0540685f0e0c9d5edd94022507252bd2c7 100644
|
| --- a/src/lexer/lexer-shell.cc
|
| +++ b/src/lexer/lexer-shell.cc
|
| @@ -42,6 +42,7 @@
|
| #include "scopeinfo.h"
|
| #include "string-stream.h"
|
| #include "scanner.h"
|
| +#include "lexer.h"
|
|
|
| using namespace v8::internal;
|
|
|
| @@ -84,12 +85,11 @@ class BaselineScanner {
|
| delete unicode_cache_;
|
| }
|
|
|
| - Token::Value Next() {
|
| - return scanner_->Next();
|
| - }
|
| -
|
| - Scanner::Location Location() {
|
| - return scanner_->location();
|
| + Token::Value Next(int* beg_pos, int* end_pos) {
|
| + Token::Value res = scanner_->Next();
|
| + *beg_pos = scanner_->location().beg_pos;
|
| + *end_pos = scanner_->location().end_pos;
|
| + return res;
|
| }
|
|
|
| private:
|
| @@ -99,14 +99,6 @@ class BaselineScanner {
|
| };
|
|
|
|
|
| -class ExperimentalScanner {
|
| - explicit ExperimentalScanner(const char* fname);
|
| - ~ExperimentalScanner();
|
| - Token::Value Next();
|
| - Scanner::Location Location();
|
| -};
|
| -
|
| -
|
| int main(int argc, char* argv[]) {
|
| v8::V8::InitializeICU();
|
| v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
|
| @@ -121,13 +113,28 @@ int main(int argc, char* argv[]) {
|
| Isolate* isolate = Isolate::Current();
|
| HandleScope handle_scope(isolate);
|
| BaselineScanner baseline(argv[1], isolate);
|
| - Token::Value current;
|
| - while ((current = baseline.Next()) != Token::EOS) {
|
| - printf("%11s => (%d, %d)\n",
|
| - Token::Name(current),
|
| - baseline.Location().beg_pos,
|
| - baseline.Location().end_pos);
|
| - }
|
| + ExperimentalScanner experimental(argv[1]);
|
| + Token::Value expected_token, actual_token;
|
| + int expected_beg, expected_end, actual_beg, actual_end;
|
| + do {
|
| + expected_token = baseline.Next(&expected_beg, &expected_end);
|
| + actual_token = experimental.Next(&actual_beg, &actual_end);
|
| + printf("=> %11s at (%d, %d)\n",
|
| + Token::Name(actual_token),
|
| + actual_beg, actual_end);
|
| + if (expected_token != actual_token ||
|
| + expected_beg != actual_beg ||
|
| + expected_end != actual_end) {
|
| + printf("MISMATCH:\n");
|
| + printf("Expected: %s at (%d, %d)\n",
|
| + Token::Name(expected_token),
|
| + expected_beg, expected_end);
|
| + printf("Actual: %s at (%d, %d)\n",
|
| + Token::Name(actual_token),
|
| + actual_beg, actual_end);
|
| + return 1;
|
| + }
|
| + } while (actual_token != Token::EOS);
|
| }
|
| }
|
| v8::V8::Dispose();
|
|
|