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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/kernel_target.dart

Issue 2777533002: Report compile-time error on invalid constructors. (Closed)
Patch Set: Update status files. Created 3 years, 9 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.kernel_target; 5 library fasta.kernel_target;
6 6
7 import 'dart:async' show Future; 7 import 'dart:async' show Future;
8 8
9 import 'dart:io' show File, IOSink; 9 import 'dart:io' show File, IOSink;
10 10
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 <Constructor, List<FieldInitializer>>{}; 560 <Constructor, List<FieldInitializer>>{};
561 for (Constructor constructor in cls.constructors) { 561 for (Constructor constructor in cls.constructors) {
562 if (!isRedirectingGenerativeConstructor(constructor)) { 562 if (!isRedirectingGenerativeConstructor(constructor)) {
563 /// >If no superinitializer is provided, an implicit superinitializer 563 /// >If no superinitializer is provided, an implicit superinitializer
564 /// >of the form super() is added at the end of k’s initializer list, 564 /// >of the form super() is added at the end of k’s initializer list,
565 /// >unless the enclosing class is class Object. 565 /// >unless the enclosing class is class Object.
566 if (!constructor.initializers.any(isSuperinitializerOrInvalid)) { 566 if (!constructor.initializers.any(isSuperinitializerOrInvalid)) {
567 superTarget ??= defaultSuperConstructor(cls); 567 superTarget ??= defaultSuperConstructor(cls);
568 Initializer initializer; 568 Initializer initializer;
569 if (superTarget == null) { 569 if (superTarget == null) {
570 Uri uri = constructor.enclosingClass.fileUri == null
571 ? null
572 : Uri.parse(constructor.enclosingClass.fileUri);
573 InputError error = new InputError(
574 uri,
575 constructor.fileOffset,
576 "${cls.superclass.name} has no constructor that takes no"
577 " arguments.");
578 print(error.format());
579 errors.add(error);
570 initializer = new InvalidInitializer(); 580 initializer = new InvalidInitializer();
571 } else { 581 } else {
572 initializer = 582 initializer =
573 new SuperInitializer(superTarget, new Arguments.empty()); 583 new SuperInitializer(superTarget, new Arguments.empty());
574 } 584 }
575 constructor.initializers.add(initializer); 585 constructor.initializers.add(initializer);
576 initializer.parent = constructor; 586 initializer.parent = constructor;
577 } 587 }
578 if (constructor.function.body == null) { 588 if (constructor.function.body == null) {
579 /// >If a generative constructor c is not a redirecting constructor 589 /// >If a generative constructor c is not a redirecting constructor
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 } 684 }
675 for (Constructor constructor in superclass.constructors) { 685 for (Constructor constructor in superclass.constructors) {
676 if (constructor.name.name.isEmpty) { 686 if (constructor.name.name.isEmpty) {
677 return constructor.function.requiredParameterCount == 0 687 return constructor.function.requiredParameterCount == 0
678 ? constructor 688 ? constructor
679 : null; 689 : null;
680 } 690 }
681 } 691 }
682 return null; 692 return null;
683 } 693 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/kernel/body_builder.dart ('k') | pkg/front_end/test/fasta/compile.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698