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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/ssa/optimize.dart

Issue 171873002: Fix for interpolation codegen bug (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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
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 part of ssa; 5 part of ssa;
6 6
7 abstract class OptimizationPhase { 7 abstract class OptimizationPhase {
8 String get name; 8 String get name;
9 void visitGraph(HGraph graph); 9 void visitGraph(HGraph graph);
10 } 10 }
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 if (input.isExtendableArray(compiler)) { 256 if (input.isExtendableArray(compiler)) {
257 if (selector.applies(backend.jsArrayRemoveLast, compiler)) { 257 if (selector.applies(backend.jsArrayRemoveLast, compiler)) {
258 target = backend.jsArrayRemoveLast; 258 target = backend.jsArrayRemoveLast;
259 } else if (selector.applies(backend.jsArrayAdd, compiler)) { 259 } else if (selector.applies(backend.jsArrayAdd, compiler)) {
260 // The codegen special cases array calls, but does not 260 // The codegen special cases array calls, but does not
261 // inline argument type checks. 261 // inline argument type checks.
262 if (!compiler.enableTypeAssertions) { 262 if (!compiler.enableTypeAssertions) {
263 target = backend.jsArrayAdd; 263 target = backend.jsArrayAdd;
264 } 264 }
265 } 265 }
266 } else if (input.isString(compiler)) { 266 } else if (input.isStringOrNull(compiler)) {
267 if (selector.applies(backend.jsStringSplit, compiler)) { 267 if (selector.applies(backend.jsStringSplit, compiler)) {
268 HInstruction argument = node.inputs[2]; 268 HInstruction argument = node.inputs[2];
269 if (argument.isString(compiler) && !argument.canBeNull()) { 269 if (argument.isString(compiler)) {
270 target = backend.jsStringSplit; 270 target = backend.jsStringSplit;
271 } 271 }
272 } else if (selector.applies(backend.jsStringOperatorAdd, compiler)) { 272 } else if (selector.applies(backend.jsStringOperatorAdd, compiler)) {
273 // `operator+` is turned into a JavaScript '+' so we need to 273 // `operator+` is turned into a JavaScript '+' so we need to
274 // make sure the receiver and the argument are not null. 274 // make sure the receiver and the argument are not null.
275 HInstruction argument = node.inputs[2]; 275 HInstruction argument = node.inputs[2];
276 if (argument.isString(compiler) 276 if (argument.isString(compiler)
277 && !argument.canBeNull()
278 && !input.canBeNull()) { 277 && !input.canBeNull()) {
279 target = backend.jsStringOperatorAdd; 278 target = backend.jsStringOperatorAdd;
280 } 279 }
281 } else if (selector.applies(backend.jsStringToString, compiler) 280 } else if (selector.applies(backend.jsStringToString, compiler)
282 && !input.canBeNull()) { 281 && !input.canBeNull()) {
283 return input; 282 return input;
284 } 283 }
285 } 284 }
286 if (target != null) { 285 if (target != null) {
287 // TODO(ngeoffray): There is a strong dependency between codegen 286 // TODO(ngeoffray): There is a strong dependency between codegen
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 HInstruction folded = graph.addConstant( 784 HInstruction folded = graph.addConstant(
786 constantSystem.createString( 785 constantSystem.createString(
787 new DartString.concat(leftString.value, rightString.value)), 786 new DartString.concat(leftString.value, rightString.value)),
788 compiler); 787 compiler);
789 if (prefix == null) return folded; 788 if (prefix == null) return folded;
790 return new HStringConcat(prefix, folded, node.node, backend.stringType); 789 return new HStringConcat(prefix, folded, node.node, backend.stringType);
791 } 790 }
792 791
793 HInstruction visitStringify(HStringify node) { 792 HInstruction visitStringify(HStringify node) {
794 HInstruction input = node.inputs[0]; 793 HInstruction input = node.inputs[0];
795 if (input.isString(compiler) && !input.canBeNull()) return input; 794 if (input.isString(compiler)) return input;
796 if (input.isConstant()) { 795 if (input.isConstant()) {
797 HConstant constant = input; 796 HConstant constant = input;
798 if (!constant.constant.isPrimitive()) return node; 797 if (!constant.constant.isPrimitive()) return node;
799 PrimitiveConstant primitive = constant.constant; 798 PrimitiveConstant primitive = constant.constant;
800 return graph.addConstant(constantSystem.createString( 799 return graph.addConstant(constantSystem.createString(
801 primitive.toDartString()), compiler); 800 primitive.toDartString()), compiler);
802 } 801 }
803 return node; 802 return node;
804 } 803 }
805 804
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1966 1965
1967 keyedValues.forEach((receiver, values) { 1966 keyedValues.forEach((receiver, values) {
1968 result.keyedValues[receiver] = 1967 result.keyedValues[receiver] =
1969 new Map<HInstruction, HInstruction>.from(values); 1968 new Map<HInstruction, HInstruction>.from(values);
1970 }); 1969 });
1971 1970
1972 result.nonEscapingReceivers.addAll(nonEscapingReceivers); 1971 result.nonEscapingReceivers.addAll(nonEscapingReceivers);
1973 return result; 1972 return result;
1974 } 1973 }
1975 } 1974 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698