Index: src/d8.cc |
diff --git a/src/d8.cc b/src/d8.cc |
index a8af9de2d17a2b11359bc1d798a27090ba3bb598..a9c4aa68a9783757c760e3385c1b115e07a52f66 100644 |
--- a/src/d8.cc |
+++ b/src/d8.cc |
@@ -460,18 +460,12 @@ ScriptCompiler::CachedData* CompileForCachedData( |
// Compile a string within the current v8 context. |
MaybeLocal<Script> Shell::CompileString( |
Isolate* isolate, Local<String> source, Local<Value> name, |
- ScriptCompiler::CompileOptions compile_options, SourceType source_type) { |
+ ScriptCompiler::CompileOptions compile_options) { |
Local<Context> context(isolate->GetCurrentContext()); |
ScriptOrigin origin(name); |
- // TODO(adamk): Make use of compile options for Modules. |
- if (compile_options == ScriptCompiler::kNoCompileOptions || |
- source_type == MODULE) { |
+ if (compile_options == ScriptCompiler::kNoCompileOptions) { |
ScriptCompiler::Source script_source(source, origin); |
- return source_type == SCRIPT |
- ? ScriptCompiler::Compile(context, &script_source, |
- compile_options) |
- : ScriptCompiler::CompileModule(context, &script_source, |
- compile_options); |
+ return ScriptCompiler::Compile(context, &script_source, compile_options); |
} |
ScriptCompiler::CachedData* data = |
@@ -485,7 +479,6 @@ MaybeLocal<Script> Shell::CompileString( |
DCHECK(false); // A new compile option? |
} |
if (data == NULL) compile_options = ScriptCompiler::kNoCompileOptions; |
- DCHECK_EQ(SCRIPT, source_type); |
MaybeLocal<Script> result = |
ScriptCompiler::Compile(context, &cached_source, compile_options); |
CHECK(data == NULL || !data->rejected); |
@@ -507,14 +500,31 @@ bool Shell::ExecuteString(Isolate* isolate, Local<String> source, |
Local<Context> realm = |
Local<Context>::New(isolate, data->realms_[data->realm_current_]); |
Context::Scope context_scope(realm); |
- Local<Script> script; |
- if (!Shell::CompileString(isolate, source, name, options.compile_options, |
- source_type).ToLocal(&script)) { |
- // Print errors that happened during compilation. |
- if (report_exceptions) ReportException(isolate, &try_catch); |
- return false; |
+ if (source_type == SCRIPT) { |
+ Local<Script> script; |
+ if (!Shell::CompileString(isolate, source, name, options.compile_options) |
+ .ToLocal(&script)) { |
+ // Print errors that happened during compilation. |
+ if (report_exceptions) ReportException(isolate, &try_catch); |
+ return false; |
+ } |
+ maybe_result = script->Run(realm); |
+ } else { |
+ DCHECK_EQ(MODULE, source_type); |
+ Local<Module> module; |
+ ScriptOrigin origin(name); |
+ ScriptCompiler::Source script_source(source, origin); |
+ // TODO(adamk): Make use of compile options for Modules. |
+ if (!ScriptCompiler::CompileModule(isolate, &script_source) |
+ .ToLocal(&module)) { |
+ // Print errors that happened during compilation. |
+ if (report_exceptions) ReportException(isolate, &try_catch); |
+ return false; |
+ } |
+ // This can't fail until we support linking. |
+ CHECK(module->Instantiate(realm)); |
+ maybe_result = module->Evaluate(realm); |
} |
- maybe_result = script->Run(realm); |
EmptyMessageQueues(isolate); |
data->realm_current_ = data->realm_switch_; |
} |