| 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 | 
|   11 ///  * a call to the `foo()` method on an unknown class. |   11 ///  * a call to the `foo()` method on an unknown class. | 
|   12 ///  * an instantiation of class T |   12 ///  * an instantiation of class T | 
|   13 /// |   13 /// | 
|   14 /// The different compiler stages combine these uses into `WorldImpact` objects, |   14 /// The different compiler stages combine these uses into `WorldImpact` objects, | 
|   15 /// which are later used to construct a closed-world understanding of the |   15 /// which are later used to construct a closed-world understanding of the | 
|   16 /// program. |   16 /// program. | 
|   17 library dart2js.universe.use; |   17 library dart2js.universe.use; | 
|   18  |   18  | 
|   19 import '../closure.dart' show BoxFieldElement; |   19 import '../closure.dart' show BoxFieldElement; | 
|   20 import '../common.dart'; |   20 import '../common.dart'; | 
|   21 import '../constants/values.dart'; |   21 import '../constants/values.dart'; | 
|   22 import '../elements/types.dart'; |   22 import '../elements/types.dart'; | 
|   23 import '../elements/elements.dart' show ConstructorBodyElement, Element; |   23 import '../elements/elements.dart' show Element; | 
|   24 import '../elements/entities.dart'; |   24 import '../elements/entities.dart'; | 
|   25 import '../util/util.dart' show Hashing; |   25 import '../util/util.dart' show Hashing; | 
|   26 import '../world.dart' show World; |   26 import '../world.dart' show World; | 
|   27 import 'call_structure.dart' show CallStructure; |   27 import 'call_structure.dart' show CallStructure; | 
|   28 import 'selector.dart' show Selector; |   28 import 'selector.dart' show Selector; | 
|   29 import 'world_builder.dart' show ReceiverConstraint; |   29 import 'world_builder.dart' show ReceiverConstraint; | 
|   30  |   30  | 
|   31 enum DynamicUseKind { |   31 enum DynamicUseKind { | 
|   32   INVOKE, |   32   INVOKE, | 
|   33   GET, |   33   GET, | 
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  239         failedAt( |  239         failedAt( | 
|  240             element, |  240             element, | 
|  241             "Constructor invoke element $element must be a " |  241             "Constructor invoke element $element must be a " | 
|  242             "generative constructor.")); |  242             "generative constructor.")); | 
|  243     return new StaticUse.internal(element, StaticUseKind.GENERAL); |  243     return new StaticUse.internal(element, StaticUseKind.GENERAL); | 
|  244   } |  244   } | 
|  245  |  245  | 
|  246   /// Invocation of a constructor (body) [element] through a this or super |  246   /// Invocation of a constructor (body) [element] through a this or super | 
|  247   /// constructor call with the given [callStructure]. |  247   /// constructor call with the given [callStructure]. | 
|  248   factory StaticUse.constructorBodyInvoke( |  248   factory StaticUse.constructorBodyInvoke( | 
|  249       ConstructorBodyElement element, CallStructure callStructure) { |  249       ConstructorBodyEntity element, CallStructure callStructure) { | 
|  250     // TODO(johnniwinther): Use the [callStructure]. |  250     // TODO(johnniwinther): Use the [callStructure]. | 
|  251     return new StaticUse.internal(element, StaticUseKind.GENERAL); |  251     return new StaticUse.internal(element, StaticUseKind.GENERAL); | 
|  252   } |  252   } | 
|  253  |  253  | 
|  254   /// Direct invocation of a method [element] with the given [callStructure]. |  254   /// Direct invocation of a method [element] with the given [callStructure]. | 
|  255   factory StaticUse.directInvoke( |  255   factory StaticUse.directInvoke( | 
|  256       FunctionEntity element, CallStructure callStructure) { |  256       FunctionEntity element, CallStructure callStructure) { | 
|  257     // TODO(johnniwinther): Use the [callStructure]. |  257     // TODO(johnniwinther): Use the [callStructure]. | 
|  258     assert( |  258     assert( | 
|  259         element.isInstanceMember, |  259         element.isInstanceMember, | 
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  520       : this._(value, ConstantUseKind.DIRECT); |  520       : this._(value, ConstantUseKind.DIRECT); | 
|  521  |  521  | 
|  522   bool operator ==(other) { |  522   bool operator ==(other) { | 
|  523     if (identical(this, other)) return true; |  523     if (identical(this, other)) return true; | 
|  524     if (other is! ConstantUse) return false; |  524     if (other is! ConstantUse) return false; | 
|  525     return value == other.value; |  525     return value == other.value; | 
|  526   } |  526   } | 
|  527  |  527  | 
|  528   String toString() => 'ConstantUse(${value.toStructuredText()},$kind)'; |  528   String toString() => 'ConstantUse(${value.toStructuredText()},$kind)'; | 
|  529 } |  529 } | 
| OLD | NEW |