| Index: src/interpreter/bytecode-generator.cc
|
| diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc
|
| index 9b31c13107e4a94c30c9f9ad4ee6ef9e64db9939..141d9ed3b68f3b2db05ec14c978d8ddaf50e11f1 100644
|
| --- a/src/interpreter/bytecode-generator.cc
|
| +++ b/src/interpreter/bytecode-generator.cc
|
| @@ -491,10 +491,11 @@ class BytecodeGenerator::TestResultScope final : public ExpressionResultScope {
|
| // Used to build a list of global declaration initial value pairs.
|
| class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
|
| public:
|
| - explicit GlobalDeclarationsBuilder(Zone* zone)
|
| + GlobalDeclarationsBuilder(Zone* zone, LazyCompilationMode mode)
|
| : declarations_(0, zone),
|
| constant_pool_entry_(0),
|
| - has_constant_pool_entry_(false) {}
|
| + has_constant_pool_entry_(false),
|
| + compilation_mode_(mode) {}
|
|
|
| void AddFunctionDeclaration(Handle<String> name, FeedbackVectorSlot slot,
|
| FunctionLiteral* func) {
|
| @@ -518,8 +519,8 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
|
| if (func == nullptr) {
|
| initial_value = info->isolate()->factory()->undefined_value();
|
| } else {
|
| - initial_value =
|
| - Compiler::GetSharedFunctionInfo(func, info->script(), info);
|
| + initial_value = Compiler::GetSharedFunctionInfo(
|
| + func, info->script(), info, compilation_mode_);
|
| }
|
|
|
| // Return a null handle if any initial values can't be created. Caller
|
| @@ -561,9 +562,11 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
|
| ZoneVector<Declaration> declarations_;
|
| size_t constant_pool_entry_;
|
| bool has_constant_pool_entry_;
|
| + LazyCompilationMode compilation_mode_;
|
| };
|
|
|
| -BytecodeGenerator::BytecodeGenerator(CompilationInfo* info)
|
| +BytecodeGenerator::BytecodeGenerator(CompilationInfo* info,
|
| + LazyCompilationMode mode)
|
| : zone_(info->zone()),
|
| builder_(new (zone()) BytecodeArrayBuilder(
|
| info->isolate(), info->zone(), info->num_parameters_including_this(),
|
| @@ -572,7 +575,9 @@ BytecodeGenerator::BytecodeGenerator(CompilationInfo* info)
|
| info->SourcePositionRecordingMode())),
|
| info_(info),
|
| scope_(info->scope()),
|
| - globals_builder_(new (zone()) GlobalDeclarationsBuilder(info->zone())),
|
| + compilation_mode_(mode),
|
| + globals_builder_(new (zone())
|
| + GlobalDeclarationsBuilder(info->zone(), mode)),
|
| global_declarations_(0, info->zone()),
|
| function_literals_(0, info->zone()),
|
| native_function_literals_(0, info->zone()),
|
| @@ -611,8 +616,8 @@ void BytecodeGenerator::AllocateDeferredConstants() {
|
| // Find or build shared function infos.
|
| for (std::pair<FunctionLiteral*, size_t> literal : function_literals_) {
|
| FunctionLiteral* expr = literal.first;
|
| - Handle<SharedFunctionInfo> shared_info =
|
| - Compiler::GetSharedFunctionInfo(expr, info()->script(), info());
|
| + Handle<SharedFunctionInfo> shared_info = Compiler::GetSharedFunctionInfo(
|
| + expr, info()->script(), info(), compilation_mode_);
|
| if (shared_info.is_null()) return SetStackOverflow();
|
| builder()->InsertConstantPoolEntryAt(literal.second, shared_info);
|
| }
|
| @@ -949,7 +954,8 @@ void BytecodeGenerator::VisitDeclarations(Declaration::List* declarations) {
|
|
|
| // Push and reset globals builder.
|
| global_declarations_.push_back(globals_builder());
|
| - globals_builder_ = new (zone()) GlobalDeclarationsBuilder(zone());
|
| + globals_builder_ =
|
| + new (zone()) GlobalDeclarationsBuilder(zone(), compilation_mode_);
|
| }
|
|
|
| void BytecodeGenerator::VisitStatements(ZoneList<Statement*>* statements) {
|
|
|