OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 dart2js.serialization_helper; | 5 library dart2js.serialization_helper; |
6 | 6 |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
10 import 'package:expect/expect.dart'; | 10 import 'package:expect/expect.dart'; |
(...skipping 10 matching lines...) Expand all Loading... |
21 import 'package:compiler/src/scanner/scanner.dart'; | 21 import 'package:compiler/src/scanner/scanner.dart'; |
22 import 'package:compiler/src/serialization/element_serialization.dart'; | 22 import 'package:compiler/src/serialization/element_serialization.dart'; |
23 import 'package:compiler/src/serialization/impact_serialization.dart'; | 23 import 'package:compiler/src/serialization/impact_serialization.dart'; |
24 import 'package:compiler/src/serialization/json_serializer.dart'; | 24 import 'package:compiler/src/serialization/json_serializer.dart'; |
25 import 'package:compiler/src/serialization/resolved_ast_serialization.dart'; | 25 import 'package:compiler/src/serialization/resolved_ast_serialization.dart'; |
26 import 'package:compiler/src/serialization/serialization.dart'; | 26 import 'package:compiler/src/serialization/serialization.dart'; |
27 import 'package:compiler/src/serialization/modelz.dart'; | 27 import 'package:compiler/src/serialization/modelz.dart'; |
28 import 'package:compiler/src/serialization/task.dart'; | 28 import 'package:compiler/src/serialization/task.dart'; |
29 import 'package:compiler/src/tokens/token.dart'; | 29 import 'package:compiler/src/tokens/token.dart'; |
30 import 'package:compiler/src/script.dart'; | 30 import 'package:compiler/src/script.dart'; |
| 31 import 'package:compiler/src/universe/call_structure.dart'; |
| 32 import 'package:compiler/src/universe/use.dart'; |
31 import 'package:compiler/src/universe/world_impact.dart'; | 33 import 'package:compiler/src/universe/world_impact.dart'; |
32 import 'memory_compiler.dart'; | 34 import 'memory_compiler.dart'; |
33 | 35 |
34 class Arguments { | 36 class Arguments { |
35 final String filename; | 37 final String filename; |
36 final bool loadSerializedData; | 38 final bool loadSerializedData; |
37 final bool saveSerializedData; | 39 final bool saveSerializedData; |
38 final String serializedDataFileName; | 40 final String serializedDataFileName; |
39 final bool verbose; | 41 final bool verbose; |
40 | 42 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 class ResolutionImpactSerializer extends SerializerPlugin { | 141 class ResolutionImpactSerializer extends SerializerPlugin { |
140 final Resolution resolution; | 142 final Resolution resolution; |
141 | 143 |
142 ResolutionImpactSerializer(this.resolution); | 144 ResolutionImpactSerializer(this.resolution); |
143 | 145 |
144 @override | 146 @override |
145 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { | 147 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { |
146 if (resolution.hasBeenResolved(element)) { | 148 if (resolution.hasBeenResolved(element)) { |
147 ResolutionImpact impact = resolution.getResolutionImpact(element); | 149 ResolutionImpact impact = resolution.getResolutionImpact(element); |
148 ObjectEncoder encoder = createEncoder(WORLD_IMPACT_TAG); | 150 ObjectEncoder encoder = createEncoder(WORLD_IMPACT_TAG); |
149 new ImpactSerializer(encoder).serialize(impact); | 151 new ImpactSerializer(element, encoder).serialize(impact); |
150 } | 152 } |
151 } | 153 } |
152 } | 154 } |
153 | 155 |
154 class ResolutionImpactDeserializer extends DeserializerPlugin { | 156 class ResolutionImpactDeserializer extends DeserializerPlugin { |
155 Map<Element, ResolutionImpact> impactMap = <Element, ResolutionImpact>{}; | 157 Map<Element, ResolutionImpact> impactMap = <Element, ResolutionImpact>{}; |
156 | 158 |
157 @override | 159 @override |
158 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { | 160 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { |
159 ObjectDecoder decoder = getDecoder(WORLD_IMPACT_TAG); | 161 ObjectDecoder decoder = getDecoder(WORLD_IMPACT_TAG); |
160 if (decoder != null) { | 162 if (decoder != null) { |
161 impactMap[element] = ImpactDeserializer.deserializeImpact(decoder); | 163 impactMap[element] = |
| 164 ImpactDeserializer.deserializeImpact(element, decoder); |
162 } | 165 } |
163 } | 166 } |
164 } | 167 } |
165 | 168 |
166 class _DeserializerSystem extends DeserializerSystem { | 169 class _DeserializerSystem extends DeserializerSystem { |
167 final Compiler _compiler; | 170 final Compiler _compiler; |
168 final Deserializer _deserializer; | 171 final Deserializer _deserializer; |
169 final List<LibraryElement> deserializedLibraries = <LibraryElement>[]; | 172 final List<LibraryElement> deserializedLibraries = <LibraryElement>[]; |
170 final ResolutionImpactDeserializer _resolutionImpactDeserializer = | 173 final ResolutionImpactDeserializer _resolutionImpactDeserializer = |
171 new ResolutionImpactDeserializer(); | 174 new ResolutionImpactDeserializer(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 221 |
219 @override | 222 @override |
220 ResolvedAst getResolvedAst(Element element) { | 223 ResolvedAst getResolvedAst(Element element) { |
221 if (_resolvedAstDeserializer != null) { | 224 if (_resolvedAstDeserializer != null) { |
222 return _resolvedAstDeserializer.getResolvedAst(element); | 225 return _resolvedAstDeserializer.getResolvedAst(element); |
223 } | 226 } |
224 return null; | 227 return null; |
225 } | 228 } |
226 | 229 |
227 @override | 230 @override |
| 231 bool hasResolutionImpact(Element element) { |
| 232 if (element.isConstructor && |
| 233 element.enclosingClass.isUnnamedMixinApplication) { |
| 234 return true; |
| 235 } |
| 236 return _resolutionImpactDeserializer.impactMap.containsKey(element); |
| 237 } |
| 238 |
| 239 @override |
228 ResolutionImpact getResolutionImpact(Element element) { | 240 ResolutionImpact getResolutionImpact(Element element) { |
| 241 if (element.isConstructor && |
| 242 element.enclosingClass.isUnnamedMixinApplication) { |
| 243 ClassElement superclass = element.enclosingClass.superclass; |
| 244 ConstructorElement superclassConstructor = |
| 245 superclass.lookupConstructor(element.name); |
| 246 assert(invariant(element, superclassConstructor != null, |
| 247 message: "Superclass constructor '${element.name}' called from " |
| 248 "${element} not found in ${superclass}.")); |
| 249 // TODO(johnniwinther): Compute callStructure. Currently not used. |
| 250 CallStructure callStructure; |
| 251 return _resolutionImpactDeserializer.impactMap.putIfAbsent(element, () { |
| 252 return new DeserializedResolutionImpact( |
| 253 staticUses: <StaticUse>[new StaticUse.superConstructorInvoke( |
| 254 superclassConstructor, callStructure)]); |
| 255 }); |
| 256 } |
229 return _resolutionImpactDeserializer.impactMap[element]; | 257 return _resolutionImpactDeserializer.impactMap[element]; |
230 } | 258 } |
231 | 259 |
232 @override | 260 @override |
233 WorldImpact computeWorldImpact(Element element) { | 261 WorldImpact computeWorldImpact(Element element) { |
234 ResolutionImpact resolutionImpact = getResolutionImpact(element); | 262 ResolutionImpact resolutionImpact = getResolutionImpact(element); |
235 assert(invariant(element, resolutionImpact != null, | 263 assert(invariant(element, resolutionImpact != null, |
236 message: 'No impact found for $element (${element.library})')); | 264 message: 'No impact found for $element (${element.library})')); |
237 return _impactTransformer.transformResolutionImpact(resolutionImpact); | 265 return _impactTransformer.transformResolutionImpact(resolutionImpact); |
238 } | 266 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 | 335 |
308 @override | 336 @override |
309 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { | 337 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { |
310 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG); | 338 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG); |
311 if (decoder != null) { | 339 if (decoder != null) { |
312 _decoderMap[element] = decoder; | 340 _decoderMap[element] = decoder; |
313 } | 341 } |
314 } | 342 } |
315 } | 343 } |
316 | 344 |
OLD | NEW |