| 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 library fasta.kernel_class_builder; | 5 library fasta.kernel_class_builder; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
| 8 show | 8 show |
| 9 Class, | 9 Class, |
| 10 Constructor, | 10 Constructor, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 import 'kernel_builder.dart' | 36 import 'kernel_builder.dart' |
| 37 show | 37 show |
| 38 Builder, | 38 Builder, |
| 39 ClassBuilder, | 39 ClassBuilder, |
| 40 ConstructorReferenceBuilder, | 40 ConstructorReferenceBuilder, |
| 41 KernelLibraryBuilder, | 41 KernelLibraryBuilder, |
| 42 KernelProcedureBuilder, | 42 KernelProcedureBuilder, |
| 43 KernelTypeBuilder, | 43 KernelTypeBuilder, |
| 44 LibraryBuilder, | 44 LibraryBuilder, |
| 45 MemberBuilder, |
| 45 MetadataBuilder, | 46 MetadataBuilder, |
| 46 ProcedureBuilder, | 47 ProcedureBuilder, |
| 48 Scope, |
| 47 TypeVariableBuilder, | 49 TypeVariableBuilder, |
| 48 computeDefaultTypeArguments; | 50 computeDefaultTypeArguments; |
| 49 | 51 |
| 50 import 'redirecting_factory_body.dart' show RedirectingFactoryBody; | 52 import 'redirecting_factory_body.dart' show RedirectingFactoryBody; |
| 51 | 53 |
| 52 abstract class KernelClassBuilder | 54 abstract class KernelClassBuilder |
| 53 extends ClassBuilder<KernelTypeBuilder, InterfaceType> { | 55 extends ClassBuilder<KernelTypeBuilder, InterfaceType> { |
| 54 KernelClassBuilder( | 56 KernelClassBuilder( |
| 55 List<MetadataBuilder> metadata, | 57 List<MetadataBuilder> metadata, |
| 56 int modifiers, | 58 int modifiers, |
| 57 String name, | 59 String name, |
| 58 List<TypeVariableBuilder> typeVariables, | 60 List<TypeVariableBuilder> typeVariables, |
| 59 KernelTypeBuilder supertype, | 61 KernelTypeBuilder supertype, |
| 60 List<KernelTypeBuilder> interfaces, | 62 List<KernelTypeBuilder> interfaces, |
| 61 Map<String, Builder> members, | 63 Scope scope, |
| 64 Scope constructors, |
| 62 LibraryBuilder parent, | 65 LibraryBuilder parent, |
| 63 int charOffset) | 66 int charOffset) |
| 64 : super(metadata, modifiers, name, typeVariables, supertype, interfaces, | 67 : super(metadata, modifiers, name, typeVariables, supertype, interfaces, |
| 65 members, parent, charOffset); | 68 scope, constructors, parent, charOffset); |
| 66 | 69 |
| 67 Class get cls; | 70 Class get cls; |
| 68 | 71 |
| 69 Class get target => cls; | 72 Class get target => cls; |
| 70 | 73 |
| 71 /// [arguments] have already been built. | 74 /// [arguments] have already been built. |
| 72 InterfaceType buildTypesWithBuiltArguments( | 75 InterfaceType buildTypesWithBuiltArguments( |
| 73 LibraryBuilder library, List<DartType> arguments) { | 76 LibraryBuilder library, List<DartType> arguments) { |
| 74 assert(arguments == null || cls.typeParameters.length == arguments.length); | 77 assert(arguments == null || cls.typeParameters.length == arguments.length); |
| 75 return arguments == null ? cls.rawType : new InterfaceType(cls, arguments); | 78 return arguments == null ? cls.rawType : new InterfaceType(cls, arguments); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 104 return new Supertype(cls, buildTypeArguments(library, arguments)); | 107 return new Supertype(cls, buildTypeArguments(library, arguments)); |
| 105 } else { | 108 } else { |
| 106 return cls.asRawSupertype; | 109 return cls.asRawSupertype; |
| 107 } | 110 } |
| 108 } | 111 } |
| 109 | 112 |
| 110 @override | 113 @override |
| 111 int resolveConstructors(LibraryBuilder library) { | 114 int resolveConstructors(LibraryBuilder library) { |
| 112 int count = super.resolveConstructors(library); | 115 int count = super.resolveConstructors(library); |
| 113 if (count != 0) { | 116 if (count != 0) { |
| 117 Map<String, MemberBuilder> constructors = this.constructors.local; |
| 114 // Copy keys to avoid concurrent modification error. | 118 // Copy keys to avoid concurrent modification error. |
| 115 List<String> names = members.keys.toList(); | 119 List<String> names = constructors.keys.toList(); |
| 116 for (String name in names) { | 120 for (String name in names) { |
| 117 Builder builder = members[name]; | 121 Builder builder = constructors[name]; |
| 118 if (builder is KernelProcedureBuilder && builder.isFactory) { | 122 if (builder is KernelProcedureBuilder && builder.isFactory) { |
| 119 // Compute the immediate redirection target, not the effective. | 123 // Compute the immediate redirection target, not the effective. |
| 120 ConstructorReferenceBuilder redirectionTarget = | 124 ConstructorReferenceBuilder redirectionTarget = |
| 121 builder.redirectionTarget; | 125 builder.redirectionTarget; |
| 122 if (redirectionTarget != null) { | 126 if (redirectionTarget != null) { |
| 123 assert(builder.actualBody == null); | 127 assert(builder.actualBody == null); |
| 124 Builder targetBuilder = redirectionTarget.target; | 128 Builder targetBuilder = redirectionTarget.target; |
| 125 addRedirectingConstructor(builder, library); | 129 addRedirectingConstructor(builder, library); |
| 126 if (targetBuilder is ProcedureBuilder) { | 130 if (targetBuilder is ProcedureBuilder) { |
| 127 Member target = targetBuilder.target; | 131 Member target = targetBuilder.target; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 152 // | 156 // |
| 153 // The synthetic field looks like this: | 157 // The synthetic field looks like this: |
| 154 // | 158 // |
| 155 // final _redirecting# = [c1, ..., cn]; | 159 // final _redirecting# = [c1, ..., cn]; |
| 156 // | 160 // |
| 157 // Where each c1 ... cn are an instance of [StaticGet] whose target is | 161 // Where each c1 ... cn are an instance of [StaticGet] whose target is |
| 158 // [constructor.target]. | 162 // [constructor.target]. |
| 159 // | 163 // |
| 160 // TODO(ahe): Generate the correct factory body instead. | 164 // TODO(ahe): Generate the correct factory body instead. |
| 161 DillMemberBuilder constructorsField = | 165 DillMemberBuilder constructorsField = |
| 162 members.putIfAbsent("_redirecting#", () { | 166 scope.local.putIfAbsent("_redirecting#", () { |
| 163 ListLiteral literal = new ListLiteral(<Expression>[]); | 167 ListLiteral literal = new ListLiteral(<Expression>[]); |
| 164 Name name = new Name("_redirecting#", library.library); | 168 Name name = new Name("_redirecting#", library.library); |
| 165 Field field = new Field(name, | 169 Field field = new Field(name, |
| 166 isStatic: true, initializer: literal, fileUri: cls.fileUri) | 170 isStatic: true, initializer: literal, fileUri: cls.fileUri) |
| 167 ..fileOffset = cls.fileOffset; | 171 ..fileOffset = cls.fileOffset; |
| 168 cls.addMember(field); | 172 cls.addMember(field); |
| 169 return new DillMemberBuilder(field, this); | 173 return new DillMemberBuilder(field, this); |
| 170 }); | 174 }); |
| 171 Field field = constructorsField.target; | 175 Field field = constructorsField.target; |
| 172 ListLiteral literal = field.initializer; | 176 ListLiteral literal = field.initializer; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 "The method '$name::${declaredMember.name.name}' doesn't have " | 266 "The method '$name::${declaredMember.name.name}' doesn't have " |
| 263 "the named parameter '${interfaceNamedParameters.current.name}' " | 267 "the named parameter '${interfaceNamedParameters.current.name}' " |
| 264 "of overriden method '${interfaceMember.enclosingClass.name}::" | 268 "of overriden method '${interfaceMember.enclosingClass.name}::" |
| 265 "${interfaceMember.name.name}'."); | 269 "${interfaceMember.name.name}'."); |
| 266 break outer; | 270 break outer; |
| 267 } | 271 } |
| 268 } | 272 } |
| 269 } | 273 } |
| 270 } | 274 } |
| 271 } | 275 } |
| OLD | NEW |