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

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

Issue 2705263002: Handle redirecting constructors to DillMemberBuilder. (Closed)
Patch Set: Update status file. Created 3 years, 10 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
« no previous file with comments | « no previous file | pkg/front_end/test/fasta/kompile.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_class_builder; 5 library fasta.kernel_class_builder;
6 6
7 import 'package:kernel/ast.dart' show 7 import 'package:kernel/ast.dart' show
8 Class, 8 Class,
9 DartType, 9 DartType,
10 ExpressionStatement, 10 ExpressionStatement,
(...skipping 14 matching lines...) Expand all
25 ClassBuilder, 25 ClassBuilder,
26 ConstructorReferenceBuilder, 26 ConstructorReferenceBuilder,
27 KernelProcedureBuilder, 27 KernelProcedureBuilder,
28 KernelTypeBuilder, 28 KernelTypeBuilder,
29 LibraryBuilder, 29 LibraryBuilder,
30 MetadataBuilder, 30 MetadataBuilder,
31 ProcedureBuilder, 31 ProcedureBuilder,
32 TypeVariableBuilder, 32 TypeVariableBuilder,
33 computeDefaultTypeArguments; 33 computeDefaultTypeArguments;
34 34
35 import '../dill/dill_member_builder.dart' show
36 DillMemberBuilder;
37
35 import 'redirecting_factory_body.dart' show 38 import 'redirecting_factory_body.dart' show
36 RedirectingFactoryBody; 39 RedirectingFactoryBody;
37 40
38 abstract class KernelClassBuilder 41 abstract class KernelClassBuilder
39 extends ClassBuilder<KernelTypeBuilder, InterfaceType> { 42 extends ClassBuilder<KernelTypeBuilder, InterfaceType> {
40 KernelClassBuilder( 43 KernelClassBuilder(
41 List<MetadataBuilder> metadata, int modifiers, 44 List<MetadataBuilder> metadata, int modifiers,
42 String name, List<TypeVariableBuilder> typeVariables, 45 String name, List<TypeVariableBuilder> typeVariables,
43 KernelTypeBuilder supertype, List<KernelTypeBuilder> interfaces, 46 KernelTypeBuilder supertype, List<KernelTypeBuilder> interfaces,
44 Map<String, Builder> members, LibraryBuilder parent, int charOffset) 47 Map<String, Builder> members, LibraryBuilder parent, int charOffset)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 if (builder is KernelProcedureBuilder && builder.isFactory) { 101 if (builder is KernelProcedureBuilder && builder.isFactory) {
99 // Compute the immediate redirection target, not the effective. 102 // Compute the immediate redirection target, not the effective.
100 ConstructorReferenceBuilder redirectionTarget = 103 ConstructorReferenceBuilder redirectionTarget =
101 builder.redirectionTarget; 104 builder.redirectionTarget;
102 if (redirectionTarget != null) { 105 if (redirectionTarget != null) {
103 assert(builder.actualBody == null); 106 assert(builder.actualBody == null);
104 Builder targetBuilder = redirectionTarget.target; 107 Builder targetBuilder = redirectionTarget.target;
105 if (targetBuilder is ProcedureBuilder) { 108 if (targetBuilder is ProcedureBuilder) {
106 Member target = targetBuilder.target; 109 Member target = targetBuilder.target;
107 builder.body = new RedirectingFactoryBody(target); 110 builder.body = new RedirectingFactoryBody(target);
111 } else if (targetBuilder is DillMemberBuilder) {
112 builder.body = new RedirectingFactoryBody(targetBuilder.member);
108 } else { 113 } else {
109 // TODO(ahe): Throw NSM error. This requires access to core 114 // TODO(ahe): Throw NSM error. This requires access to core
110 // types. 115 // types.
111 String message = "Redirection constructor target not found: " 116 String message = "Redirection constructor target not found: "
112 "${redirectionTarget.fullNameForErrors}"; 117 "${redirectionTarget.fullNameForErrors}";
113 warning(library.fileUri, -1, message); 118 warning(library.fileUri, -1, message);
114 builder.body = new ExpressionStatement( 119 builder.body = new ExpressionStatement(
115 new Throw(new StringLiteral(message))); 120 new Throw(new StringLiteral(message)));
116 } 121 }
117 } 122 }
118 } 123 }
119 }); 124 });
120 } 125 }
121 return count; 126 return count;
122 } 127 }
123 } 128 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/test/fasta/kompile.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698