| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 void UpdateEnvironment(HEnvironment* env) { last_environment_ = env; } | 111 void UpdateEnvironment(HEnvironment* env) { last_environment_ = env; } |
| 112 HBasicBlock* parent_loop_header() const { return parent_loop_header_; } | 112 HBasicBlock* parent_loop_header() const { return parent_loop_header_; } |
| 113 | 113 |
| 114 void set_parent_loop_header(HBasicBlock* block) { | 114 void set_parent_loop_header(HBasicBlock* block) { |
| 115 ASSERT(parent_loop_header_ == NULL); | 115 ASSERT(parent_loop_header_ == NULL); |
| 116 parent_loop_header_ = block; | 116 parent_loop_header_ = block; |
| 117 } | 117 } |
| 118 | 118 |
| 119 bool HasParentLoopHeader() const { return parent_loop_header_ != NULL; } | 119 bool HasParentLoopHeader() const { return parent_loop_header_ != NULL; } |
| 120 | 120 |
| 121 void SetJoinId(int ast_id); | 121 void SetJoinId(BailoutId ast_id); |
| 122 | 122 |
| 123 void Finish(HControlInstruction* last); | 123 void Finish(HControlInstruction* last); |
| 124 void FinishExit(HControlInstruction* instruction); | 124 void FinishExit(HControlInstruction* instruction); |
| 125 void Goto(HBasicBlock* block, FunctionState* state = NULL); | 125 void Goto(HBasicBlock* block, FunctionState* state = NULL); |
| 126 | 126 |
| 127 int PredecessorIndexOf(HBasicBlock* predecessor) const; | 127 int PredecessorIndexOf(HBasicBlock* predecessor) const; |
| 128 void AddSimulate(int ast_id) { AddInstruction(CreateSimulate(ast_id)); } | 128 void AddSimulate(BailoutId ast_id) { AddInstruction(CreateSimulate(ast_id)); } |
| 129 void AssignCommonDominator(HBasicBlock* other); | 129 void AssignCommonDominator(HBasicBlock* other); |
| 130 void AssignLoopSuccessorDominators(); | 130 void AssignLoopSuccessorDominators(); |
| 131 | 131 |
| 132 void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses) { | 132 void FinishExitWithDeoptimization(HDeoptimize::UseEnvironment has_uses) { |
| 133 FinishExit(CreateDeoptimize(has_uses)); | 133 FinishExit(CreateDeoptimize(has_uses)); |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Add the inlined function exit sequence, adding an HLeaveInlined | 136 // Add the inlined function exit sequence, adding an HLeaveInlined |
| 137 // instruction and updating the bailout environment. | 137 // instruction and updating the bailout environment. |
| 138 void AddLeaveInlined(HValue* return_value, | 138 void AddLeaveInlined(HValue* return_value, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 161 inline Zone* zone() const; | 161 inline Zone* zone() const; |
| 162 | 162 |
| 163 #ifdef DEBUG | 163 #ifdef DEBUG |
| 164 void Verify(); | 164 void Verify(); |
| 165 #endif | 165 #endif |
| 166 | 166 |
| 167 private: | 167 private: |
| 168 void RegisterPredecessor(HBasicBlock* pred); | 168 void RegisterPredecessor(HBasicBlock* pred); |
| 169 void AddDominatedBlock(HBasicBlock* block); | 169 void AddDominatedBlock(HBasicBlock* block); |
| 170 | 170 |
| 171 HSimulate* CreateSimulate(int ast_id); | 171 HSimulate* CreateSimulate(BailoutId ast_id); |
| 172 HDeoptimize* CreateDeoptimize(HDeoptimize::UseEnvironment has_uses); | 172 HDeoptimize* CreateDeoptimize(HDeoptimize::UseEnvironment has_uses); |
| 173 | 173 |
| 174 int block_id_; | 174 int block_id_; |
| 175 HGraph* graph_; | 175 HGraph* graph_; |
| 176 ZoneList<HPhi*> phis_; | 176 ZoneList<HPhi*> phis_; |
| 177 HInstruction* first_; | 177 HInstruction* first_; |
| 178 HInstruction* last_; | 178 HInstruction* last_; |
| 179 HControlInstruction* end_; | 179 HControlInstruction* end_; |
| 180 HLoopInformation* loop_information_; | 180 HLoopInformation* loop_information_; |
| 181 ZoneList<HBasicBlock*> predecessors_; | 181 ZoneList<HBasicBlock*> predecessors_; |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 return &assigned_variables_; | 424 return &assigned_variables_; |
| 425 } | 425 } |
| 426 FrameType frame_type() const { return frame_type_; } | 426 FrameType frame_type() const { return frame_type_; } |
| 427 int parameter_count() const { return parameter_count_; } | 427 int parameter_count() const { return parameter_count_; } |
| 428 int specials_count() const { return specials_count_; } | 428 int specials_count() const { return specials_count_; } |
| 429 int local_count() const { return local_count_; } | 429 int local_count() const { return local_count_; } |
| 430 HEnvironment* outer() const { return outer_; } | 430 HEnvironment* outer() const { return outer_; } |
| 431 int pop_count() const { return pop_count_; } | 431 int pop_count() const { return pop_count_; } |
| 432 int push_count() const { return push_count_; } | 432 int push_count() const { return push_count_; } |
| 433 | 433 |
| 434 int ast_id() const { return ast_id_; } | 434 BailoutId ast_id() const { return ast_id_; } |
| 435 void set_ast_id(int id) { ast_id_ = id; } | 435 void set_ast_id(BailoutId id) { ast_id_ = id; } |
| 436 | 436 |
| 437 int length() const { return values_.length(); } | 437 int length() const { return values_.length(); } |
| 438 bool is_special_index(int i) const { | 438 bool is_special_index(int i) const { |
| 439 return i >= parameter_count() && i < parameter_count() + specials_count(); | 439 return i >= parameter_count() && i < parameter_count() + specials_count(); |
| 440 } | 440 } |
| 441 | 441 |
| 442 int first_expression_index() const { | 442 int first_expression_index() const { |
| 443 return parameter_count() + specials_count() + local_count(); | 443 return parameter_count() + specials_count() + local_count(); |
| 444 } | 444 } |
| 445 | 445 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 // Value array [parameters] [specials] [locals] [temporaries]. | 567 // Value array [parameters] [specials] [locals] [temporaries]. |
| 568 ZoneList<HValue*> values_; | 568 ZoneList<HValue*> values_; |
| 569 ZoneList<int> assigned_variables_; | 569 ZoneList<int> assigned_variables_; |
| 570 FrameType frame_type_; | 570 FrameType frame_type_; |
| 571 int parameter_count_; | 571 int parameter_count_; |
| 572 int specials_count_; | 572 int specials_count_; |
| 573 int local_count_; | 573 int local_count_; |
| 574 HEnvironment* outer_; | 574 HEnvironment* outer_; |
| 575 int pop_count_; | 575 int pop_count_; |
| 576 int push_count_; | 576 int push_count_; |
| 577 int ast_id_; | 577 BailoutId ast_id_; |
| 578 Zone* zone_; | 578 Zone* zone_; |
| 579 }; | 579 }; |
| 580 | 580 |
| 581 | 581 |
| 582 class HGraphBuilder; | 582 class HGraphBuilder; |
| 583 | 583 |
| 584 enum ArgumentsAllowedFlag { | 584 enum ArgumentsAllowedFlag { |
| 585 ARGUMENTS_NOT_ALLOWED, | 585 ARGUMENTS_NOT_ALLOWED, |
| 586 ARGUMENTS_ALLOWED | 586 ARGUMENTS_ALLOWED |
| 587 }; | 587 }; |
| 588 | 588 |
| 589 // This class is not BASE_EMBEDDED because our inlining implementation uses | 589 // This class is not BASE_EMBEDDED because our inlining implementation uses |
| 590 // new and delete. | 590 // new and delete. |
| 591 class AstContext { | 591 class AstContext { |
| 592 public: | 592 public: |
| 593 bool IsEffect() const { return kind_ == Expression::kEffect; } | 593 bool IsEffect() const { return kind_ == Expression::kEffect; } |
| 594 bool IsValue() const { return kind_ == Expression::kValue; } | 594 bool IsValue() const { return kind_ == Expression::kValue; } |
| 595 bool IsTest() const { return kind_ == Expression::kTest; } | 595 bool IsTest() const { return kind_ == Expression::kTest; } |
| 596 | 596 |
| 597 // 'Fill' this context with a hydrogen value. The value is assumed to | 597 // 'Fill' this context with a hydrogen value. The value is assumed to |
| 598 // have already been inserted in the instruction stream (or not need to | 598 // have already been inserted in the instruction stream (or not need to |
| 599 // be, e.g., HPhi). Call this function in tail position in the Visit | 599 // be, e.g., HPhi). Call this function in tail position in the Visit |
| 600 // functions for expressions. | 600 // functions for expressions. |
| 601 virtual void ReturnValue(HValue* value) = 0; | 601 virtual void ReturnValue(HValue* value) = 0; |
| 602 | 602 |
| 603 // Add a hydrogen instruction to the instruction stream (recording an | 603 // Add a hydrogen instruction to the instruction stream (recording an |
| 604 // environment simulation if necessary) and then fill this context with | 604 // environment simulation if necessary) and then fill this context with |
| 605 // the instruction as value. | 605 // the instruction as value. |
| 606 virtual void ReturnInstruction(HInstruction* instr, int ast_id) = 0; | 606 virtual void ReturnInstruction(HInstruction* instr, BailoutId ast_id) = 0; |
| 607 | 607 |
| 608 // Finishes the current basic block and materialize a boolean for | 608 // Finishes the current basic block and materialize a boolean for |
| 609 // value context, nothing for effect, generate a branch for test context. | 609 // value context, nothing for effect, generate a branch for test context. |
| 610 // Call this function in tail position in the Visit functions for | 610 // Call this function in tail position in the Visit functions for |
| 611 // expressions. | 611 // expressions. |
| 612 virtual void ReturnControl(HControlInstruction* instr, int ast_id) = 0; | 612 virtual void ReturnControl(HControlInstruction* instr, BailoutId ast_id) = 0; |
| 613 | 613 |
| 614 void set_for_typeof(bool for_typeof) { for_typeof_ = for_typeof; } | 614 void set_for_typeof(bool for_typeof) { for_typeof_ = for_typeof; } |
| 615 bool is_for_typeof() { return for_typeof_; } | 615 bool is_for_typeof() { return for_typeof_; } |
| 616 | 616 |
| 617 protected: | 617 protected: |
| 618 AstContext(HGraphBuilder* owner, Expression::Context kind); | 618 AstContext(HGraphBuilder* owner, Expression::Context kind); |
| 619 virtual ~AstContext(); | 619 virtual ~AstContext(); |
| 620 | 620 |
| 621 HGraphBuilder* owner() const { return owner_; } | 621 HGraphBuilder* owner() const { return owner_; } |
| 622 | 622 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 637 | 637 |
| 638 | 638 |
| 639 class EffectContext: public AstContext { | 639 class EffectContext: public AstContext { |
| 640 public: | 640 public: |
| 641 explicit EffectContext(HGraphBuilder* owner) | 641 explicit EffectContext(HGraphBuilder* owner) |
| 642 : AstContext(owner, Expression::kEffect) { | 642 : AstContext(owner, Expression::kEffect) { |
| 643 } | 643 } |
| 644 virtual ~EffectContext(); | 644 virtual ~EffectContext(); |
| 645 | 645 |
| 646 virtual void ReturnValue(HValue* value); | 646 virtual void ReturnValue(HValue* value); |
| 647 virtual void ReturnInstruction(HInstruction* instr, int ast_id); | 647 virtual void ReturnInstruction(HInstruction* instr, BailoutId ast_id); |
| 648 virtual void ReturnControl(HControlInstruction* instr, int ast_id); | 648 virtual void ReturnControl(HControlInstruction* instr, BailoutId ast_id); |
| 649 }; | 649 }; |
| 650 | 650 |
| 651 | 651 |
| 652 class ValueContext: public AstContext { | 652 class ValueContext: public AstContext { |
| 653 public: | 653 public: |
| 654 explicit ValueContext(HGraphBuilder* owner, ArgumentsAllowedFlag flag) | 654 explicit ValueContext(HGraphBuilder* owner, ArgumentsAllowedFlag flag) |
| 655 : AstContext(owner, Expression::kValue), flag_(flag) { | 655 : AstContext(owner, Expression::kValue), flag_(flag) { |
| 656 } | 656 } |
| 657 virtual ~ValueContext(); | 657 virtual ~ValueContext(); |
| 658 | 658 |
| 659 virtual void ReturnValue(HValue* value); | 659 virtual void ReturnValue(HValue* value); |
| 660 virtual void ReturnInstruction(HInstruction* instr, int ast_id); | 660 virtual void ReturnInstruction(HInstruction* instr, BailoutId ast_id); |
| 661 virtual void ReturnControl(HControlInstruction* instr, int ast_id); | 661 virtual void ReturnControl(HControlInstruction* instr, BailoutId ast_id); |
| 662 | 662 |
| 663 bool arguments_allowed() { return flag_ == ARGUMENTS_ALLOWED; } | 663 bool arguments_allowed() { return flag_ == ARGUMENTS_ALLOWED; } |
| 664 | 664 |
| 665 private: | 665 private: |
| 666 ArgumentsAllowedFlag flag_; | 666 ArgumentsAllowedFlag flag_; |
| 667 }; | 667 }; |
| 668 | 668 |
| 669 | 669 |
| 670 class TestContext: public AstContext { | 670 class TestContext: public AstContext { |
| 671 public: | 671 public: |
| 672 TestContext(HGraphBuilder* owner, | 672 TestContext(HGraphBuilder* owner, |
| 673 Expression* condition, | 673 Expression* condition, |
| 674 HBasicBlock* if_true, | 674 HBasicBlock* if_true, |
| 675 HBasicBlock* if_false) | 675 HBasicBlock* if_false) |
| 676 : AstContext(owner, Expression::kTest), | 676 : AstContext(owner, Expression::kTest), |
| 677 condition_(condition), | 677 condition_(condition), |
| 678 if_true_(if_true), | 678 if_true_(if_true), |
| 679 if_false_(if_false) { | 679 if_false_(if_false) { |
| 680 } | 680 } |
| 681 | 681 |
| 682 virtual void ReturnValue(HValue* value); | 682 virtual void ReturnValue(HValue* value); |
| 683 virtual void ReturnInstruction(HInstruction* instr, int ast_id); | 683 virtual void ReturnInstruction(HInstruction* instr, BailoutId ast_id); |
| 684 virtual void ReturnControl(HControlInstruction* instr, int ast_id); | 684 virtual void ReturnControl(HControlInstruction* instr, BailoutId ast_id); |
| 685 | 685 |
| 686 static TestContext* cast(AstContext* context) { | 686 static TestContext* cast(AstContext* context) { |
| 687 ASSERT(context->IsTest()); | 687 ASSERT(context->IsTest()); |
| 688 return reinterpret_cast<TestContext*>(context); | 688 return reinterpret_cast<TestContext*>(context); |
| 689 } | 689 } |
| 690 | 690 |
| 691 Expression* condition() const { return condition_; } | 691 Expression* condition() const { return condition_; } |
| 692 HBasicBlock* if_true() const { return if_true_; } | 692 HBasicBlock* if_true() const { return if_true_; } |
| 693 HBasicBlock* if_false() const { return if_false_; } | 693 HBasicBlock* if_false() const { return if_false_; } |
| 694 | 694 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 HBasicBlock* current_block() const { return current_block_; } | 846 HBasicBlock* current_block() const { return current_block_; } |
| 847 void set_current_block(HBasicBlock* block) { current_block_ = block; } | 847 void set_current_block(HBasicBlock* block) { current_block_ = block; } |
| 848 HEnvironment* environment() const { | 848 HEnvironment* environment() const { |
| 849 return current_block()->last_environment(); | 849 return current_block()->last_environment(); |
| 850 } | 850 } |
| 851 | 851 |
| 852 bool inline_bailout() { return inline_bailout_; } | 852 bool inline_bailout() { return inline_bailout_; } |
| 853 | 853 |
| 854 // Adding instructions. | 854 // Adding instructions. |
| 855 HInstruction* AddInstruction(HInstruction* instr); | 855 HInstruction* AddInstruction(HInstruction* instr); |
| 856 void AddSimulate(int ast_id); | 856 void AddSimulate(BailoutId ast_id); |
| 857 | 857 |
| 858 // Bailout environment manipulation. | 858 // Bailout environment manipulation. |
| 859 void Push(HValue* value) { environment()->Push(value); } | 859 void Push(HValue* value) { environment()->Push(value); } |
| 860 HValue* Pop() { return environment()->Pop(); } | 860 HValue* Pop() { return environment()->Pop(); } |
| 861 | 861 |
| 862 void Bailout(const char* reason); | 862 void Bailout(const char* reason); |
| 863 | 863 |
| 864 HBasicBlock* CreateJoin(HBasicBlock* first, | 864 HBasicBlock* CreateJoin(HBasicBlock* first, |
| 865 HBasicBlock* second, | 865 HBasicBlock* second, |
| 866 int join_id); | 866 BailoutId join_id); |
| 867 | 867 |
| 868 TypeFeedbackOracle* oracle() const { return function_state()->oracle(); } | 868 TypeFeedbackOracle* oracle() const { return function_state()->oracle(); } |
| 869 | 869 |
| 870 FunctionState* function_state() const { return function_state_; } | 870 FunctionState* function_state() const { return function_state_; } |
| 871 | 871 |
| 872 void VisitDeclarations(ZoneList<Declaration*>* declarations); | 872 void VisitDeclarations(ZoneList<Declaration*>* declarations); |
| 873 | 873 |
| 874 void* operator new(size_t size, Zone* zone) { | 874 void* operator new(size_t size, Zone* zone) { |
| 875 return zone->New(static_cast<int>(size)); | 875 return zone->New(static_cast<int>(size)); |
| 876 } | 876 } |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 bool TryArgumentsAccess(Property* expr); | 1027 bool TryArgumentsAccess(Property* expr); |
| 1028 | 1028 |
| 1029 // Try to optimize fun.apply(receiver, arguments) pattern. | 1029 // Try to optimize fun.apply(receiver, arguments) pattern. |
| 1030 bool TryCallApply(Call* expr); | 1030 bool TryCallApply(Call* expr); |
| 1031 | 1031 |
| 1032 int InliningAstSize(Handle<JSFunction> target); | 1032 int InliningAstSize(Handle<JSFunction> target); |
| 1033 bool TryInline(CallKind call_kind, | 1033 bool TryInline(CallKind call_kind, |
| 1034 Handle<JSFunction> target, | 1034 Handle<JSFunction> target, |
| 1035 int arguments_count, | 1035 int arguments_count, |
| 1036 HValue* receiver, | 1036 HValue* receiver, |
| 1037 int ast_id, | 1037 BailoutId ast_id, |
| 1038 int return_id, | 1038 BailoutId return_id, |
| 1039 ReturnHandlingFlag return_handling); | 1039 ReturnHandlingFlag return_handling); |
| 1040 | 1040 |
| 1041 bool TryInlineCall(Call* expr, bool drop_extra = false); | 1041 bool TryInlineCall(Call* expr, bool drop_extra = false); |
| 1042 bool TryInlineConstruct(CallNew* expr, HValue* receiver); | 1042 bool TryInlineConstruct(CallNew* expr, HValue* receiver); |
| 1043 bool TryInlineGetter(Handle<JSFunction> getter, Property* prop); | 1043 bool TryInlineGetter(Handle<JSFunction> getter, Property* prop); |
| 1044 bool TryInlineBuiltinMethodCall(Call* expr, | 1044 bool TryInlineBuiltinMethodCall(Call* expr, |
| 1045 HValue* receiver, | 1045 HValue* receiver, |
| 1046 Handle<Map> receiver_map, | 1046 Handle<Map> receiver_map, |
| 1047 CheckType check_type); | 1047 CheckType check_type); |
| 1048 bool TryInlineBuiltinFunctionCall(Call* expr, bool drop_extra); | 1048 bool TryInlineBuiltinFunctionCall(Call* expr, bool drop_extra); |
| 1049 | 1049 |
| 1050 // If --trace-inlining, print a line of the inlining trace. Inlining | 1050 // If --trace-inlining, print a line of the inlining trace. Inlining |
| 1051 // succeeded if the reason string is NULL and failed if there is a | 1051 // succeeded if the reason string is NULL and failed if there is a |
| 1052 // non-NULL reason string. | 1052 // non-NULL reason string. |
| 1053 void TraceInline(Handle<JSFunction> target, | 1053 void TraceInline(Handle<JSFunction> target, |
| 1054 Handle<JSFunction> caller, | 1054 Handle<JSFunction> caller, |
| 1055 const char* failure_reason); | 1055 const char* failure_reason); |
| 1056 | 1056 |
| 1057 void HandleGlobalVariableAssignment(Variable* var, | 1057 void HandleGlobalVariableAssignment(Variable* var, |
| 1058 HValue* value, | 1058 HValue* value, |
| 1059 int position, | 1059 int position, |
| 1060 int ast_id); | 1060 BailoutId ast_id); |
| 1061 | 1061 |
| 1062 void HandlePropertyAssignment(Assignment* expr); | 1062 void HandlePropertyAssignment(Assignment* expr); |
| 1063 void HandleCompoundAssignment(Assignment* expr); | 1063 void HandleCompoundAssignment(Assignment* expr); |
| 1064 void HandlePolymorphicLoadNamedField(Property* expr, | 1064 void HandlePolymorphicLoadNamedField(Property* expr, |
| 1065 HValue* object, | 1065 HValue* object, |
| 1066 SmallMapList* types, | 1066 SmallMapList* types, |
| 1067 Handle<String> name); | 1067 Handle<String> name); |
| 1068 void HandlePolymorphicStoreNamedField(Assignment* expr, | 1068 void HandlePolymorphicStoreNamedField(Assignment* expr, |
| 1069 HValue* object, | 1069 HValue* object, |
| 1070 HValue* value, | 1070 HValue* value, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1112 HValue* key, | 1112 HValue* key, |
| 1113 HValue* val, | 1113 HValue* val, |
| 1114 HValue* dependency, | 1114 HValue* dependency, |
| 1115 Handle<Map> map, | 1115 Handle<Map> map, |
| 1116 bool is_store); | 1116 bool is_store); |
| 1117 | 1117 |
| 1118 HValue* HandlePolymorphicElementAccess(HValue* object, | 1118 HValue* HandlePolymorphicElementAccess(HValue* object, |
| 1119 HValue* key, | 1119 HValue* key, |
| 1120 HValue* val, | 1120 HValue* val, |
| 1121 Expression* prop, | 1121 Expression* prop, |
| 1122 int ast_id, | 1122 BailoutId ast_id, |
| 1123 int position, | 1123 int position, |
| 1124 bool is_store, | 1124 bool is_store, |
| 1125 bool* has_side_effects); | 1125 bool* has_side_effects); |
| 1126 | 1126 |
| 1127 HValue* HandleKeyedElementAccess(HValue* obj, | 1127 HValue* HandleKeyedElementAccess(HValue* obj, |
| 1128 HValue* key, | 1128 HValue* key, |
| 1129 HValue* val, | 1129 HValue* val, |
| 1130 Expression* expr, | 1130 Expression* expr, |
| 1131 int ast_id, | 1131 BailoutId ast_id, |
| 1132 int position, | 1132 int position, |
| 1133 bool is_store, | 1133 bool is_store, |
| 1134 bool* has_side_effects); | 1134 bool* has_side_effects); |
| 1135 | 1135 |
| 1136 // Tries to find a JavaScript accessor of the given name in the prototype | 1136 // Tries to find a JavaScript accessor of the given name in the prototype |
| 1137 // chain starting at the given map. Return true iff there is one, including | 1137 // chain starting at the given map. Return true iff there is one, including |
| 1138 // the corresponding AccessorPair plus its holder (which could be null when | 1138 // the corresponding AccessorPair plus its holder (which could be null when |
| 1139 // the accessor is found directly in the given map). | 1139 // the accessor is found directly in the given map). |
| 1140 bool LookupAccessorPair(Handle<Map> map, | 1140 bool LookupAccessorPair(Handle<Map> map, |
| 1141 Handle<String> name, | 1141 Handle<String> name, |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1467 const char* filename_; | 1467 const char* filename_; |
| 1468 HeapStringAllocator string_allocator_; | 1468 HeapStringAllocator string_allocator_; |
| 1469 StringStream trace_; | 1469 StringStream trace_; |
| 1470 int indent_; | 1470 int indent_; |
| 1471 }; | 1471 }; |
| 1472 | 1472 |
| 1473 | 1473 |
| 1474 } } // namespace v8::internal | 1474 } } // namespace v8::internal |
| 1475 | 1475 |
| 1476 #endif // V8_HYDROGEN_H_ | 1476 #endif // V8_HYDROGEN_H_ |
| OLD | NEW |