718d7fe5fe
Previously, ternary expressions were emitted as: condExpr ? trueCase : falseCase However, this causes problems when ternary operations are nested. In particular, a template expression of the form: a?.b ? c : d would have compiled to: a == null ? null : a.b ? c : d The ternary operator is right-associative, so that expression is interpreted as: a == null ? null : (a.b ? c : d) when in reality left-associativity is desired in this particular instance: (a == null ? null : a.b) ? c : d This commit adds a check in the expression translator to detect such left-associative usages of ternaries and to enforce such associativity with parentheses when necessary. A test is also added for the template type-checking expression translator, to ensure it correctly produces right-associative expressions for ternaries in the user's template. Fixes #34087 PR Close #34221 |
||
---|---|---|
.. | ||
compliance | ||
diagnostics | ||
helpers | ||
metadata | ||
ngtsc | ||
transformers | ||
BUILD.bazel | ||
extract_i18n_spec.ts | ||
mocks.ts | ||
ngc_spec.ts | ||
perform_compile_spec.ts | ||
perform_watch_spec.ts | ||
test_support.ts | ||
typescript_support_spec.ts |