Fixes https://github.com/dart-lang/sdk/issues/42375 EdgeBuilder wishes to do its own GLB type-joining, as does FlowAnalysis. When FlowAnalysis pushes a promotion in ifNullExpression_rightBegin, and then in write, and then pops those two promotions to join them in ifNullExpression_end, EdgeBuilder is not given a chance to make its own GLB node. Instead promotion never happens: the DecoratedType which is the variable's type is promoted to non-nullable, for the left side. The DecoratedType for the right side expression is not considered non-nullable, so the FlowAnalysis.join will always fail to promote. TypeOperations.adjustPromotedTypes solves this. It is a no-op in all implementations except in EdgeBuilder. Additionally FlowAnalysis.write's promotion fails for the same reason: the only type of interest is the declared type made non-nullable, and no matter what, the writtenType is not a subtype of this. TypeOperations.forcePromotion solves this. It is a no-op in all implementations except EdgeBuilder. Change-Id: Iba6b9a69583af8fe1aa23124c7d66047acfff495 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/152104 Reviewed-by: Paul Berry <paulberry@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Samuel Rawlins <srawlins@google.com>
Front end for Dart
This package provides a low-level API for use by compiler back ends that wish to implement the Dart language. It is intended for eventual use by dev_compiler, dart2js, and the Dart VM. In addition, it will share implementation details with the analyzer package--this will be accomplished by having the analyzer package import (and re-export) parts of this package's private implementation.
End-users should use the [dartanalyzer][analyzercli] command-line tool to analyze their Dart code.
Integrators that want to write tools that analyze Dart code should use the [analyzer] package.
Note: The APIs in this package are in an early state; developers should be careful about depending on this package. In particular, there is no semver contract for release versions of this package. Please depend directly on individual versions.