commit | abd18541762e70e64061279ffe4639b7b463dbeb | [log] [tgz] |
---|---|---|
author | Paul Berry <paulberry@google.com> | Mon Mar 11 16:50:43 2019 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Mon Mar 11 16:50:43 2019 +0000 |
tree | a3d57b846ac86d9d62af175a8cde04cd6ccbf7b6 | |
parent | a8b3461f2e86451acef0c1e16b62aed1af301e00 [diff] |
Fix recording of map/literal context type. Previously, we were using the storage space provided by `InferenceContext.getContext` for two purposes: 1. to store the inference context passed down from the parent AST node, and 2. to store the refined inference context computed by ResolverVisitor._computeContextType. After type inference, the data that remained was the refined interface context (2); however, ErrorVerifier._checkForRawTypeErrors was expecting to be able to retrieve the downward inference context in order to report `HintCode.STRICT_RAW_TYPE` correctly. This caused a failure in test_strictRawTypes_emptyMap (in checker_test.dart). This CL fixes the issue by storing the refined inference context (2) in a field in `SetOrMapLiteralImpl`, so that it doesn't overwrite the downward inference context (1). It also fixes an issue that was previously obscured by this bug, where we weren't copying over the downward inference context when replacing a set literal with a map literal. (This fix will become irrelevant after the next breaking change release of the analyzer, when we stop creating different objects for set vs. map literals, and simply use the base class `SetOrMapLiteralImpl`). In addition, ResolverVisitor._computeContextType has been renamed to _computeSetOrMapLiteralContextType to clarify that it only computes context information for set/map literals. Change-Id: I62a9c4bb6fe755acf60b881948538216af81b515 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96261 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@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.