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

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

Issue 2976543002: Reapply "Tweak public APIs and use them in patch_sdk, dart2js, and kernel-service."" (Closed)
Patch Set: fix Created 3 years, 5 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
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_loader; 5 library fasta.source_loader;
6 6
7 import 'dart:async' show Future; 7 import 'dart:async' show Future;
8 8
9 import 'dart:typed_data' show Uint8List; 9 import 'dart:typed_data' show Uint8List;
10 10
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // will have the same length. 332 // will have the same length.
333 Iterable<ClassBuilder> input = const []; 333 Iterable<ClassBuilder> input = const [];
334 Iterable<ClassBuilder> output = classes; 334 Iterable<ClassBuilder> output = classes;
335 while (input.length != output.length) { 335 while (input.length != output.length) {
336 input = output; 336 input = output;
337 output = directSupertypes(input); 337 output = directSupertypes(input);
338 } 338 }
339 return output; 339 return output;
340 } 340 }
341 341
342 /// Whether [library] is allowed to define classes that extend or implement
343 /// restricted types, such as `bool`, `int`, `double`, `num`, and `String`. By
344 /// default this is only allowed within the implementation of `dart:core`, but
345 /// some target implementations may need to override this to allow doing this
346 /// in other internal platform libraries.
347 bool canImplementRestrictedTypes(LibraryBuilder library) =>
348 library == coreLibrary;
349
350 void checkSemantics() { 342 void checkSemantics() {
351 List<ClassBuilder> allClasses = target.collectAllClasses(); 343 List<ClassBuilder> allClasses = target.collectAllClasses();
352 Iterable<ClassBuilder> candidates = cyclicCandidates(allClasses); 344 Iterable<ClassBuilder> candidates = cyclicCandidates(allClasses);
353 Map<ClassBuilder, Set<ClassBuilder>> realCycles = 345 Map<ClassBuilder, Set<ClassBuilder>> realCycles =
354 <ClassBuilder, Set<ClassBuilder>>{}; 346 <ClassBuilder, Set<ClassBuilder>>{};
355 for (ClassBuilder cls in candidates) { 347 for (ClassBuilder cls in candidates) {
356 Set<ClassBuilder> cycles = cyclicCandidates(allSupertypes(cls)); 348 Set<ClassBuilder> cycles = cyclicCandidates(allSupertypes(cls));
357 if (cycles.isNotEmpty) { 349 if (cycles.isNotEmpty) {
358 realCycles[cls] = cycles; 350 realCycles[cls] = cycles;
359 } 351 }
(...skipping 28 matching lines...) Expand all
388 for (ClassBuilder cls in allClasses) { 380 for (ClassBuilder cls in allClasses) {
389 if (cls.library.loader != this) continue; 381 if (cls.library.loader != this) continue;
390 Set<ClassBuilder> directSupertypes = new Set<ClassBuilder>(); 382 Set<ClassBuilder> directSupertypes = new Set<ClassBuilder>();
391 target.addDirectSupertype(cls, directSupertypes); 383 target.addDirectSupertype(cls, directSupertypes);
392 for (ClassBuilder supertype in directSupertypes) { 384 for (ClassBuilder supertype in directSupertypes) {
393 if (supertype is EnumBuilder) { 385 if (supertype is EnumBuilder) {
394 cls.addCompileTimeError( 386 cls.addCompileTimeError(
395 cls.charOffset, 387 cls.charOffset,
396 "'${supertype.name}' is an enum and can't be extended or " 388 "'${supertype.name}' is an enum and can't be extended or "
397 "implemented."); 389 "implemented.");
398 } else if (!canImplementRestrictedTypes(cls.library) && 390 } else if (!cls.library.mayImplementRestrictedTypes &&
399 blackListedClasses.contains(supertype)) { 391 blackListedClasses.contains(supertype)) {
400 cls.addCompileTimeError( 392 cls.addCompileTimeError(
401 cls.charOffset, 393 cls.charOffset,
402 "'${supertype.name}' is restricted and can't be extended or " 394 "'${supertype.name}' is restricted and can't be extended or "
403 "implemented."); 395 "implemented.");
404 } 396 }
405 } 397 }
406 TypeBuilder mixedInType = cls.mixedInType; 398 TypeBuilder mixedInType = cls.mixedInType;
407 if (mixedInType != null) { 399 if (mixedInType != null) {
408 bool isClassBuilder = false; 400 bool isClassBuilder = false;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 512
521 Expression throwCompileConstantError(Expression error) { 513 Expression throwCompileConstantError(Expression error) {
522 return target.backendTarget.throwCompileConstantError(coreTypes, error); 514 return target.backendTarget.throwCompileConstantError(coreTypes, error);
523 } 515 }
524 516
525 Expression buildCompileTimeError(String message, int offset) { 517 Expression buildCompileTimeError(String message, int offset) {
526 return target.backendTarget 518 return target.backendTarget
527 .buildCompileTimeError(coreTypes, message, offset); 519 .buildCompileTimeError(coreTypes, message, offset);
528 } 520 }
529 } 521 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698