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 /// ----------------------------------------------------------------------- | 5 /// ----------------------------------------------------------------------- |
6 /// ERROR HANDLING | 6 /// ERROR HANDLING |
7 /// ----------------------------------------------------------------------- | 7 /// ----------------------------------------------------------------------- |
8 /// | 8 /// |
9 /// As a rule of thumb, errors that can be detected statically are handled by | 9 /// As a rule of thumb, errors that can be detected statically are handled by |
10 /// the frontend, typically by translating the erroneous code into a 'throw' or | 10 /// the frontend, typically by translating the erroneous code into a 'throw' or |
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 /// For unnamed constructors, the name is an empty string (in a [Name]). | 931 /// For unnamed constructors, the name is an empty string (in a [Name]). |
932 class Constructor extends Member { | 932 class Constructor extends Member { |
933 int flags = 0; | 933 int flags = 0; |
934 FunctionNode function; | 934 FunctionNode function; |
935 List<Initializer> initializers; | 935 List<Initializer> initializers; |
936 | 936 |
937 Constructor(this.function, | 937 Constructor(this.function, |
938 {Name name, | 938 {Name name, |
939 bool isConst: false, | 939 bool isConst: false, |
940 bool isExternal: false, | 940 bool isExternal: false, |
| 941 bool isSyntheticDefault: false, |
941 List<Initializer> initializers, | 942 List<Initializer> initializers, |
942 int transformerFlags: 0, | 943 int transformerFlags: 0, |
943 Reference reference}) | 944 Reference reference}) |
944 : this.initializers = initializers ?? <Initializer>[], | 945 : this.initializers = initializers ?? <Initializer>[], |
945 super(name, reference) { | 946 super(name, reference) { |
946 function?.parent = this; | 947 function?.parent = this; |
947 setParents(this.initializers, this); | 948 setParents(this.initializers, this); |
948 this.isConst = isConst; | 949 this.isConst = isConst; |
949 this.isExternal = isExternal; | 950 this.isExternal = isExternal; |
| 951 this.isSyntheticDefault = isSyntheticDefault; |
950 this.transformerFlags = transformerFlags; | 952 this.transformerFlags = transformerFlags; |
951 } | 953 } |
952 | 954 |
953 static const int FlagConst = 1 << 0; // Must match serialized bit positions. | 955 static const int FlagConst = 1 << 0; // Must match serialized bit positions. |
954 static const int FlagExternal = 1 << 1; | 956 static const int FlagExternal = 1 << 1; |
| 957 static const int FlagSyntheticDefault = 1 << 2; |
955 | 958 |
956 bool get isConst => flags & FlagConst != 0; | 959 bool get isConst => flags & FlagConst != 0; |
957 bool get isExternal => flags & FlagExternal != 0; | 960 bool get isExternal => flags & FlagExternal != 0; |
958 | 961 |
| 962 /// True if this is a synthetic default constructor inserted in a class that |
| 963 /// does not otherwise declare any constructors. |
| 964 bool get isSyntheticDefault => flags & FlagSyntheticDefault != 0; |
| 965 |
959 void set isConst(bool value) { | 966 void set isConst(bool value) { |
960 flags = value ? (flags | FlagConst) : (flags & ~FlagConst); | 967 flags = value ? (flags | FlagConst) : (flags & ~FlagConst); |
961 } | 968 } |
962 | 969 |
963 void set isExternal(bool value) { | 970 void set isExternal(bool value) { |
964 flags = value ? (flags | FlagExternal) : (flags & ~FlagExternal); | 971 flags = value ? (flags | FlagExternal) : (flags & ~FlagExternal); |
965 } | 972 } |
966 | 973 |
| 974 void set isSyntheticDefault(bool value) { |
| 975 flags = value |
| 976 ? (flags | FlagSyntheticDefault) |
| 977 : (flags & ~FlagSyntheticDefault); |
| 978 } |
| 979 |
967 bool get isInstanceMember => false; | 980 bool get isInstanceMember => false; |
968 bool get hasGetter => false; | 981 bool get hasGetter => false; |
969 bool get hasSetter => false; | 982 bool get hasSetter => false; |
970 | 983 |
971 accept(MemberVisitor v) => v.visitConstructor(this); | 984 accept(MemberVisitor v) => v.visitConstructor(this); |
972 | 985 |
973 acceptReference(MemberReferenceVisitor v) => | 986 acceptReference(MemberReferenceVisitor v) => |
974 v.visitConstructorReference(this); | 987 v.visitConstructorReference(this); |
975 | 988 |
976 visitChildren(Visitor v) { | 989 visitChildren(Visitor v) { |
(...skipping 3484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4461 /// typedef has not been assigned a canonical name yet. | 4474 /// typedef has not been assigned a canonical name yet. |
4462 /// | 4475 /// |
4463 /// Returns `null` if the typedef is `null`. | 4476 /// Returns `null` if the typedef is `null`. |
4464 CanonicalName getCanonicalNameOfTypedef(Typedef typedef_) { | 4477 CanonicalName getCanonicalNameOfTypedef(Typedef typedef_) { |
4465 if (typedef_ == null) return null; | 4478 if (typedef_ == null) return null; |
4466 if (typedef_.canonicalName == null) { | 4479 if (typedef_.canonicalName == null) { |
4467 throw '$typedef_ has no canonical name'; | 4480 throw '$typedef_ has no canonical name'; |
4468 } | 4481 } |
4469 return typedef_.canonicalName; | 4482 return typedef_.canonicalName; |
4470 } | 4483 } |
OLD | NEW |