commit | ae0a4d994e0f2d8cc83ee0ad409690aa18426201 | [log] [tgz] |
---|---|---|
author | Paul Berry <paulberry@google.com> | Fri Jul 13 23:15:29 2018 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Fri Jul 13 23:15:29 2018 +0000 |
tree | 350d0724ac78840f3bbbb66de20b4b98d4f58104 | |
parent | ed8824f6867be0bbc9fc458bde9f05b5c6ce21ab [diff] |
Rework how type information is communicated from CFE to analyzer. This CL introduces new Factory/TypeInferenceListener methods to communicate details about types that are literally named in the source code. Previously, when an expression like `x as List<int>` was analyzed, the resolution information about `List<int>` was communicated to the analyzer via a kernel DartType, forcing the analyzer to walk the type representation, applying each of its constituent parts to the corresponding part of the AST for `List<int>`. This was a lot of work for the analyzer, it failed to resolve parts of invalid types (such as `List<int, String>), and it didn't pave the way toward moving to the Factory API. The new approach is for information about each type appearing in the syntax to be communicated to the analyzer at the time the BodyBuilder converts it to a DartType. So for an invalid type like `List<int, String>`, the resolution of `String` is communicated to the analyzer at the time it is converted to a DartType; later, when `String` is discarded (because `List` only accepts one type parameter), no crucial information is lost, because the analyzer already knows the resolution of `String`. Work still to be done has been captured in issues: - #33844: References to type parameter elements are not translated - #33845: Function typed formal parameters are not handled - #33846: Function types using `Function` syntax are not yet handled Change-Id: I96dd9b6f3eb573b0b7a46335e8644c59fb78bae7 Reviewed-on: https://dart-review.googlesource.com/64262 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@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.