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 3855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3866 \end{code} | 3866 \end{code} |
3867 | 3867 |
3868 \commentary{Notice that the wording carefully avoids re-evaluating the receiver
$o$ and the arguments $a_i$. } | 3868 \commentary{Notice that the wording carefully avoids re-evaluating the receiver
$o$ and the arguments $a_i$. } |
3869 | 3869 |
3870 \LMHash{} | 3870 \LMHash{} |
3871 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: | 3871 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: |
3872 \begin{itemize} | 3872 \begin{itemize} |
3873 \item | 3873 \item |
3874 $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 | 3874 $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 |
3875 \item $T$ is \code{Type}, $e$ is a constant type literal and the class correspo
nding to $e$ has a static getter named $m$. | 3875 \item $T$ is \code{Type}, $e$ is a constant type literal and the class correspo
nding to $e$ has a static getter named $m$. |
| 3876 \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. |
| 3877 } |
3876 \end{itemize} | 3878 \end{itemize} |
3877 | 3879 |
3878 \LMHash{} | 3880 \LMHash{} |
3879 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$. | 3881 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$. |
3880 | 3882 |
3881 \LMHash{} | 3883 \LMHash{} |
3882 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 `.'. | 3884 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 `.'. |
3883 | 3885 |
3884 | 3886 |
3885 \subsubsection{Cascaded Invocations} | 3887 \subsubsection{Cascaded Invocations} |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4154 | 4156 |
4155 \commentary{ | 4157 \commentary{ |
4156 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. | 4158 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. |
4157 } | 4159 } |
4158 | 4160 |
4159 \LMHash{} | 4161 \LMHash{} |
4160 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: | 4162 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: |
4161 \begin{itemize} | 4163 \begin{itemize} |
4162 \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 | 4164 \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 |
4163 \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$. | 4165 \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$. |
| 4166 \item $T$ is \code{Function} and $m$ is \CALL. |
4164 \end{itemize} | 4167 \end{itemize} |
4165 | 4168 |
4166 The static type of $i$ is: | 4169 The static type of $i$ is: |
4167 \begin{itemize} | 4170 \begin{itemize} |
4168 \item The static type of function $T.m$, if $T$ has an accessible instance membe
r named $m$. | 4171 \item The static type of function $T.m$, if $T$ has an accessible instance membe
r 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$. | 4172 \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$. |
| 4173 \item \code{Function} if $T$ is \code{Function} and $m$ is \CALL. |
4170 \item The type \DYNAMIC{} otherwise. | 4174 \item The type \DYNAMIC{} otherwise. |
4171 \end{itemize} | 4175 \end{itemize} |
4172 | 4176 |
4173 \subsubsection{Named Constructor Extraction} | 4177 \subsubsection{Named Constructor Extraction} |
4174 \LMLabel{namedConstructorExtraction} | 4178 \LMLabel{namedConstructorExtraction} |
4175 | 4179 |
4176 \LMHash{} | 4180 \LMHash{} |
4177 Evaluation of a property extraction $i$ of the form \NEW{} $T\#m$ proceeds as fo
llows: | 4181 Evaluation of a property extraction $i$ of the form \NEW{} $T\#m$ proceeds as fo
llows: |
4178 | 4182 |
4179 \LMHash{} | 4183 \LMHash{} |
(...skipping 3617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7797 | 7801 |
7798 The invariant that each normative paragraph is associated with a line | 7802 The invariant that each normative paragraph is associated with a line |
7799 containing the text \LMHash{} should be maintained. Extra occurrences | 7803 containing the text \LMHash{} should be maintained. Extra occurrences |
7800 of \LMHash{} can be added if needed, e.g., in order to make | 7804 of \LMHash{} can be added if needed, e.g., in order to make |
7801 individual \item{}s in itemized lists addressable. Each \LM.. command | 7805 individual \item{}s in itemized lists addressable. Each \LM.. command |
7802 must occur on a separate line. \LMHash{} must occur immediately | 7806 must occur on a separate line. \LMHash{} must occur immediately |
7803 before the associated paragraph, and \LMLabel must occur immediately | 7807 before the associated paragraph, and \LMLabel must occur immediately |
7804 after the associated \section{}, \subsection{} etc. | 7808 after the associated \section{}, \subsection{} etc. |
7805 | 7809 |
7806 ---------------------------------------------------------------------- | 7810 ---------------------------------------------------------------------- |
OLD | NEW |