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

Side by Side Diff: pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart

Issue 1526623004: cps_ir: Add JS checks, use argument nullability (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library tree_ir.optimization.statement_rewriter; 5 library tree_ir.optimization.statement_rewriter;
6 6
7 import 'optimization.dart' show Pass; 7 import 'optimization.dart' show Pass;
8 import '../tree_ir_nodes.dart'; 8 import '../tree_ir_nodes.dart';
9 import '../../io/source_information.dart'; 9 import '../../io/source_information.dart';
10 import '../../elements/elements.dart'; 10 import '../../elements/elements.dart';
(...skipping 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 } 1137 }
1138 1138
1139 Statement getBranch(If node, bool polarity) { 1139 Statement getBranch(If node, bool polarity) {
1140 return polarity ? node.thenStatement : node.elseStatement; 1140 return polarity ? node.thenStatement : node.elseStatement;
1141 } 1141 }
1142 1142
1143 void handleForeignCode(ForeignCode node) { 1143 void handleForeignCode(ForeignCode node) {
1144 // Some arguments will get inserted in a JS code template. The arguments 1144 // Some arguments will get inserted in a JS code template. The arguments
1145 // will not always be evaluated (e.g. the second placeholder in the template 1145 // will not always be evaluated (e.g. the second placeholder in the template
1146 // '# && #'). 1146 // '# && #').
1147 1147 bool isNullable(int position) => node.nullableArguments[position];
1148 // TODO(sra): Find out which tree_ir expressions are not nullable. It helps
1149 // a lot with templates like '#.push(#)'.
1150 bool isNullable(e) => true;
1151 1148
1152 int safeArguments = 1149 int safeArguments =
1153 PlaceholderSafetyAnalysis.analyze(node.codeTemplate.ast, isNullable); 1150 PlaceholderSafetyAnalysis.analyze(node.codeTemplate.ast, isNullable);
1154 inEmptyEnvironment(() { 1151 inEmptyEnvironment(() {
1155 for (int i = node.arguments.length - 1; i >= safeArguments; --i) { 1152 for (int i = node.arguments.length - 1; i >= safeArguments; --i) {
1156 node.arguments[i] = visitExpression(node.arguments[i]); 1153 node.arguments[i] = visitExpression(node.arguments[i]);
1157 } 1154 }
1158 }); 1155 });
1159 for (int i = safeArguments - 1; i >= 0; --i) { 1156 for (int i = safeArguments - 1; i >= 0; --i) {
1160 node.arguments[i] = visitExpression(node.arguments[i]); 1157 node.arguments[i] = visitExpression(node.arguments[i]);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 VariableUseCallback callback; 1285 VariableUseCallback callback;
1289 1286
1290 VariableUseVisitor(this.callback); 1287 VariableUseVisitor(this.callback);
1291 1288
1292 visitVariableUse(VariableUse use) => callback(use); 1289 visitVariableUse(VariableUse use) => callback(use);
1293 1290
1294 static void visit(Expression node, VariableUseCallback callback) { 1291 static void visit(Expression node, VariableUseCallback callback) {
1295 new VariableUseVisitor(callback).visitExpression(node); 1292 new VariableUseVisitor(callback).visitExpression(node);
1296 } 1293 }
1297 } 1294 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698