| 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 | 100 |
| 101 Supertype buildSupertype( | 101 Supertype buildSupertype( |
| 102 LibraryBuilder library, List<KernelTypeBuilder> arguments) { | 102 LibraryBuilder library, List<KernelTypeBuilder> arguments) { |
| 103 if (arguments != null) { | 103 if (arguments != null) { |
| 104 return new Supertype(cls, buildTypeArguments(library, arguments)); | 104 return new Supertype(cls, buildTypeArguments(library, arguments)); |
| 105 } else { | 105 } else { |
| 106 return cls.asRawSupertype; | 106 return cls.asRawSupertype; |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 | 109 |
| 110 int resolveConstructors(KernelLibraryBuilder library) { | 110 @override |
| 111 int resolveConstructors(LibraryBuilder library) { |
| 111 int count = super.resolveConstructors(library); | 112 int count = super.resolveConstructors(library); |
| 112 if (count != 0) { | 113 if (count != 0) { |
| 113 // Copy keys to avoid concurrent modification error. | 114 // Copy keys to avoid concurrent modification error. |
| 114 List<String> names = members.keys.toList(); | 115 List<String> names = members.keys.toList(); |
| 115 for (String name in names) { | 116 for (String name in names) { |
| 116 Builder builder = members[name]; | 117 Builder builder = members[name]; |
| 117 if (builder is KernelProcedureBuilder && builder.isFactory) { | 118 if (builder is KernelProcedureBuilder && builder.isFactory) { |
| 118 // Compute the immediate redirection target, not the effective. | 119 // Compute the immediate redirection target, not the effective. |
| 119 ConstructorReferenceBuilder redirectionTarget = | 120 ConstructorReferenceBuilder redirectionTarget = |
| 120 builder.redirectionTarget; | 121 builder.redirectionTarget; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 // | 156 // |
| 156 // Where each c1 ... cn are an instance of [StaticGet] whose target is | 157 // Where each c1 ... cn are an instance of [StaticGet] whose target is |
| 157 // [constructor.target]. | 158 // [constructor.target]. |
| 158 // | 159 // |
| 159 // TODO(ahe): Generate the correct factory body instead. | 160 // TODO(ahe): Generate the correct factory body instead. |
| 160 DillMemberBuilder constructorsField = | 161 DillMemberBuilder constructorsField = |
| 161 members.putIfAbsent("_redirecting#", () { | 162 members.putIfAbsent("_redirecting#", () { |
| 162 ListLiteral literal = new ListLiteral(<Expression>[]); | 163 ListLiteral literal = new ListLiteral(<Expression>[]); |
| 163 Name name = new Name("_redirecting#", library.library); | 164 Name name = new Name("_redirecting#", library.library); |
| 164 Field field = new Field(name, | 165 Field field = new Field(name, |
| 165 isStatic: true, | 166 isStatic: true, initializer: literal, fileUri: cls.fileUri) |
| 166 initializer: literal, | 167 ..fileOffset = cls.fileOffset; |
| 167 fileUri: cls.fileUri)..fileOffset = cls.fileOffset; | |
| 168 cls.addMember(field); | 168 cls.addMember(field); |
| 169 return new DillMemberBuilder(field, this); | 169 return new DillMemberBuilder(field, this); |
| 170 }); | 170 }); |
| 171 Field field = constructorsField.target; | 171 Field field = constructorsField.target; |
| 172 ListLiteral literal = field.initializer; | 172 ListLiteral literal = field.initializer; |
| 173 literal.expressions | 173 literal.expressions |
| 174 .add(new StaticGet(constructor.target)..parent = literal); | 174 .add(new StaticGet(constructor.target)..parent = literal); |
| 175 } | 175 } |
| 176 | 176 |
| 177 void checkOverrides(ClassHierarchy hierarchy) { | 177 void checkOverrides(ClassHierarchy hierarchy) { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 "The method '$name::${declaredMember.name.name}' doesn't have " | 262 "The method '$name::${declaredMember.name.name}' doesn't have " |
| 263 "the named parameter '${interfaceNamedParameters.current.name}' " | 263 "the named parameter '${interfaceNamedParameters.current.name}' " |
| 264 "of overriden method '${interfaceMember.enclosingClass.name}::" | 264 "of overriden method '${interfaceMember.enclosingClass.name}::" |
| 265 "${interfaceMember.name.name}'."); | 265 "${interfaceMember.name.name}'."); |
| 266 break outer; | 266 break outer; |
| 267 } | 267 } |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 } | 271 } |
| OLD | NEW |