f4b649ca4f
When evaluating a constant expression, first evaluate all children. If any of these turn out to be unevaluated, produce a partially evaluated clone of the expression as a new unevaluated constant. For lazy operators, if the left-hand side turns out unevaluated, the right-hand side is included unmodified (not partially evaluated) in the resulting unevaluated constant expression tree. The implementation is optimized for the typical case of no unevaluated constants. The intent is that the handling of unevaluated constants introduces as little overhead as possible in this case. Change-Id: Ief8d36357fac01c07bc0049aede0888cd3bc7999 Reviewed-on: https://dart-review.googlesource.com/c/93029 Commit-Queue: Aske Simon Christensen <askesc@google.com> Reviewed-by: Kevin Millikin <kmillikin@google.com>