| Index: src/full-codegen/full-codegen.cc
|
| diff --git a/src/full-codegen/full-codegen.cc b/src/full-codegen/full-codegen.cc
|
| index 1900d955f5cae62a453ba2f0a4e08987bf6ac725..93c1a1817efe376edf695824a1a33e3105897aa2 100644
|
| --- a/src/full-codegen/full-codegen.cc
|
| +++ b/src/full-codegen/full-codegen.cc
|
| @@ -223,18 +223,18 @@ void FullCodeGenerator::PrepareForBailout(Expression* node,
|
| PrepareForBailoutForId(node->id(), state);
|
| }
|
|
|
| -void FullCodeGenerator::CallLoadIC(TypeFeedbackId id) {
|
| +void FullCodeGenerator::CallLoadIC(FeedbackVectorSlot slot, Handle<Object> name,
|
| + TypeFeedbackId id) {
|
| + DCHECK(name->IsName());
|
| + __ Move(LoadDescriptor::NameRegister(), name);
|
| +
|
| + EmitLoadSlot(LoadDescriptor::SlotRegister(), slot);
|
| +
|
| Handle<Code> ic = CodeFactory::LoadIC(isolate()).code();
|
| CallIC(ic, id);
|
| if (FLAG_tf_load_ic_stub) RestoreContext();
|
| }
|
|
|
| -void FullCodeGenerator::CallLoadGlobalIC(TypeofMode typeof_mode,
|
| - TypeFeedbackId id) {
|
| - Handle<Code> ic = CodeFactory::LoadGlobalIC(isolate(), typeof_mode).code();
|
| - CallIC(ic, id);
|
| -}
|
| -
|
| void FullCodeGenerator::CallStoreIC(FeedbackVectorSlot slot,
|
| Handle<Object> name, TypeFeedbackId id) {
|
| DCHECK(name->IsName());
|
| @@ -494,6 +494,19 @@ void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
|
| EmitVariableLoad(expr);
|
| }
|
|
|
| +void FullCodeGenerator::EmitGlobalVariableLoad(VariableProxy* proxy,
|
| + TypeofMode typeof_mode) {
|
| +#ifdef DEBUG
|
| + Variable* var = proxy->var();
|
| + DCHECK(var->IsUnallocated() ||
|
| + (var->IsLookupSlot() && var->mode() == DYNAMIC_GLOBAL));
|
| +#endif
|
| + EmitLoadSlot(LoadGlobalDescriptor::SlotRegister(),
|
| + proxy->VariableFeedbackSlot());
|
| + Handle<Code> ic = CodeFactory::LoadGlobalIC(isolate(), typeof_mode).code();
|
| + CallIC(ic);
|
| +}
|
| +
|
| void FullCodeGenerator::VisitSloppyBlockFunctionStatement(
|
| SloppyBlockFunctionStatement* declaration) {
|
| Visit(declaration->statement());
|
| @@ -1093,10 +1106,7 @@ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
|
| DCHECK(!key->value()->IsSmi());
|
| DCHECK(!prop->IsSuperAccess());
|
|
|
| - __ Move(LoadDescriptor::NameRegister(), key->value());
|
| - __ Move(LoadDescriptor::SlotRegister(),
|
| - SmiFromSlot(prop->PropertyFeedbackSlot()));
|
| - CallLoadIC();
|
| + CallLoadIC(prop->PropertyFeedbackSlot(), key->value());
|
| }
|
|
|
| void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) {
|
| @@ -1112,9 +1122,10 @@ void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) {
|
|
|
| void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) {
|
| SetExpressionPosition(prop);
|
| +
|
| + EmitLoadSlot(LoadDescriptor::SlotRegister(), prop->PropertyFeedbackSlot());
|
| +
|
| Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code();
|
| - __ Move(LoadDescriptor::SlotRegister(),
|
| - SmiFromSlot(prop->PropertyFeedbackSlot()));
|
| CallIC(ic);
|
| RestoreContext();
|
| }
|
| @@ -1558,9 +1569,7 @@ void FullCodeGenerator::VisitClassLiteral(ClassLiteral* lit) {
|
|
|
| // Load the "prototype" from the constructor.
|
| __ Move(LoadDescriptor::ReceiverRegister(), result_register());
|
| - __ LoadRoot(LoadDescriptor::NameRegister(), Heap::kprototype_stringRootIndex);
|
| - __ Move(LoadDescriptor::SlotRegister(), SmiFromSlot(lit->PrototypeSlot()));
|
| - CallLoadIC();
|
| + CallLoadIC(lit->PrototypeSlot(), isolate()->factory()->prototype_string());
|
| PrepareForBailoutForId(lit->PrototypeId(), BailoutState::TOS_REGISTER);
|
| PushOperand(result_register());
|
|
|
|
|