| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 // Defined when linking against shared lib on Windows. | 6 // Defined when linking against shared lib on Windows. |
| 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) | 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) |
| 8 #define V8_SHARED | 8 #define V8_SHARED |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 temp_isolate->Dispose(); | 453 temp_isolate->Dispose(); |
| 454 delete[] source_buffer; | 454 delete[] source_buffer; |
| 455 delete[] name_buffer; | 455 delete[] name_buffer; |
| 456 return result; | 456 return result; |
| 457 } | 457 } |
| 458 | 458 |
| 459 | 459 |
| 460 // Compile a string within the current v8 context. | 460 // Compile a string within the current v8 context. |
| 461 MaybeLocal<Script> Shell::CompileString( | 461 MaybeLocal<Script> Shell::CompileString( |
| 462 Isolate* isolate, Local<String> source, Local<Value> name, | 462 Isolate* isolate, Local<String> source, Local<Value> name, |
| 463 ScriptCompiler::CompileOptions compile_options, SourceType source_type) { | 463 ScriptCompiler::CompileOptions compile_options) { |
| 464 Local<Context> context(isolate->GetCurrentContext()); | 464 Local<Context> context(isolate->GetCurrentContext()); |
| 465 ScriptOrigin origin(name); | 465 ScriptOrigin origin(name); |
| 466 // TODO(adamk): Make use of compile options for Modules. | 466 if (compile_options == ScriptCompiler::kNoCompileOptions) { |
| 467 if (compile_options == ScriptCompiler::kNoCompileOptions || | |
| 468 source_type == MODULE) { | |
| 469 ScriptCompiler::Source script_source(source, origin); | 467 ScriptCompiler::Source script_source(source, origin); |
| 470 return source_type == SCRIPT | 468 return ScriptCompiler::Compile(context, &script_source, compile_options); |
| 471 ? ScriptCompiler::Compile(context, &script_source, | |
| 472 compile_options) | |
| 473 : ScriptCompiler::CompileModule(context, &script_source, | |
| 474 compile_options); | |
| 475 } | 469 } |
| 476 | 470 |
| 477 ScriptCompiler::CachedData* data = | 471 ScriptCompiler::CachedData* data = |
| 478 CompileForCachedData(source, name, compile_options); | 472 CompileForCachedData(source, name, compile_options); |
| 479 ScriptCompiler::Source cached_source(source, origin, data); | 473 ScriptCompiler::Source cached_source(source, origin, data); |
| 480 if (compile_options == ScriptCompiler::kProduceCodeCache) { | 474 if (compile_options == ScriptCompiler::kProduceCodeCache) { |
| 481 compile_options = ScriptCompiler::kConsumeCodeCache; | 475 compile_options = ScriptCompiler::kConsumeCodeCache; |
| 482 } else if (compile_options == ScriptCompiler::kProduceParserCache) { | 476 } else if (compile_options == ScriptCompiler::kProduceParserCache) { |
| 483 compile_options = ScriptCompiler::kConsumeParserCache; | 477 compile_options = ScriptCompiler::kConsumeParserCache; |
| 484 } else { | 478 } else { |
| 485 DCHECK(false); // A new compile option? | 479 DCHECK(false); // A new compile option? |
| 486 } | 480 } |
| 487 if (data == NULL) compile_options = ScriptCompiler::kNoCompileOptions; | 481 if (data == NULL) compile_options = ScriptCompiler::kNoCompileOptions; |
| 488 DCHECK_EQ(SCRIPT, source_type); | |
| 489 MaybeLocal<Script> result = | 482 MaybeLocal<Script> result = |
| 490 ScriptCompiler::Compile(context, &cached_source, compile_options); | 483 ScriptCompiler::Compile(context, &cached_source, compile_options); |
| 491 CHECK(data == NULL || !data->rejected); | 484 CHECK(data == NULL || !data->rejected); |
| 492 return result; | 485 return result; |
| 493 } | 486 } |
| 494 | 487 |
| 495 | 488 |
| 496 // Executes a string within the current v8 context. | 489 // Executes a string within the current v8 context. |
| 497 bool Shell::ExecuteString(Isolate* isolate, Local<String> source, | 490 bool Shell::ExecuteString(Isolate* isolate, Local<String> source, |
| 498 Local<Value> name, bool print_result, | 491 Local<Value> name, bool print_result, |
| 499 bool report_exceptions, SourceType source_type) { | 492 bool report_exceptions, SourceType source_type) { |
| 500 HandleScope handle_scope(isolate); | 493 HandleScope handle_scope(isolate); |
| 501 TryCatch try_catch(isolate); | 494 TryCatch try_catch(isolate); |
| 502 try_catch.SetVerbose(true); | 495 try_catch.SetVerbose(true); |
| 503 | 496 |
| 504 MaybeLocal<Value> maybe_result; | 497 MaybeLocal<Value> maybe_result; |
| 505 { | 498 { |
| 506 PerIsolateData* data = PerIsolateData::Get(isolate); | 499 PerIsolateData* data = PerIsolateData::Get(isolate); |
| 507 Local<Context> realm = | 500 Local<Context> realm = |
| 508 Local<Context>::New(isolate, data->realms_[data->realm_current_]); | 501 Local<Context>::New(isolate, data->realms_[data->realm_current_]); |
| 509 Context::Scope context_scope(realm); | 502 Context::Scope context_scope(realm); |
| 510 Local<Script> script; | 503 if (source_type == SCRIPT) { |
| 511 if (!Shell::CompileString(isolate, source, name, options.compile_options, | 504 Local<Script> script; |
| 512 source_type).ToLocal(&script)) { | 505 if (!Shell::CompileString(isolate, source, name, options.compile_options) |
| 513 // Print errors that happened during compilation. | 506 .ToLocal(&script)) { |
| 514 if (report_exceptions) ReportException(isolate, &try_catch); | 507 // Print errors that happened during compilation. |
| 515 return false; | 508 if (report_exceptions) ReportException(isolate, &try_catch); |
| 509 return false; |
| 510 } |
| 511 maybe_result = script->Run(realm); |
| 512 } else { |
| 513 DCHECK_EQ(MODULE, source_type); |
| 514 Local<Module> module; |
| 515 ScriptOrigin origin(name); |
| 516 ScriptCompiler::Source script_source(source, origin); |
| 517 // TODO(adamk): Make use of compile options for Modules. |
| 518 if (!ScriptCompiler::CompileModule(isolate, &script_source) |
| 519 .ToLocal(&module)) { |
| 520 // Print errors that happened during compilation. |
| 521 if (report_exceptions) ReportException(isolate, &try_catch); |
| 522 return false; |
| 523 } |
| 524 // This can't fail until we support linking. |
| 525 CHECK(module->Instantiate(realm)); |
| 526 maybe_result = module->Evaluate(realm); |
| 516 } | 527 } |
| 517 maybe_result = script->Run(realm); | |
| 518 EmptyMessageQueues(isolate); | 528 EmptyMessageQueues(isolate); |
| 519 data->realm_current_ = data->realm_switch_; | 529 data->realm_current_ = data->realm_switch_; |
| 520 } | 530 } |
| 521 Local<Value> result; | 531 Local<Value> result; |
| 522 if (!maybe_result.ToLocal(&result)) { | 532 if (!maybe_result.ToLocal(&result)) { |
| 523 DCHECK(try_catch.HasCaught()); | 533 DCHECK(try_catch.HasCaught()); |
| 524 // Print errors that happened during execution. | 534 // Print errors that happened during execution. |
| 525 if (report_exceptions) ReportException(isolate, &try_catch); | 535 if (report_exceptions) ReportException(isolate, &try_catch); |
| 526 return false; | 536 return false; |
| 527 } | 537 } |
| (...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2715 } | 2725 } |
| 2716 | 2726 |
| 2717 } // namespace v8 | 2727 } // namespace v8 |
| 2718 | 2728 |
| 2719 | 2729 |
| 2720 #ifndef GOOGLE3 | 2730 #ifndef GOOGLE3 |
| 2721 int main(int argc, char* argv[]) { | 2731 int main(int argc, char* argv[]) { |
| 2722 return v8::Shell::Main(argc, argv); | 2732 return v8::Shell::Main(argc, argv); |
| 2723 } | 2733 } |
| 2724 #endif | 2734 #endif |
| OLD | NEW |