Index: docs/language/dartLangSpec.tex |
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex |
index 7efe14607b89784e52bbb889148b38a3028cb1c3..00da5fc39c56074b8bcb87b02f49233c692e7522 100644 |
--- a/docs/language/dartLangSpec.tex |
+++ b/docs/language/dartLangSpec.tex |
@@ -3194,7 +3194,7 @@ Of course, if a key repeats, the order is defined by first occurrence, but the v |
} |
\LMHash{} |
-The static type of a map literal of the form \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ or the form $<K, V>\{k_1:e_1\ldots k_n :e_n\}$ is $Map<K, V>$. The static type a map literal of the form \CONST{}$\{k_1:e_1\ldots k_n :e_n\}$ or the form $\{k_1:e_1\ldots k_n :e_n\}$ is $Map<\DYNAMIC{}, \DYNAMIC{}>$. |
+The static type of a map literal of the form \CONST{}$ <K, V>\{k_1:e_1\ldots k_n :e_n\}$ or the form $<K, V>\{k_1:e_1\ldots k_n :e_n\}$ is $Map<K, V>$. The static type of a map literal of the form \CONST{}$\{k_1:e_1\ldots k_n :e_n\}$ or the form $\{k_1:e_1\ldots k_n :e_n\}$ is $Map<\DYNAMIC{}, \DYNAMIC{}>$. |
\subsection{Throw} |
@@ -3221,7 +3221,7 @@ Evaluation of a throw expression of the form \code{\THROW{} $e$;} proceeds as f |
The expression $e$ is evaluated to a value $v$ (\ref{evaluation}). |
\commentary{ |
-There is no requirement that the expression $e$ evaluate to any special kind of object. |
+There is no requirement that the expression $e$ evaluates to any special kind of object. |
} |
\LMHash{} |
@@ -4087,7 +4087,7 @@ Let $T$ be the static type of $o$. It is a static type warning if $T$ does not |
\item |
$T$ or a superinterface of $T$ is annotated with an annotation denoting a constant identical to the constant \code{@proxy} defined in \code{dart:core}. Or |
\item $T$ is \code{Type}, $e$ is a constant type literal and the class corresponding to $e$ has a static getter named $m$. |
-\item $T$ is \code{Function} and $m$ is \CALL. \rationale {The type \code{Function} is treated as if it has a \code{call} method for any possible signature of \CALL. The expectation is that any concrete subclass of \code{Function} will implement \CALL. Note that a warning will be issue if this is not the case. Furthermore, any use of \CALL{} on a subclass of \code{Function} that fails to implement \CALL{} will also provoke a warning, as this exemption is limited to type \code{Function}, and does not apply to its subtypes. |
+\item $T$ is \code{Function} and $m$ is \CALL. \rationale {The type \code{Function} is treated as if it has a \code{call} method for any possible signature of \CALL. The expectation is that any concrete subclass of \code{Function} will implement \CALL. Note that a warning will be issued if this is not the case. Furthermore, any use of \CALL{} on a subclass of \code{Function} that fails to implement \CALL{} will also provoke a warning, as this exemption is limited to type \code{Function}, and does not apply to its subtypes. |
} |
\end{itemize} |
@@ -4758,7 +4758,7 @@ then the type of $v$ is known to be $T$ in $e_2$. |
\label{ifNull} |
\LMHash{} |
- An {\em if-null expression}evaluates an expression and if the result is \NULL, evaluates another. |
+ An {\em if-null expression} evaluates an expression and if the result is \NULL, evaluates another. |
\begin{grammar} |
{\bf ifNullExpression:} |
@@ -6472,7 +6472,7 @@ In the case of a generator function, the value returned by the function is the i |
} |
\LMHash{} |
-Let $f$ be the function immediately enclosing a return statement of the form \RETURN{}; It is a static warning $f$ is neither a generator nor a generative constructor and either: |
+Let $f$ be the function immediately enclosing a return statement of the form \RETURN{}; It is a static warning if $f$ is neither a generator nor a generative constructor and either: |
\begin{itemize} |
\item $f$ is synchronous and the return type of $f$ may not be assigned to \VOID{} (\ref{typeVoid}) or, |
\item $f$ is asynchronous and the return type of $f$ may not be assigned to \code{Future<Null>}. |
@@ -7363,7 +7363,7 @@ main() \{ |
\end{dartCode} |
\commentary{ |
-Since $i$ is not a type, a static warning will be issue at the declaration of $j$. However, the program can be executed without incident in production mode because he undeclared type $i$ is treated as \DYNAMIC{}. However, in checked mode, the implicit subtype test at the assignment will trigger an error at runtime. |
+Since $i$ is not a type, a static warning will be issue at the declaration of $j$. However, the program can be executed without incident in production mode because the undeclared type $i$ is treated as \DYNAMIC{}. However, in checked mode, the implicit subtype test at the assignment will trigger an error at runtime. |
} |
@@ -7748,7 +7748,7 @@ Type objects reify the runtime types of instances. No instance ever has type \VO |
A {\em parameterized type} is an invocation of a generic type declaration. |
\LMHash{} |
-Let $T$ be a parameterized type $G<S_1, \ldots, S_n>$. If $G$ is not a generic type, the type arguments $S_i$, $1 \le i \le n$ are discarded. If $G$ has $m \ne n$ type parameters, $T$ is treated as as a parameterized type with $m$ arguments, all of which are \DYNAMIC{}. |
+Let $T$ be a parameterized type $G<S_1, \ldots, S_n>$. If $G$ is not a generic type, the type arguments $S_i$, $1 \le i \le n$ are discarded. If $G$ has $m \ne n$ type parameters, $T$ is treated as a parameterized type with $m$ arguments, all of which are \DYNAMIC{}. |
\commentary{In short, any arity mismatch results in all type arguments being dropped, and replaced with the correct number of type arguments, all set to \DYNAMIC{}. Of course, a static warning will be issued. |
} |