OLD | NEW |
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 #ifndef V8_FULL_CODEGEN_H_ | 5 #ifndef V8_FULL_CODEGEN_H_ |
6 #define V8_FULL_CODEGEN_H_ | 6 #define V8_FULL_CODEGEN_H_ |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 F(DebugBreakInOptimizedCode) \ | 551 F(DebugBreakInOptimizedCode) \ |
552 F(ClassOf) \ | 552 F(ClassOf) \ |
553 F(StringCharCodeAt) \ | 553 F(StringCharCodeAt) \ |
554 F(StringAdd) \ | 554 F(StringAdd) \ |
555 F(SubString) \ | 555 F(SubString) \ |
556 F(StringCompare) \ | 556 F(StringCompare) \ |
557 F(RegExpExec) \ | 557 F(RegExpExec) \ |
558 F(RegExpConstructResult) \ | 558 F(RegExpConstructResult) \ |
559 F(GetFromCache) \ | 559 F(GetFromCache) \ |
560 F(NumberToString) \ | 560 F(NumberToString) \ |
561 F(DebugIsActive) | 561 F(DebugIsActive) \ |
| 562 F(CallSuperWithSpread) |
562 | 563 |
563 #define GENERATOR_DECLARATION(Name) void Emit##Name(CallRuntime* call); | 564 #define GENERATOR_DECLARATION(Name) void Emit##Name(CallRuntime* call); |
564 FOR_EACH_FULL_CODE_INTRINSIC(GENERATOR_DECLARATION) | 565 FOR_EACH_FULL_CODE_INTRINSIC(GENERATOR_DECLARATION) |
565 #undef GENERATOR_DECLARATION | 566 #undef GENERATOR_DECLARATION |
566 | 567 |
567 // Platform-specific code for resuming generators. | 568 // Platform-specific code for resuming generators. |
568 void EmitGeneratorResume(Expression *generator, | 569 void EmitGeneratorResume(Expression *generator, |
569 Expression *value, | 570 Expression *value, |
570 JSGeneratorObject::ResumeMode resume_mode); | 571 JSGeneratorObject::ResumeMode resume_mode); |
571 | 572 |
(...skipping 10 matching lines...) Expand all Loading... |
582 | 583 |
583 void EmitAccessor(Expression* expression); | 584 void EmitAccessor(Expression* expression); |
584 | 585 |
585 // Expects the arguments and the function already pushed. | 586 // Expects the arguments and the function already pushed. |
586 void EmitResolvePossiblyDirectEval(int arg_count); | 587 void EmitResolvePossiblyDirectEval(int arg_count); |
587 | 588 |
588 // Platform-specific support for allocating a new closure based on | 589 // Platform-specific support for allocating a new closure based on |
589 // the given function info. | 590 // the given function info. |
590 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); | 591 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); |
591 | 592 |
| 593 // Re-usable portions of CallRuntime |
| 594 void EmitLoadJSRuntimeFunction(CallRuntime* expr); |
| 595 void EmitCallJSRuntimeFunction(CallRuntime* expr); |
| 596 |
592 // Platform-specific support for compiling assignments. | 597 // Platform-specific support for compiling assignments. |
593 | 598 |
594 // Left-hand side can only be a property, a global or a (parameter or local) | 599 // Left-hand side can only be a property, a global or a (parameter or local) |
595 // slot. | 600 // slot. |
596 enum LhsKind { | 601 enum LhsKind { |
597 VARIABLE, | 602 VARIABLE, |
598 NAMED_PROPERTY, | 603 NAMED_PROPERTY, |
599 KEYED_PROPERTY, | 604 KEYED_PROPERTY, |
600 NAMED_SUPER_PROPERTY, | 605 NAMED_SUPER_PROPERTY, |
601 KEYED_SUPER_PROPERTY | 606 KEYED_SUPER_PROPERTY |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 static bool NeedsHomeObject(Expression* expr) { | 684 static bool NeedsHomeObject(Expression* expr) { |
680 return FunctionLiteral::NeedsHomeObject(expr); | 685 return FunctionLiteral::NeedsHomeObject(expr); |
681 } | 686 } |
682 | 687 |
683 // Adds the [[HomeObject]] to |initializer| if it is a FunctionLiteral. | 688 // Adds the [[HomeObject]] to |initializer| if it is a FunctionLiteral. |
684 // The value of the initializer is expected to be at the top of the stack. | 689 // The value of the initializer is expected to be at the top of the stack. |
685 // |offset| is the offset in the stack where the home object can be found. | 690 // |offset| is the offset in the stack where the home object can be found. |
686 void EmitSetHomeObjectIfNeeded(Expression* initializer, int offset); | 691 void EmitSetHomeObjectIfNeeded(Expression* initializer, int offset); |
687 | 692 |
688 void EmitLoadSuperConstructor(); | 693 void EmitLoadSuperConstructor(); |
| 694 void EmitInitializeThisAfterSuper(SuperReference* super_ref); |
689 | 695 |
690 void CallIC(Handle<Code> code, | 696 void CallIC(Handle<Code> code, |
691 TypeFeedbackId id = TypeFeedbackId::None()); | 697 TypeFeedbackId id = TypeFeedbackId::None()); |
692 | 698 |
693 void CallLoadIC(ContextualMode mode, | 699 void CallLoadIC(ContextualMode mode, |
694 TypeFeedbackId id = TypeFeedbackId::None()); | 700 TypeFeedbackId id = TypeFeedbackId::None()); |
695 void CallGlobalLoadIC(Handle<String> name); | 701 void CallGlobalLoadIC(Handle<String> name); |
696 void CallStoreIC(TypeFeedbackId id = TypeFeedbackId::None()); | 702 void CallStoreIC(TypeFeedbackId id = TypeFeedbackId::None()); |
697 | 703 |
698 void SetFunctionPosition(FunctionLiteral* fun); | 704 void SetFunctionPosition(FunctionLiteral* fun); |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 | 1098 |
1093 Address start_; | 1099 Address start_; |
1094 Address instruction_start_; | 1100 Address instruction_start_; |
1095 uint32_t length_; | 1101 uint32_t length_; |
1096 }; | 1102 }; |
1097 | 1103 |
1098 | 1104 |
1099 } } // namespace v8::internal | 1105 } } // namespace v8::internal |
1100 | 1106 |
1101 #endif // V8_FULL_CODEGEN_H_ | 1107 #endif // V8_FULL_CODEGEN_H_ |
OLD | NEW |