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

Side by Side Diff: src/hydrogen.h

Issue 6580038: [Isolates] Merge from bleeding_edge, revisions 5934-6100. (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: '' Created 9 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « src/heap-profiler.cc ('k') | src/hydrogen.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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 129
130 // If a target block is tagged as an inline function return, all 130 // If a target block is tagged as an inline function return, all
131 // predecessors should contain the inlined exit sequence: 131 // predecessors should contain the inlined exit sequence:
132 // 132 //
133 // LeaveInlined 133 // LeaveInlined
134 // Simulate (caller's environment) 134 // Simulate (caller's environment)
135 // Goto (target block) 135 // Goto (target block)
136 bool IsInlineReturnTarget() const { return is_inline_return_target_; } 136 bool IsInlineReturnTarget() const { return is_inline_return_target_; }
137 void MarkAsInlineReturnTarget() { is_inline_return_target_ = true; } 137 void MarkAsInlineReturnTarget() { is_inline_return_target_ = true; }
138 138
139 // If this block is a successor of a branch, his flags tells whether the
140 // preceding branch was inverted or not.
141 bool inverted() { return inverted_; }
142 void set_inverted(bool b) { inverted_ = b; }
143
144 HBasicBlock* deopt_predecessor() { return deopt_predecessor_; }
145 void set_deopt_predecessor(HBasicBlock* block) { deopt_predecessor_ = block; }
146
147 Handle<Object> cond() { return cond_; } 139 Handle<Object> cond() { return cond_; }
148 void set_cond(Handle<Object> value) { cond_ = value; } 140 void set_cond(Handle<Object> value) { cond_ = value; }
149 141
150 #ifdef DEBUG 142 #ifdef DEBUG
151 void Verify(); 143 void Verify();
152 #endif 144 #endif
153 145
154 private: 146 private:
155 void RegisterPredecessor(HBasicBlock* pred); 147 void RegisterPredecessor(HBasicBlock* pred);
156 void AddDominatedBlock(HBasicBlock* block); 148 void AddDominatedBlock(HBasicBlock* block);
(...skipping 12 matching lines...) Expand all
169 ZoneList<HBasicBlock*> dominated_blocks_; 161 ZoneList<HBasicBlock*> dominated_blocks_;
170 HEnvironment* last_environment_; 162 HEnvironment* last_environment_;
171 // Outgoing parameter count at block exit, set during lithium translation. 163 // Outgoing parameter count at block exit, set during lithium translation.
172 int argument_count_; 164 int argument_count_;
173 // Instruction indices into the lithium code stream. 165 // Instruction indices into the lithium code stream.
174 int first_instruction_index_; 166 int first_instruction_index_;
175 int last_instruction_index_; 167 int last_instruction_index_;
176 ZoneList<int> deleted_phis_; 168 ZoneList<int> deleted_phis_;
177 SetOncePointer<HBasicBlock> parent_loop_header_; 169 SetOncePointer<HBasicBlock> parent_loop_header_;
178 bool is_inline_return_target_; 170 bool is_inline_return_target_;
179 bool inverted_;
180 HBasicBlock* deopt_predecessor_;
181 Handle<Object> cond_; 171 Handle<Object> cond_;
182 }; 172 };
183 173
184 174
185 class HLoopInformation: public ZoneObject { 175 class HLoopInformation: public ZoneObject {
186 public: 176 public:
187 explicit HLoopInformation(HBasicBlock* loop_header) 177 explicit HLoopInformation(HBasicBlock* loop_header)
188 : back_edges_(4), loop_header_(loop_header), blocks_(8) { 178 : back_edges_(4), loop_header_(loop_header), blocks_(8) {
189 blocks_.Add(loop_header); 179 blocks_.Add(loop_header);
190 } 180 }
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 540
551 541
552 class HGraphBuilder; 542 class HGraphBuilder;
553 543
554 class AstContext { 544 class AstContext {
555 public: 545 public:
556 bool IsEffect() const { return kind_ == Expression::kEffect; } 546 bool IsEffect() const { return kind_ == Expression::kEffect; }
557 bool IsValue() const { return kind_ == Expression::kValue; } 547 bool IsValue() const { return kind_ == Expression::kValue; }
558 bool IsTest() const { return kind_ == Expression::kTest; } 548 bool IsTest() const { return kind_ == Expression::kTest; }
559 549
550 // 'Fill' this context with a hydrogen value. The value is assumed to
551 // have already been inserted in the instruction stream (or not need to
552 // be, e.g., HPhi). Call this function in tail position in the Visit
553 // functions for expressions.
554 virtual void ReturnValue(HValue* value) = 0;
555
556 // Add a hydrogen instruction to the instruction stream (recording an
557 // environment simulation if necessary) and then fill this context with
558 // the instruction as value.
559 virtual void ReturnInstruction(HInstruction* instr, int ast_id) = 0;
560
560 protected: 561 protected:
561 AstContext(HGraphBuilder* owner, Expression::Context kind); 562 AstContext(HGraphBuilder* owner, Expression::Context kind);
562 virtual ~AstContext(); 563 virtual ~AstContext();
563 564
565 HGraphBuilder* owner() const { return owner_; }
566
567 // We want to be able to assert, in a context-specific way, that the stack
568 // height makes sense when the context is filled.
569 #ifdef DEBUG
570 int original_count_;
571 #endif
572
564 private: 573 private:
565 HGraphBuilder* owner_; 574 HGraphBuilder* owner_;
566 Expression::Context kind_; 575 Expression::Context kind_;
567 AstContext* outer_; 576 AstContext* outer_;
568 }; 577 };
569 578
570 579
571 class EffectContext: public AstContext { 580 class EffectContext: public AstContext {
572 public: 581 public:
573 explicit EffectContext(HGraphBuilder* owner) 582 explicit EffectContext(HGraphBuilder* owner)
574 : AstContext(owner, Expression::kEffect) { 583 : AstContext(owner, Expression::kEffect) {
575 } 584 }
585 virtual ~EffectContext();
586
587 virtual void ReturnValue(HValue* value);
588 virtual void ReturnInstruction(HInstruction* instr, int ast_id);
576 }; 589 };
577 590
578 591
579 class ValueContext: public AstContext { 592 class ValueContext: public AstContext {
580 public: 593 public:
581 explicit ValueContext(HGraphBuilder* owner) 594 explicit ValueContext(HGraphBuilder* owner)
582 : AstContext(owner, Expression::kValue) { 595 : AstContext(owner, Expression::kValue) {
583 } 596 }
597 virtual ~ValueContext();
598
599 virtual void ReturnValue(HValue* value);
600 virtual void ReturnInstruction(HInstruction* instr, int ast_id);
584 }; 601 };
585 602
586 603
587 class TestContext: public AstContext { 604 class TestContext: public AstContext {
588 public: 605 public:
589 TestContext(HGraphBuilder* owner, 606 TestContext(HGraphBuilder* owner,
590 HBasicBlock* if_true, 607 HBasicBlock* if_true,
591 HBasicBlock* if_false, 608 HBasicBlock* if_false)
592 bool invert_true,
593 bool invert_false)
594 : AstContext(owner, Expression::kTest), 609 : AstContext(owner, Expression::kTest),
595 if_true_(if_true), 610 if_true_(if_true),
596 if_false_(if_false), 611 if_false_(if_false) {
597 invert_true_(invert_true),
598 invert_false_(invert_false) {
599 } 612 }
600 613
614 virtual void ReturnValue(HValue* value);
615 virtual void ReturnInstruction(HInstruction* instr, int ast_id);
616
601 static TestContext* cast(AstContext* context) { 617 static TestContext* cast(AstContext* context) {
602 ASSERT(context->IsTest()); 618 ASSERT(context->IsTest());
603 return reinterpret_cast<TestContext*>(context); 619 return reinterpret_cast<TestContext*>(context);
604 } 620 }
605 621
606 HBasicBlock* if_true() const { return if_true_; } 622 HBasicBlock* if_true() const { return if_true_; }
607 HBasicBlock* if_false() const { return if_false_; } 623 HBasicBlock* if_false() const { return if_false_; }
608 624
609 bool invert_true() { return invert_true_; } 625 private:
610 bool invert_false() { return invert_false_; } 626 // Build the shared core part of the translation unpacking a value into
627 // control flow.
628 void BuildBranch(HValue* value);
611 629
612 private:
613 HBasicBlock* if_true_; 630 HBasicBlock* if_true_;
614 HBasicBlock* if_false_; 631 HBasicBlock* if_false_;
615 bool invert_true_;
616 bool invert_false_;
617 }; 632 };
618 633
619 634
620 class HGraphBuilder: public AstVisitor { 635 class HGraphBuilder: public AstVisitor {
621 public: 636 public:
622 explicit HGraphBuilder(TypeFeedbackOracle* oracle) 637 explicit HGraphBuilder(TypeFeedbackOracle* oracle)
623 : oracle_(oracle), 638 : oracle_(oracle),
624 graph_(NULL), 639 graph_(NULL),
625 current_subgraph_(NULL), 640 current_subgraph_(NULL),
626 peeled_statement_(NULL), 641 peeled_statement_(NULL),
627 ast_context_(NULL), 642 ast_context_(NULL),
628 call_context_(NULL), 643 call_context_(NULL),
629 function_return_(NULL), 644 function_return_(NULL),
630 inlined_count_(0) { } 645 inlined_count_(0) { }
631 646
632 HGraph* CreateGraph(CompilationInfo* info); 647 HGraph* CreateGraph(CompilationInfo* info);
633 648
649 // Simple accessors.
650 HGraph* graph() const { return graph_; }
651 HSubgraph* subgraph() const { return current_subgraph_; }
652
653 HEnvironment* environment() const { return subgraph()->environment(); }
654 HBasicBlock* CurrentBlock() const { return subgraph()->exit_block(); }
655
656 // Adding instructions.
657 HInstruction* AddInstruction(HInstruction* instr);
658 void AddSimulate(int id);
659
660 // Bailout environment manipulation.
661 void Push(HValue* value) { environment()->Push(value); }
662 HValue* Pop() { return environment()->Pop(); }
663
634 private: 664 private:
635 // Type of a member function that generates inline code for a native function. 665 // Type of a member function that generates inline code for a native function.
636 typedef void (HGraphBuilder::*InlineFunctionGenerator)(int argument_count); 666 typedef void (HGraphBuilder::*InlineFunctionGenerator)(int argument_count,
667 int ast_id);
637 668
638 // Forward declarations for inner scope classes. 669 // Forward declarations for inner scope classes.
639 class SubgraphScope; 670 class SubgraphScope;
640 671
641 static const InlineFunctionGenerator kInlineFunctionGenerators[]; 672 static const InlineFunctionGenerator kInlineFunctionGenerators[];
642 673
643 static const int kMaxCallPolymorphism = 4; 674 static const int kMaxCallPolymorphism = 4;
644 static const int kMaxLoadPolymorphism = 4; 675 static const int kMaxLoadPolymorphism = 4;
645 static const int kMaxStorePolymorphism = 4; 676 static const int kMaxStorePolymorphism = 4;
646 677
647 static const int kMaxInlinedNodes = 196; 678 static const int kMaxInlinedNodes = 196;
648 static const int kMaxInlinedSize = 196; 679 static const int kMaxInlinedSize = 196;
649 static const int kMaxSourceSize = 600; 680 static const int kMaxSourceSize = 600;
650 681
651 // Simple accessors. 682 // Simple accessors.
652 TypeFeedbackOracle* oracle() const { return oracle_; } 683 TypeFeedbackOracle* oracle() const { return oracle_; }
653 HGraph* graph() const { return graph_; }
654 HSubgraph* subgraph() const { return current_subgraph_; }
655 AstContext* ast_context() const { return ast_context_; } 684 AstContext* ast_context() const { return ast_context_; }
656 void set_ast_context(AstContext* context) { ast_context_ = context; } 685 void set_ast_context(AstContext* context) { ast_context_ = context; }
657 AstContext* call_context() const { return call_context_; } 686 AstContext* call_context() const { return call_context_; }
658 HBasicBlock* function_return() const { return function_return_; } 687 HBasicBlock* function_return() const { return function_return_; }
659 HEnvironment* environment() const { return subgraph()->environment(); }
660
661 HBasicBlock* CurrentBlock() const { return subgraph()->exit_block(); }
662 688
663 // Generators for inline runtime functions. 689 // Generators for inline runtime functions.
664 #define INLINE_FUNCTION_GENERATOR_DECLARATION(Name, argc, ressize) \ 690 #define INLINE_FUNCTION_GENERATOR_DECLARATION(Name, argc, ressize) \
665 void Generate##Name(int argument_count); 691 void Generate##Name(int argument_count, int ast_id);
666 692
667 INLINE_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION) 693 INLINE_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION)
668 INLINE_RUNTIME_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION) 694 INLINE_RUNTIME_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_DECLARATION)
669 #undef INLINE_FUNCTION_GENERATOR_DECLARATION 695 #undef INLINE_FUNCTION_GENERATOR_DECLARATION
670 696
671 void Bailout(const char* reason); 697 void Bailout(const char* reason);
672 698
673 void AppendPeeledWhile(IterationStatement* stmt, 699 void AppendPeeledWhile(IterationStatement* stmt,
674 HSubgraph* cond_graph, 700 HSubgraph* cond_graph,
675 HSubgraph* body_graph, 701 HSubgraph* body_graph,
676 HSubgraph* exit_graph); 702 HSubgraph* exit_graph);
677 703
678 void AddToSubgraph(HSubgraph* graph, ZoneList<Statement*>* stmts); 704 void AddToSubgraph(HSubgraph* graph, ZoneList<Statement*>* stmts);
679 void AddToSubgraph(HSubgraph* graph, Statement* stmt); 705 void AddToSubgraph(HSubgraph* graph, Statement* stmt);
680 void AddToSubgraph(HSubgraph* graph, Expression* expr); 706 void AddToSubgraph(HSubgraph* graph, Expression* expr);
681 void AddConditionToSubgraph(HSubgraph* subgraph,
682 Expression* expr,
683 HSubgraph* true_graph,
684 HSubgraph* false_graph);
685 707
686 void Push(HValue* value) { environment()->Push(value); }
687 HValue* Pop() { return environment()->Pop(); }
688 HValue* Top() const { return environment()->Top(); } 708 HValue* Top() const { return environment()->Top(); }
689 void Drop(int n) { environment()->Drop(n); } 709 void Drop(int n) { environment()->Drop(n); }
690 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); } 710 void Bind(Variable* var, HValue* value) { environment()->Bind(var, value); }
691 711
692 void VisitForValue(Expression* expr); 712 void VisitForValue(Expression* expr);
693 void VisitForEffect(Expression* expr); 713 void VisitForEffect(Expression* expr);
694 void VisitForControl(Expression* expr, 714 void VisitForControl(Expression* expr,
695 HBasicBlock* true_block, 715 HBasicBlock* true_block,
696 HBasicBlock* false_block, 716 HBasicBlock* false_block);
697 bool invert_true,
698 bool invert_false);
699 717
700 // Visit an expression in a 'condition' context, i.e., in a control
701 // context but not a subexpression of logical and, or, or not.
702 void VisitCondition(Expression* expr,
703 HBasicBlock* true_graph,
704 HBasicBlock* false_graph,
705 bool invert_true,
706 bool invert_false);
707 // Visit an argument and wrap it in a PushArgument instruction. 718 // Visit an argument and wrap it in a PushArgument instruction.
708 HValue* VisitArgument(Expression* expr); 719 HValue* VisitArgument(Expression* expr);
709 void VisitArgumentList(ZoneList<Expression*>* arguments); 720 void VisitArgumentList(ZoneList<Expression*>* arguments);
710 721
711 HInstruction* AddInstruction(HInstruction* instr);
712 void AddSimulate(int id);
713 void AddPhi(HPhi* phi); 722 void AddPhi(HPhi* phi);
714 723
715 void PushAndAdd(HInstruction* instr); 724 void PushAndAdd(HInstruction* instr);
716 void PushAndAdd(HInstruction* instr, int position);
717 725
718 void PushArgumentsForStubCall(int argument_count); 726 void PushArgumentsForStubCall(int argument_count);
719 727
720 // Initialize the arguments to the call based on then environment, add it 728 // Remove the arguments from the bailout environment and emit instructions
721 // to the graph, and drop the arguments from the environment. 729 // to push them as outgoing parameters.
722 void ProcessCall(HCall* call, int source_position); 730 void ProcessCall(HCall* call);
723 731
724 void AssumeRepresentation(HValue* value, Representation r); 732 void AssumeRepresentation(HValue* value, Representation r);
725 static Representation ToRepresentation(TypeInfo info); 733 static Representation ToRepresentation(TypeInfo info);
726 734
727 void SetupScope(Scope* scope); 735 void SetupScope(Scope* scope);
728 virtual void VisitStatements(ZoneList<Statement*>* statements); 736 virtual void VisitStatements(ZoneList<Statement*>* statements);
729 737
730 #define DECLARE_VISIT(type) virtual void Visit##type(type* node); 738 #define DECLARE_VISIT(type) virtual void Visit##type(type* node);
731 AST_NODE_LIST(DECLARE_VISIT) 739 AST_NODE_LIST(DECLARE_VISIT)
732 #undef DECLARE_VISIT 740 #undef DECLARE_VISIT
733 741
734 bool ShouldPeel(HSubgraph* cond, HSubgraph* body); 742 bool ShouldPeel(HSubgraph* cond, HSubgraph* body);
735 743
736 HBasicBlock* CreateBasicBlock(HEnvironment* env); 744 HBasicBlock* CreateBasicBlock(HEnvironment* env);
737 HSubgraph* CreateEmptySubgraph(); 745 HSubgraph* CreateEmptySubgraph();
738 HSubgraph* CreateGotoSubgraph(HEnvironment* env); 746 HSubgraph* CreateGotoSubgraph(HEnvironment* env);
739 HSubgraph* CreateBranchSubgraph(HEnvironment* env); 747 HSubgraph* CreateBranchSubgraph(HEnvironment* env);
740 HSubgraph* CreateLoopHeaderSubgraph(HEnvironment* env); 748 HSubgraph* CreateLoopHeaderSubgraph(HEnvironment* env);
741 HSubgraph* CreateInlinedSubgraph(HEnvironment* outer, 749 HSubgraph* CreateInlinedSubgraph(HEnvironment* outer,
742 Handle<JSFunction> target, 750 Handle<JSFunction> target,
743 FunctionLiteral* function); 751 FunctionLiteral* function);
744 752
745 // Helpers for flow graph construction. 753 // Helpers for flow graph construction.
746 void LookupGlobalPropertyCell(VariableProxy* expr, 754 void LookupGlobalPropertyCell(Variable* var,
747 LookupResult* lookup, 755 LookupResult* lookup,
748 bool is_store); 756 bool is_store);
749 757
750 bool TryArgumentsAccess(Property* expr); 758 bool TryArgumentsAccess(Property* expr);
751 bool TryCallApply(Call* expr); 759 bool TryCallApply(Call* expr);
752 bool TryInline(Call* expr); 760 bool TryInline(Call* expr);
753 bool TryMathFunctionInline(Call* expr); 761 bool TryMathFunctionInline(Call* expr);
754 void TraceInline(Handle<JSFunction> target, bool result); 762 void TraceInline(Handle<JSFunction> target, bool result);
755 763
756 void HandleGlobalVariableAssignment(VariableProxy* proxy, 764 void HandleGlobalVariableAssignment(Variable* var,
757 HValue* value, 765 HValue* value,
758 int position); 766 int position,
759 void HandleGlobalVariableLoad(VariableProxy* expr); 767 int ast_id);
768
760 void HandlePropertyAssignment(Assignment* expr); 769 void HandlePropertyAssignment(Assignment* expr);
761 void HandleCompoundAssignment(Assignment* expr); 770 void HandleCompoundAssignment(Assignment* expr);
762 void HandlePolymorphicLoadNamedField(Property* expr, 771 void HandlePolymorphicLoadNamedField(Property* expr,
763 HValue* object, 772 HValue* object,
764 ZoneMapList* types, 773 ZoneMapList* types,
765 Handle<String> name); 774 Handle<String> name);
766 void HandlePolymorphicStoreNamedField(Assignment* expr, 775 void HandlePolymorphicStoreNamedField(Assignment* expr,
767 HValue* object, 776 HValue* object,
768 HValue* value, 777 HValue* value,
769 ZoneMapList* types, 778 ZoneMapList* types,
770 Handle<String> name); 779 Handle<String> name);
771 void HandlePolymorphicCallNamed(Call* expr, 780 void HandlePolymorphicCallNamed(Call* expr,
772 HValue* receiver, 781 HValue* receiver,
773 ZoneMapList* types, 782 ZoneMapList* types,
774 Handle<String> name); 783 Handle<String> name);
775 784
776 HInstruction* BuildBinaryOperation(BinaryOperation* expr, 785 HInstruction* BuildBinaryOperation(BinaryOperation* expr,
777 HValue* left, 786 HValue* left,
778 HValue* right); 787 HValue* right);
779 HInstruction* BuildIncrement(HValue* value, bool increment); 788 HInstruction* BuildIncrement(HValue* value, bool increment);
780 HInstruction* BuildLoadNamedField(HValue* object, 789 HLoadNamedField* BuildLoadNamedField(HValue* object,
781 Property* expr, 790 Property* expr,
782 Handle<Map> type, 791 Handle<Map> type,
783 LookupResult* result, 792 LookupResult* result,
784 bool smi_and_map_check); 793 bool smi_and_map_check);
785 HInstruction* BuildLoadNamedGeneric(HValue* object, Property* expr); 794 HInstruction* BuildLoadNamedGeneric(HValue* object, Property* expr);
786 HInstruction* BuildLoadKeyedFastElement(HValue* object, 795 HInstruction* BuildLoadKeyedFastElement(HValue* object,
787 HValue* key, 796 HValue* key,
788 Property* expr); 797 Property* expr);
789 HInstruction* BuildLoadKeyedGeneric(HValue* object, 798 HInstruction* BuildLoadKeyedGeneric(HValue* object,
790 HValue* key); 799 HValue* key);
791 800
792 HInstruction* BuildLoadNamed(HValue* object, 801 HInstruction* BuildLoadNamed(HValue* object,
793 Property* prop, 802 Property* prop,
794 Handle<Map> map, 803 Handle<Map> map,
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 const char* filename_; 1061 const char* filename_;
1053 HeapStringAllocator string_allocator_; 1062 HeapStringAllocator string_allocator_;
1054 StringStream trace_; 1063 StringStream trace_;
1055 int indent_; 1064 int indent_;
1056 }; 1065 };
1057 1066
1058 1067
1059 } } // namespace v8::internal 1068 } } // namespace v8::internal
1060 1069
1061 #endif // V8_HYDROGEN_H_ 1070 #endif // V8_HYDROGEN_H_
OLDNEW
« no previous file with comments | « src/heap-profiler.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698