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

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: All ports done Created 5 years, 7 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
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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } else { 296 } else {
297 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; 297 type = ArgumentsAccessStub::NEW_SLOPPY_FAST;
298 } 298 }
299 299
300 ArgumentsAccessStub stub(isolate(), type, has_new_target); 300 ArgumentsAccessStub stub(isolate(), type, has_new_target);
301 __ CallStub(&stub); 301 __ CallStub(&stub);
302 302
303 SetVar(arguments, eax, ebx, edx); 303 SetVar(arguments, eax, ebx, edx);
304 } 304 }
305 305
306 // Possibly set up a local binding to the [[HomeObject]].
307 Variable* home_object_var = scope()->home_object_var();
308 if (home_object_var != nullptr) {
309 Comment cmnt(masm_, "[ Home object");
310 if (function_in_register) {
311 __ mov(LoadDescriptor::ReceiverRegister(), edi);
312 } else {
313 __ mov(LoadDescriptor::ReceiverRegister(),
314 Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
315 }
316 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
317 __ mov(LoadDescriptor::NameRegister(), Immediate(home_object_symbol));
318
319 if (FLAG_vector_ics) {
320 __ mov(VectorLoadICDescriptor::SlotRegister(),
321 Immediate(SmiFromSlot(function()->HomeObjectFeedbackSlot())));
322 }
323 CallLoadIC(NOT_CONTEXTUAL);
324
325 SetVar(home_object_var, eax, ebx, edx);
326 }
327
306 if (FLAG_trace) { 328 if (FLAG_trace) {
307 __ CallRuntime(Runtime::kTraceEnter, 0); 329 __ CallRuntime(Runtime::kTraceEnter, 0);
308 } 330 }
309 331
310 // Visit the declarations and body unless there is an illegal 332 // Visit the declarations and body unless there is an illegal
311 // redeclaration. 333 // redeclaration.
312 if (scope()->HasIllegalRedeclaration()) { 334 if (scope()->HasIllegalRedeclaration()) {
313 Comment cmnt(masm_, "[ Declarations"); 335 Comment cmnt(masm_, "[ Declarations");
314 scope()->VisitIllegalRedeclaration(this); 336 scope()->VisitIllegalRedeclaration(this);
315 337
(...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 context()->Plug(eax); 1266 context()->Plug(eax);
1245 } 1267 }
1246 1268
1247 1269
1248 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { 1270 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
1249 Comment cmnt(masm_, "[ VariableProxy"); 1271 Comment cmnt(masm_, "[ VariableProxy");
1250 EmitVariableLoad(expr); 1272 EmitVariableLoad(expr);
1251 } 1273 }
1252 1274
1253 1275
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 if (FLAG_vector_ics) {
1264 __ mov(VectorLoadICDescriptor::SlotRegister(),
1265 Immediate(SmiFromSlot(expr->HomeObjectFeedbackSlot())));
1266 CallLoadIC(NOT_CONTEXTUAL);
1267 } else {
1268 CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId());
1269 }
1270
1271 __ cmp(eax, isolate()->factory()->undefined_value());
1272 Label done;
1273 __ j(not_equal, &done);
1274 __ CallRuntime(Runtime::kThrowNonMethodError, 0);
1275 __ bind(&done);
1276 }
1277
1278
1279 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, 1276 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer,
1280 int offset) { 1277 int offset) {
1281 if (NeedsHomeObject(initializer)) { 1278 if (NeedsHomeObject(initializer)) {
1282 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0)); 1279 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0));
1283 __ mov(StoreDescriptor::NameRegister(), 1280 __ mov(StoreDescriptor::NameRegister(),
1284 Immediate(isolate()->factory()->home_object_symbol())); 1281 Immediate(isolate()->factory()->home_object_symbol()));
1285 __ mov(StoreDescriptor::ValueRegister(), 1282 __ mov(StoreDescriptor::ValueRegister(),
1286 Operand(esp, offset * kPointerSize)); 1283 Operand(esp, offset * kPointerSize));
1287 CallStoreIC(); 1284 CallStoreIC();
1288 } 1285 }
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 Property* property = expr->target()->AsProperty(); 1873 Property* property = expr->target()->AsProperty();
1877 LhsKind assign_type = GetAssignType(property); 1874 LhsKind assign_type = GetAssignType(property);
1878 1875
1879 // Evaluate LHS expression. 1876 // Evaluate LHS expression.
1880 switch (assign_type) { 1877 switch (assign_type) {
1881 case VARIABLE: 1878 case VARIABLE:
1882 // Nothing to do here. 1879 // Nothing to do here.
1883 break; 1880 break;
1884 case NAMED_SUPER_PROPERTY: 1881 case NAMED_SUPER_PROPERTY:
1885 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1882 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1886 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1883 VisitForAccumulatorValue(
1884 property->obj()->AsSuperReference()->home_object_var());
1887 __ push(result_register()); 1885 __ push(result_register());
1888 if (expr->is_compound()) { 1886 if (expr->is_compound()) {
1889 __ push(MemOperand(esp, kPointerSize)); 1887 __ push(MemOperand(esp, kPointerSize));
1890 __ push(result_register()); 1888 __ push(result_register());
1891 } 1889 }
1892 break; 1890 break;
1893 case NAMED_PROPERTY: 1891 case NAMED_PROPERTY:
1894 if (expr->is_compound()) { 1892 if (expr->is_compound()) {
1895 // We need the receiver both on the stack and in the register. 1893 // We need the receiver both on the stack and in the register.
1896 VisitForStackValue(property->obj()); 1894 VisitForStackValue(property->obj());
1897 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 1895 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
1898 } else { 1896 } else {
1899 VisitForStackValue(property->obj()); 1897 VisitForStackValue(property->obj());
1900 } 1898 }
1901 break; 1899 break;
1902 case KEYED_SUPER_PROPERTY: 1900 case KEYED_SUPER_PROPERTY:
1903 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1901 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1904 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1902 VisitForStackValue(
1905 __ Push(result_register()); 1903 property->obj()->AsSuperReference()->home_object_var());
1906 VisitForAccumulatorValue(property->key()); 1904 VisitForAccumulatorValue(property->key());
1907 __ Push(result_register()); 1905 __ Push(result_register());
1908 if (expr->is_compound()) { 1906 if (expr->is_compound()) {
1909 __ push(MemOperand(esp, 2 * kPointerSize)); 1907 __ push(MemOperand(esp, 2 * kPointerSize));
1910 __ push(MemOperand(esp, 2 * kPointerSize)); 1908 __ push(MemOperand(esp, 2 * kPointerSize));
1911 __ push(result_register()); 1909 __ push(result_register());
1912 } 1910 }
1913 break; 1911 break;
1914 case KEYED_PROPERTY: { 1912 case KEYED_PROPERTY: {
1915 if (expr->is_compound()) { 1913 if (expr->is_compound()) {
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
2532 __ Move(StoreDescriptor::ReceiverRegister(), eax); 2530 __ Move(StoreDescriptor::ReceiverRegister(), eax);
2533 __ pop(StoreDescriptor::ValueRegister()); // Restore value. 2531 __ pop(StoreDescriptor::ValueRegister()); // Restore value.
2534 __ mov(StoreDescriptor::NameRegister(), 2532 __ mov(StoreDescriptor::NameRegister(),
2535 prop->key()->AsLiteral()->value()); 2533 prop->key()->AsLiteral()->value());
2536 CallStoreIC(); 2534 CallStoreIC();
2537 break; 2535 break;
2538 } 2536 }
2539 case NAMED_SUPER_PROPERTY: { 2537 case NAMED_SUPER_PROPERTY: {
2540 __ push(eax); 2538 __ push(eax);
2541 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2539 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2542 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2540 VisitForAccumulatorValue(
2541 prop->obj()->AsSuperReference()->home_object_var());
2543 // stack: value, this; eax: home_object 2542 // stack: value, this; eax: home_object
2544 Register scratch = ecx; 2543 Register scratch = ecx;
2545 Register scratch2 = edx; 2544 Register scratch2 = edx;
2546 __ mov(scratch, result_register()); // home_object 2545 __ mov(scratch, result_register()); // home_object
2547 __ mov(eax, MemOperand(esp, kPointerSize)); // value 2546 __ mov(eax, MemOperand(esp, kPointerSize)); // value
2548 __ mov(scratch2, MemOperand(esp, 0)); // this 2547 __ mov(scratch2, MemOperand(esp, 0)); // this
2549 __ mov(MemOperand(esp, kPointerSize), scratch2); // this 2548 __ mov(MemOperand(esp, kPointerSize), scratch2); // this
2550 __ mov(MemOperand(esp, 0), scratch); // home_object 2549 __ mov(MemOperand(esp, 0), scratch); // home_object
2551 // stack: this, home_object. eax: value 2550 // stack: this, home_object. eax: value
2552 EmitNamedSuperPropertyStore(prop); 2551 EmitNamedSuperPropertyStore(prop);
2553 break; 2552 break;
2554 } 2553 }
2555 case KEYED_SUPER_PROPERTY: { 2554 case KEYED_SUPER_PROPERTY: {
2556 __ push(eax); 2555 __ push(eax);
2557 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2556 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2558 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2557 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
2559 __ push(result_register());
2560 VisitForAccumulatorValue(prop->key()); 2558 VisitForAccumulatorValue(prop->key());
2561 Register scratch = ecx; 2559 Register scratch = ecx;
2562 Register scratch2 = edx; 2560 Register scratch2 = edx;
2563 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value 2561 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value
2564 // stack: value, this, home_object; eax: key, edx: value 2562 // stack: value, this, home_object; eax: key, edx: value
2565 __ mov(scratch, MemOperand(esp, kPointerSize)); // this 2563 __ mov(scratch, MemOperand(esp, kPointerSize)); // this
2566 __ mov(MemOperand(esp, 2 * kPointerSize), scratch); 2564 __ mov(MemOperand(esp, 2 * kPointerSize), scratch);
2567 __ mov(scratch, MemOperand(esp, 0)); // home_object 2565 __ mov(scratch, MemOperand(esp, 0)); // home_object
2568 __ mov(MemOperand(esp, kPointerSize), scratch); 2566 __ mov(MemOperand(esp, kPointerSize), scratch);
2569 __ mov(MemOperand(esp, 0), eax); 2567 __ mov(MemOperand(esp, 0), eax);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2760 Comment cmnt(masm_, "[ Property"); 2758 Comment cmnt(masm_, "[ Property");
2761 Expression* key = expr->key(); 2759 Expression* key = expr->key();
2762 2760
2763 if (key->IsPropertyName()) { 2761 if (key->IsPropertyName()) {
2764 if (!expr->IsSuperAccess()) { 2762 if (!expr->IsSuperAccess()) {
2765 VisitForAccumulatorValue(expr->obj()); 2763 VisitForAccumulatorValue(expr->obj());
2766 __ Move(LoadDescriptor::ReceiverRegister(), result_register()); 2764 __ Move(LoadDescriptor::ReceiverRegister(), result_register());
2767 EmitNamedPropertyLoad(expr); 2765 EmitNamedPropertyLoad(expr);
2768 } else { 2766 } else {
2769 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2767 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2770 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2768 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2771 __ push(result_register());
2772 EmitNamedSuperPropertyLoad(expr); 2769 EmitNamedSuperPropertyLoad(expr);
2773 } 2770 }
2774 } else { 2771 } else {
2775 if (!expr->IsSuperAccess()) { 2772 if (!expr->IsSuperAccess()) {
2776 VisitForStackValue(expr->obj()); 2773 VisitForStackValue(expr->obj());
2777 VisitForAccumulatorValue(expr->key()); 2774 VisitForAccumulatorValue(expr->key());
2778 __ pop(LoadDescriptor::ReceiverRegister()); // Object. 2775 __ pop(LoadDescriptor::ReceiverRegister()); // Object.
2779 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key. 2776 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key.
2780 EmitKeyedPropertyLoad(expr); 2777 EmitKeyedPropertyLoad(expr);
2781 } else { 2778 } else {
2782 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2779 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2783 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2780 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2784 __ push(result_register());
2785 VisitForStackValue(expr->key()); 2781 VisitForStackValue(expr->key());
2786 EmitKeyedSuperPropertyLoad(expr); 2782 EmitKeyedSuperPropertyLoad(expr);
2787 } 2783 }
2788 } 2784 }
2789 PrepareForBailoutForId(expr->LoadId(), TOS_REG); 2785 PrepareForBailoutForId(expr->LoadId(), TOS_REG);
2790 context()->Plug(eax); 2786 context()->Plug(eax);
2791 } 2787 }
2792 2788
2793 2789
2794 void FullCodeGenerator::CallIC(Handle<Code> code, 2790 void FullCodeGenerator::CallIC(Handle<Code> code,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2833 Expression* callee = expr->expression(); 2829 Expression* callee = expr->expression();
2834 DCHECK(callee->IsProperty()); 2830 DCHECK(callee->IsProperty());
2835 Property* prop = callee->AsProperty(); 2831 Property* prop = callee->AsProperty();
2836 DCHECK(prop->IsSuperAccess()); 2832 DCHECK(prop->IsSuperAccess());
2837 2833
2838 SetSourcePosition(prop->position()); 2834 SetSourcePosition(prop->position());
2839 Literal* key = prop->key()->AsLiteral(); 2835 Literal* key = prop->key()->AsLiteral();
2840 DCHECK(!key->value()->IsSmi()); 2836 DCHECK(!key->value()->IsSmi());
2841 // Load the function from the receiver. 2837 // Load the function from the receiver.
2842 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2838 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2843 EmitLoadHomeObject(super_ref); 2839 VisitForStackValue(super_ref->home_object_var());
2844 __ push(eax);
2845 VisitForAccumulatorValue(super_ref->this_var()); 2840 VisitForAccumulatorValue(super_ref->this_var());
2846 __ push(eax); 2841 __ push(eax);
2847 __ push(eax); 2842 __ push(eax);
2848 __ push(Operand(esp, kPointerSize * 2)); 2843 __ push(Operand(esp, kPointerSize * 2));
2849 __ push(Immediate(key->value())); 2844 __ push(Immediate(key->value()));
2850 // Stack here: 2845 // Stack here:
2851 // - home_object 2846 // - home_object
2852 // - this (receiver) 2847 // - this (receiver)
2853 // - this (receiver) <-- LoadFromSuper will pop here and below. 2848 // - this (receiver) <-- LoadFromSuper will pop here and below.
2854 // - home_object 2849 // - home_object
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 2885
2891 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { 2886 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) {
2892 Expression* callee = expr->expression(); 2887 Expression* callee = expr->expression();
2893 DCHECK(callee->IsProperty()); 2888 DCHECK(callee->IsProperty());
2894 Property* prop = callee->AsProperty(); 2889 Property* prop = callee->AsProperty();
2895 DCHECK(prop->IsSuperAccess()); 2890 DCHECK(prop->IsSuperAccess());
2896 2891
2897 SetSourcePosition(prop->position()); 2892 SetSourcePosition(prop->position());
2898 // Load the function from the receiver. 2893 // Load the function from the receiver.
2899 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2894 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2900 EmitLoadHomeObject(super_ref); 2895 VisitForStackValue(super_ref->home_object_var());
2901 __ push(eax);
2902 VisitForAccumulatorValue(super_ref->this_var()); 2896 VisitForAccumulatorValue(super_ref->this_var());
2903 __ push(eax); 2897 __ push(eax);
2904 __ push(eax); 2898 __ push(eax);
2905 __ push(Operand(esp, kPointerSize * 2)); 2899 __ push(Operand(esp, kPointerSize * 2));
2906 VisitForStackValue(prop->key()); 2900 VisitForStackValue(prop->key());
2907 // Stack here: 2901 // Stack here:
2908 // - home_object 2902 // - home_object
2909 // - this (receiver) 2903 // - this (receiver)
2910 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. 2904 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below.
2911 // - home_object 2905 // - home_object
(...skipping 1855 matching lines...) Expand 10 before | Expand all | Expand 10 after
4767 case NAMED_PROPERTY: { 4761 case NAMED_PROPERTY: {
4768 // Put the object both on the stack and in the register. 4762 // Put the object both on the stack and in the register.
4769 VisitForStackValue(prop->obj()); 4763 VisitForStackValue(prop->obj());
4770 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 4764 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
4771 EmitNamedPropertyLoad(prop); 4765 EmitNamedPropertyLoad(prop);
4772 break; 4766 break;
4773 } 4767 }
4774 4768
4775 case NAMED_SUPER_PROPERTY: { 4769 case NAMED_SUPER_PROPERTY: {
4776 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4770 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4777 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4771 VisitForAccumulatorValue(
4772 prop->obj()->AsSuperReference()->home_object_var());
4778 __ push(result_register()); 4773 __ push(result_register());
4779 __ push(MemOperand(esp, kPointerSize)); 4774 __ push(MemOperand(esp, kPointerSize));
4780 __ push(result_register()); 4775 __ push(result_register());
4781 EmitNamedSuperPropertyLoad(prop); 4776 EmitNamedSuperPropertyLoad(prop);
4782 break; 4777 break;
4783 } 4778 }
4784 4779
4785 case KEYED_SUPER_PROPERTY: { 4780 case KEYED_SUPER_PROPERTY: {
4786 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4781 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4787 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4782 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
4788 __ push(result_register());
4789 VisitForAccumulatorValue(prop->key()); 4783 VisitForAccumulatorValue(prop->key());
4790 __ push(result_register()); 4784 __ push(result_register());
4791 __ push(MemOperand(esp, 2 * kPointerSize)); 4785 __ push(MemOperand(esp, 2 * kPointerSize));
4792 __ push(MemOperand(esp, 2 * kPointerSize)); 4786 __ push(MemOperand(esp, 2 * kPointerSize));
4793 __ push(result_register()); 4787 __ push(result_register());
4794 EmitKeyedSuperPropertyLoad(prop); 4788 EmitKeyedSuperPropertyLoad(prop);
4795 break; 4789 break;
4796 } 4790 }
4797 4791
4798 case KEYED_PROPERTY: { 4792 case KEYED_PROPERTY: {
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
5376 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), 5370 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(),
5377 Assembler::target_address_at(call_target_address, 5371 Assembler::target_address_at(call_target_address,
5378 unoptimized_code)); 5372 unoptimized_code));
5379 return OSR_AFTER_STACK_CHECK; 5373 return OSR_AFTER_STACK_CHECK;
5380 } 5374 }
5381 5375
5382 5376
5383 } } // namespace v8::internal 5377 } } // namespace v8::internal
5384 5378
5385 #endif // V8_TARGET_ARCH_IA32 5379 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/full-codegen.h ('k') | src/mips/full-codegen-mips.cc » ('j') | src/preparser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698