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

Side by Side Diff: src/ia32/full-codegen-ia32.cc

Issue 1135243004: [es6] Support super.property in eval and arrow functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Code review cleanup Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « src/full-codegen.h ('k') | src/mips/full-codegen-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_IA32 7 #if V8_TARGET_ARCH_IA32
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 } else if (FLAG_debug_code) { 231 } else if (FLAG_debug_code) {
232 Label done; 232 Label done;
233 __ JumpIfInNewSpace(esi, eax, &done, Label::kNear); 233 __ JumpIfInNewSpace(esi, eax, &done, Label::kNear);
234 __ Abort(kExpectedNewSpaceObject); 234 __ Abort(kExpectedNewSpaceObject);
235 __ bind(&done); 235 __ bind(&done);
236 } 236 }
237 } 237 }
238 } 238 }
239 } 239 }
240 240
241 Variable* home_object_var = scope()->home_object_var();
242 if (home_object_var != nullptr) {
243 __ push(edi);
244 }
245
241 ArgumentsAccessStub::HasNewTarget has_new_target = 246 ArgumentsAccessStub::HasNewTarget has_new_target =
242 IsSubclassConstructor(info->function()->kind()) 247 IsSubclassConstructor(info->function()->kind())
243 ? ArgumentsAccessStub::HAS_NEW_TARGET 248 ? ArgumentsAccessStub::HAS_NEW_TARGET
244 : ArgumentsAccessStub::NO_NEW_TARGET; 249 : ArgumentsAccessStub::NO_NEW_TARGET;
245 250
246 // Possibly allocate RestParameters 251 // Possibly allocate RestParameters
247 int rest_index; 252 int rest_index;
248 Variable* rest_param = scope()->rest_parameter(&rest_index); 253 Variable* rest_param = scope()->rest_parameter(&rest_index);
249 if (rest_param) { 254 if (rest_param) {
250 Comment cmnt(masm_, "[ Allocate rest parameter array"); 255 Comment cmnt(masm_, "[ Allocate rest parameter array");
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } else { 301 } else {
297 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; 302 type = ArgumentsAccessStub::NEW_SLOPPY_FAST;
298 } 303 }
299 304
300 ArgumentsAccessStub stub(isolate(), type, has_new_target); 305 ArgumentsAccessStub stub(isolate(), type, has_new_target);
301 __ CallStub(&stub); 306 __ CallStub(&stub);
302 307
303 SetVar(arguments, eax, ebx, edx); 308 SetVar(arguments, eax, ebx, edx);
304 } 309 }
305 310
311 // Possibly set up a local binding to the [[HomeObject]].
312 if (home_object_var != nullptr) {
313 Comment cmnt(masm_, "[ Home object");
314 __ pop(LoadDescriptor::ReceiverRegister());
315 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
316 __ mov(LoadDescriptor::NameRegister(), Immediate(home_object_symbol));
317 __ mov(LoadDescriptor::SlotRegister(),
318 Immediate(SmiFromSlot(function()->HomeObjectFeedbackSlot())));
319 CallLoadIC(NOT_CONTEXTUAL);
320
321 SetVar(home_object_var, eax, ebx, edx);
322 }
323
306 if (FLAG_trace) { 324 if (FLAG_trace) {
307 __ CallRuntime(Runtime::kTraceEnter, 0); 325 __ CallRuntime(Runtime::kTraceEnter, 0);
308 } 326 }
309 327
310 // Visit the declarations and body unless there is an illegal 328 // Visit the declarations and body unless there is an illegal
311 // redeclaration. 329 // redeclaration.
312 if (scope()->HasIllegalRedeclaration()) { 330 if (scope()->HasIllegalRedeclaration()) {
313 Comment cmnt(masm_, "[ Declarations"); 331 Comment cmnt(masm_, "[ Declarations");
314 scope()->VisitIllegalRedeclaration(this); 332 scope()->VisitIllegalRedeclaration(this);
315 333
(...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 context()->Plug(eax); 1262 context()->Plug(eax);
1245 } 1263 }
1246 1264
1247 1265
1248 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { 1266 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
1249 Comment cmnt(masm_, "[ VariableProxy"); 1267 Comment cmnt(masm_, "[ VariableProxy");
1250 EmitVariableLoad(expr); 1268 EmitVariableLoad(expr);
1251 } 1269 }
1252 1270
1253 1271
1254 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) {
1255 Comment cnmt(masm_, "[ SuperReference ");
1256
1257 __ mov(LoadDescriptor::ReceiverRegister(),
1258 Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
1259
1260 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
1261 __ mov(LoadDescriptor::NameRegister(), home_object_symbol);
1262
1263 __ mov(LoadDescriptor::SlotRegister(),
1264 Immediate(SmiFromSlot(expr->HomeObjectFeedbackSlot())));
1265 CallLoadIC(NOT_CONTEXTUAL);
1266
1267 __ cmp(eax, isolate()->factory()->undefined_value());
1268 Label done;
1269 __ j(not_equal, &done);
1270 __ CallRuntime(Runtime::kThrowNonMethodError, 0);
1271 __ bind(&done);
1272 }
1273
1274
1275 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, 1272 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer,
1276 int offset) { 1273 int offset) {
1277 if (NeedsHomeObject(initializer)) { 1274 if (NeedsHomeObject(initializer)) {
1278 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0)); 1275 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0));
1279 __ mov(StoreDescriptor::NameRegister(), 1276 __ mov(StoreDescriptor::NameRegister(),
1280 Immediate(isolate()->factory()->home_object_symbol())); 1277 Immediate(isolate()->factory()->home_object_symbol()));
1281 __ mov(StoreDescriptor::ValueRegister(), 1278 __ mov(StoreDescriptor::ValueRegister(),
1282 Operand(esp, offset * kPointerSize)); 1279 Operand(esp, offset * kPointerSize));
1283 CallStoreIC(); 1280 CallStoreIC();
1284 } 1281 }
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
1891 Property* property = expr->target()->AsProperty(); 1888 Property* property = expr->target()->AsProperty();
1892 LhsKind assign_type = GetAssignType(property); 1889 LhsKind assign_type = GetAssignType(property);
1893 1890
1894 // Evaluate LHS expression. 1891 // Evaluate LHS expression.
1895 switch (assign_type) { 1892 switch (assign_type) {
1896 case VARIABLE: 1893 case VARIABLE:
1897 // Nothing to do here. 1894 // Nothing to do here.
1898 break; 1895 break;
1899 case NAMED_SUPER_PROPERTY: 1896 case NAMED_SUPER_PROPERTY:
1900 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1897 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1901 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1898 VisitForAccumulatorValue(
1899 property->obj()->AsSuperReference()->home_object_var());
1902 __ push(result_register()); 1900 __ push(result_register());
1903 if (expr->is_compound()) { 1901 if (expr->is_compound()) {
1904 __ push(MemOperand(esp, kPointerSize)); 1902 __ push(MemOperand(esp, kPointerSize));
1905 __ push(result_register()); 1903 __ push(result_register());
1906 } 1904 }
1907 break; 1905 break;
1908 case NAMED_PROPERTY: 1906 case NAMED_PROPERTY:
1909 if (expr->is_compound()) { 1907 if (expr->is_compound()) {
1910 // We need the receiver both on the stack and in the register. 1908 // We need the receiver both on the stack and in the register.
1911 VisitForStackValue(property->obj()); 1909 VisitForStackValue(property->obj());
1912 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 1910 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
1913 } else { 1911 } else {
1914 VisitForStackValue(property->obj()); 1912 VisitForStackValue(property->obj());
1915 } 1913 }
1916 break; 1914 break;
1917 case KEYED_SUPER_PROPERTY: 1915 case KEYED_SUPER_PROPERTY:
1918 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1916 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1919 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1917 VisitForStackValue(
1920 __ Push(result_register()); 1918 property->obj()->AsSuperReference()->home_object_var());
1921 VisitForAccumulatorValue(property->key()); 1919 VisitForAccumulatorValue(property->key());
1922 __ Push(result_register()); 1920 __ Push(result_register());
1923 if (expr->is_compound()) { 1921 if (expr->is_compound()) {
1924 __ push(MemOperand(esp, 2 * kPointerSize)); 1922 __ push(MemOperand(esp, 2 * kPointerSize));
1925 __ push(MemOperand(esp, 2 * kPointerSize)); 1923 __ push(MemOperand(esp, 2 * kPointerSize));
1926 __ push(result_register()); 1924 __ push(result_register());
1927 } 1925 }
1928 break; 1926 break;
1929 case KEYED_PROPERTY: { 1927 case KEYED_PROPERTY: {
1930 if (expr->is_compound()) { 1928 if (expr->is_compound()) {
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
2533 __ Move(StoreDescriptor::ReceiverRegister(), eax); 2531 __ Move(StoreDescriptor::ReceiverRegister(), eax);
2534 __ pop(StoreDescriptor::ValueRegister()); // Restore value. 2532 __ pop(StoreDescriptor::ValueRegister()); // Restore value.
2535 __ mov(StoreDescriptor::NameRegister(), 2533 __ mov(StoreDescriptor::NameRegister(),
2536 prop->key()->AsLiteral()->value()); 2534 prop->key()->AsLiteral()->value());
2537 CallStoreIC(); 2535 CallStoreIC();
2538 break; 2536 break;
2539 } 2537 }
2540 case NAMED_SUPER_PROPERTY: { 2538 case NAMED_SUPER_PROPERTY: {
2541 __ push(eax); 2539 __ push(eax);
2542 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2540 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2543 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2541 VisitForAccumulatorValue(
2542 prop->obj()->AsSuperReference()->home_object_var());
2544 // stack: value, this; eax: home_object 2543 // stack: value, this; eax: home_object
2545 Register scratch = ecx; 2544 Register scratch = ecx;
2546 Register scratch2 = edx; 2545 Register scratch2 = edx;
2547 __ mov(scratch, result_register()); // home_object 2546 __ mov(scratch, result_register()); // home_object
2548 __ mov(eax, MemOperand(esp, kPointerSize)); // value 2547 __ mov(eax, MemOperand(esp, kPointerSize)); // value
2549 __ mov(scratch2, MemOperand(esp, 0)); // this 2548 __ mov(scratch2, MemOperand(esp, 0)); // this
2550 __ mov(MemOperand(esp, kPointerSize), scratch2); // this 2549 __ mov(MemOperand(esp, kPointerSize), scratch2); // this
2551 __ mov(MemOperand(esp, 0), scratch); // home_object 2550 __ mov(MemOperand(esp, 0), scratch); // home_object
2552 // stack: this, home_object. eax: value 2551 // stack: this, home_object. eax: value
2553 EmitNamedSuperPropertyStore(prop); 2552 EmitNamedSuperPropertyStore(prop);
2554 break; 2553 break;
2555 } 2554 }
2556 case KEYED_SUPER_PROPERTY: { 2555 case KEYED_SUPER_PROPERTY: {
2557 __ push(eax); 2556 __ push(eax);
2558 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2557 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2559 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2558 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
2560 __ push(result_register());
2561 VisitForAccumulatorValue(prop->key()); 2559 VisitForAccumulatorValue(prop->key());
2562 Register scratch = ecx; 2560 Register scratch = ecx;
2563 Register scratch2 = edx; 2561 Register scratch2 = edx;
2564 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value 2562 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value
2565 // stack: value, this, home_object; eax: key, edx: value 2563 // stack: value, this, home_object; eax: key, edx: value
2566 __ mov(scratch, MemOperand(esp, kPointerSize)); // this 2564 __ mov(scratch, MemOperand(esp, kPointerSize)); // this
2567 __ mov(MemOperand(esp, 2 * kPointerSize), scratch); 2565 __ mov(MemOperand(esp, 2 * kPointerSize), scratch);
2568 __ mov(scratch, MemOperand(esp, 0)); // home_object 2566 __ mov(scratch, MemOperand(esp, 0)); // home_object
2569 __ mov(MemOperand(esp, kPointerSize), scratch); 2567 __ mov(MemOperand(esp, kPointerSize), scratch);
2570 __ mov(MemOperand(esp, 0), eax); 2568 __ mov(MemOperand(esp, 0), eax);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2761 Comment cmnt(masm_, "[ Property"); 2759 Comment cmnt(masm_, "[ Property");
2762 Expression* key = expr->key(); 2760 Expression* key = expr->key();
2763 2761
2764 if (key->IsPropertyName()) { 2762 if (key->IsPropertyName()) {
2765 if (!expr->IsSuperAccess()) { 2763 if (!expr->IsSuperAccess()) {
2766 VisitForAccumulatorValue(expr->obj()); 2764 VisitForAccumulatorValue(expr->obj());
2767 __ Move(LoadDescriptor::ReceiverRegister(), result_register()); 2765 __ Move(LoadDescriptor::ReceiverRegister(), result_register());
2768 EmitNamedPropertyLoad(expr); 2766 EmitNamedPropertyLoad(expr);
2769 } else { 2767 } else {
2770 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2768 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2771 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2769 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2772 __ push(result_register());
2773 EmitNamedSuperPropertyLoad(expr); 2770 EmitNamedSuperPropertyLoad(expr);
2774 } 2771 }
2775 } else { 2772 } else {
2776 if (!expr->IsSuperAccess()) { 2773 if (!expr->IsSuperAccess()) {
2777 VisitForStackValue(expr->obj()); 2774 VisitForStackValue(expr->obj());
2778 VisitForAccumulatorValue(expr->key()); 2775 VisitForAccumulatorValue(expr->key());
2779 __ pop(LoadDescriptor::ReceiverRegister()); // Object. 2776 __ pop(LoadDescriptor::ReceiverRegister()); // Object.
2780 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key. 2777 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key.
2781 EmitKeyedPropertyLoad(expr); 2778 EmitKeyedPropertyLoad(expr);
2782 } else { 2779 } else {
2783 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2780 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2784 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2781 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2785 __ push(result_register());
2786 VisitForStackValue(expr->key()); 2782 VisitForStackValue(expr->key());
2787 EmitKeyedSuperPropertyLoad(expr); 2783 EmitKeyedSuperPropertyLoad(expr);
2788 } 2784 }
2789 } 2785 }
2790 PrepareForBailoutForId(expr->LoadId(), TOS_REG); 2786 PrepareForBailoutForId(expr->LoadId(), TOS_REG);
2791 context()->Plug(eax); 2787 context()->Plug(eax);
2792 } 2788 }
2793 2789
2794 2790
2795 void FullCodeGenerator::CallIC(Handle<Code> code, 2791 void FullCodeGenerator::CallIC(Handle<Code> code,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2834 Expression* callee = expr->expression(); 2830 Expression* callee = expr->expression();
2835 DCHECK(callee->IsProperty()); 2831 DCHECK(callee->IsProperty());
2836 Property* prop = callee->AsProperty(); 2832 Property* prop = callee->AsProperty();
2837 DCHECK(prop->IsSuperAccess()); 2833 DCHECK(prop->IsSuperAccess());
2838 2834
2839 SetSourcePosition(prop->position()); 2835 SetSourcePosition(prop->position());
2840 Literal* key = prop->key()->AsLiteral(); 2836 Literal* key = prop->key()->AsLiteral();
2841 DCHECK(!key->value()->IsSmi()); 2837 DCHECK(!key->value()->IsSmi());
2842 // Load the function from the receiver. 2838 // Load the function from the receiver.
2843 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2839 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2844 EmitLoadHomeObject(super_ref); 2840 VisitForStackValue(super_ref->home_object_var());
2845 __ push(eax);
2846 VisitForAccumulatorValue(super_ref->this_var()); 2841 VisitForAccumulatorValue(super_ref->this_var());
2847 __ push(eax); 2842 __ push(eax);
2848 __ push(eax); 2843 __ push(eax);
2849 __ push(Operand(esp, kPointerSize * 2)); 2844 __ push(Operand(esp, kPointerSize * 2));
2850 __ push(Immediate(key->value())); 2845 __ push(Immediate(key->value()));
2851 // Stack here: 2846 // Stack here:
2852 // - home_object 2847 // - home_object
2853 // - this (receiver) 2848 // - this (receiver)
2854 // - this (receiver) <-- LoadFromSuper will pop here and below. 2849 // - this (receiver) <-- LoadFromSuper will pop here and below.
2855 // - home_object 2850 // - home_object
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2891 2886
2892 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { 2887 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) {
2893 Expression* callee = expr->expression(); 2888 Expression* callee = expr->expression();
2894 DCHECK(callee->IsProperty()); 2889 DCHECK(callee->IsProperty());
2895 Property* prop = callee->AsProperty(); 2890 Property* prop = callee->AsProperty();
2896 DCHECK(prop->IsSuperAccess()); 2891 DCHECK(prop->IsSuperAccess());
2897 2892
2898 SetSourcePosition(prop->position()); 2893 SetSourcePosition(prop->position());
2899 // Load the function from the receiver. 2894 // Load the function from the receiver.
2900 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2895 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2901 EmitLoadHomeObject(super_ref); 2896 VisitForStackValue(super_ref->home_object_var());
2902 __ push(eax);
2903 VisitForAccumulatorValue(super_ref->this_var()); 2897 VisitForAccumulatorValue(super_ref->this_var());
2904 __ push(eax); 2898 __ push(eax);
2905 __ push(eax); 2899 __ push(eax);
2906 __ push(Operand(esp, kPointerSize * 2)); 2900 __ push(Operand(esp, kPointerSize * 2));
2907 VisitForStackValue(prop->key()); 2901 VisitForStackValue(prop->key());
2908 // Stack here: 2902 // Stack here:
2909 // - home_object 2903 // - home_object
2910 // - this (receiver) 2904 // - this (receiver)
2911 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. 2905 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below.
2912 // - home_object 2906 // - home_object
(...skipping 1851 matching lines...) Expand 10 before | Expand all | Expand 10 after
4764 case NAMED_PROPERTY: { 4758 case NAMED_PROPERTY: {
4765 // Put the object both on the stack and in the register. 4759 // Put the object both on the stack and in the register.
4766 VisitForStackValue(prop->obj()); 4760 VisitForStackValue(prop->obj());
4767 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 4761 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
4768 EmitNamedPropertyLoad(prop); 4762 EmitNamedPropertyLoad(prop);
4769 break; 4763 break;
4770 } 4764 }
4771 4765
4772 case NAMED_SUPER_PROPERTY: { 4766 case NAMED_SUPER_PROPERTY: {
4773 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4767 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4774 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4768 VisitForAccumulatorValue(
4769 prop->obj()->AsSuperReference()->home_object_var());
4775 __ push(result_register()); 4770 __ push(result_register());
4776 __ push(MemOperand(esp, kPointerSize)); 4771 __ push(MemOperand(esp, kPointerSize));
4777 __ push(result_register()); 4772 __ push(result_register());
4778 EmitNamedSuperPropertyLoad(prop); 4773 EmitNamedSuperPropertyLoad(prop);
4779 break; 4774 break;
4780 } 4775 }
4781 4776
4782 case KEYED_SUPER_PROPERTY: { 4777 case KEYED_SUPER_PROPERTY: {
4783 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4778 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4784 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4779 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
4785 __ push(result_register());
4786 VisitForAccumulatorValue(prop->key()); 4780 VisitForAccumulatorValue(prop->key());
4787 __ push(result_register()); 4781 __ push(result_register());
4788 __ push(MemOperand(esp, 2 * kPointerSize)); 4782 __ push(MemOperand(esp, 2 * kPointerSize));
4789 __ push(MemOperand(esp, 2 * kPointerSize)); 4783 __ push(MemOperand(esp, 2 * kPointerSize));
4790 __ push(result_register()); 4784 __ push(result_register());
4791 EmitKeyedSuperPropertyLoad(prop); 4785 EmitKeyedSuperPropertyLoad(prop);
4792 break; 4786 break;
4793 } 4787 }
4794 4788
4795 case KEYED_PROPERTY: { 4789 case KEYED_PROPERTY: {
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
5383 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), 5377 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(),
5384 Assembler::target_address_at(call_target_address, 5378 Assembler::target_address_at(call_target_address,
5385 unoptimized_code)); 5379 unoptimized_code));
5386 return OSR_AFTER_STACK_CHECK; 5380 return OSR_AFTER_STACK_CHECK;
5387 } 5381 }
5388 5382
5389 5383
5390 } } // namespace v8::internal 5384 } } // namespace v8::internal
5391 5385
5392 #endif // V8_TARGET_ARCH_IA32 5386 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/full-codegen.h ('k') | src/mips/full-codegen-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698