61e714b2fc
This is a preparatory step towards sharing type inference logic between the front end and analyzer. The ExpressionTypeAnalysisResult interface will be returned from the shared `analyze` methods for expressions, as a container for all the information needed by both the client (front end or analyzer) and by the code that analyzes the containing expression or statement. For now, the only implementation of the interface is SimpleTypeAnalysisResult, which represents the result of analyzing a simple expression with no null shorting. In future CLs I plan to add more types, recording information such as: - For an integer literal, whether it was implicitly converted to `double`. - For a binary operator or a compound assignment, the resolved binary operator. - Information necessary to coordinate null shorting. And so on. There is a placeholder method `resolveShorting` that will encapsulate null shorting logic, but it doesn't do anything special in the case of SimpleTypeAnalysisResult. At the moment, only test code is affected. Note that this approach isn't free; every time we analyze an expression we wrap the resulting type in a SimpleTypeAnalysisResult, so there's a cost of one allocation per expression in the user's program. I don't believe this will be a problem in practice, because the front end uses a similar approach, so it is already paying this penalty. Change-Id: Ic407089b6eb9e717c65d73766e7c836e161ef0da Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255080 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Paul Berry <paulberry@google.com>