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

Unified Diff: src/d8.cc

Issue 902263002: Enable compiling mjsunit tests as ES6 modules (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « src/d8.h ('k') | test/cctest/cctest.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/d8.cc
diff --git a/src/d8.cc b/src/d8.cc
index 943855bcedc6b85f757a14255394e707816622b8..b8e2f24f12f7c8f01633d995acc0490c74c79c7d 100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -221,14 +221,17 @@ ScriptCompiler::CachedData* CompileForCachedData(
// Compile a string within the current v8 context.
-Local<UnboundScript> Shell::CompileString(
+Local<Script> Shell::CompileString(
Isolate* isolate, Local<String> source, Local<Value> name,
- ScriptCompiler::CompileOptions compile_options) {
+ ScriptCompiler::CompileOptions compile_options, SourceType source_type) {
ScriptOrigin origin(name);
if (compile_options == ScriptCompiler::kNoCompileOptions) {
ScriptCompiler::Source script_source(source, origin);
- return ScriptCompiler::CompileUnbound(isolate, &script_source,
- compile_options);
+ return source_type == SCRIPT
+ ? ScriptCompiler::Compile(isolate, &script_source,
+ compile_options)
+ : ScriptCompiler::CompileModule(isolate, &script_source,
+ compile_options);
}
ScriptCompiler::CachedData* data =
@@ -242,17 +245,17 @@ Local<UnboundScript> Shell::CompileString(
DCHECK(false); // A new compile option?
}
if (data == NULL) compile_options = ScriptCompiler::kNoCompileOptions;
- return ScriptCompiler::CompileUnbound(isolate, &cached_source,
- compile_options);
+ return source_type == SCRIPT
+ ? ScriptCompiler::Compile(isolate, &cached_source, compile_options)
+ : ScriptCompiler::CompileModule(isolate, &cached_source,
+ compile_options);
}
// Executes a string within the current v8 context.
-bool Shell::ExecuteString(Isolate* isolate,
- Handle<String> source,
- Handle<Value> name,
- bool print_result,
- bool report_exceptions) {
+bool Shell::ExecuteString(Isolate* isolate, Handle<String> source,
+ Handle<Value> name, bool print_result,
+ bool report_exceptions, SourceType source_type) {
#ifndef V8_SHARED
bool FLAG_debugger = i::FLAG_debugger;
#else
@@ -266,61 +269,61 @@ bool Shell::ExecuteString(Isolate* isolate,
try_catch.SetVerbose(true);
}
- Handle<UnboundScript> script =
- Shell::CompileString(isolate, source, name, options.compile_options);
- if (script.IsEmpty()) {
- // Print errors that happened during compilation.
- if (report_exceptions && !FLAG_debugger)
- ReportException(isolate, &try_catch);
- return false;
- } else {
+ Handle<Value> result;
+ {
PerIsolateData* data = PerIsolateData::Get(isolate);
Local<Context> realm =
Local<Context>::New(isolate, data->realms_[data->realm_current_]);
- realm->Enter();
- Handle<Value> result = script->BindToCurrentContext()->Run();
- realm->Exit();
- data->realm_current_ = data->realm_switch_;
- if (result.IsEmpty()) {
- DCHECK(try_catch.HasCaught());
- // Print errors that happened during execution.
+ Context::Scope context_scope(realm);
+ Handle<Script> script = Shell::CompileString(
+ isolate, source, name, options.compile_options, source_type);
+ if (script.IsEmpty()) {
+ // Print errors that happened during compilation.
if (report_exceptions && !FLAG_debugger)
ReportException(isolate, &try_catch);
return false;
- } else {
- DCHECK(!try_catch.HasCaught());
- if (print_result) {
-#if !defined(V8_SHARED)
- if (options.test_shell) {
-#endif
- if (!result->IsUndefined()) {
- // If all went well and the result wasn't undefined then print
- // the returned value.
- v8::String::Utf8Value str(result);
- fwrite(*str, sizeof(**str), str.length(), stdout);
- printf("\n");
- }
+ }
+ result = script->Run();
+ data->realm_current_ = data->realm_switch_;
+ }
+ if (result.IsEmpty()) {
+ DCHECK(try_catch.HasCaught());
+ // Print errors that happened during execution.
+ if (report_exceptions && !FLAG_debugger)
+ ReportException(isolate, &try_catch);
+ return false;
+ }
+ DCHECK(!try_catch.HasCaught());
+ if (print_result) {
#if !defined(V8_SHARED)
- } else {
- v8::TryCatch try_catch;
- v8::Local<v8::Context> context =
- v8::Local<v8::Context>::New(isolate, utility_context_);
- v8::Context::Scope context_scope(context);
- Handle<Object> global = context->Global();
- Handle<Value> fun =
- global->Get(String::NewFromUtf8(isolate, "Stringify"));
- Handle<Value> argv[1] = { result };
- Handle<Value> s = Handle<Function>::Cast(fun)->Call(global, 1, argv);
- if (try_catch.HasCaught()) return true;
- v8::String::Utf8Value str(s);
- fwrite(*str, sizeof(**str), str.length(), stdout);
- printf("\n");
- }
+ if (options.test_shell) {
#endif
+ if (!result->IsUndefined()) {
+ // If all went well and the result wasn't undefined then print
+ // the returned value.
+ v8::String::Utf8Value str(result);
+ fwrite(*str, sizeof(**str), str.length(), stdout);
+ printf("\n");
}
- return true;
+#if !defined(V8_SHARED)
+ } else {
+ v8::TryCatch try_catch;
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(isolate, utility_context_);
+ v8::Context::Scope context_scope(context);
+ Handle<Object> global = context->Global();
+ Handle<Value> fun =
+ global->Get(String::NewFromUtf8(isolate, "Stringify"));
+ Handle<Value> argv[1] = {result};
+ Handle<Value> s = Handle<Function>::Cast(fun)->Call(global, 1, argv);
+ if (try_catch.HasCaught()) return true;
+ v8::String::Utf8Value str(s);
+ fwrite(*str, sizeof(**str), str.length(), stdout);
+ printf("\n");
}
+#endif
}
+ return true;
}
@@ -1189,6 +1192,7 @@ void SourceGroup::Execute(Isolate* isolate) {
bool exception_was_thrown = false;
for (int i = begin_offset_; i < end_offset_; ++i) {
const char* arg = argv_[i];
+ Shell::SourceType source_type = Shell::SCRIPT;
if (strcmp(arg, "-e") == 0 && i + 1 < end_offset_) {
// Execute argument given to -e option directly.
HandleScope handle_scope(isolate);
@@ -1199,21 +1203,28 @@ void SourceGroup::Execute(Isolate* isolate) {
break;
}
++i;
+ continue;
+ } else if (strcmp(arg, "--module") == 0 && i + 1 < end_offset_) {
+ // Treat the next file as a module.
+ source_type = Shell::MODULE;
+ arg = argv_[++i];
} else if (arg[0] == '-') {
// Ignore other options. They have been parsed already.
- } else {
- // Use all other arguments as names of files to load and run.
- HandleScope handle_scope(isolate);
- Handle<String> file_name = String::NewFromUtf8(isolate, arg);
- Handle<String> source = ReadFile(isolate, arg);
- if (source.IsEmpty()) {
- printf("Error reading '%s'\n", arg);
- Shell::Exit(1);
- }
- if (!Shell::ExecuteString(isolate, source, file_name, false, true)) {
- exception_was_thrown = true;
- break;
- }
+ continue;
+ }
+
+ // Use all other arguments as names of files to load and run.
+ HandleScope handle_scope(isolate);
+ Handle<String> file_name = String::NewFromUtf8(isolate, arg);
+ Handle<String> source = ReadFile(isolate, arg);
+ if (source.IsEmpty()) {
+ printf("Error reading '%s'\n", arg);
+ Shell::Exit(1);
+ }
+ if (!Shell::ExecuteString(isolate, source, file_name, false, true,
+ source_type)) {
+ exception_was_thrown = true;
+ break;
}
}
if (exception_was_thrown != Shell::options.expected_to_throw) {
@@ -1398,6 +1409,8 @@ bool Shell::SetOptions(int argc, char* argv[]) {
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
+ bool enable_harmony_modules = false;
+
// Set up isolated source groups.
options.isolate_sources = new SourceGroup[options.num_isolates];
SourceGroup* current = options.isolate_sources;
@@ -1408,6 +1421,9 @@ bool Shell::SetOptions(int argc, char* argv[]) {
current->End(i);
current++;
current->Begin(argv, i + 1);
+ } else if (strcmp(str, "--module") == 0) {
+ // Pass on to SourceGroup, which understands this option.
+ enable_harmony_modules = true;
} else if (strncmp(argv[i], "--", 2) == 0) {
printf("Warning: unknown flag %s.\nTry --help for options\n", argv[i]);
}
@@ -1418,6 +1434,10 @@ bool Shell::SetOptions(int argc, char* argv[]) {
SetFlagsFromString("--nologfile_per_isolate");
}
+ if (enable_harmony_modules) {
+ SetFlagsFromString("--harmony-modules");
+ }
+
return true;
}
« no previous file with comments | « src/d8.h ('k') | test/cctest/cctest.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698