| OLD | NEW |
| 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 /// This library defines individual world impacts. | 5 /// This library defines individual world impacts. |
| 6 /// | 6 /// |
| 7 /// We call these building blocks `uses`. Each `use` is a single impact of the | 7 /// We call these building blocks `uses`. Each `use` is a single impact of the |
| 8 /// world. Some example uses are: | 8 /// world. Some example uses are: |
| 9 /// | 9 /// |
| 10 /// * an invocation of a top level function | 10 /// * an invocation of a top level function |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 } | 70 } |
| 71 | 71 |
| 72 enum StaticUseKind { | 72 enum StaticUseKind { |
| 73 GENERAL, | 73 GENERAL, |
| 74 STATIC_TEAR_OFF, | 74 STATIC_TEAR_OFF, |
| 75 SUPER_TEAR_OFF, | 75 SUPER_TEAR_OFF, |
| 76 SUPER_FIELD_SET, | 76 SUPER_FIELD_SET, |
| 77 FIELD_GET, | 77 FIELD_GET, |
| 78 FIELD_SET, | 78 FIELD_SET, |
| 79 CLOSURE, | 79 CLOSURE, |
| 80 CALL_METHOD, |
| 80 CONSTRUCTOR_INVOKE, | 81 CONSTRUCTOR_INVOKE, |
| 81 CONST_CONSTRUCTOR_INVOKE, | 82 CONST_CONSTRUCTOR_INVOKE, |
| 82 REDIRECTION, | 83 REDIRECTION, |
| 83 DIRECT_INVOKE, | 84 DIRECT_INVOKE, |
| 84 DIRECT_USE, | 85 DIRECT_USE, |
| 85 INLINING, | 86 INLINING, |
| 86 } | 87 } |
| 87 | 88 |
| 88 /// Statically known use of an [Element]. | 89 /// Statically known use of an [Element]. |
| 89 // TODO(johnniwinther): Create backend-specific implementations with better | 90 // TODO(johnniwinther): Create backend-specific implementations with better |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 failedAt(element, | 371 failedAt(element, |
| 371 "Field init element $element must be an instance or boxed field.")); | 372 "Field init element $element must be an instance or boxed field.")); |
| 372 return new StaticUse.internal(element, StaticUseKind.FIELD_SET); | 373 return new StaticUse.internal(element, StaticUseKind.FIELD_SET); |
| 373 } | 374 } |
| 374 | 375 |
| 375 /// Read of a local function [element]. | 376 /// Read of a local function [element]. |
| 376 factory StaticUse.closure(Local element) { | 377 factory StaticUse.closure(Local element) { |
| 377 return new StaticUse.internal(element, StaticUseKind.CLOSURE); | 378 return new StaticUse.internal(element, StaticUseKind.CLOSURE); |
| 378 } | 379 } |
| 379 | 380 |
| 381 /// Read of a call [method] on a closureClass. |
| 382 factory StaticUse.callMethod(FunctionEntity method) { |
| 383 return new StaticUse.internal(method, StaticUseKind.CALL_METHOD); |
| 384 } |
| 385 |
| 380 /// Use of [element] through reflection. | 386 /// Use of [element] through reflection. |
| 381 factory StaticUse.mirrorUse(MemberEntity element) { | 387 factory StaticUse.mirrorUse(MemberEntity element) { |
| 382 return new StaticUse.internal(element, StaticUseKind.GENERAL); | 388 return new StaticUse.internal(element, StaticUseKind.GENERAL); |
| 383 } | 389 } |
| 384 | 390 |
| 385 /// Implicit method/constructor invocation of [element] created by the | 391 /// Implicit method/constructor invocation of [element] created by the |
| 386 /// backend. | 392 /// backend. |
| 387 factory StaticUse.implicitInvoke(FunctionEntity element) { | 393 factory StaticUse.implicitInvoke(FunctionEntity element) { |
| 388 return new StaticUse.internal(element, StaticUseKind.GENERAL); | 394 return new StaticUse.internal(element, StaticUseKind.GENERAL); |
| 389 } | 395 } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 : this._(value, ConstantUseKind.DIRECT); | 526 : this._(value, ConstantUseKind.DIRECT); |
| 521 | 527 |
| 522 bool operator ==(other) { | 528 bool operator ==(other) { |
| 523 if (identical(this, other)) return true; | 529 if (identical(this, other)) return true; |
| 524 if (other is! ConstantUse) return false; | 530 if (other is! ConstantUse) return false; |
| 525 return value == other.value; | 531 return value == other.value; |
| 526 } | 532 } |
| 527 | 533 |
| 528 String toString() => 'ConstantUse(${value.toStructuredText()},$kind)'; | 534 String toString() => 'ConstantUse(${value.toStructuredText()},$kind)'; |
| 529 } | 535 } |
| OLD | NEW |