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 25 matching lines...) Expand all Loading... |
36 templateRedirectionTargetNotFound; | 36 templateRedirectionTargetNotFound; |
37 | 37 |
38 import '../problems.dart' show unhandled, unimplemented; | 38 import '../problems.dart' show unhandled, unimplemented; |
39 | 39 |
40 import 'kernel_builder.dart' | 40 import 'kernel_builder.dart' |
41 show | 41 show |
42 Builder, | 42 Builder, |
43 ClassBuilder, | 43 ClassBuilder, |
44 ConstructorReferenceBuilder, | 44 ConstructorReferenceBuilder, |
45 KernelLibraryBuilder, | 45 KernelLibraryBuilder, |
| 46 KernelNamedTypeBuilder, |
46 KernelProcedureBuilder, | 47 KernelProcedureBuilder, |
47 KernelTypeBuilder, | 48 KernelTypeBuilder, |
48 LibraryBuilder, | 49 LibraryBuilder, |
49 MemberBuilder, | 50 MemberBuilder, |
50 MetadataBuilder, | 51 MetadataBuilder, |
51 ProcedureBuilder, | 52 ProcedureBuilder, |
52 Scope, | 53 Scope, |
53 TypeVariableBuilder, | 54 TypeVariableBuilder, |
54 computeDefaultTypeArguments; | 55 computeDefaultTypeArguments; |
55 | 56 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 for (String name in names) { | 127 for (String name in names) { |
127 Builder builder = constructors[name]; | 128 Builder builder = constructors[name]; |
128 if (builder is KernelProcedureBuilder && builder.isFactory) { | 129 if (builder is KernelProcedureBuilder && builder.isFactory) { |
129 // Compute the immediate redirection target, not the effective. | 130 // Compute the immediate redirection target, not the effective. |
130 ConstructorReferenceBuilder redirectionTarget = | 131 ConstructorReferenceBuilder redirectionTarget = |
131 builder.redirectionTarget; | 132 builder.redirectionTarget; |
132 if (redirectionTarget != null) { | 133 if (redirectionTarget != null) { |
133 assert(builder.actualBody == null); | 134 assert(builder.actualBody == null); |
134 Builder targetBuilder = redirectionTarget.target; | 135 Builder targetBuilder = redirectionTarget.target; |
135 addRedirectingConstructor(builder, library); | 136 addRedirectingConstructor(builder, library); |
| 137 Member target; |
136 if (targetBuilder is ProcedureBuilder) { | 138 if (targetBuilder is ProcedureBuilder) { |
137 Member target = targetBuilder.target; | 139 target = targetBuilder.target; |
138 builder.body = new RedirectingFactoryBody(target); | |
139 } else if (targetBuilder is DillMemberBuilder) { | 140 } else if (targetBuilder is DillMemberBuilder) { |
140 builder.body = new RedirectingFactoryBody(targetBuilder.member); | 141 target = targetBuilder.member; |
| 142 } |
| 143 if (target != null) { |
| 144 builder.body = new RedirectingFactoryBody( |
| 145 target, |
| 146 new KernelNamedTypeBuilder.fromConstructorReference( |
| 147 redirectionTarget) |
| 148 .build(library)); |
141 } else { | 149 } else { |
142 var message = templateRedirectionTargetNotFound | 150 var message = templateRedirectionTargetNotFound |
143 .withArguments(redirectionTarget.fullNameForErrors); | 151 .withArguments(redirectionTarget.fullNameForErrors); |
144 if (builder.isConst) { | 152 if (builder.isConst) { |
145 addCompileTimeError(message, builder.charOffset); | 153 addCompileTimeError(message, builder.charOffset); |
146 } else { | 154 } else { |
147 addWarning(message, builder.charOffset); | 155 addWarning(message, builder.charOffset); |
148 } | 156 } |
149 // CoreTypes aren't computed yet, and this is the outline | 157 // CoreTypes aren't computed yet, and this is the outline |
150 // phase. So we can't and shouldn't create a method body. | 158 // phase. So we can't and shouldn't create a method body. |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 } | 310 } |
303 } | 311 } |
304 } | 312 } |
305 | 313 |
306 String get fullNameForErrors { | 314 String get fullNameForErrors { |
307 return isMixinApplication | 315 return isMixinApplication |
308 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" | 316 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" |
309 : name; | 317 : name; |
310 } | 318 } |
311 } | 319 } |
OLD | NEW |