| 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.10}} | 10 {\large Version 1.10}} |
| (...skipping 3852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3863 \end{code} | 3863 \end{code} |
| 3864 | 3864 |
| 3865 \commentary{Notice that the wording carefully avoids re-evaluating the receiver
$o$ and the arguments $a_i$. } | 3865 \commentary{Notice that the wording carefully avoids re-evaluating the receiver
$o$ and the arguments $a_i$. } |
| 3866 | 3866 |
| 3867 \LMHash{} | 3867 \LMHash{} |
| 3868 Let $T$ be the static type of $o$. It is a static type warning if $T$ does not
have an accessible (\ref{privacy}) instance member named $m$ unless either: | 3868 Let $T$ be the static type of $o$. It is a static type warning if $T$ does not
have an accessible (\ref{privacy}) instance member named $m$ unless either: |
| 3869 \begin{itemize} | 3869 \begin{itemize} |
| 3870 \item | 3870 \item |
| 3871 $T$ or a superinterface of $T$ is annotated with an annotation denoting a consta
nt identical to the constant \code{@proxy} defined in \code{dart:core}. Or | 3871 $T$ or a superinterface of $T$ is annotated with an annotation denoting a consta
nt identical to the constant \code{@proxy} defined in \code{dart:core}. Or |
| 3872 \item $T$ is \code{Type}, $e$ is a constant type literal and the class correspo
nding to $e$ has a static getter named $m$. | 3872 \item $T$ is \code{Type}, $e$ is a constant type literal and the class correspo
nding to $e$ has a static getter named $m$. |
| 3873 \item $T$ is \code{Function} and $m$ is \CALL. \rationale {The type \code{Functi
on} 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 impl
ement \CALL. Note that a warning will be issue if this is not the case. Furtherm
ore, any use of \CALL on a subclass of \code{Function} that fails to implement \
CALL{} will also provoke a a warning, as this exemption is limited to type \code
{Function}, and does not apply to its subtypes. |
| 3874 } |
| 3873 \end{itemize} | 3875 \end{itemize} |
| 3874 | 3876 |
| 3875 \LMHash{} | 3877 \LMHash{} |
| 3876 If $T.m$ exists, it is a static type warning if the type $F$ of $T.m$ may not b
e assigned to a function type. If $T.m$ does not exist, or if $F$ is not a funct
ion type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$
is the declared return type of $F$. | 3878 If $T.m$ exists, it is a static type warning if the type $F$ of $T.m$ may not b
e assigned to a function type. If $T.m$ does not exist, or if $F$ is not a funct
ion type, the static type of $i$ is \DYNAMIC{}; otherwise the static type of $i$
is the declared return type of $F$. |
| 3877 | 3879 |
| 3878 \LMHash{} | 3880 \LMHash{} |
| 3879 It is a compile-time error to invoke any of the methods of class \cd{Object} on
a prefix object (\ref{imports}) or on a constant type literal that is immediate
ly followed by the token `.'. | 3881 It is a compile-time error to invoke any of the methods of class \cd{Object} on
a prefix object (\ref{imports}) or on a constant type literal that is immediate
ly followed by the token `.'. |
| 3880 | 3882 |
| 3881 | 3883 |
| 3882 \subsubsection{Cascaded Invocations} | 3884 \subsubsection{Cascaded Invocations} |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4151 | 4153 |
| 4152 \commentary{ | 4154 \commentary{ |
| 4153 This restriction is in line with other limitations on the use of prefixes as obj
ects. The only permitted uses of $p\#m$ are closurizing top level methods and ge
tters imported via the prefix $p$. Top level methods are directly available by t
heir qualified names: $p.m$. However, getters and setters are not, and allowing
their closurization is the whole point of the $e\#m$ syntax. | 4155 This restriction is in line with other limitations on the use of prefixes as obj
ects. The only permitted uses of $p\#m$ are closurizing top level methods and ge
tters imported via the prefix $p$. Top level methods are directly available by t
heir qualified names: $p.m$. However, getters and setters are not, and allowing
their closurization is the whole point of the $e\#m$ syntax. |
| 4154 } | 4156 } |
| 4155 | 4157 |
| 4156 \LMHash{} | 4158 \LMHash{} |
| 4157 Let $T$ be the static type of $e$. It is a static type warning if $T$ does not h
ave an accessible instance method or getter named $m$ unless either: | 4159 Let $T$ be the static type of $e$. It is a static type warning if $T$ does not h
ave an accessible instance method or getter named $m$ unless either: |
| 4158 \begin{itemize} | 4160 \begin{itemize} |
| 4159 \item $T$ or a superinterface of $T$ is annotated with an annotation denoting a
constant identical to the constant \code{@proxy} defined in \cd{dart:core}. Or | 4161 \item $T$ or a superinterface of $T$ is annotated with an annotation denoting a
constant identical to the constant \code{@proxy} defined in \cd{dart:core}. Or |
| 4160 \item $T$ is \cd{Type}, $e$ is a constant type literal and the class correspondi
ng to $e$ declares an accessible static method or getter named $m$. | 4162 \item $T$ is \cd{Type}, $e$ is a constant type literal and the class correspondi
ng to $e$ declares an accessible static method or getter named $m$. |
| 4163 \item $T$ is \code{Function} and $m$ is \CALL. |
| 4161 \end{itemize} | 4164 \end{itemize} |
| 4162 | 4165 |
| 4163 The static type of $i$ is: | 4166 The static type of $i$ is: |
| 4164 \begin{itemize} | 4167 \begin{itemize} |
| 4165 \item The static type of function $T.m$, if $T$ has an accessible instance membe
r named $m$. | 4168 \item The static type of function $T.m$, if $T$ has an accessible instance membe
r named $m$. |
| 4166 \item The static type of function $T.m$, if $T$ is \cd{Type}, $e$ is a constant
type literal and the class corresponding to $e$ declares an accessible static me
mber or constructor named $m$. | 4169 \item The static type of function $T.m$, if $T$ is \cd{Type}, $e$ is a constant
type literal and the class corresponding to $e$ declares an accessible static me
mber or constructor named $m$. |
| 4170 \item \code{Function} if $T$ is \code{Function} and $m$ is \CALL. |
| 4167 \item The type \DYNAMIC{} otherwise. | 4171 \item The type \DYNAMIC{} otherwise. |
| 4168 \end{itemize} | 4172 \end{itemize} |
| 4169 | 4173 |
| 4170 \subsubsection{Named Constructor Extraction} | 4174 \subsubsection{Named Constructor Extraction} |
| 4171 \LMLabel{namedConstructorExtraction} | 4175 \LMLabel{namedConstructorExtraction} |
| 4172 | 4176 |
| 4173 \LMHash{} | 4177 \LMHash{} |
| 4174 Evaluation of a property extraction $i$ of the form \NEW{} $T\#m$ proceeds as fo
llows: | 4178 Evaluation of a property extraction $i$ of the form \NEW{} $T\#m$ proceeds as fo
llows: |
| 4175 | 4179 |
| 4176 \LMHash{} | 4180 \LMHash{} |
| (...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5003 {\bf incrementOperator:}`++'; | 5007 {\bf incrementOperator:}`++'; |
| 5004 `-{}-' | 5008 `-{}-' |
| 5005 . | 5009 . |
| 5006 | 5010 |
| 5007 \end{grammar} | 5011 \end{grammar} |
| 5008 | 5012 |
| 5009 \LMHash{} | 5013 \LMHash{} |
| 5010 A {\em postfix expression} is either a primary expression, a function, method o
r getter invocation, or an invocation of a postfix operator on an expression $e$
. | 5014 A {\em postfix expression} is either a primary expression, a function, method o
r getter invocation, or an invocation of a postfix operator on an expression $e$
. |
| 5011 | 5015 |
| 5012 \LMHash{} | 5016 \LMHash{} |
| 5013 A postfix expression of the form \code{$v$++}, where $v$ is an identifier, is eq
uivalent to \code{()\{\VAR{} r = $v$; $v$ = r + 1; \RETURN{} r\}()}. | 5017 Execution of a postfix expression of the form \code{$v$++}, where $v$ is an iden
tifier, is equivalent to executing \code{()\{\VAR{} r = $v$; $v$ = r + 1; \RETUR
N{} r\}()}. |
| 5018 |
| 5019 \LMHash{} |
| 5020 The static type of such an expression is the static type of $v$. |
| 5021 |
| 5014 | 5022 |
| 5015 \rationale{The above ensures that if $v$ is a field, the getter gets called exac
tly once. Likewise in the cases below. | 5023 \rationale{The above ensures that if $v$ is a field, the getter gets called exac
tly once. Likewise in the cases below. |
| 5016 } | 5024 } |
| 5017 | 5025 |
| 5018 \LMHash{} | 5026 \LMHash{} |
| 5019 A postfix expression of the form \code{$C.v$ ++} is equivalent to | 5027 Execution of a postfix expression of the form \code{$C.v$ ++} is equivalent to e
xecuting |
| 5020 | 5028 |
| 5021 \code{()\{\VAR{} r = $C.v$; $C.v$ = r + 1; \RETURN{} r\}()}. | 5029 \code{()\{\VAR{} r = $C.v$; $C.v$ = r + 1; \RETURN{} r\}()}. |
| 5022 | 5030 |
| 5023 \LMHash{} | 5031 \LMHash{} |
| 5024 A postfix expression of the form \code{$e_1.v$++} is equivalent to | 5032 The static type of such an expression is the static type of $C.v$. |
| 5033 |
| 5034 |
| 5035 \LMHash{} |
| 5036 Execution of a postfix expression of the form \code{$e_1.v$++} is equivalent to
executing |
| 5025 | 5037 |
| 5026 \code{(x)\{\VAR{} r = x.v; x.v = r + 1; \RETURN{} r\}($e_1$)}. | 5038 \code{(x)\{\VAR{} r = x.v; x.v = r + 1; \RETURN{} r\}($e_1$)}. |
| 5027 | 5039 |
| 5028 \LMHash{} | 5040 \LMHash{} |
| 5029 A postfix expression of the form \code{$e_1[e_2]$++}, is equivalent to | 5041 The static type of such an expression is the static type of $e_1.v$. |
| 5042 |
| 5043 |
| 5044 \LMHash{} |
| 5045 Execution of a postfix expression of the form \code{$e_1[e_2]$++}, is equivalen
t to executing |
| 5030 | 5046 |
| 5031 \code{(a, i)\{\VAR{} r = a[i]; a[i] = r + 1; \RETURN{} r\}($e_1$, $e_2$)}. | 5047 \code{(a, i)\{\VAR{} r = a[i]; a[i] = r + 1; \RETURN{} r\}($e_1$, $e_2$)}. |
| 5032 | 5048 |
| 5033 \LMHash{} | 5049 \LMHash{} |
| 5034 A postfix expression of the form \code{$v$-{}-}, where $v$ is an identifier, is
equivalent to | 5050 The static type of such an expression is the static type of $e_1[e_2]$. |
| 5051 |
| 5052 |
| 5053 \LMHash{} |
| 5054 Execution of a postfix expression of the form \code{$v$-{}-}, where $v$ is an id
entifier, is equivalent to executing |
| 5035 | 5055 |
| 5036 \code{()\{\VAR{} r = $v$; $v$ = r - 1; \RETURN{} r\}()}. | 5056 \code{()\{\VAR{} r = $v$; $v$ = r - 1; \RETURN{} r\}()}. |
| 5037 | 5057 |
| 5038 \LMHash{} | 5058 \LMHash{} |
| 5039 A postfix expression of the form \code{$C.v$-{}-} is equivalent to | 5059 The static type of such an expression is the static type of $v$. |
| 5060 |
| 5061 |
| 5062 \LMHash{} |
| 5063 Execution of a postfix expression of the form \code{$C.v$-{}-} is equivalent to
executing |
| 5040 | 5064 |
| 5041 \code{()\{\VAR{} r = $C.v$; $C.v$ = r - 1; \RETURN{} r\}()}. | 5065 \code{()\{\VAR{} r = $C.v$; $C.v$ = r - 1; \RETURN{} r\}()}. |
| 5042 | 5066 |
| 5043 \LMHash{} | 5067 \LMHash{} |
| 5044 A postfix expression of the form \code{$e_1.v$-{}-} is equivalent to | 5068 The static type of such an expression is the static type of $C.v$. |
| 5069 |
| 5070 |
| 5071 \LMHash{} |
| 5072 Execution of a postfix expression of the form \code{$e_1.v$-{}-} is equivalent t
o executing |
| 5045 | 5073 |
| 5046 \code{(x)\{\VAR{} r = x.v; x.v = r - 1; \RETURN{} r\}($e_1$)}. | 5074 \code{(x)\{\VAR{} r = x.v; x.v = r - 1; \RETURN{} r\}($e_1$)}. |
| 5047 | 5075 |
| 5048 \LMHash{} | 5076 \LMHash{} |
| 5049 A postfix expression of the form \code{$e_1[e_2]$-{}-}, is equivalent to | 5077 The static type of such an expression is the static type of $e_1.v$. |
| 5078 |
| 5079 |
| 5080 \LMHash{} |
| 5081 Execution of a postfix expression of the form \code{$e_1[e_2]$-{}-}, is equival
ent to executing |
| 5050 | 5082 |
| 5051 \code{(a, i)\{\VAR{} r = a[i]; a[i] = r - 1; \RETURN{} r\}($e_1$, $e_2$)}. | 5083 \code{(a, i)\{\VAR{} r = a[i]; a[i] = r - 1; \RETURN{} r\}($e_1$, $e_2$)}. |
| 5052 | 5084 |
| 5053 \LMHash{} | 5085 \LMHash{} |
| 5054 A postfix expression of the form \code{$e_1?.v$++} is equivalent to | 5086 The static type of such an expression is the static type of $e_1[e_2]$. |
| 5087 |
| 5088 \LMHash{} |
| 5089 Execution of a postfix expression of the form \code{$e_1?.v$++} is equivalent to
executing |
| 5055 | 5090 |
| 5056 \code{((x) =$>$ x == \NULL? \NULL : x.v++)($e_1$)}. | 5091 \code{((x) =$>$ x == \NULL? \NULL : x.v++)($e_1$)}. |
| 5057 | 5092 |
| 5058 \LMHash{} | 5093 \LMHash{} |
| 5059 A postfix expression of the form \code{$e_1?.v$-{}-} is equivalent to | 5094 The static type of such an expression is the static type of $e_1.v$. |
| 5095 |
| 5096 \LMHash{} |
| 5097 Execution of a postfix expression of the form \code{$e_1?.v$-{}-} is equivalent
to executing |
| 5060 | 5098 |
| 5061 \code{((x) =$>$ x == \NULL? \NULL : x.v-{}-)($e_1$)}. | 5099 \code{((x) =$>$ x == \NULL? \NULL : x.v-{}-)($e_1$)}. |
| 5062 | 5100 |
| 5101 \LMHash{} |
| 5102 The static type of such an expression is the static type of $e_1.v$. |
| 5103 |
| 5063 | 5104 |
| 5064 \subsection{ Assignable Expressions} | 5105 \subsection{ Assignable Expressions} |
| 5065 \LMLabel{assignableExpressions} | 5106 \LMLabel{assignableExpressions} |
| 5066 | 5107 |
| 5067 \LMHash{} | 5108 \LMHash{} |
| 5068 Assignable expressions are expressions that can appear on the left hand side of
an assignment. | 5109 Assignable expressions are expressions that can appear on the left hand side of
an assignment. |
| 5069 This section describes how to evaluate these expressions when they do not consti
tute the complete left hand side of an assignment. | 5110 This section describes how to evaluate these expressions when they do not consti
tute the complete left hand side of an assignment. |
| 5070 | 5111 |
| 5071 \rationale{ | 5112 \rationale{ |
| 5072 Of course, if assignable expressions always appeared {\em as} the left hand side
, one would have no need for their value, and the rules for evaluating them woul
d be unnecessary. However, assignable expressions can be subexpressions of othe
r expressions and therefore must be evaluated. | 5113 Of course, if assignable expressions always appeared {\em as} the left hand side
, one would have no need for their value, and the rules for evaluating them woul
d be unnecessary. However, assignable expressions can be subexpressions of othe
r expressions and therefore must be evaluated. |
| (...skipping 2731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7804 | 7845 |
| 7805 The invariant that each normative paragraph is associated with a line | 7846 The invariant that each normative paragraph is associated with a line |
| 7806 containing the text \LMHash{} should be maintained. Extra occurrences | 7847 containing the text \LMHash{} should be maintained. Extra occurrences |
| 7807 of \LMHash{} can be added if needed, e.g., in order to make | 7848 of \LMHash{} can be added if needed, e.g., in order to make |
| 7808 individual \item{}s in itemized lists addressable. Each \LM.. command | 7849 individual \item{}s in itemized lists addressable. Each \LM.. command |
| 7809 must occur on a separate line. \LMHash{} must occur immediately | 7850 must occur on a separate line. \LMHash{} must occur immediately |
| 7810 before the associated paragraph, and \LMLabel must occur immediately | 7851 before the associated paragraph, and \LMLabel must occur immediately |
| 7811 after the associated \section{}, \subsection{} etc. | 7852 after the associated \section{}, \subsection{} etc. |
| 7812 | 7853 |
| 7813 ---------------------------------------------------------------------- | 7854 ---------------------------------------------------------------------- |
| OLD | NEW |