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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_library_builder.dart

Issue 2788923002: Add assertion on addImplementationBuilder. (Closed)
Patch Set: Add comment. Created 3 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 | « no previous file | 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 fasta.source_library_builder; 5 library fasta.source_library_builder;
6 6
7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind; 7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind;
8 8
9 import '../combinator.dart' show Combinator; 9 import '../combinator.dart' show Combinator;
10 10
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 Uri partOfUri; 63 Uri partOfUri;
64 64
65 List<MetadataBuilder> metadata; 65 List<MetadataBuilder> metadata;
66 66
67 /// The current declaration that is being built. When we start parsing a 67 /// The current declaration that is being built. When we start parsing a
68 /// declaration (class, method, and so on), we don't have enough information 68 /// declaration (class, method, and so on), we don't have enough information
69 /// to create a builder and this object records its members and types until, 69 /// to create a builder and this object records its members and types until,
70 /// for example, [addClass] is called. 70 /// for example, [addClass] is called.
71 DeclarationBuilder<T> currentDeclaration; 71 DeclarationBuilder<T> currentDeclaration;
72 72
73 bool canAddImplementationBuilders = false;
74
73 SourceLibraryBuilder(this.loader, Uri fileUri) 75 SourceLibraryBuilder(this.loader, Uri fileUri)
74 : fileUri = fileUri, 76 : fileUri = fileUri,
75 super(fileUri) { 77 super(fileUri) {
76 currentDeclaration = libraryDeclaration; 78 currentDeclaration = libraryDeclaration;
77 } 79 }
78 80
79 Uri get uri; 81 Uri get uri;
80 82
81 bool get isPart => partOfName != null || partOfUri != null; 83 bool get isPart => partOfName != null || partOfUri != null;
82 84
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // extends Object with Mixin {}` in the same library. 298 // extends Object with Mixin {}` in the same library.
297 return !existing.isMixinApplication || !other.isMixinApplication; 299 return !existing.isMixinApplication || !other.isMixinApplication;
298 } 300 }
299 return true; 301 return true;
300 } 302 }
301 303
302 void buildBuilder(Builder builder); 304 void buildBuilder(Builder builder);
303 305
304 R build() { 306 R build() {
305 assert(implementationBuilders.isEmpty); 307 assert(implementationBuilders.isEmpty);
308 canAddImplementationBuilders = true;
306 forEach((String name, Builder builder) { 309 forEach((String name, Builder builder) {
307 do { 310 do {
308 buildBuilder(builder); 311 buildBuilder(builder);
309 builder = builder.next; 312 builder = builder.next;
310 } while (builder != null); 313 } while (builder != null);
311 }); 314 });
312 for (List list in implementationBuilders) { 315 for (List list in implementationBuilders) {
313 String name = list[0]; 316 String name = list[0];
314 Builder builder = list[1]; 317 Builder builder = list[1];
315 int charOffset = list[2]; 318 int charOffset = list[2];
316 addBuilder(name, builder, charOffset); 319 addBuilder(name, builder, charOffset);
317 buildBuilder(builder); 320 buildBuilder(builder);
318 } 321 }
322 canAddImplementationBuilders = false;
319 return null; 323 return null;
320 } 324 }
321 325
326 /// Used to add implementation builder during the call to [build] above.
327 /// Currently, only anonymous mixins are using implementation builders (see
328 /// [KernelMixinApplicationBuilder]
329 /// (../kernel/kernel_mixin_application_builder.dart)).
322 void addImplementationBuilder(String name, Builder builder, int charOffset) { 330 void addImplementationBuilder(String name, Builder builder, int charOffset) {
331 assert(canAddImplementationBuilders, "$uri");
323 implementationBuilders.add([name, builder, charOffset]); 332 implementationBuilders.add([name, builder, charOffset]);
324 } 333 }
325 334
326 void validatePart() { 335 void validatePart() {
327 if (parts.isNotEmpty) { 336 if (parts.isNotEmpty) {
328 inputError(fileUri, -1, 337 inputError(fileUri, -1,
329 "A file that's a part of a library can't have parts itself."); 338 "A file that's a part of a library can't have parts itself.");
330 } 339 }
331 if (exporters.isNotEmpty) { 340 if (exporters.isNotEmpty) {
332 Export export = exporters.first; 341 Export export = exporters.first;
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 } 546 }
538 547
539 /// Called to register [procedure] as a factory whose types are collected in 548 /// Called to register [procedure] as a factory whose types are collected in
540 /// [factoryDeclaration]. Later, once the class has been built, we can 549 /// [factoryDeclaration]. Later, once the class has been built, we can
541 /// synthesize type variables on the factory matching the class'. 550 /// synthesize type variables on the factory matching the class'.
542 void addFactoryDeclaration( 551 void addFactoryDeclaration(
543 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { 552 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) {
544 factoryDeclarations[procedure] = factoryDeclaration; 553 factoryDeclarations[procedure] = factoryDeclaration;
545 } 554 }
546 } 555 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698