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

Side by Side Diff: pkg/compiler/lib/src/resolution/enum_creator.dart

Issue 1383483006: Extract DiagnosticReporter implementation from Compiler. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes after rebase. Created 5 years, 2 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 dart2js.resolution.enum_creator; 5 library dart2js.resolution.enum_creator;
6 6
7 import '../compiler.dart'; 7 import '../core_types.dart' show
8 import '../core_types.dart'; 8 CoreTypes;
9 import '../dart_types.dart'; 9 import '../dart_types.dart';
10 import '../diagnostics/diagnostic_listener.dart' show
11 DiagnosticReporter;
10 import '../elements/elements.dart'; 12 import '../elements/elements.dart';
11 import '../elements/modelx.dart'; 13 import '../elements/modelx.dart';
12 import '../tokens/keyword.dart' show 14 import '../tokens/keyword.dart' show
13 Keyword; 15 Keyword;
14 import '../tokens/precedence.dart'; 16 import '../tokens/precedence.dart';
15 import '../tokens/precedence_constants.dart' as Precedence; 17 import '../tokens/precedence_constants.dart' as Precedence;
16 import '../tokens/token.dart'; 18 import '../tokens/token.dart';
17 import '../tree/tree.dart'; 19 import '../tree/tree.dart';
18 import '../util/util.dart'; 20 import '../util/util.dart';
19 21
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 null, // Type arguments. 175 null, // Type arguments.
174 new NodeList(symbolToken(Precedence.OPEN_CURLY_BRACKET_INFO), 176 new NodeList(symbolToken(Precedence.OPEN_CURLY_BRACKET_INFO),
175 linkedList(entries), 177 linkedList(entries),
176 symbolToken(Precedence.CLOSE_CURLY_BRACKET_INFO), 178 symbolToken(Precedence.CLOSE_CURLY_BRACKET_INFO),
177 ','), 179 ','),
178 isConst ? keywordToken('const') : null); 180 isConst ? keywordToken('const') : null);
179 } 181 }
180 } 182 }
181 183
182 class EnumCreator { 184 class EnumCreator {
183 final Compiler compiler; 185 final DiagnosticReporter reporter;
186 final CoreTypes coreTypes;
184 final EnumClassElementX enumClass; 187 final EnumClassElementX enumClass;
185 188
186 EnumCreator(this.compiler, this.enumClass); 189 EnumCreator(this.reporter, this.coreTypes, this.enumClass);
187
188 CoreTypes get coreTypes => compiler.coreTypes;
189 190
190 void createMembers() { 191 void createMembers() {
191 Enum node = enumClass.node; 192 Enum node = enumClass.node;
192 InterfaceType enumType = enumClass.thisType; 193 InterfaceType enumType = enumClass.thisType;
193 AstBuilder builder = new AstBuilder(enumClass.position.charOffset); 194 AstBuilder builder = new AstBuilder(enumClass.position.charOffset);
194 195
195 InterfaceType intType = coreTypes.intType; 196 InterfaceType intType = coreTypes.intType;
196 InterfaceType stringType = coreTypes.stringType; 197 InterfaceType stringType = coreTypes.stringType;
197 198
198 EnumFieldElementX addInstanceMember(String name, InterfaceType type) { 199 EnumFieldElementX addInstanceMember(String name, InterfaceType type) {
199 Identifier identifier = builder.identifier(name); 200 Identifier identifier = builder.identifier(name);
200 VariableList variableList = 201 VariableList variableList =
201 new VariableList(builder.modifiers(isFinal: true)); 202 new VariableList(builder.modifiers(isFinal: true));
202 variableList.type = type; 203 variableList.type = type;
203 EnumFieldElementX variable = new EnumFieldElementX( 204 EnumFieldElementX variable = new EnumFieldElementX(
204 identifier, enumClass, variableList, identifier); 205 identifier, enumClass, variableList, identifier);
205 enumClass.addMember(variable, compiler); 206 enumClass.addMember(variable, reporter);
206 return variable; 207 return variable;
207 } 208 }
208 209
209 EnumFieldElementX indexVariable = addInstanceMember('index', intType); 210 EnumFieldElementX indexVariable = addInstanceMember('index', intType);
210 211
211 VariableDefinitions indexDefinition = builder.initializingFormal('index'); 212 VariableDefinitions indexDefinition = builder.initializingFormal('index');
212 213
213 FunctionExpression constructorNode = builder.functionExpression( 214 FunctionExpression constructorNode = builder.functionExpression(
214 builder.modifiers(isConst: true), 215 builder.modifiers(isConst: true),
215 enumClass.name, 216 enumClass.name,
(...skipping 10 matching lines...) Expand all
226 indexDefinition, 227 indexDefinition,
227 builder.identifier('index'), 228 builder.identifier('index'),
228 indexVariable); 229 indexVariable);
229 230
230 FunctionSignatureX constructorSignature = new FunctionSignatureX( 231 FunctionSignatureX constructorSignature = new FunctionSignatureX(
231 requiredParameters: [indexFormal], 232 requiredParameters: [indexFormal],
232 requiredParameterCount: 1, 233 requiredParameterCount: 1,
233 type: new FunctionType(constructor, const VoidType(), 234 type: new FunctionType(constructor, const VoidType(),
234 <DartType>[intType])); 235 <DartType>[intType]));
235 constructor.functionSignatureCache = constructorSignature; 236 constructor.functionSignatureCache = constructorSignature;
236 enumClass.addMember(constructor, compiler); 237 enumClass.addMember(constructor, reporter);
237 238
238 List<FieldElement> enumValues = <FieldElement>[]; 239 List<FieldElement> enumValues = <FieldElement>[];
239 VariableList variableList = 240 VariableList variableList =
240 new VariableList(builder.modifiers(isStatic: true, isConst: true)); 241 new VariableList(builder.modifiers(isStatic: true, isConst: true));
241 variableList.type = enumType; 242 variableList.type = enumType;
242 int index = 0; 243 int index = 0;
243 List<Node> valueReferences = <Node>[]; 244 List<Node> valueReferences = <Node>[];
244 List<LiteralMapEntry> mapEntries = <LiteralMapEntry>[]; 245 List<LiteralMapEntry> mapEntries = <LiteralMapEntry>[];
245 for (Link<Node> link = node.names.nodes; 246 for (Link<Node> link = node.names.nodes;
246 !link.isEmpty; 247 !link.isEmpty;
(...skipping 11 matching lines...) Expand all
258 259
259 Expression initializer = valueBuilder.newExpression( 260 Expression initializer = valueBuilder.newExpression(
260 enumClass.name, 261 enumClass.name,
261 valueBuilder.argumentList([valueBuilder.literalInt(index)]), 262 valueBuilder.argumentList([valueBuilder.literalInt(index)]),
262 isConst: true); 263 isConst: true);
263 SendSet definition = valueBuilder.createDefinition(name, initializer); 264 SendSet definition = valueBuilder.createDefinition(name, initializer);
264 265
265 EnumFieldElementX field = new EnumFieldElementX( 266 EnumFieldElementX field = new EnumFieldElementX(
266 name, enumClass, variableList, definition, initializer); 267 name, enumClass, variableList, definition, initializer);
267 enumValues.add(field); 268 enumValues.add(field);
268 enumClass.addMember(field, compiler); 269 enumClass.addMember(field, reporter);
269 index++; 270 index++;
270 } 271 }
271 272
272 VariableList valuesVariableList = 273 VariableList valuesVariableList =
273 new VariableList(builder.modifiers(isStatic: true, isConst: true)); 274 new VariableList(builder.modifiers(isStatic: true, isConst: true));
274 valuesVariableList.type = coreTypes.listType(enumType); 275 valuesVariableList.type = coreTypes.listType(enumType);
275 276
276 Identifier valuesIdentifier = builder.identifier('values'); 277 Identifier valuesIdentifier = builder.identifier('values');
277 // TODO(johnniwinther): Add type argument. 278 // TODO(johnniwinther): Add type argument.
278 Expression initializer = builder.listLiteral( 279 Expression initializer = builder.listLiteral(
279 valueReferences, isConst: true); 280 valueReferences, isConst: true);
280 281
281 Node definition = builder.createDefinition(valuesIdentifier, initializer); 282 Node definition = builder.createDefinition(valuesIdentifier, initializer);
282 283
283 EnumFieldElementX valuesVariable = new EnumFieldElementX( 284 EnumFieldElementX valuesVariable = new EnumFieldElementX(
284 valuesIdentifier, enumClass, valuesVariableList, 285 valuesIdentifier, enumClass, valuesVariableList,
285 definition, initializer); 286 definition, initializer);
286 287
287 enumClass.addMember(valuesVariable, compiler); 288 enumClass.addMember(valuesVariable, reporter);
288 289
289 // TODO(johnniwinther): Support return type. Note `String` might be prefixed 290 // TODO(johnniwinther): Support return type. Note `String` might be prefixed
290 // or not imported within the current library. 291 // or not imported within the current library.
291 FunctionExpression toStringNode = builder.functionExpression( 292 FunctionExpression toStringNode = builder.functionExpression(
292 Modifiers.EMPTY, 293 Modifiers.EMPTY,
293 'toString', 294 'toString',
294 builder.argumentList([]), 295 builder.argumentList([]),
295 builder.returnStatement( 296 builder.returnStatement(
296 builder.indexGet( 297 builder.indexGet(
297 builder.mapLiteral(mapEntries, isConst: true), 298 builder.mapLiteral(mapEntries, isConst: true),
298 builder.reference(builder.identifier('index'))) 299 builder.reference(builder.identifier('index')))
299 ) 300 )
300 ); 301 );
301 302
302 EnumMethodElementX toString = new EnumMethodElementX('toString', 303 EnumMethodElementX toString = new EnumMethodElementX('toString',
303 enumClass, Modifiers.EMPTY, toStringNode); 304 enumClass, Modifiers.EMPTY, toStringNode);
304 FunctionSignatureX toStringSignature = new FunctionSignatureX( 305 FunctionSignatureX toStringSignature = new FunctionSignatureX(
305 type: new FunctionType(toString, stringType)); 306 type: new FunctionType(toString, stringType));
306 toString.functionSignatureCache = toStringSignature; 307 toString.functionSignatureCache = toStringSignature;
307 enumClass.addMember(toString, compiler); 308 enumClass.addMember(toString, reporter);
308 309
309 enumClass.enumValues = enumValues; 310 enumClass.enumValues = enumValues;
310 } 311 }
311 } 312 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/constructors.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698