OLD | NEW |
---|---|
1 \documentclass{article} | 1 \documentclass{article} |
2 \usepackage{epsfig} | 2 \usepackage{epsfig} |
3 \usepackage{color} | 3 \usepackage{color} |
4 \usepackage{dart} | 4 \usepackage{dart} |
5 \usepackage{bnf} | 5 \usepackage{bnf} |
6 \usepackage{hyperref} | 6 \usepackage{hyperref} |
7 \usepackage{lmodern} | 7 \usepackage{lmodern} |
8 \newcommand{\code}[1]{{\sf #1}} | 8 \newcommand{\code}[1]{{\sf #1}} |
9 \title{Dart Programming Language Specification \\ | 9 \title{Dart Programming Language Specification \\ |
10 {\large Version 1.9}} | 10 {\large Version 1.9}} |
11 %\author{The Dart Team} | |
12 | 11 |
13 % For information about Location Markers (and in particular the | 12 % For information about Location Markers (and in particular the |
14 % commands \LMHash and \LMLabel), see the long comment at the | 13 % commands \LMHash and \LMLabel), see the long comment at the |
15 % end of this file. | 14 % end of this file. |
16 | 15 |
17 \begin{document} | 16 \begin{document} |
18 \maketitle | 17 \maketitle |
19 \tableofcontents | 18 \tableofcontents |
20 | 19 |
21 | 20 |
(...skipping 11 matching lines...) Expand all Loading... | |
33 | 32 |
34 \section{Conformance} | 33 \section{Conformance} |
35 \LMLabel{ecmaConformance} | 34 \LMLabel{ecmaConformance} |
36 | 35 |
37 \LMHash{} | 36 \LMHash{} |
38 A conforming implementation of the Dart programming language must provide and s upport all the APIs (libraries, types, functions, getters, setters, whether top -level, static, instance or local) mandated in this specification. | 37 A conforming implementation of the Dart programming language must provide and s upport all the APIs (libraries, types, functions, getters, setters, whether top -level, static, instance or local) mandated in this specification. |
39 | 38 |
40 \LMHash{} | 39 \LMHash{} |
41 A conforming implementation is permitted to provide additional APIs, but not add itional syntax. | 40 A conforming implementation is permitted to provide additional APIs, but not add itional syntax. |
42 | 41 |
43 % A claim of conformance with this Ecma Standard shall specify? | |
44 | |
45 \section{Normative References} | 42 \section{Normative References} |
46 \LMLabel{ecmaNormativeReferences} | 43 \LMLabel{ecmaNormativeReferences} |
47 | 44 |
48 \LMHash{} | 45 \LMHash{} |
49 The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated ref erences, the latest edition of the referenced document (including any amendments ) applies. | 46 The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated ref erences, the latest edition of the referenced document (including any amendments ) applies. |
50 | 47 |
51 \begin{enumerate} | 48 \begin{enumerate} |
52 \item | 49 \item |
53 The Unicode Standard, Version 5.0, as amended by Unicode 5.1.0, or successor. | 50 The Unicode Standard, Version 5.0, as amended by Unicode 5.1.0, or successor. |
54 \item | 51 \item |
(...skipping 3030 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3085 | 3082 |
3086 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{ n+k} = d_k]) => e$ | 3083 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{ n+k} = d_k]) => e$ |
3087 is | 3084 is |
3088 | 3085 |
3089 $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T _0$, where $T_0$ is the static type of $e$. | 3086 $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarrow T _0$, where $T_0$ is the static type of $e$. |
3090 | 3087 |
3091 \LMHash{} | 3088 \LMHash{} |
3092 The static type of a function literal of the form | 3089 The static type of a function literal of the form |
3093 | 3090 |
3094 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{ n+k} = d_k])$ \ASYNC{} $=> e$ | 3091 $(T_1$ $a_1, \ldots, T_n$ $a_n, [T_{n+1}$ $x_{n+1} = d_1, \ldots, T_{n+k}$ $x_{ n+k} = d_k])$ \ASYNC{} $=> e$ |
3095 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarro w Future<flatten(T_0)>$, where $T_0$ is the static type of $e$ and $flatten(T) = flatten(S)$ if $T = Future<S>$, and $T$ otherwise. | 3092 is $(T_1 \ldots, T_n, [T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}]) \rightarro w Future<flatten(T_0)>$, where $T_0$ is the static type of $e$ and $flatten(T)$ is defined as follows: |
3093 | |
3094 If $T = Future<S>$ then $flatten(T) = flatten(S)$. | |
3095 | |
3096 Otherwise if $T <: Future$ then let $S$ be a type such that $T << Future<S>$ an d for all $R$, if $T << Future<R>$ then $S << R$. | |
3097 | |
3098 \rationale{ | |
3099 This ensures that $Future<S>$ is the most specific instantiation of \cd{Future} that is a super type of $T$. | |
3100 } | |
3101 | |
3102 Then $flatten(T) = S$. | |
3103 | |
3104 In any other circumstance, $flatten(T) = T$. | |
3105 | |
3106 | |
3096 | 3107 |
3097 \rationale{ | 3108 \rationale{ |
3098 We collapse multiple layers of futures into one. If $e$ evaluates to a future $f $, the future will not invoke its \code{then()} callback until f completes to a non-future value, and so the result of an await is never a future, and the resul t of an async function will never have type \code{Future$<X>$} where $X$ itself is an invocation of \code{Future}. | 3109 We collapse multiple layers of futures into one. If $e$ evaluates to a future $f $, the future will not invoke its \code{then()} callback until f completes to a non-future value, and so the result of an await is never a future, and the resul t of an async function will never have type \code{Future$<X>$} where $X$ itself is an invocation of \code{Future}. |
3110 | |
3111 The exception to that would be a type $X$ that extended or implemented \code{Fu ture}. In that case, only one unwrapping takes place. As an example of why this is done, consider | |
3112 | |
3113 \cd{\CLASS{} C$<$T$>$ \IMPLEMENTS{} Future$<$C$<$C$<$T$>>>$ \ldots } | |
3114 | |
3115 Here, a naive definition of $flatten$ diverges; there is not even a fixed point. A more sophisticated definition of $flatten$ is possible, but the existing rule deals with most realistic examples while remaining relatively simple to underst and. | |
3116 | |
3099 } | 3117 } |
3100 | 3118 |
3101 | 3119 |
3102 \LMHash{} | 3120 \LMHash{} |
3103 The static type of a function literal of the form | 3121 The static type of a function literal of the form |
3104 | 3122 |
3105 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_ {n+k} : d_k\}) => e$ | 3123 $(T_1$ $a_1, \ldots, T_n$ $a_n, \{T_{n+1}$ $x_{n+1} : d_1, \ldots, T_{n+k}$ $x_ {n+k} : d_k\}) => e$ |
3106 is | 3124 is |
3107 | 3125 |
3108 $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$. | 3126 $(T_1 \ldots, T_n, \{T_{n+1}$ $x_{n+1}, \ldots, T_{n+k}$ $x_{n+k}\}) \rightarrow T_0$, where $T_0$ is the static type of $e$. |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3521 } | 3539 } |
3522 | 3540 |
3523 \LMHash{} | 3541 \LMHash{} |
3524 The iterable implementation must comply with the contract of \code{Iterable} and should not take any steps identified as exceptionally efficient in that contrac t. | 3542 The iterable implementation must comply with the contract of \code{Iterable} and should not take any steps identified as exceptionally efficient in that contrac t. |
3525 | 3543 |
3526 \commentary { | 3544 \commentary { |
3527 The contract explicitly mentions a number of situations where certain iterables could be more efficient than normal. For example, by precomputing their length. Normal iterables must iterate over their elements to determine their length. Thi s is certainly true in the case of a synchronous generator, where each element i s computed by a function. It would not be acceptable to pre-compute the results of the generator and cache them, for example. | 3545 The contract explicitly mentions a number of situations where certain iterables could be more efficient than normal. For example, by precomputing their length. Normal iterables must iterate over their elements to determine their length. Thi s is certainly true in the case of a synchronous generator, where each element i s computed by a function. It would not be acceptable to pre-compute the results of the generator and cache them, for example. |
3528 } | 3546 } |
3529 | 3547 |
3530 \LMHash{} | 3548 \LMHash{} |
3531 When iteration over the iterable is started, by getting an iterator $j$ from the iterable and calling \code{moveNext()} on it, execution of the body of $f$ will begin. When $f$ terminates, $j$ is positioned after its last element, so that i ts current value is \NULL{} and the current call to \code{moveNext()} on $j$ ret urns false, as will all further calls. | 3549 When iteration over the iterable is started, by getting an iterator $j$ from the iterable and calling \code{moveNext()}, execution of the body of $f$ will begin . When $f$ terminates, $j$ is positioned after its last element, so that its cur rent value is \NULL{} and the current call to \code{moveNext()} on $j$ returns f alse, as will all further calls. |
3532 | 3550 |
3533 Each iterator starts a separate computation. If the \SYNC* function is impure, t he sequence of values yielded by each iterator may differ. | 3551 Each iterator starts a separate computation. If the \SYNC* function is impure, t he sequence of values yielded by each iterator may differ. |
3534 | 3552 |
3535 \commentary{ | 3553 \commentary{ |
3536 One can derive more than one iterator from a given iterable. Note that operati ons on the iterable itself can create distinct iterators. An example would be \c ode{length}. It is conceivable that different iterators might yield sequences o f different length. The same care needs to be taken when writing \SYNC* function s as when | 3554 One can derive more than one iterator from a given iterable. Note that operati ons on the iterable itself can create distinct iterators. An example would be \c ode{length}. It is conceivable that different iterators might yield sequences o f different length. The same care needs to be taken when writing \SYNC* function s as when |
3537 writing an \code{Iterator} class. In particular, it should handle multiple | 3555 writing an \code{Iterator} class. In particular, it should handle multiple |
3538 simultaneous iterators gracefully. If the iterator depends on external state | 3556 simultaneous iterators gracefully. If the iterator depends on external state |
3539 that might change, it should check that the state is still valid after every | 3557 that might change, it should check that the state is still valid after every |
3540 yield (and maybe throw a \code{ConcurrentModificationError} if it isn't). | 3558 yield (and maybe throw a \code{ConcurrentModificationError} if it isn't). |
3541 } | 3559 } |
(...skipping 2306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5848 \begin{grammar} | 5866 \begin{grammar} |
5849 {\bf breakStatement:} | 5867 {\bf breakStatement:} |
5850 \BREAK{} identifier? `{\escapegrammar ;}' | 5868 \BREAK{} identifier? `{\escapegrammar ;}' |
5851 . | 5869 . |
5852 \end{grammar} | 5870 \end{grammar} |
5853 | 5871 |
5854 \LMHash{} | 5872 \LMHash{} |
5855 Let $s_b$ be a \BREAK{} statement. If $s_b$ is of the form \code{\BREAK{} $L$;} , then let $s_E$ be the the innermost labeled statement with label $L$ enclosing $s_b$. If $s_b$ is of the form \code{\BREAK{};}, then let $s_E$ be the the inn ermost \DO{} (\ref{do}), \FOR{} (\ref{for}), \SWITCH{} (\ref{switch}) or \WHILE {} (\ref{while}) statement enclosing $s_b$. It is a compile-time error if no su ch statement $s_E$ exists within the innermost function in which $s_b$ occurs. Furthermore, let $s_1, \ldots, s_n$ be those \TRY{} statements that are both en closed in $s_E$ and that enclose $s_b$, and that have a \FINALLY{} clause. Last ly, let $f_j$ be the \FINALLY{} clause of $s_j, 1 \le j \le n$. Executing $s_ b$ first executes $f_1, \ldots, f_n$ in innermost-clause-first order and then terminates $s_E$. | 5873 Let $s_b$ be a \BREAK{} statement. If $s_b$ is of the form \code{\BREAK{} $L$;} , then let $s_E$ be the the innermost labeled statement with label $L$ enclosing $s_b$. If $s_b$ is of the form \code{\BREAK{};}, then let $s_E$ be the the inn ermost \DO{} (\ref{do}), \FOR{} (\ref{for}), \SWITCH{} (\ref{switch}) or \WHILE {} (\ref{while}) statement enclosing $s_b$. It is a compile-time error if no su ch statement $s_E$ exists within the innermost function in which $s_b$ occurs. Furthermore, let $s_1, \ldots, s_n$ be those \TRY{} statements that are both en closed in $s_E$ and that enclose $s_b$, and that have a \FINALLY{} clause. Last ly, let $f_j$ be the \FINALLY{} clause of $s_j, 1 \le j \le n$. Executing $s_ b$ first executes $f_1, \ldots, f_n$ in innermost-clause-first order and then terminates $s_E$. |
5856 | 5874 |
5857 \LMHash{} | 5875 \LMHash{} |
5858 If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), its associated stream subscription is canceled. Furthermore, let $a_k$ be the set of asynchrono us for loops and yield-each statements (\ref{yieldEach}) enclosing $s_b$ that a re enclosed in $s_E , 1 \le k \le m$. The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. | 5876 If $s_E$ is an asynchronous for loop (\ref{asynchronousFor-in}), its associated stream subscription is canceled. Furthermore, let $a_k$ be the set of asynchrono us for loops and yield-each statements (\ref{yieldEach}) enclosing $s_b$ that a re enclosed in $s_E , 1 \le k \le m$. The stream subscriptions associated with $a_j$ are canceled, $1 \le j \le m$. |
Lasse Reichstein Nielsen
2015/03/19 09:14:57
Just noticed: When the stream subscription is canc
| |
5859 | 5877 |
5860 | 5878 |
5861 | 5879 |
5862 \subsection{ Continue} | 5880 \subsection{ Continue} |
5863 \LMLabel{continue} | 5881 \LMLabel{continue} |
5864 | 5882 |
5865 \LMHash{} | 5883 \LMHash{} |
5866 The {\em continue statement} consists of the reserved word \CONTINUE{} and an op tional label (\ref{labels}). | 5884 The {\em continue statement} consists of the reserved word \CONTINUE{} and an op tional label (\ref{labels}). |
5867 | 5885 |
5868 \begin{grammar} | 5886 \begin{grammar} |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5906 Next, $o$ is added to the iterable or stream associated with the immediately enc losing function. | 5924 Next, $o$ is added to the iterable or stream associated with the immediately enc losing function. |
5907 | 5925 |
5908 \LMHash{} | 5926 \LMHash{} |
5909 If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated wi th $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of t he innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$ . If $h$ is undefined, the immediately enclosing function terminates. | 5927 If the enclosing function $m$ is marked \ASYNC* and the stream $u$ associated wi th $m$ has been canceled, then let $c$ be the \FINALLY{} clause (\ref{try}) of t he innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is defined, control is transferred to $h$ . If $h$ is undefined, the immediately enclosing function terminates. |
5910 | 5928 |
5911 \rationale{ | 5929 \rationale{ |
5912 The stream associated with an asynchronous generator could be canceled by any co de with a reference to that stream at any point where the generator was passivat ed. Such a cancellation constitutes an irretrievable error for the generator. A t this point, the only plausible action for the generator is to clean up after i tself via its \FINALLY{} clauses. | 5930 The stream associated with an asynchronous generator could be canceled by any co de with a reference to that stream at any point where the generator was passivat ed. Such a cancellation constitutes an irretrievable error for the generator. A t this point, the only plausible action for the generator is to clean up after i tself via its \FINALLY{} clauses. |
5913 } | 5931 } |
5914 | 5932 |
5915 \LMHash{} | 5933 \LMHash{} |
5934 Otherwise, if the enclosing function $m$ is marked \ASYNC* (\ref{functions}) the n the enclosing function may suspend. | |
5935 | |
5936 \rationale { | |
5937 If a \YIELD{} occurred inside an infinite loop and the enclosing function never suspended, there might not be an opportunity for consumers of the enclosing str eam to run and access the data in the stream. The stream might then accumulate an unbounded number of elements. Such a situation is untenable. Therefore, we al low the enclosing function to be suspended when a new value is added to its asso ciated stream. However, it is not essential (and in fact, can be quite costly) t o suspend the function on every \YIELD{}. The implementation is free to decide h ow often to suspend the enclosing function. The only requirement is that consume rs are not blocked indefinitely. | |
5938 } | |
5939 | |
5940 | |
5941 \LMHash{} | |
5916 If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then: | 5942 If the enclosing function $m$ is marked \SYNC* (\ref{functions}) then: |
5917 \begin{itemize} | 5943 \begin{itemize} |
5918 \item | 5944 \item |
5919 Execution of the function $m$ immediately enclosing $s$ is suspended until the m ethod \code{moveNext()} is invoked upon the iterator used to initiate the curren t invocation of $m$. | 5945 Execution of the function $m$ immediately enclosing $s$ is suspended until the n ullary method \code{moveNext()} is invoked upon the iterator used to initiate th e current invocation of $m$. |
5920 \item | 5946 \item |
5921 The current call to \code{moveNext()} returns \TRUE. | 5947 The current call to \code{moveNext()} returns \TRUE. |
5922 \end{itemize} | 5948 \end{itemize} |
5923 | 5949 |
5924 \LMHash{} | 5950 \LMHash{} |
5925 It is a compile-time error if a yield statement appears in a function that is no t a generator function. | 5951 It is a compile-time error if a yield statement appears in a function that is no t a generator function. |
5926 | 5952 |
5927 \LMHash{} | 5953 \LMHash{} |
5928 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct ion. It is a static type warning if either: | 5954 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct ion. It is a static type warning if either: |
5929 \begin{itemize} | 5955 \begin{itemize} |
(...skipping 10 matching lines...) Expand all Loading... | |
5940 \LMHash{} | 5966 \LMHash{} |
5941 The {\em yield-each statement} adds a series of values to the result of a gener ator function (\ref{functions}). | 5967 The {\em yield-each statement} adds a series of values to the result of a gener ator function (\ref{functions}). |
5942 | 5968 |
5943 \begin{grammar} | 5969 \begin{grammar} |
5944 {\bf yieldEachStatement:} | 5970 {\bf yieldEachStatement:} |
5945 \YIELD* expression `{\escapegrammar ;}' | 5971 \YIELD* expression `{\escapegrammar ;}' |
5946 . | 5972 . |
5947 \end{grammar} | 5973 \end{grammar} |
5948 | 5974 |
5949 \LMHash{} | 5975 \LMHash{} |
5950 Execution of a statement s of the form \code{\YIELD* $e$;} proceeds as follows: | 5976 Execution of a statement $s$ of the form \code{\YIELD* $e$;} proceeds as follow s: |
5951 | 5977 |
5952 \LMHash{} | 5978 \LMHash{} |
5953 First, the expression $e$ is evaluated to an object $o$. If the immediately encl osing function $m$ is synchronous, then it is a dynamic error if the class of $o $ does not implement \code{Iterable}. If $m$ asynchronous, then it is a dynamic error if the class of $o$ does not implement \code{Stream}. Next, for each elem ent $x$ of $o$: | 5979 First, the expression $e$ is evaluated to an object $o$. |
5980 | |
5981 \LMHash{} | |
5982 If the immediately enclosing function $m$ is marked \SYNC* (\ref{functions}), th en: | |
5983 \begin{enumerate} | |
5984 \item It is a dynamic error if the class of $o$ does not implement \code{Iterabl e}. Otherwise | |
5985 \item The method \cd{iterator} is invoked upon $o$ returning an object $i$. | |
5986 \item \label{moveNext} The \cd{moveNext} method of $i$ is invoked on it with no arguments. If \cd{moveNext} returns \FALSE{} execution of $s$ is complete. Other wise | |
5987 \item The getter \cd{current} is invoked on $i$. If the invocation raises an exc eption $ex$, execution of $s$ throws $ex$. Otherwise, the result $x$ of the gett er invocation is added to the iterable associated with $m$. | |
5988 Execution of the function $m$ immediately enclosing $s$ is suspended until the n ullary method \code{moveNext()} is invoked upon the iterator used to initiate th e current invocation of $m$, at which point execution of $s$ continues at \ref{m oveNext}. | |
5989 \item | |
5990 The current call to \code{moveNext()} returns \TRUE. | |
5991 \end{enumerate} | |
5992 | |
5993 \LMHash{} | |
5994 If $m$ is marked \ASYNC* (\ref{functions}), then: | |
5995 \begin{itemize} | |
5996 \item It is a dynamic error if the class of $o$ does not implement \code{Stream }. Otherwise | |
5997 \item For each element $x$ of $o$: | |
5954 \begin{itemize} | 5998 \begin{itemize} |
5955 \item | 5999 \item |
5956 If $m$ is marked \ASYNC* (\ref{functions}) and the stream $u$ associated with $m $ has been paused, then execution of $m$ is suspended until $u$ is resumed or c anceled. | 6000 If the stream $u$ associated with $m$ has been paused, then execution of $m$ is suspended until $u$ is resumed or canceled. |
6001 \item | |
6002 If the stream $u$ associated with $m$ has been canceled, then let $c$ be the \FI NALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induced by $c$. If $h$ is define d, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates. | |
5957 \item | 6003 \item |
5958 $x$ is added to the iterable or stream associated with $m$ in the order it appe ars in $o$. | 6004 Otherwise, $x$ is added to the stream associated with $m$ in the order it appea rs in $o$. The function $m$ may suspend. |
5959 \item | 6005 \end{itemize} |
5960 If $m$ is marked \ASYNC* and the stream $u$ associated with $m$ has been cancele d, then let $c$ be the \FINALLY{} clause (\ref{try}) of the innermost enclosing try-finally statement, if any. If $c$ is defined, let $h$ be the handler induce d by $c$. If $h$ is defined, control is transferred to $h$. If $h$ is undefined, the immediately enclosing function terminates. | 6006 \item If the stream $o$ is done, execution of $s$ is complete. |
5961 \end{itemize} | 6007 \end{itemize} |
5962 | 6008 |
5963 \LMHash{} | |
5964 If the enclosing function is marked \SYNC* (\ref{functions}) then: | |
5965 \begin{itemize} | |
5966 \item | |
5967 Execution of the function $m$ immediately enclosing $s$ is suspended until the m ethod \code{moveNext()} is invoked upon the iterator used to initiate the curren t invocation of $m$. | |
5968 \item | |
5969 The current call to \code{moveNext()} returns \TRUE. | |
5970 \end{itemize} | |
5971 | 6009 |
5972 \LMHash{} | 6010 \LMHash{} |
5973 It is a compile-time error if a yield-each statement appears in a function that is not a generator function. | 6011 It is a compile-time error if a yield-each statement appears in a function that is not a generator function. |
5974 | 6012 |
5975 \LMHash{} | 6013 \LMHash{} |
5976 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct ion. It is a static type warning if $T$ may not be assigned to the declared ret urn type of $f$. If $f$ is synchronous it is a static type warning if $T$ may not be assigned to \code{Iterable}. If $f$ is asynchronous it is a static type warning if $T$ may not be assigned to \code{Stream}. | 6014 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct ion. It is a static type warning if $T$ may not be assigned to the declared ret urn type of $f$. If $f$ is synchronous it is a static type warning if $T$ may not be assigned to \code{Iterable}. If $f$ is asynchronous it is a static type warning if $T$ may not be assigned to \code{Stream}. |
5977 | 6015 |
5978 | 6016 |
5979 \subsection{ Assert} | 6017 \subsection{ Assert} |
5980 \LMLabel{assert} | 6018 \LMLabel{assert} |
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7383 | 7421 |
7384 The invariant that each normative paragraph is associated with a line | 7422 The invariant that each normative paragraph is associated with a line |
7385 containing the text \LMHash{} should be maintained. Extra occurrences | 7423 containing the text \LMHash{} should be maintained. Extra occurrences |
7386 of \LMHash{} can be added if needed, e.g., in order to make | 7424 of \LMHash{} can be added if needed, e.g., in order to make |
7387 individual \item{}s in itemized lists addressable. Each \LM.. command | 7425 individual \item{}s in itemized lists addressable. Each \LM.. command |
7388 must occur on a separate line. \LMHash{} must occur immediately | 7426 must occur on a separate line. \LMHash{} must occur immediately |
7389 before the associated paragraph, and \LMLabel must occur immediately | 7427 before the associated paragraph, and \LMLabel must occur immediately |
7390 after the associated \section{}, \subsection{} etc. | 7428 after the associated \section{}, \subsection{} etc. |
7391 | 7429 |
7392 ---------------------------------------------------------------------- | 7430 ---------------------------------------------------------------------- |
OLD | NEW |