diff --git a/specification/dartLangSpec.tex b/specification/dartLangSpec.tex index e6ccfc7f69..d5cf9c1f5e 100644 --- a/specification/dartLangSpec.tex +++ b/specification/dartLangSpec.tex @@ -11268,16 +11268,12 @@ \subsection{Function Expressions} which is used below and in other sections, as follows: \begin{itemize} -\item{} If $T$ is a type variable $X$ with bound $B$, - or $T$ is an intersection type - (\ref{intersectionTypes}) - \code{$X$\,\,\&\,\,$B$}, - then \DefEquals{\flatten{T}}{\flatten{B}}. - \item{} If $T$ is \code{$S$?}\ for some $S$ then \DefEquals{\flatten{T}}{\code{\flatten{S}?}}. -\item{} If $T$ is \code{FutureOr<$S$>} then \DefEquals{\flatten{T}}{S}. +\item{} If $T$ is \code{FutureOr<$S$>} bounded + (\ref{bindingActualsToFormals}) + then \DefEquals{\flatten{T}}{S}. \item{} If $T$ implements \code{Future<$S$>} (\ref{interfaceSuperinterfaces}) @@ -11288,7 +11284,13 @@ \subsection{Function Expressions} \commentary{% This definition guarantees that for any type $T$, -\code{$T <:$ FutureOr<$\flatten{T}$>}.% +\code{$T <:$ FutureOr<$\flatten{T}$>}. +Note that when $X$ is a type variable with bound $B$, +it is possible that \flatten{X} is different from $X$: +$B$ could, for some $S$, be \code{FutureOr<$S$>}, +or a type variable $Y$ with bound \code{FutureOr<$S$>}, +or a class $C$ that implements \code{Future<$S$>}, +or a type variable $X$ with bound $C$.% } \LMHash{}%