| OLD | NEW |
| 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 // that we can ensure that fields are initialized only once. | 306 // that we can ensure that fields are initialized only once. |
| 307 FunctionSignature functionParameters = constructor.functionSignature; | 307 FunctionSignature functionParameters = constructor.functionSignature; |
| 308 Scope oldScope = visitor.scope; | 308 Scope oldScope = visitor.scope; |
| 309 // In order to get the correct detection of name clashes between all | 309 // In order to get the correct detection of name clashes between all |
| 310 // parameters (regular ones and initializing formals) we must extend | 310 // parameters (regular ones and initializing formals) we must extend |
| 311 // the parameter scope rather than adding a new nested scope. | 311 // the parameter scope rather than adding a new nested scope. |
| 312 visitor.scope = new ExtensionScope(visitor.scope); | 312 visitor.scope = new ExtensionScope(visitor.scope); |
| 313 Link<Node> parameterNodes = (functionNode.parameters == null) | 313 Link<Node> parameterNodes = (functionNode.parameters == null) |
| 314 ? const Link<Node>() | 314 ? const Link<Node>() |
| 315 : functionNode.parameters.nodes; | 315 : functionNode.parameters.nodes; |
| 316 functionParameters.forEachParameter((ParameterElementX element) { | 316 functionParameters.forEachParameter((FormalElement _element) { |
| 317 ParameterElementX element = _element; |
| 317 List<Element> optionals = functionParameters.optionalParameters; | 318 List<Element> optionals = functionParameters.optionalParameters; |
| 318 if (!optionals.isEmpty && element == optionals.first) { | 319 if (!optionals.isEmpty && element == optionals.first) { |
| 319 NodeList nodes = parameterNodes.head; | 320 NodeList nodes = parameterNodes.head; |
| 320 parameterNodes = nodes.nodes; | 321 parameterNodes = nodes.nodes; |
| 321 } | 322 } |
| 322 if (isConst) { | 323 if (isConst) { |
| 323 if (element.isOptional) { | 324 if (element.isOptional) { |
| 324 if (element.constantCache == null) { | 325 if (element.constantCache == null) { |
| 325 // TODO(johnniwinther): Remove this when all constant expressions | 326 // TODO(johnniwinther): Remove this when all constant expressions |
| 326 // can be computed during resolution. | 327 // can be computed during resolution. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 408 } |
| 408 // Check that there are no other initializers. | 409 // Check that there are no other initializers. |
| 409 if (!initializers.tail.isEmpty) { | 410 if (!initializers.tail.isEmpty) { |
| 410 reporter.reportErrorMessage( | 411 reporter.reportErrorMessage( |
| 411 call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER); | 412 call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER); |
| 412 } else { | 413 } else { |
| 413 constructor.isRedirectingGenerativeInternal = true; | 414 constructor.isRedirectingGenerativeInternal = true; |
| 414 } | 415 } |
| 415 // Check that there are no field initializing parameters. | 416 // Check that there are no field initializing parameters. |
| 416 FunctionSignature signature = constructor.functionSignature; | 417 FunctionSignature signature = constructor.functionSignature; |
| 417 signature.forEachParameter((ParameterElement parameter) { | 418 signature.forEachParameter((FormalElement parameter) { |
| 418 if (parameter.isInitializingFormal) { | 419 if (parameter.isInitializingFormal) { |
| 419 Node node = parameter.node; | 420 Node node = parameter.node; |
| 420 reporter.reportErrorMessage( | 421 reporter.reportErrorMessage( |
| 421 node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED); | 422 node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED); |
| 422 isValidAsConstant = false; | 423 isValidAsConstant = false; |
| 423 } | 424 } |
| 424 }); | 425 }); |
| 425 ResolutionResult result = resolveSuperOrThisForSend(call); | 426 ResolutionResult result = resolveSuperOrThisForSend(call); |
| 426 if (isConst) { | 427 if (isConst) { |
| 427 if (result.isConstant) { | 428 if (result.isConstant) { |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 // constructors. | 887 // constructors. |
| 887 return null; | 888 return null; |
| 888 } | 889 } |
| 889 // TODO(johnniwinther): Use [Name] for lookup. | 890 // TODO(johnniwinther): Use [Name] for lookup. |
| 890 ConstructorElement constructor = cls.lookupConstructor(constructorName); | 891 ConstructorElement constructor = cls.lookupConstructor(constructorName); |
| 891 if (constructor != null) { | 892 if (constructor != null) { |
| 892 constructor = constructor.declaration; | 893 constructor = constructor.declaration; |
| 893 } | 894 } |
| 894 return constructor; | 895 return constructor; |
| 895 } | 896 } |
| OLD | NEW |