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

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

Issue 447003003: Introduce await (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments Created 6 years, 4 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/flow_graph_builder.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 "platform/assert.h" 10 #include "platform/assert.h"
(...skipping 30 matching lines...) Expand all
41 ParsedFunction(Isolate* isolate, const Function& function) 41 ParsedFunction(Isolate* isolate, const Function& function)
42 : function_(function), 42 : function_(function),
43 code_(Code::Handle(isolate, function.unoptimized_code())), 43 code_(Code::Handle(isolate, function.unoptimized_code())),
44 node_sequence_(NULL), 44 node_sequence_(NULL),
45 instantiator_(NULL), 45 instantiator_(NULL),
46 default_parameter_values_(Array::ZoneHandle(isolate, Array::null())), 46 default_parameter_values_(Array::ZoneHandle(isolate, Array::null())),
47 saved_current_context_var_(NULL), 47 saved_current_context_var_(NULL),
48 saved_entry_context_var_(NULL), 48 saved_entry_context_var_(NULL),
49 expression_temp_var_(NULL), 49 expression_temp_var_(NULL),
50 finally_return_temp_var_(NULL), 50 finally_return_temp_var_(NULL),
51 await_temps_scope_(NULL),
51 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()), 52 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()),
52 first_parameter_index_(0), 53 first_parameter_index_(0),
53 first_stack_local_index_(0), 54 first_stack_local_index_(0),
54 num_copied_params_(0), 55 num_copied_params_(0),
55 num_stack_locals_(0), 56 num_stack_locals_(0),
57 have_seen_await_expr_(false),
56 isolate_(isolate) { 58 isolate_(isolate) {
57 ASSERT(function.IsZoneHandle()); 59 ASSERT(function.IsZoneHandle());
58 } 60 }
59 61
60 const Function& function() const { return function_; } 62 const Function& function() const { return function_; }
61 const Code& code() const { return code_; } 63 const Code& code() const { return code_; }
62 64
63 SequenceNode* node_sequence() const { return node_sequence_; } 65 SequenceNode* node_sequence() const { return node_sequence_; }
64 void SetNodeSequence(SequenceNode* node_sequence); 66 void SetNodeSequence(SequenceNode* node_sequence);
65 67
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 } 133 }
132 void AddDeferredPrefix(const LibraryPrefix& prefix); 134 void AddDeferredPrefix(const LibraryPrefix& prefix);
133 135
134 int first_parameter_index() const { return first_parameter_index_; } 136 int first_parameter_index() const { return first_parameter_index_; }
135 int first_stack_local_index() const { return first_stack_local_index_; } 137 int first_stack_local_index() const { return first_stack_local_index_; }
136 int num_copied_params() const { return num_copied_params_; } 138 int num_copied_params() const { return num_copied_params_; }
137 int num_stack_locals() const { return num_stack_locals_; } 139 int num_stack_locals() const { return num_stack_locals_; }
138 140
139 void AllocateVariables(); 141 void AllocateVariables();
140 142
143 void set_await_temps_scope(LocalScope* scope) {
144 ASSERT(await_temps_scope_ == NULL);
145 await_temps_scope_ = scope;
146 }
147 LocalScope* await_temps_scope() const {
148 ASSERT(await_temps_scope_ != NULL);
149 return await_temps_scope_;
150 }
151
152 void record_await() {
153 have_seen_await_expr_ = true;
154 }
155 void reset_have_seen_await() { have_seen_await_expr_ = false; }
156 bool have_seen_await() const { return have_seen_await_expr_; }
157
141 Isolate* isolate() const { return isolate_; } 158 Isolate* isolate() const { return isolate_; }
142 159
143 private: 160 private:
144 const Function& function_; 161 const Function& function_;
145 Code& code_; 162 Code& code_;
146 SequenceNode* node_sequence_; 163 SequenceNode* node_sequence_;
147 LocalVariable* instantiator_; 164 LocalVariable* instantiator_;
148 Array& default_parameter_values_; 165 Array& default_parameter_values_;
149 LocalVariable* saved_current_context_var_; 166 LocalVariable* saved_current_context_var_;
150 LocalVariable* saved_entry_context_var_; 167 LocalVariable* saved_entry_context_var_;
151 LocalVariable* expression_temp_var_; 168 LocalVariable* expression_temp_var_;
152 LocalVariable* finally_return_temp_var_; 169 LocalVariable* finally_return_temp_var_;
170 LocalScope* await_temps_scope_;
153 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_; 171 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
154 172
155 int first_parameter_index_; 173 int first_parameter_index_;
156 int first_stack_local_index_; 174 int first_stack_local_index_;
157 int num_copied_params_; 175 int num_copied_params_;
158 int num_stack_locals_; 176 int num_stack_locals_;
177 bool have_seen_await_expr_;
159 178
160 Isolate* isolate_; 179 Isolate* isolate_;
161 180
162 DISALLOW_COPY_AND_ASSIGN(ParsedFunction); 181 DISALLOW_COPY_AND_ASSIGN(ParsedFunction);
163 }; 182 };
164 183
165 184
166 class Parser : public ValueObject { 185 class Parser : public ValueObject {
167 public: 186 public:
168 // Parse the top level of a whole script file and register declared classes 187 // Parse the top level of a whole script file and register declared classes
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 SequenceNode* ParseInvokeFieldDispatcher(const Function& func, 514 SequenceNode* ParseInvokeFieldDispatcher(const Function& func,
496 Array* default_values); 515 Array* default_values);
497 void BuildDispatcherScope(const Function& func, 516 void BuildDispatcherScope(const Function& func,
498 const ArgumentsDescriptor& desc, 517 const ArgumentsDescriptor& desc,
499 Array* default_values); 518 Array* default_values);
500 519
501 void ChainNewBlock(LocalScope* outer_scope); 520 void ChainNewBlock(LocalScope* outer_scope);
502 void OpenBlock(); 521 void OpenBlock();
503 void OpenLoopBlock(); 522 void OpenLoopBlock();
504 void OpenFunctionBlock(const Function& func); 523 void OpenFunctionBlock(const Function& func);
524 void OpenAsyncClosure();
505 RawFunction* OpenAsyncFunction(intptr_t formal_param_pos); 525 RawFunction* OpenAsyncFunction(intptr_t formal_param_pos);
506 SequenceNode* CloseBlock(); 526 SequenceNode* CloseBlock();
507 SequenceNode* CloseAsyncFunction(const Function& closure, 527 SequenceNode* CloseAsyncFunction(const Function& closure,
508 SequenceNode* closure_node); 528 SequenceNode* closure_node);
509 void CloseAsyncClosure(SequenceNode* body); 529 void CloseAsyncClosure(SequenceNode* body);
510 530
511 531
512 LocalVariable* LookupPhaseParameter(); 532 LocalVariable* LookupPhaseParameter();
513 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only); 533 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only);
514 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope, 534 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 bool IsFunctionLiteral(); 599 bool IsFunctionLiteral();
580 bool IsForInStatement(); 600 bool IsForInStatement();
581 bool IsTopLevelAccessor(); 601 bool IsTopLevelAccessor();
582 602
583 AstNode* ParseBinaryExpr(int min_preced); 603 AstNode* ParseBinaryExpr(int min_preced);
584 LiteralNode* ParseConstExpr(); 604 LiteralNode* ParseConstExpr();
585 static const bool kRequireConst = true; 605 static const bool kRequireConst = true;
586 static const bool kAllowConst = false; 606 static const bool kAllowConst = false;
587 static const bool kConsumeCascades = true; 607 static const bool kConsumeCascades = true;
588 static const bool kNoCascades = false; 608 static const bool kNoCascades = false;
609 AstNode* ParseAwaitableExpr(bool require_compiletime_const,
610 bool consume_cascades);
589 AstNode* ParseExpr(bool require_compiletime_const, bool consume_cascades); 611 AstNode* ParseExpr(bool require_compiletime_const, bool consume_cascades);
590 AstNode* ParseExprList(); 612 AstNode* ParseExprList();
591 AstNode* ParseConditionalExpr(); 613 AstNode* ParseConditionalExpr();
592 AstNode* ParseUnaryExpr(); 614 AstNode* ParseUnaryExpr();
593 AstNode* ParsePostfixExpr(); 615 AstNode* ParsePostfixExpr();
594 AstNode* ParseSelectors(AstNode* primary, bool is_cascade); 616 AstNode* ParseSelectors(AstNode* primary, bool is_cascade);
595 AstNode* ParseCascades(AstNode* expr); 617 AstNode* ParseCascades(AstNode* expr);
596 AstNode* ParsePrimary(); 618 AstNode* ParsePrimary();
597 AstNode* ParseStringLiteral(bool allow_interpolation); 619 AstNode* ParseStringLiteral(bool allow_interpolation);
598 String* ParseImportStringLiteral(); 620 String* ParseImportStringLiteral();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 int16_t last_used_try_index_; 778 int16_t last_used_try_index_;
757 779
758 bool unregister_pending_function_; 780 bool unregister_pending_function_;
759 781
760 DISALLOW_COPY_AND_ASSIGN(Parser); 782 DISALLOW_COPY_AND_ASSIGN(Parser);
761 }; 783 };
762 784
763 } // namespace dart 785 } // namespace dart
764 786
765 #endif // VM_PARSER_H_ 787 #endif // VM_PARSER_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_builder.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698