commit | e59cf89fa3697b6bd67ae3a1df34c7dc277301d4 | [log] [tgz] |
---|---|---|
author | Paul Berry <paulberry@google.com> | Mon Jun 04 14:05:46 2018 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Mon Jun 04 14:05:46 2018 +0000 |
tree | 80605c3f17506a4b48113a2a5fdd6a912e4528ae | |
parent | 1fe279d8598693e8005b71d6db386a96f2e49ce3 [diff] |
Clean up FunctionTypeImpl constructors. Previously, FunctionTypeImpl.elementWithNameAndArgs was used for two purposes: (1) when creating a FunctionTypeImpl for an executable element, to initialize _typeArguments to the types of the type parameters that are in scope, and (2) when creating a FunctionTypeImpl for a typedef, to supply the type arguments necessary to instantiate the typedef. (1) turns out to be unnecessary, since the FunctionTypeImpl.typeArguments getter automatically gathers type arguments from enclosing elements if necessary, and (2) makes more sense to do as part of the .forTypedef constructor. So this CL removes FunctionTypeImpl.elementWithNameAndArgs and updates its callers to use the unnamed constructor or the .forTypedef constructor, as appropriate. Also, a check is added to make sure that the unnamed constructor is never accidentally used for typedefs. So now FunctionTypeImpl has just three public constructors, each with a clear use case, enforced either by an assertion or by the type system: - The unnamed constructor (for executable elements, not typedefs) - The .forTypedef constructor (for typedefs only) - The .fresh constructor (for creating one FunctionTypeImpl from another by binding fresh type parameters) Finally, the public constructors for FunctionTypeImpl are all changed to factories so that client code can't inadvertently FunctionTypeImpl. (It shouldn't anyway, since FunctionTypeImpl is defined inside src/, but this gives an extra level of safety). Change-Id: I5f7abc1ca114eb612cbf539c1d61fc0cace5a4dd Reviewed-on: https://dart-review.googlesource.com/58043 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Mike Fairhurst <mfairhurst@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Visit the dartlang.org to learn more about the language, tools, getting started, and more.
Browse pub.dartlang.org for more packages and libraries contributed by the community and the Dart team.
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.