Files
sdk/pkg/_fe_analyzer_shared/test/flow_analysis
Paul Berry 61e714b2fc Create ExpressionTypeAnalysisResult interface and use in tests.
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>
2022-08-23 17:04:40 +00:00
..