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

Unified Diff: src/interpreter/bytecode-generator.cc

Issue 2634283003: [TypeFeedbackVector] DeclareGlobals needs a literals array (Closed)
Patch Set: Don't exploit the literals array yet. Created 3 years, 11 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/full-codegen/x64/full-codegen-x64.cc ('k') | src/runtime/runtime-scopes.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/interpreter/bytecode-generator.cc
diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc
index a21e978965ef0dcb8e1786d4004c213e39d656fb..56fa636d303584532fb59a51b42064e0a4948bfb 100644
--- a/src/interpreter/bytecode-generator.cc
+++ b/src/interpreter/bytecode-generator.cc
@@ -498,9 +498,10 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
has_constant_pool_entry_(false) {}
void AddFunctionDeclaration(Handle<String> name, FeedbackVectorSlot slot,
+ FeedbackVectorSlot literal_slot,
FunctionLiteral* func) {
DCHECK(!slot.IsInvalid());
- declarations_.push_back(Declaration(name, slot, func));
+ declarations_.push_back(Declaration(name, slot, literal_slot, func));
}
void AddUndefinedDeclaration(Handle<String> name, FeedbackVectorSlot slot) {
@@ -512,7 +513,7 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
DCHECK(has_constant_pool_entry_);
int array_index = 0;
Handle<FixedArray> data = info->isolate()->factory()->NewFixedArray(
- static_cast<int>(declarations_.size() * 3), TENURED);
+ static_cast<int>(declarations_.size() * 4), TENURED);
for (const Declaration& declaration : declarations_) {
FunctionLiteral* func = declaration.func;
Handle<Object> initial_value;
@@ -529,6 +530,14 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
data->set(array_index++, *declaration.name);
data->set(array_index++, Smi::FromInt(declaration.slot.ToInt()));
+ Object* undefined_or_literal_slot;
+ if (declaration.literal_slot.IsInvalid()) {
+ undefined_or_literal_slot = info->isolate()->heap()->undefined_value();
+ } else {
+ undefined_or_literal_slot =
+ Smi::FromInt(declaration.literal_slot.ToInt());
+ }
+ data->set(array_index++, undefined_or_literal_slot);
data->set(array_index++, *initial_value);
}
return data;
@@ -552,11 +561,18 @@ class BytecodeGenerator::GlobalDeclarationsBuilder final : public ZoneObject {
struct Declaration {
Declaration() : slot(FeedbackVectorSlot::Invalid()), func(nullptr) {}
Declaration(Handle<String> name, FeedbackVectorSlot slot,
+ FeedbackVectorSlot literal_slot, FunctionLiteral* func)
+ : name(name), slot(slot), literal_slot(literal_slot), func(func) {}
+ Declaration(Handle<String> name, FeedbackVectorSlot slot,
FunctionLiteral* func)
- : name(name), slot(slot), func(func) {}
+ : name(name),
+ slot(slot),
+ literal_slot(FeedbackVectorSlot::Invalid()),
+ func(func) {}
Handle<String> name;
FeedbackVectorSlot slot;
+ FeedbackVectorSlot literal_slot;
FunctionLiteral* func;
};
ZoneVector<Declaration> declarations_;
@@ -889,8 +905,9 @@ void BytecodeGenerator::VisitFunctionDeclaration(FunctionDeclaration* decl) {
switch (variable->location()) {
case VariableLocation::UNALLOCATED: {
FeedbackVectorSlot slot = decl->proxy()->VariableFeedbackSlot();
- globals_builder()->AddFunctionDeclaration(variable->name(), slot,
- decl->fun());
+ globals_builder()->AddFunctionDeclaration(
+ variable->name(), slot, decl->fun()->LiteralFeedbackSlot(),
+ decl->fun());
break;
}
case VariableLocation::PARAMETER:
« no previous file with comments | « src/full-codegen/x64/full-codegen-x64.cc ('k') | src/runtime/runtime-scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698