Revision: 19625
Author: [email protected]
Date: Fri Feb 28 15:01:10 2014 UTC
Log: Refactor lexer-shell settings
[email protected]
BUG=
Review URL: https://codereview.chromium.org/184623002
http://code.google.com/p/v8/source/detail?r=19625
Modified:
/branches/experimental/parser/src/lexer/lexer-shell.cc
=======================================
--- /branches/experimental/parser/src/lexer/lexer-shell.cc Fri Jan 24
15:33:46 2014 UTC
+++ /branches/experimental/parser/src/lexer/lexer-shell.cc Fri Feb 28
15:01:10 2014 UTC
@@ -100,11 +100,32 @@
};
-struct HarmonySettings {
- bool numeric_literals;
- bool modules;
- bool scoping;
- HarmonySettings() : numeric_literals(false), modules(false),
scoping(false) {}
+struct LexerShellSettings {
+ Encoding encoding;
+ bool print_tokens;
+ bool run_baseline;
+ bool run_experimental;
+ bool check_tokens;
+ bool dump_tokens;
+ bool break_after_illegal;
+ bool eos_test;
+ int repeat;
+ bool harmony_numeric_literals;
+ bool harmony_modules;
+ bool harmony_scoping;
+ LexerShellSettings()
+ : encoding(LATIN1),
+ print_tokens(false),
+ run_baseline(true),
+ run_experimental(true),
+ check_tokens(true),
+ dump_tokens(false),
+ break_after_illegal(false),
+ eos_test(false),
+ repeat(1),
+ harmony_numeric_literals(false),
+ harmony_modules(false),
+ harmony_scoping(false) {}
};
class BaselineScanner {
@@ -112,17 +133,15 @@
BaselineScanner(const byte* source,
const byte* source_end,
Isolate* isolate,
- Encoding encoding,
ElapsedTimer* timer,
- int repeat,
- HarmonySettings harmony_settings)
+ const LexerShellSettings& settings)
: source_(source), stream_(NULL) {
unicode_cache_ = new UnicodeCache();
scanner_ = new Scanner(unicode_cache_);
- scanner_->SetHarmonyNumericLiterals(harmony_settings.numeric_literals);
- scanner_->SetHarmonyModules(harmony_settings.modules);
- scanner_->SetHarmonyScoping(harmony_settings.scoping);
- switch (encoding) {
+ scanner_->SetHarmonyNumericLiterals(settings.harmony_numeric_literals);
+ scanner_->SetHarmonyModules(settings.harmony_modules);
+ scanner_->SetHarmonyScoping(settings.harmony_scoping);
+ switch (settings.encoding) {
case UTF8:
case UTF8TO16:
stream_ = new Utf8ToUtf16CharacterStream(source_, source_end -
source_);
@@ -238,23 +257,18 @@
TimeDelta RunBaselineScanner(const byte* source,
const byte* source_end,
Isolate* isolate,
- Encoding encoding,
- bool dump_tokens,
std::vector<TokenWithLocation>* tokens,
- int repeat,
- HarmonySettings harmony_settings) {
+ const LexerShellSettings& settings) {
ElapsedTimer timer;
BaselineScanner scanner(source,
source_end,
isolate,
- encoding,
&timer,
- repeat,
- harmony_settings);
+ settings);
Token::Value token;
do {
token = scanner.scanner_->Next();
- if (dump_tokens) {
+ if (settings.dump_tokens) {
tokens->push_back(GetTokenWithLocation(scanner.scanner_, token));
} else if (HasLiteral(token)) {
if (scanner.scanner_->is_literal_ascii()) {
@@ -271,23 +285,20 @@
template<typename Char>
TimeDelta RunExperimentalScanner(Handle<String> source,
Isolate* isolate,
- Encoding encoding,
- bool dump_tokens,
std::vector<TokenWithLocation>* tokens,
- int repeat,
- HarmonySettings harmony_settings) {
+ LexerShellSettings settings) {
ElapsedTimer timer;
ExperimentalScanner<Char> scanner(source, isolate);
- scanner.SetHarmonyNumericLiterals(harmony_settings.numeric_literals);
- scanner.SetHarmonyModules(harmony_settings.modules);
- scanner.SetHarmonyScoping(harmony_settings.scoping);
+ scanner.SetHarmonyNumericLiterals(settings.harmony_numeric_literals);
+ scanner.SetHarmonyModules(settings.harmony_modules);
+ scanner.SetHarmonyScoping(settings.harmony_scoping);
timer.Start();
scanner.Init();
Token::Value token;
do {
token = scanner.Next();
- if (dump_tokens) {
+ if (settings.dump_tokens) {
tokens->push_back(GetTokenWithLocation(&scanner, token));
} else if (HasLiteral(token)) {
if (scanner.is_literal_ascii()) {
@@ -314,54 +325,48 @@
std::pair<TimeDelta, TimeDelta> ProcessFile(
const char* fname,
- Encoding encoding,
Isolate* isolate,
- bool run_baseline,
- bool run_experimental,
- bool print_tokens,
- bool check_tokens,
- bool break_after_illegal,
- int repeat,
- HarmonySettings harmony_settings,
+ const LexerShellSettings& settings,
int truncate_by,
bool* can_truncate) {
+ const bool print_tokens = settings.print_tokens;
+ const bool run_baseline = settings.run_baseline;
+ const bool run_experimental = settings.run_experimental;
if (print_tokens) {
printf("Processing file %s, truncating by %d bytes\n", fname,
truncate_by);
}
HandleScope handle_scope(isolate);
std::vector<TokenWithLocation> baseline_tokens, experimental_tokens;
TimeDelta baseline_time, experimental_time;
- if (run_baseline) {
+ if (settings.run_baseline) {
const byte* buffer_end = 0;
- const byte* buffer = ReadFile(fname, &buffer_end, repeat, false);
+ const byte* buffer = ReadFile(fname, &buffer_end, settings.repeat,
false);
if (truncate_by > buffer_end - buffer) {
*can_truncate = false;
} else {
buffer_end -= truncate_by;
baseline_time = RunBaselineScanner(
- buffer, buffer_end, isolate, encoding, print_tokens ||
check_tokens,
- &baseline_tokens, repeat, harmony_settings);
+ buffer, buffer_end, isolate, &baseline_tokens, settings);
}
delete[] buffer;
}
if (run_experimental) {
Handle<String> source;
const byte* buffer_end = 0;
- const byte* buffer = ReadFile(fname, &buffer_end, repeat,
- encoding == UTF8TO16);
+ const byte* buffer = ReadFile(fname, &buffer_end, settings.repeat,
+ settings.encoding == UTF8TO16);
if (truncate_by > buffer_end - buffer) {
*can_truncate = false;
} else {
buffer_end -= truncate_by;
- switch (encoding) {
+ switch (settings.encoding) {
case UTF8:
case LATIN1:
source = isolate->factory()->NewStringFromAscii(
Vector<const char>(reinterpret_cast<const char*>(buffer),
buffer_end - buffer));
experimental_time = RunExperimentalScanner<uint8_t>(
- source, isolate, encoding, print_tokens || check_tokens,
- &experimental_tokens, repeat, harmony_settings);
+ source, isolate, &experimental_tokens, settings);
break;
case UTF16:
case UTF8TO16: {
@@ -373,12 +378,10 @@
// and doesn't store it as two byte.
if (!source->IsTwoByteRepresentation()) {
experimental_time = RunExperimentalScanner<uint8_t>(
- source, isolate, encoding, print_tokens || check_tokens,
- &experimental_tokens, repeat, harmony_settings);
+ source, isolate, &experimental_tokens, settings);
} else {
experimental_time = RunExperimentalScanner<uint16_t>(
- source, isolate, encoding, print_tokens || check_tokens,
- &experimental_tokens, repeat, harmony_settings);
+ source, isolate, &experimental_tokens, settings);
}
break;
}
@@ -396,7 +399,8 @@
if (print_tokens && !run_baseline) {
PrintTokens("Experimental", experimental_tokens);
}
- if ((print_tokens || check_tokens) && run_baseline && run_experimental) {
+ if ((print_tokens || settings.check_tokens) &&
+ run_baseline && run_experimental) {
if (print_tokens) {
printf("No of tokens in Baseline: %d\n",
static_cast<int>(baseline_tokens.size()));
@@ -414,7 +418,7 @@
experimental_tokens[i].Print("Actual: ");
exit(1);
}
- if (break_after_illegal)
+ if (settings.break_after_illegal)
break;
continue;
}
@@ -433,52 +437,48 @@
int main(int argc, char* argv[]) {
v8::V8::InitializeICU();
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
- Encoding encoding = LATIN1;
- bool print_tokens = false;
- bool run_baseline = true;
- bool run_experimental = true;
- bool check_tokens = true;
- bool break_after_illegal = false;
- bool eos_test = false;
std::vector<std::string> fnames;
std::string benchmark;
- int repeat = 1;
- HarmonySettings harmony_settings;
+ LexerShellSettings settings;
for (int i = 0; i < argc; ++i) {
if (strcmp(argv[i], "--latin1") == 0) {
- encoding = LATIN1;
+ settings.encoding = LATIN1;
} else if (strcmp(argv[i], "--utf8") == 0) {
- encoding = UTF8;
+ settings.encoding = UTF8;
} else if (strcmp(argv[i], "--utf16") == 0) {
- encoding = UTF16;
+ settings.encoding = UTF16;
} else if (strcmp(argv[i], "--utf8to16") == 0) {
- encoding = UTF8TO16;
+ settings.encoding = UTF8TO16;
} else if (strcmp(argv[i], "--print-tokens") == 0) {
- print_tokens = true;
+ settings.print_tokens = true;
} else if (strcmp(argv[i], "--no-baseline") == 0) {
- run_baseline = false;
+ settings.run_baseline = false;
} else if (strcmp(argv[i], "--no-experimental") == 0) {
- run_experimental = false;
+ settings.run_experimental = false;
} else if (strcmp(argv[i], "--no-check") == 0) {
- check_tokens = false;
+ settings.check_tokens = false;
} else if (strcmp(argv[i], "--break-after-illegal") == 0) {
- break_after_illegal = true;
+ settings.break_after_illegal = true;
} else if (strcmp(argv[i], "--use-harmony") == 0) {
- harmony_settings.numeric_literals = true;
- harmony_settings.modules = true;
- harmony_settings.scoping = true;
+ settings.harmony_numeric_literals = true;
+ settings.harmony_modules = true;
+ settings.harmony_scoping = true;
} else if (strncmp(argv[i], "--benchmark=", 12) == 0) {
benchmark = std::string(argv[i]).substr(12);
} else if (strncmp(argv[i], "--repeat=", 9) == 0) {
std::string repeat_str = std::string(argv[i]).substr(9);
- repeat = atoi(repeat_str.c_str());
+ settings.repeat = atoi(repeat_str.c_str());
} else if (strcmp(argv[i], "--eos-test") == 0) {
- eos_test = true;
+ settings.eos_test = true;
} else if (i > 0 && argv[i][0] != '-') {
fnames.push_back(std::string(argv[i]));
}
}
- check_tokens = check_tokens && run_baseline && run_experimental;
+ settings.check_tokens =
+ settings.check_tokens &&
+ settings.run_baseline &&
+ settings.run_experimental;
+ settings.dump_tokens = settings.check_tokens || settings.print_tokens;
v8::Isolate* isolate = v8::Isolate::GetCurrent();
{
v8::HandleScope handle_scope(isolate);
@@ -491,19 +491,12 @@
double baseline_total = 0, experimental_total = 0;
for (size_t i = 0; i < fnames.size(); i++) {
std::pair<TimeDelta, TimeDelta> times;
- bool can_truncate = eos_test;
+ bool can_truncate = settings.eos_test;
int truncate_by = 0;
do {
times = ProcessFile(fnames[i].c_str(),
- encoding,
internal_isolate,
- run_baseline,
- run_experimental,
- print_tokens,
- check_tokens,
- break_after_illegal,
- repeat,
- harmony_settings,
+ settings,
truncate_by,
&can_truncate);
baseline_total += times.first.InMillisecondsF();
@@ -511,11 +504,11 @@
++truncate_by;
} while (can_truncate);
}
- if (run_baseline) {
+ if (settings.run_baseline) {
printf("Baseline%s(RunTime): %.f ms\n", benchmark.c_str(),
baseline_total);
}
- if (run_experimental) {
+ if (settings.run_experimental) {
if (benchmark.empty()) benchmark = "Experimental";
printf("%s(RunTime): %.f ms\n", benchmark.c_str(),
experimental_total);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.