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

Side by Side Diff: tests/compiler/dart2js/serialization_helper.dart

Issue 1896843002: Store and serialize NativeBehavior in TreeElements. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 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
« no previous file with comments | « pkg/compiler/lib/src/universe/side_effects.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:compiler/src/commandline_options.dart'; 10 import 'package:compiler/src/commandline_options.dart';
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 Compiler compiler, 97 Compiler compiler,
98 Iterable<LibraryElement> libraries, 98 Iterable<LibraryElement> libraries,
99 {bool serializeResolvedAst: false}) { 99 {bool serializeResolvedAst: false}) {
100 assert(compiler.serialization.supportSerialization); 100 assert(compiler.serialization.supportSerialization);
101 101
102 Serializer serializer = new Serializer(); 102 Serializer serializer = new Serializer();
103 serializer.plugins.add(compiler.backend.serialization.serializer); 103 serializer.plugins.add(compiler.backend.serialization.serializer);
104 serializer.plugins.add(new ResolutionImpactSerializer(compiler.resolution)); 104 serializer.plugins.add(new ResolutionImpactSerializer(compiler.resolution));
105 if (serializeResolvedAst) { 105 if (serializeResolvedAst) {
106 serializer.plugins.add( 106 serializer.plugins.add(
107 new ResolvedAstSerializerPlugin(compiler.resolution)); 107 new ResolvedAstSerializerPlugin(compiler.resolution, compiler.backend));
108 } 108 }
109 109
110 for (LibraryElement library in libraries) { 110 for (LibraryElement library in libraries) {
111 serializer.serialize(library); 111 serializer.serialize(library);
112 } 112 }
113 return serializer; 113 return serializer;
114 } 114 }
115 115
116 void deserialize(Compiler compiler, 116 void deserialize(Compiler compiler,
117 String serializedData, 117 String serializedData,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 final bool _deserializeResolvedAst; 170 final bool _deserializeResolvedAst;
171 171
172 _DeserializerSystem( 172 _DeserializerSystem(
173 Compiler compiler, 173 Compiler compiler,
174 this._deserializer, 174 this._deserializer,
175 this._impactTransformer, 175 this._impactTransformer,
176 {bool deserializeResolvedAst: false}) 176 {bool deserializeResolvedAst: false})
177 : this._compiler = compiler, 177 : this._compiler = compiler,
178 this._deserializeResolvedAst = deserializeResolvedAst, 178 this._deserializeResolvedAst = deserializeResolvedAst,
179 this._resolvedAstDeserializer = deserializeResolvedAst 179 this._resolvedAstDeserializer = deserializeResolvedAst
180 ? new ResolvedAstDeserializerPlugin(compiler.parsingContext) : null { 180 ? new ResolvedAstDeserializerPlugin(
181 compiler.parsingContext, compiler.backend) : null {
181 _deserializer.plugins.add(_resolutionImpactDeserializer); 182 _deserializer.plugins.add(_resolutionImpactDeserializer);
182 if (_deserializeResolvedAst) { 183 if (_deserializeResolvedAst) {
183 _deserializer.plugins.add(_resolvedAstDeserializer); 184 _deserializer.plugins.add(_resolvedAstDeserializer);
184 } 185 }
185 } 186 }
186 187
187 @override 188 @override
188 Future<LibraryElement> readLibrary(Uri resolvedUri) { 189 Future<LibraryElement> readLibrary(Uri resolvedUri) {
189 LibraryElement library = _deserializer.lookupLibrary(resolvedUri); 190 LibraryElement library = _deserializer.lookupLibrary(resolvedUri);
190 if (library != null) { 191 if (library != null) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 @override 240 @override
240 bool isDeserialized(Element element) { 241 bool isDeserialized(Element element) {
241 return deserializedLibraries.contains(element.library); 242 return deserializedLibraries.contains(element.library);
242 } 243 }
243 } 244 }
244 245
245 const String RESOLVED_AST_TAG = 'resolvedAst'; 246 const String RESOLVED_AST_TAG = 'resolvedAst';
246 247
247 class ResolvedAstSerializerPlugin extends SerializerPlugin { 248 class ResolvedAstSerializerPlugin extends SerializerPlugin {
248 final Resolution resolution; 249 final Resolution resolution;
250 final Backend backend;
249 251
250 ResolvedAstSerializerPlugin(this.resolution); 252 ResolvedAstSerializerPlugin(this.resolution, this.backend);
251 253
252 @override 254 @override
253 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { 255 void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
254 assert(invariant(element, element.isDeclaration, 256 assert(invariant(element, element.isDeclaration,
255 message: "Element $element must be the declaration")); 257 message: "Element $element must be the declaration"));
256 if (element is MemberElement) { 258 if (element is MemberElement) {
257 assert(invariant(element, resolution.hasResolvedAst(element), 259 assert(invariant(element, resolution.hasResolvedAst(element),
258 message: "Element $element must have a resolved ast")); 260 message: "Element $element must have a resolved ast"));
259 ResolvedAst resolvedAst = resolution.getResolvedAst(element); 261 ResolvedAst resolvedAst = resolution.getResolvedAst(element);
260 ObjectEncoder objectEncoder = createEncoder(RESOLVED_AST_TAG); 262 ObjectEncoder objectEncoder = createEncoder(RESOLVED_AST_TAG);
261 new ResolvedAstSerializer(objectEncoder, resolvedAst).serialize(); 263 new ResolvedAstSerializer(
264 objectEncoder,
265 resolvedAst,
266 backend.serialization.serializer).serialize();
262 } 267 }
263 } 268 }
264 } 269 }
265 270
266 class ResolvedAstDeserializerPlugin extends DeserializerPlugin { 271 class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
267 final ParsingContext parsingContext; 272 final ParsingContext parsingContext;
273 final Backend backend;
268 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; 274 final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
269 275
270 Map<Element, ResolvedAst> _resolvedAstMap = <Element, ResolvedAst>{}; 276 Map<Element, ResolvedAst> _resolvedAstMap = <Element, ResolvedAst>{};
271 Map<Element, ObjectDecoder> _decoderMap = <Element, ObjectDecoder>{}; 277 Map<Element, ObjectDecoder> _decoderMap = <Element, ObjectDecoder>{};
272 Map<Uri, Token> beginTokenMap = <Uri, Token>{}; 278 Map<Uri, Token> beginTokenMap = <Uri, Token>{};
273 279
274 ResolvedAstDeserializerPlugin(this.parsingContext); 280 ResolvedAstDeserializerPlugin(this.parsingContext, this.backend);
275 281
276 bool hasResolvedAst(Element element) { 282 bool hasResolvedAst(Element element) {
277 return _resolvedAstMap.containsKey(element) || 283 return _resolvedAstMap.containsKey(element) ||
278 _decoderMap.containsKey(element); 284 _decoderMap.containsKey(element);
279 } 285 }
280 286
281 ResolvedAst getResolvedAst(Element element) { 287 ResolvedAst getResolvedAst(Element element) {
282 ResolvedAst resolvedAst = _resolvedAstMap[element]; 288 ResolvedAst resolvedAst = _resolvedAstMap[element];
283 if (resolvedAst == null) { 289 if (resolvedAst == null) {
284 ObjectDecoder decoder = _decoderMap[element]; 290 ObjectDecoder decoder = _decoderMap[element];
285 if (decoder != null) { 291 if (decoder != null) {
286 resolvedAst = _resolvedAstMap[element] = 292 resolvedAst = _resolvedAstMap[element] =
287 ResolvedAstDeserializer.deserialize( 293 ResolvedAstDeserializer.deserialize(
288 element, decoder, parsingContext, findToken); 294 element, decoder, parsingContext, findToken,
295 backend.serialization.deserializer);
289 _decoderMap.remove(element); 296 _decoderMap.remove(element);
290 } 297 }
291 } 298 }
292 return resolvedAst; 299 return resolvedAst;
293 } 300 }
294 301
295 Token findToken(Uri uri, int offset) { 302 Token findToken(Uri uri, int offset) {
296 Token beginToken = beginTokenMap.putIfAbsent(uri, () { 303 Token beginToken = beginTokenMap.putIfAbsent(uri, () {
297 SourceFile sourceFile = sourceFiles[uri]; 304 SourceFile sourceFile = sourceFiles[uri];
298 if (sourceFile == null) { 305 if (sourceFile == null) {
299 throw 'No source file found for $uri in:\n ' 306 throw 'No source file found for $uri in:\n '
300 '${sourceFiles.keys.join('\n ')}'; 307 '${sourceFiles.keys.join('\n ')}';
301 } 308 }
302 return new Scanner(sourceFile).tokenize(); 309 return new Scanner(sourceFile).tokenize();
303 }); 310 });
304 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset); 311 return ResolvedAstDeserializer.findTokenInStream(beginToken, offset);
305 } 312 }
306 313
307 @override 314 @override
308 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { 315 void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
309 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG); 316 ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG);
310 if (decoder != null) { 317 if (decoder != null) {
311 _decoderMap[element] = decoder; 318 _decoderMap[element] = decoder;
312 } 319 }
313 } 320 }
314 } 321 }
315 322
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/universe/side_effects.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698