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

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

Issue 2729943003: Recover from bad supertypes. (Closed)
Patch Set: Update status files. Created 3 years, 9 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
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_enum_builder; 5 library fasta.kernel_enum_builder;
6 6
7 import 'package:kernel/ast.dart' 7 import 'package:kernel/ast.dart'
8 show 8 show
9 Arguments, 9 Arguments,
10 AsyncMarker, 10 AsyncMarker,
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 members.forEach((String name, dynamic b) { 167 members.forEach((String name, dynamic b) {
168 MemberBuilder builder = b; 168 MemberBuilder builder = b;
169 builder.parent = enumBuilder; 169 builder.parent = enumBuilder;
170 }); 170 });
171 selfType.builder = enumBuilder; 171 selfType.builder = enumBuilder;
172 return enumBuilder; 172 return enumBuilder;
173 } 173 }
174 174
175 KernelTypeBuilder get mixedInType => null; 175 KernelTypeBuilder get mixedInType => null;
176 176
177 InterfaceType buildType(List<KernelTypeBuilder> arguments) { 177 InterfaceType buildType(
178 LibraryBuilder library, List<KernelTypeBuilder> arguments) {
178 return cls.rawType; 179 return cls.rawType;
179 } 180 }
180 181
181 Class build(KernelLibraryBuilder libraryBuilder) { 182 Class build(KernelLibraryBuilder libraryBuilder) {
182 if (constants.isEmpty) { 183 if (constants.isEmpty) {
183 libraryBuilder.addCompileTimeError( 184 libraryBuilder.addCompileTimeError(
184 -1, "An enum declaration can't be empty."); 185 -1, "An enum declaration can't be empty.");
185 } 186 }
186 toStringMap.keyType = intType.build(); 187 toStringMap.keyType = intType.build(libraryBuilder);
187 toStringMap.valueType = stringType.build(); 188 toStringMap.valueType = stringType.build(libraryBuilder);
188 KernelFieldBuilder indexFieldBuilder = members["index"]; 189 KernelFieldBuilder indexFieldBuilder = members["index"];
189 Field indexField = indexFieldBuilder.build(libraryBuilder.library); 190 Field indexField = indexFieldBuilder.build(libraryBuilder);
190 KernelProcedureBuilder toStringBuilder = members["toString"]; 191 KernelProcedureBuilder toStringBuilder = members["toString"];
191 toStringBuilder.body = new ReturnStatement(new MethodInvocation( 192 toStringBuilder.body = new ReturnStatement(new MethodInvocation(
192 toStringMap, 193 toStringMap,
193 new Name("[]"), 194 new Name("[]"),
194 new Arguments(<Expression>[ 195 new Arguments(<Expression>[
195 new DirectPropertyGet(new ThisExpression(), indexField) 196 new DirectPropertyGet(new ThisExpression(), indexField)
196 ]))); 197 ])));
197 List<Expression> values = <Expression>[]; 198 List<Expression> values = <Expression>[];
198 for (String name in constants) { 199 for (String name in constants) {
199 KernelFieldBuilder builder = members[name]; 200 KernelFieldBuilder builder = members[name];
200 values.add(new StaticGet(builder.build(libraryBuilder.library))); 201 values.add(new StaticGet(builder.build(libraryBuilder)));
201 } 202 }
202 KernelFieldBuilder valuesBuilder = members["values"]; 203 KernelFieldBuilder valuesBuilder = members["values"];
203 valuesBuilder.build(libraryBuilder.library); 204 valuesBuilder.build(libraryBuilder);
204 valuesBuilder.initializer = 205 valuesBuilder.initializer =
205 new ListLiteral(values, typeArgument: cls.rawType, isConst: true); 206 new ListLiteral(values, typeArgument: cls.rawType, isConst: true);
206 KernelConstructorBuilder constructorBuilder = members[""]; 207 KernelConstructorBuilder constructorBuilder = members[""];
207 Constructor constructor = constructorBuilder.build(libraryBuilder.library); 208 Constructor constructor = constructorBuilder.build(libraryBuilder);
208 constructor.initializers.insert( 209 constructor.initializers.insert(
209 0, 210 0,
210 new FieldInitializer(indexField, 211 new FieldInitializer(indexField,
211 new VariableGet(constructor.function.positionalParameters.single)) 212 new VariableGet(constructor.function.positionalParameters.single))
212 ..parent = constructor); 213 ..parent = constructor);
213 int index = 0; 214 int index = 0;
214 for (String constant in constants) { 215 for (String constant in constants) {
215 KernelFieldBuilder field = members[constant]; 216 KernelFieldBuilder field = members[constant];
216 field.build(libraryBuilder.library); 217 field.build(libraryBuilder);
217 Arguments arguments = 218 Arguments arguments =
218 new Arguments(<Expression>[new IntLiteral(index++)]); 219 new Arguments(<Expression>[new IntLiteral(index++)]);
219 field.initializer = 220 field.initializer =
220 new ConstructorInvocation(constructor, arguments, isConst: true); 221 new ConstructorInvocation(constructor, arguments, isConst: true);
221 } 222 }
222 return super.build(libraryBuilder); 223 return super.build(libraryBuilder);
223 } 224 }
224 225
225 Builder findConstructorOrFactory(String name) => null; 226 Builder findConstructorOrFactory(String name) => null;
226 } 227 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698