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

Unified Diff: runtime/vm/ast_transformer.cc

Issue 508643004: Fix scope/context behavior in await transformer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add await_is_keyword_ indicator to parser 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/ast_transformer.cc
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index 6ef865f0e246a4e88846d46a2240b562078efbf2..f0d8848f4279d61f873f7c9b0fb974825c1690f1 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -49,6 +49,12 @@ AstNode* AwaitTransformer::Transform(AstNode* expr) {
}
+LocalScope* AwaitTransformer::NewScope(LocalScope* parent) {
+ return new (I) LocalScope(
+ parent, parent->function_level(), parent->loop_level());
+}
+
+
LocalVariable* AwaitTransformer::EnsureCurrentTempVar() {
const char* await_temp_prefix = ":await_temp_var_";
const String& cnt_str = String::ZoneHandle(
@@ -113,7 +119,7 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) {
LoadLocalNode* load_result_param = new(I) LoadLocalNode(
Scanner::kNoSourcePos, result_param);
SequenceNode* is_future_branch = new(I) SequenceNode(
- Scanner::kNoSourcePos, preamble_->scope());
+ Scanner::kNoSourcePos, NewScope(preamble_->scope()));
AwaitMarkerNode* await_marker =
new(I) AwaitMarkerNode(AwaitMarkerNode::kNewContinuationState);
await_marker->set_scope(preamble_->scope());
@@ -180,7 +186,7 @@ AstNode* AwaitTransformer::LazyTransform(const Token::Kind logical_op,
const Token::Kind compare_logical_op = (logical_op == Token::kAND) ?
Token::kEQ : Token::kNE;
SequenceNode* eval = new(I) SequenceNode(
- Scanner::kNoSourcePos, preamble_->scope());
+ Scanner::kNoSourcePos, NewScope(preamble_->scope()));
SequenceNode* saved_preamble = preamble_;
preamble_ = eval;
result = Transform(right);
@@ -264,12 +270,12 @@ void AwaitTransformer::VisitUnaryOpNode(UnaryOpNode* node) {
void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) {
AstNode* new_condition = Transform(node->condition());
SequenceNode* new_true = new(I) SequenceNode(
- Scanner::kNoSourcePos, preamble_->scope());
+ Scanner::kNoSourcePos, NewScope(preamble_->scope()));
SequenceNode* saved_preamble = preamble_;
preamble_ = new_true;
AstNode* new_true_result = Transform(node->true_expr());
SequenceNode* new_false = new(I) SequenceNode(
- Scanner::kNoSourcePos, preamble_->scope());
+ Scanner::kNoSourcePos, NewScope(preamble_->scope()));
preamble_ = new_false;
AstNode* new_false_result = Transform(node->false_expr());
preamble_ = saved_preamble;
« no previous file with comments | « runtime/vm/ast_transformer.h ('k') | runtime/vm/parser.h » ('j') | runtime/vm/parser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698