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 library closureToClassMapper; | 5 library closureToClassMapper; |
6 | 6 |
7 import "elements/elements.dart"; | 7 import 'constants/expressions.dart'; |
8 import "dart2jslib.dart"; | 8 import 'dart2jslib.dart'; |
9 import "dart_types.dart"; | 9 import 'dart_types.dart'; |
10 import "js_backend/js_backend.dart" show JavaScriptBackend; | 10 import 'elements/elements.dart'; |
11 import "scanner/scannerlib.dart" show Token; | 11 import 'elements/modelx.dart' |
12 import "tree/tree.dart"; | |
13 import "util/util.dart"; | |
14 import "elements/modelx.dart" | |
15 show BaseFunctionElementX, | 12 show BaseFunctionElementX, |
16 ClassElementX, | 13 ClassElementX, |
17 ElementX, | 14 ElementX, |
18 LocalFunctionElementX; | 15 LocalFunctionElementX; |
19 import "elements/visitor.dart" show ElementVisitor; | 16 import 'elements/visitor.dart' show ElementVisitor; |
20 | 17 import 'js_backend/js_backend.dart' show JavaScriptBackend; |
| 18 import 'scanner/scannerlib.dart' show Token; |
| 19 import 'tree/tree.dart'; |
| 20 import 'util/util.dart'; |
21 import 'universe/universe.dart' show | 21 import 'universe/universe.dart' show |
22 Universe; | 22 Universe; |
23 | 23 |
24 class ClosureTask extends CompilerTask { | 24 class ClosureTask extends CompilerTask { |
25 Map<Node, ClosureClassMap> closureMappingCache; | 25 Map<Node, ClosureClassMap> closureMappingCache; |
26 ClosureTask(Compiler compiler) | 26 ClosureTask(Compiler compiler) |
27 : closureMappingCache = new Map<Node, ClosureClassMap>(), | 27 : closureMappingCache = new Map<Node, ClosureClassMap>(), |
28 super(compiler); | 28 super(compiler); |
29 | 29 |
30 String get name => "Closure Simplifier"; | 30 String get name => "Closure Simplifier"; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 String toString() => "ClosureFieldElement($name)"; | 144 String toString() => "ClosureFieldElement($name)"; |
145 | 145 |
146 accept(ElementVisitor visitor, arg) { | 146 accept(ElementVisitor visitor, arg) { |
147 return visitor.visitClosureFieldElement(this, arg); | 147 return visitor.visitClosureFieldElement(this, arg); |
148 } | 148 } |
149 | 149 |
150 Element get analyzableElement => closureClass.methodElement.analyzableElement; | 150 Element get analyzableElement => closureClass.methodElement.analyzableElement; |
151 | 151 |
152 @override | 152 @override |
153 List<FunctionElement> get nestedClosures => const <FunctionElement>[]; | 153 List<FunctionElement> get nestedClosures => const <FunctionElement>[]; |
| 154 |
| 155 @override |
| 156 ConstantExpression get constant => null; |
154 } | 157 } |
155 | 158 |
156 // TODO(ahe): These classes continuously cause problems. We need to find | 159 // TODO(ahe): These classes continuously cause problems. We need to find |
157 // a more general solution. | 160 // a more general solution. |
158 class ClosureClassElement extends ClassElementX { | 161 class ClosureClassElement extends ClassElementX { |
159 DartType rawType; | 162 DartType rawType; |
160 DartType thisType; | 163 DartType thisType; |
161 FunctionType callType; | 164 FunctionType callType; |
162 /// Node that corresponds to this closure, used for source position. | 165 /// Node that corresponds to this closure, used for source position. |
163 final FunctionExpression node; | 166 final FunctionExpression node; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 | 272 |
270 @override | 273 @override |
271 Node get node { | 274 Node get node { |
272 throw new UnsupportedError("BoxFieldElement.node"); | 275 throw new UnsupportedError("BoxFieldElement.node"); |
273 } | 276 } |
274 | 277 |
275 @override | 278 @override |
276 ResolvedAst get resolvedAst { | 279 ResolvedAst get resolvedAst { |
277 throw new UnsupportedError("BoxFieldElement.resolvedAst"); | 280 throw new UnsupportedError("BoxFieldElement.resolvedAst"); |
278 } | 281 } |
| 282 |
| 283 @override |
| 284 ConstantExpression get constant => null; |
279 } | 285 } |
280 | 286 |
281 /// A local variable used encode the direct (uncaptured) references to [this]. | 287 /// A local variable used encode the direct (uncaptured) references to [this]. |
282 class ThisLocal extends Local { | 288 class ThisLocal extends Local { |
283 final ExecutableElement executableContext; | 289 final ExecutableElement executableContext; |
284 | 290 |
285 ThisLocal(this.executableContext); | 291 ThisLocal(this.executableContext); |
286 | 292 |
287 String get name => 'this'; | 293 String get name => 'this'; |
288 | 294 |
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1093 | 1099 |
1094 String get name => typeVariable.name; | 1100 String get name => typeVariable.name; |
1095 | 1101 |
1096 int get hashCode => typeVariable.hashCode; | 1102 int get hashCode => typeVariable.hashCode; |
1097 | 1103 |
1098 bool operator ==(other) { | 1104 bool operator ==(other) { |
1099 if (other is! TypeVariableLocal) return false; | 1105 if (other is! TypeVariableLocal) return false; |
1100 return typeVariable == other.typeVariable; | 1106 return typeVariable == other.typeVariable; |
1101 } | 1107 } |
1102 } | 1108 } |
OLD | NEW |