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

Unified Diff: runtime/vm/parser.cc

Issue 10354019: Removing all incr-op nodes. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 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
« no previous file with comments | « runtime/vm/opt_code_generator_ia32.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 7300)
+++ runtime/vm/parser.cc (working copy)
@@ -6153,25 +6153,17 @@
if (!IsAssignableExpr(expr)) {
ErrorMsg("expression is not assignable");
}
- // TODO(srdjan): Implement transformation for all.
- if (expr->IsLoadStaticFieldNode() || expr->IsStaticGetterNode()) {
- Token::Kind binary_op =
- (incr_op == Token::kINCR) ? Token::kADD : Token::kSUB;
- BinaryOpNode* add = new BinaryOpNode(
- op_pos,
- binary_op,
- expr,
- new LiteralNode(op_pos, Smi::ZoneHandle(Smi::New(1))));
- AstNode* store = expr->MakeAssignmentNode(add);
- expr = store;
- } else {
- // is_prefix.
- AstNode* incr_op_node = expr->MakeIncrOpNode(op_pos, incr_op, true);
- if (incr_op_node == NULL) {
- Unimplemented("incr operation not implemented");
- }
- expr = incr_op_node;
- }
+ // Is prefix.
+ AstNode* left_expr = PrepareCompoundAssignmentNodes(&expr);
+ Token::Kind binary_op =
+ (incr_op == Token::kINCR) ? Token::kADD : Token::kSUB;
+ BinaryOpNode* add = new BinaryOpNode(
+ op_pos,
+ binary_op,
+ expr,
+ new LiteralNode(op_pos, Smi::ZoneHandle(Smi::New(1))));
+ AstNode* store = left_expr->MakeAssignmentNode(add);
+ expr = store;
} else {
expr = ParsePostfixExpr();
}
@@ -6647,31 +6639,21 @@
}
ConsumeToken();
// Not prefix.
- if (postfix_expr->IsLoadStaticFieldNode() ||
- postfix_expr->IsStaticGetterNode() ||
- postfix_expr->IsLoadLocalNode()) {
- const LocalVariable& temp = GetIncrementTempLocal();
- AstNode* save =
- new StoreLocalNode(postfix_expr_pos, temp, postfix_expr);
- Token::Kind binary_op =
- (incr_op == Token::kINCR) ? Token::kADD : Token::kSUB;
- BinaryOpNode* add = new BinaryOpNode(
- postfix_expr_pos,
- binary_op,
- save,
- new LiteralNode(postfix_expr_pos, Smi::ZoneHandle(Smi::New(1))));
- AstNode* store = postfix_expr->MakeAssignmentNode(add);
- LoadLocalNode* load_res =
- new LoadLocalNode(postfix_expr_pos, temp, store);
- return load_res;
- } else {
- AstNode* incr_op_node =
- postfix_expr->MakeIncrOpNode(postfix_expr_pos, incr_op, false);
- if (incr_op_node == NULL) {
- Unimplemented("incr op not implemented");
- }
- postfix_expr = incr_op_node;
- }
+ AstNode* left_expr = PrepareCompoundAssignmentNodes(&postfix_expr);
+ const LocalVariable& temp = GetIncrementTempLocal();
+ AstNode* save =
+ new StoreLocalNode(postfix_expr_pos, temp, postfix_expr);
+ Token::Kind binary_op =
+ (incr_op == Token::kINCR) ? Token::kADD : Token::kSUB;
+ BinaryOpNode* add = new BinaryOpNode(
+ postfix_expr_pos,
+ binary_op,
+ save,
+ new LiteralNode(postfix_expr_pos, Smi::ZoneHandle(Smi::New(1))));
+ AstNode* store = left_expr->MakeAssignmentNode(add);
+ LoadLocalNode* load_res =
+ new LoadLocalNode(postfix_expr_pos, temp, store);
+ return load_res;
}
return postfix_expr;
}
« no previous file with comments | « runtime/vm/opt_code_generator_ia32.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698