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

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

Issue 2141023002: Make initializing formal access available by default (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Additional clean-up, now ready to land Created 4 years 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 | « pkg/compiler/lib/src/options.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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.constructors; 5 library dart2js.resolution.constructors;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart' show Resolution; 8 import '../common/resolution.dart' show Resolution;
9 import '../constants/constructors.dart' 9 import '../constants/constructors.dart'
10 show 10 show
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 node, constructorName, kind, {}); 287 node, constructorName, kind, {});
288 } 288 }
289 } 289 }
290 return result; 290 return result;
291 } 291 }
292 292
293 /** 293 /**
294 * Resolve all initializers of this constructor. In the case of a redirecting 294 * Resolve all initializers of this constructor. In the case of a redirecting
295 * constructor, the resolved constructor's function element is returned. 295 * constructor, the resolved constructor's function element is returned.
296 */ 296 */
297 ConstructorElement resolveInitializers( 297 ConstructorElement resolveInitializers() {
298 {bool enableInitializingFormalAccess: false}) {
299 Map<dynamic /*String|int*/, ConstantExpression> defaultValues = 298 Map<dynamic /*String|int*/, ConstantExpression> defaultValues =
300 <dynamic /*String|int*/, ConstantExpression>{}; 299 <dynamic /*String|int*/, ConstantExpression>{};
301 ConstructedConstantExpression constructorInvocation; 300 ConstructedConstantExpression constructorInvocation;
302 // Keep track of all "this.param" parameters specified for constructor so 301 // Keep track of all "this.param" parameters specified for constructor so
303 // that we can ensure that fields are initialized only once. 302 // that we can ensure that fields are initialized only once.
304 FunctionSignature functionParameters = constructor.functionSignature; 303 FunctionSignature functionParameters = constructor.functionSignature;
305 Scope oldScope = visitor.scope; 304 Scope oldScope = visitor.scope;
306 if (enableInitializingFormalAccess) { 305 // In order to get the correct detection of name clashes between all
307 // In order to get the correct detection of name clashes between all 306 // parameters (regular ones and initializing formals) we must extend
308 // parameters (regular ones and initializing formals) we must extend 307 // the parameter scope rather than adding a new nested scope.
309 // the parameter scope rather than adding a new nested scope. 308 visitor.scope = new ExtensionScope(visitor.scope);
310 visitor.scope = new ExtensionScope(visitor.scope);
311 }
312 Link<Node> parameterNodes = (functionNode.parameters == null) 309 Link<Node> parameterNodes = (functionNode.parameters == null)
313 ? const Link<Node>() 310 ? const Link<Node>()
314 : functionNode.parameters.nodes; 311 : functionNode.parameters.nodes;
315 functionParameters.forEachParameter((ParameterElementX element) { 312 functionParameters.forEachParameter((ParameterElementX element) {
316 List<Element> optionals = functionParameters.optionalParameters; 313 List<Element> optionals = functionParameters.optionalParameters;
317 if (!optionals.isEmpty && element == optionals.first) { 314 if (!optionals.isEmpty && element == optionals.first) {
318 NodeList nodes = parameterNodes.head; 315 NodeList nodes = parameterNodes.head;
319 parameterNodes = nodes.nodes; 316 parameterNodes = nodes.nodes;
320 } 317 }
321 if (isConst) { 318 if (isConst) {
(...skipping 20 matching lines...) Expand all
342 } 339 }
343 if (element.isInitializingFormal) { 340 if (element.isInitializingFormal) {
344 VariableDefinitions variableDefinitions = parameterNodes.head; 341 VariableDefinitions variableDefinitions = parameterNodes.head;
345 Node parameterNode = variableDefinitions.definitions.nodes.head; 342 Node parameterNode = variableDefinitions.definitions.nodes.head;
346 InitializingFormalElementX initializingFormal = element; 343 InitializingFormalElementX initializingFormal = element;
347 FieldElement field = initializingFormal.fieldElement; 344 FieldElement field = initializingFormal.fieldElement;
348 if (!field.isMalformed) { 345 if (!field.isMalformed) {
349 registry.registerStaticUse(new StaticUse.fieldInit(field)); 346 registry.registerStaticUse(new StaticUse.fieldInit(field));
350 } 347 }
351 checkForDuplicateInitializers(field, element.initializer); 348 checkForDuplicateInitializers(field, element.initializer);
352 if (enableInitializingFormalAccess) { 349 visitor.defineLocalVariable(parameterNode, initializingFormal);
353 visitor.defineLocalVariable(parameterNode, initializingFormal); 350 visitor.addToScope(initializingFormal);
354 visitor.addToScope(initializingFormal);
355 }
356 if (isConst) { 351 if (isConst) {
357 if (element.isNamed) { 352 if (element.isNamed) {
358 fieldInitializers[field] = new NamedArgumentReference(element.name); 353 fieldInitializers[field] = new NamedArgumentReference(element.name);
359 } else { 354 } else {
360 int index = element.functionDeclaration.parameters.indexOf(element); 355 int index = element.functionDeclaration.parameters.indexOf(element);
361 fieldInitializers[field] = new PositionalArgumentReference(index); 356 fieldInitializers[field] = new PositionalArgumentReference(index);
362 } 357 }
363 } else { 358 } else {
364 isValidAsConstant = false; 359 isValidAsConstant = false;
365 } 360 }
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 // constructors. 879 // constructors.
885 return null; 880 return null;
886 } 881 }
887 // TODO(johnniwinther): Use [Name] for lookup. 882 // TODO(johnniwinther): Use [Name] for lookup.
888 ConstructorElement constructor = cls.lookupConstructor(constructorName); 883 ConstructorElement constructor = cls.lookupConstructor(constructorName);
889 if (constructor != null) { 884 if (constructor != null) {
890 constructor = constructor.declaration; 885 constructor = constructor.declaration;
891 } 886 }
892 return constructor; 887 return constructor;
893 } 888 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/options.dart ('k') | pkg/compiler/lib/src/resolution/members.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698