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

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

Issue 11958009: Do not track parameter types of closures, since closure calls can be generated during the emitter. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 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 class SsaCodeGeneratorTask extends CompilerTask { 7 class SsaCodeGeneratorTask extends CompilerTask {
8 8
9 final JavaScriptBackend backend; 9 final JavaScriptBackend backend;
10 10
(...skipping 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after
1642 } 1642 }
1643 1643
1644 visitInvokeClosure(HInvokeClosure node) { 1644 visitInvokeClosure(HInvokeClosure node) {
1645 Selector call = new Selector.callClosureFrom(node.selector); 1645 Selector call = new Selector.callClosureFrom(node.selector);
1646 use(node.receiver); 1646 use(node.receiver);
1647 push(jsPropertyCall(pop(), 1647 push(jsPropertyCall(pop(),
1648 backend.namer.invocationName(call), 1648 backend.namer.invocationName(call),
1649 visitArguments(node.inputs)), 1649 visitArguments(node.inputs)),
1650 node); 1650 node);
1651 world.registerDynamicInvocation(call.name, call); 1651 world.registerDynamicInvocation(call.name, call);
1652 // A closure can also be invoked through [HInvokeDynamicMethod] by
1653 // explicitly calling the [:call:] method. Therefore, we must also
1654 // register types here to let the backend invalidate wrong
1655 // optimizations.
1656 backend.registerDynamicInvocation(node, call, types);
1657 } 1652 }
1658 1653
1659 visitInvokeStatic(HInvokeStatic node) { 1654 visitInvokeStatic(HInvokeStatic node) {
1660 if (node.typeCode() == HInstruction.INVOKE_STATIC_TYPECODE) { 1655 if (node.typeCode() == HInstruction.INVOKE_STATIC_TYPECODE) {
1661 // Register this invocation to collect the types used at all call sites. 1656 // Register this invocation to collect the types used at all call sites.
1662 backend.registerStaticInvocation(node, types); 1657 backend.registerStaticInvocation(node, types);
1663 } 1658 }
1664 use(node.target); 1659 use(node.target);
1665 push(new js.Call(pop(), visitArguments(node.inputs)), node); 1660 push(new js.Call(pop(), visitArguments(node.inputs)), node);
1666 } 1661 }
(...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after
3019 if (leftType.canBeNull() && rightType.canBeNull()) { 3014 if (leftType.canBeNull() && rightType.canBeNull()) {
3020 if (left.isConstantNull() || right.isConstantNull() || 3015 if (left.isConstantNull() || right.isConstantNull() ||
3021 (leftType.isPrimitive() && leftType == rightType)) { 3016 (leftType.isPrimitive() && leftType == rightType)) {
3022 return '=='; 3017 return '==';
3023 } 3018 }
3024 return null; 3019 return null;
3025 } else { 3020 } else {
3026 return '==='; 3021 return '===';
3027 } 3022 }
3028 } 3023 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698