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

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

Issue 14986002: Make static tear-off closures a class, like instance tear-off closures. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 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 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 } else { 1347 } else {
1348 sideEffects.setAllSideEffects(); 1348 sideEffects.setAllSideEffects();
1349 sideEffects.setDependsOnSomething(); 1349 sideEffects.setDependsOnSomething();
1350 } 1350 }
1351 } 1351 }
1352 toString() => 'invoke dynamic setter: $selector'; 1352 toString() => 'invoke dynamic setter: $selector';
1353 accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this); 1353 accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this);
1354 } 1354 }
1355 1355
1356 class HInvokeStatic extends HInvoke { 1356 class HInvokeStatic extends HInvoke {
1357 final Element element;
1357 /** The first input must be the target. */ 1358 /** The first input must be the target. */
1358 HInvokeStatic(inputs, HType type) : super(inputs) { 1359 HInvokeStatic(this.element, inputs, HType type) : super(inputs) {
1359 instructionType = type; 1360 instructionType = type;
1360 } 1361 }
1361 1362
1362 toString() => 'invoke static: ${element.name}'; 1363 toString() => 'invoke static: ${element.name}';
1363 accept(HVisitor visitor) => visitor.visitInvokeStatic(this); 1364 accept(HVisitor visitor) => visitor.visitInvokeStatic(this);
1364 int typeCode() => HInstruction.INVOKE_STATIC_TYPECODE; 1365 int typeCode() => HInstruction.INVOKE_STATIC_TYPECODE;
1365 Element get element => target.element;
1366 HStatic get target => inputs[0];
1367 } 1366 }
1368 1367
1369 class HInvokeSuper extends HInvokeStatic { 1368 class HInvokeSuper extends HInvokeStatic {
1370 /** The class where the call to super is being done. */ 1369 /** The class where the call to super is being done. */
1371 final ClassElement caller; 1370 final ClassElement caller;
1372 final bool isSetter; 1371 final bool isSetter;
1373 1372
1374 HInvokeSuper(this.caller, inputs, {this.isSetter}) 1373 HInvokeSuper(Element element, this.caller, inputs, {this.isSetter})
1375 : super(inputs, HType.UNKNOWN); 1374 : super(element, inputs, HType.UNKNOWN);
1376 toString() => 'invoke super: ${element.name}'; 1375 toString() => 'invoke super: ${element.name}';
1377 accept(HVisitor visitor) => visitor.visitInvokeSuper(this); 1376 accept(HVisitor visitor) => visitor.visitInvokeSuper(this);
1378 1377
1379 HInstruction get value { 1378 HInstruction get value {
1380 assert(isSetter); 1379 assert(isSetter);
1381 // Index 0: the element, index 1: 'this'. 1380 // Index 0: 'this'.
1382 return inputs[2]; 1381 return inputs[1];
1383 } 1382 }
1384 } 1383 }
1385 1384
1386 abstract class HFieldAccess extends HInstruction { 1385 abstract class HFieldAccess extends HInstruction {
1387 final Element element; 1386 final Element element;
1388 1387
1389 HFieldAccess(Element element, List<HInstruction> inputs) 1388 HFieldAccess(Element element, List<HInstruction> inputs)
1390 : this.element = element, super(inputs); 1389 : this.element = element, super(inputs);
1391 1390
1392 HInstruction get receiver => inputs[0]; 1391 HInstruction get receiver => inputs[0];
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2599 HBasicBlock get start => expression.start; 2598 HBasicBlock get start => expression.start;
2600 HBasicBlock get end { 2599 HBasicBlock get end {
2601 // We don't create a switch block if there are no cases. 2600 // We don't create a switch block if there are no cases.
2602 assert(!statements.isEmpty); 2601 assert(!statements.isEmpty);
2603 return statements.last.end; 2602 return statements.last.end;
2604 } 2603 }
2605 2604
2606 bool accept(HStatementInformationVisitor visitor) => 2605 bool accept(HStatementInformationVisitor visitor) =>
2607 visitor.visitSwitchInfo(this); 2606 visitor.visitSwitchInfo(this);
2608 } 2607 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698