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

Side by Side Diff: runtime/vm/parser.h

Issue 14942010: Eliminate temporary locals for some expressions (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/parser.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_PARSER_H_ 5 #ifndef VM_PARSER_H_
6 #define VM_PARSER_H_ 6 #define VM_PARSER_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 9
10 #include "lib/invocation_mirror.h" 10 #include "lib/invocation_mirror.h"
(...skipping 21 matching lines...) Expand all
32 class ParsedFunction : public ZoneAllocated { 32 class ParsedFunction : public ZoneAllocated {
33 public: 33 public:
34 explicit ParsedFunction(const Function& function) 34 explicit ParsedFunction(const Function& function)
35 : function_(function), 35 : function_(function),
36 node_sequence_(NULL), 36 node_sequence_(NULL),
37 instantiator_(NULL), 37 instantiator_(NULL),
38 default_parameter_values_(Array::ZoneHandle()), 38 default_parameter_values_(Array::ZoneHandle()),
39 saved_current_context_var_(NULL), 39 saved_current_context_var_(NULL),
40 saved_entry_context_var_(NULL), 40 saved_entry_context_var_(NULL),
41 expression_temp_var_(NULL), 41 expression_temp_var_(NULL),
42 array_literal_var_(NULL),
43 first_parameter_index_(0), 42 first_parameter_index_(0),
44 first_stack_local_index_(0), 43 first_stack_local_index_(0),
45 num_copied_params_(0), 44 num_copied_params_(0),
46 num_stack_locals_(0) { 45 num_stack_locals_(0) {
47 ASSERT(function.IsZoneHandle()); 46 ASSERT(function.IsZoneHandle());
48 } 47 }
49 48
50 const Function& function() const { return function_; } 49 const Function& function() const { return function_; }
51 50
52 SequenceNode* node_sequence() const { return node_sequence_; } 51 SequenceNode* node_sequence() const { return node_sequence_; }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 94 }
96 void set_expression_temp_var(LocalVariable* value) { 95 void set_expression_temp_var(LocalVariable* value) {
97 ASSERT(!has_expression_temp_var()); 96 ASSERT(!has_expression_temp_var());
98 expression_temp_var_ = value; 97 expression_temp_var_ = value;
99 } 98 }
100 bool has_expression_temp_var() const { 99 bool has_expression_temp_var() const {
101 return expression_temp_var_ != NULL; 100 return expression_temp_var_ != NULL;
102 } 101 }
103 static LocalVariable* CreateExpressionTempVar(intptr_t token_pos); 102 static LocalVariable* CreateExpressionTempVar(intptr_t token_pos);
104 103
105 void set_array_literal_var(LocalVariable* local) {
106 ASSERT((local != NULL) && (array_literal_var_ == NULL));
107 array_literal_var_ = local;
108 }
109 LocalVariable* array_literal_var() const {
110 ASSERT(array_literal_var_ != NULL);
111 return array_literal_var_;
112 }
113
114 static LocalVariable* CreateArrayLiteralVar(intptr_t token_pos);
115
116 int first_parameter_index() const { return first_parameter_index_; } 104 int first_parameter_index() const { return first_parameter_index_; }
117 int first_stack_local_index() const { return first_stack_local_index_; } 105 int first_stack_local_index() const { return first_stack_local_index_; }
118 int num_copied_params() const { return num_copied_params_; } 106 int num_copied_params() const { return num_copied_params_; }
119 int num_stack_locals() const { return num_stack_locals_; } 107 int num_stack_locals() const { return num_stack_locals_; }
120 108
121 void AllocateVariables(); 109 void AllocateVariables();
122 110
123 private: 111 private:
124 const Function& function_; 112 const Function& function_;
125 SequenceNode* node_sequence_; 113 SequenceNode* node_sequence_;
126 AstNode* instantiator_; 114 AstNode* instantiator_;
127 Array& default_parameter_values_; 115 Array& default_parameter_values_;
128 LocalVariable* saved_current_context_var_; 116 LocalVariable* saved_current_context_var_;
129 LocalVariable* saved_entry_context_var_; 117 LocalVariable* saved_entry_context_var_;
130 LocalVariable* expression_temp_var_; 118 LocalVariable* expression_temp_var_;
131 // TODO(hausner): Remove once ArrayNode creation is removed from flow
132 // graph builder.
133 LocalVariable* array_literal_var_;
134 119
135 int first_parameter_index_; 120 int first_parameter_index_;
136 int first_stack_local_index_; 121 int first_stack_local_index_;
137 int num_copied_params_; 122 int num_copied_params_;
138 int num_stack_locals_; 123 int num_stack_locals_;
139 124
140 DISALLOW_COPY_AND_ASSIGN(ParsedFunction); 125 DISALLOW_COPY_AND_ASSIGN(ParsedFunction);
141 }; 126 };
142 127
143 128
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 bool allow_closure_names); 578 bool allow_closure_names);
594 RawString* ResolveImportVar(intptr_t ident_pos, const String& ident); 579 RawString* ResolveImportVar(intptr_t ident_pos, const String& ident);
595 AstNode* OptimizeBinaryOpNode(intptr_t op_pos, 580 AstNode* OptimizeBinaryOpNode(intptr_t op_pos,
596 Token::Kind binary_op, 581 Token::Kind binary_op,
597 AstNode* lhs, 582 AstNode* lhs,
598 AstNode* rhs); 583 AstNode* rhs);
599 AstNode* ExpandAssignableOp(intptr_t op_pos, 584 AstNode* ExpandAssignableOp(intptr_t op_pos,
600 Token::Kind assignment_op, 585 Token::Kind assignment_op,
601 AstNode* lhs, 586 AstNode* lhs,
602 AstNode* rhs); 587 AstNode* rhs);
603 AstNode* PrepareCompoundAssignmentNodes(AstNode** expr); 588 LetNode* PrepareCompoundAssignmentNodes(AstNode** expr);
604 LocalVariable* CreateTempConstVariable(intptr_t token_pos, const char* s); 589 LocalVariable* CreateTempConstVariable(intptr_t token_pos, const char* s);
605 590
606 static bool IsAssignableExpr(AstNode* expr); 591 static bool IsAssignableExpr(AstNode* expr);
607 592
608 static SequenceNode* NodeAsSequenceNode(intptr_t sequence_pos, 593 static SequenceNode* NodeAsSequenceNode(intptr_t sequence_pos,
609 AstNode* node, 594 AstNode* node,
610 LocalScope* scope); 595 LocalScope* scope);
611 596
612 SequenceNode* MakeImplicitConstructor(const Function& func); 597 SequenceNode* MakeImplicitConstructor(const Function& func);
613 AstNode* MakeStaticCall(const String& cls_name, 598 AstNode* MakeStaticCall(const String& cls_name,
(...skipping 15 matching lines...) Expand all
629 void EnsureSavedCurrentContext(); 614 void EnsureSavedCurrentContext();
630 AstNode* CreateAssignmentNode(AstNode* original, AstNode* rhs); 615 AstNode* CreateAssignmentNode(AstNode* original, AstNode* rhs);
631 AstNode* InsertClosureCallNodes(AstNode* condition); 616 AstNode* InsertClosureCallNodes(AstNode* condition);
632 617
633 ConstructorCallNode* CreateConstructorCallNode( 618 ConstructorCallNode* CreateConstructorCallNode(
634 intptr_t token_pos, 619 intptr_t token_pos,
635 const AbstractTypeArguments& type_arguments, 620 const AbstractTypeArguments& type_arguments,
636 const Function& constructor, 621 const Function& constructor,
637 ArgumentListNode* arguments); 622 ArgumentListNode* arguments);
638 623
639 LocalVariable* BuildArrayTempLocal(intptr_t token_pos);
640
641 Script& script_; 624 Script& script_;
642 TokenStream::Iterator tokens_iterator_; 625 TokenStream::Iterator tokens_iterator_;
643 Token::Kind token_kind_; // Cached token kind for current token. 626 Token::Kind token_kind_; // Cached token kind for current token.
644 Block* current_block_; 627 Block* current_block_;
645 628
646 // is_top_level_ is true if parsing the "top level" of a compilation unit, 629 // is_top_level_ is true if parsing the "top level" of a compilation unit,
647 // that is class definitions, function type aliases, global functions, 630 // that is class definitions, function type aliases, global functions,
648 // global variables. 631 // global variables.
649 bool is_top_level_; 632 bool is_top_level_;
650 633
(...skipping 25 matching lines...) Expand all
676 // code at all points in the try block where an exit from the block is 659 // code at all points in the try block where an exit from the block is
677 // done using 'return', 'break' or 'continue' statements. 660 // done using 'return', 'break' or 'continue' statements.
678 TryBlocks* try_blocks_list_; 661 TryBlocks* try_blocks_list_;
679 662
680 DISALLOW_COPY_AND_ASSIGN(Parser); 663 DISALLOW_COPY_AND_ASSIGN(Parser);
681 }; 664 };
682 665
683 } // namespace dart 666 } // namespace dart
684 667
685 #endif // VM_PARSER_H_ 668 #endif // VM_PARSER_H_
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698