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

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

Issue 12330135: Make instance methods whose names collide with intercepted methods have the interceptor calling con… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 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 HVisitor<R> { 7 abstract class HVisitor<R> {
8 R visitAdd(HAdd node); 8 R visitAdd(HAdd node);
9 R visitBailoutTarget(HBailoutTarget node); 9 R visitBailoutTarget(HBailoutTarget node);
10 R visitBitAnd(HBitAnd node); 10 R visitBitAnd(HBitAnd node);
(...skipping 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1309 List<HInstruction> inputs, 1309 List<HInstruction> inputs,
1310 [bool isIntercepted = false]) 1310 [bool isIntercepted = false])
1311 : super(inputs), 1311 : super(inputs),
1312 this.selector = selector, 1312 this.selector = selector,
1313 specializer = isIntercepted 1313 specializer = isIntercepted
1314 ? InvokeDynamicSpecializer.lookupSpecializer(selector) 1314 ? InvokeDynamicSpecializer.lookupSpecializer(selector)
1315 : const InvokeDynamicSpecializer(); 1315 : const InvokeDynamicSpecializer();
1316 toString() => 'invoke dynamic: $selector'; 1316 toString() => 'invoke dynamic: $selector';
1317 HInstruction get receiver => inputs[0]; 1317 HInstruction get receiver => inputs[0];
1318 1318
1319 /**
1320 * Returns whether this call is on an intercepted method.
1321 */
1319 bool get isInterceptorCall { 1322 bool get isInterceptorCall {
1320 // We know it's a selector call if it follows the interceptor 1323 // We know it's a selector call if it follows the interceptor
1321 // calling convention, which adds the actual receiver as a 1324 // calling convention, which adds the actual receiver as a
1322 // parameter to the call. 1325 // parameter to the call.
1323 return inputs.length - 2 == selector.argumentCount; 1326 return inputs.length - 2 == selector.argumentCount;
1324 } 1327 }
1325 1328
1329 /**
1330 * Returns whether this call is on an interceptor object.
1331 */
1332 bool get isCallOnInterceptor {
1333 // When the optimizers know this call does not need an
1334 // interceptor, they udpate the receiver of the call to be the
1335 // actual receiver.
1336 // TODO(ngeoffray): This is very fragile and we should inspect the
1337 // receiver instead.
1338 return isInterceptorCall && inputs[0] != inputs[1];
1339 }
1340
1326 int typeCode() => HInstruction.INVOKE_DYNAMIC_TYPECODE; 1341 int typeCode() => HInstruction.INVOKE_DYNAMIC_TYPECODE;
1327 bool typeEquals(other) => other is HInvokeDynamic; 1342 bool typeEquals(other) => other is HInvokeDynamic;
1328 bool dataEquals(HInvokeDynamic other) { 1343 bool dataEquals(HInvokeDynamic other) {
1329 return selector == other.selector && element == other.element; 1344 return selector == other.selector && element == other.element;
1330 } 1345 }
1331 } 1346 }
1332 1347
1333 class HInvokeClosure extends HInvokeDynamic { 1348 class HInvokeClosure extends HInvokeDynamic {
1334 HInvokeClosure(Selector selector, List<HInstruction> inputs) 1349 HInvokeClosure(Selector selector, List<HInstruction> inputs)
1335 : super(selector, null, inputs) { 1350 : super(selector, null, inputs) {
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 HBasicBlock get start => expression.start; 2578 HBasicBlock get start => expression.start;
2564 HBasicBlock get end { 2579 HBasicBlock get end {
2565 // We don't create a switch block if there are no cases. 2580 // We don't create a switch block if there are no cases.
2566 assert(!statements.isEmpty); 2581 assert(!statements.isEmpty);
2567 return statements.last.end; 2582 return statements.last.end;
2568 } 2583 }
2569 2584
2570 bool accept(HStatementInformationVisitor visitor) => 2585 bool accept(HStatementInformationVisitor visitor) =>
2571 visitor.visitSwitchInfo(this); 2586 visitor.visitSwitchInfo(this);
2572 } 2587 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698