Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: docs/language/dartLangSpec.tex

Issue 2862223002: Rewrite mixin application handling in Fasta. (Closed)
Patch Set: Update status file. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/builder/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 \usepackage[T1]{fontenc} 8 \usepackage[T1]{fontenc}
9 \newcommand{\code}[1]{{\sf #1}} 9 \newcommand{\code}[1]{{\sf #1}}
10 \title{Dart Programming Language Specification \\ 10 \title{Dart Programming Language Specification \\
(...skipping 3576 matching lines...) Expand 10 before | Expand all | Expand 10 after
3587 3587
3588 \LMHash{} 3588 \LMHash{}
3589 If $T$ is a parameterized type, it is a compile-time error if $T$ includes a typ e variable among its type arguments. 3589 If $T$ is a parameterized type, it is a compile-time error if $T$ includes a typ e variable among its type arguments.
3590 3590
3591 \LMHash{} 3591 \LMHash{}
3592 If $e$ is of the form \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if $T.id$ is not the name of a constant constructor declared by the type $T$. If $e$ is of the form \CONST{} $ T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compi le-time error if the type $T$ does not declare a constant constructor with the s ame name as the declaration of $T$. 3592 If $e$ is of the form \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compile-time error if $T.id$ is not the name of a constant constructor declared by the type $T$. If $e$ is of the form \CONST{} $ T(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ it is a compi le-time error if the type $T$ does not declare a constant constructor with the s ame name as the declaration of $T$.
3593 3593
3594 \LMHash{} 3594 \LMHash{}
3595 In all of the above cases, it is a compile-time error if $a_i, i\in 1 .. n + k$ , is not a compile-time constant expression. 3595 In all of the above cases, it is a compile-time error if $a_i, i\in 1 .. n + k$ , is not a compile-time constant expression.
3596 3596
3597 %If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1, \ldots, U_m> $, let $R = S$. It is a compile-time error if $T$ is is malformed. If $T$ is no t a parameterized type, let $R = T$. 3597 %If $T$ is a parameterized type (\ref{parameterizedTypes}) $S<U_1, \ldots, U_m> $, let $R = S$. It is a compile-time error if $T$ is malformed. If $T$ is not a parameterized type, let $R = T$.
3598 %Finally, 3598 %Finally,
3599 % If $T$ is a generic with $l$ retype parameters, then for all $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$. 3599 % If $T$ is a generic with $l$ retype parameters, then for all $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$.
3600 3600
3601 \LMHash{} 3601 \LMHash{}
3602 Evaluation of $e$ proceeds as follows: 3602 Evaluation of $e$ proceeds as follows:
3603 3603
3604 \LMHash{} 3604 \LMHash{}
3605 First, if $e$ is of the form 3605 First, if $e$ is of the form
3606 3606
3607 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$ 3607 \CONST{} $T.id(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
3904 3904
3905 $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$, 3905 $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k}: a_{n+k})$,
3906 3906
3907 where $e_f$ is an expression. If $e_f$ is an identifier $id$, then $id$ must nec essarily denote a local function, a library function, a library or static getter or a variable as described above, or $i$ is not considered a function expressio n invocation. 3907 where $e_f$ is an expression. If $e_f$ is an identifier $id$, then $id$ must nec essarily denote a local function, a library function, a library or static getter or a variable as described above, or $i$ is not considered a function expressio n invocation.
3908 If $e_f$ is a type literal, then it is equivalent to the expression $(e_f)$. 3908 If $e_f$ is a type literal, then it is equivalent to the expression $(e_f)$.
3909 3909
3910 \commentary{ 3910 \commentary{
3911 The expression $(e_f)$ where $e_f$ is a type literal always evaluates to an inst ance of class \code{Type} which is not a function. This ensures that a runtime e rror occurs when trying to call a type literal. 3911 The expression $(e_f)$ where $e_f$ is a type literal always evaluates to an inst ance of class \code{Type} which is not a function. This ensures that a runtime e rror occurs when trying to call a type literal.
3912 } 3912 }
3913 3913
3914 If $e_f$ is a property extraction expression (\ref{propertyExtraction}), then $i $ is is not a function expression invocation and is instead recognized as an ord inary method invocation (\ref{ordinaryInvocation}). 3914 If $e_f$ is a property extraction expression (\ref{propertyExtraction}), then $i $ isn't a function expression invocation and is instead recognized as an ordinar y method invocation (\ref{ordinaryInvocation}).
3915 3915
3916 \commentary{ 3916 \commentary{
3917 \code{$a.b(x)$} is parsed as a method invocation of method \code{$b()$} on objec t \code{$a$}, not as an invocation of getter \code{$b$} on \code{$a$} followed b y a function call \code{$(a.b)(x)$}. If a method or getter \code{$b$} exists, t he two will be equivalent. However, if \code{$b$} is not defined on \code{$a$}, the resulting invocation of \code{noSuchMethod()} would differ. The \code{Invoc ation} passed to \code{noSuchMethod()} would describe a call to a method \code{$ b$} with argument \code{$x$} in the former case, and a call to a getter \code{$b $} (with no arguments) in the latter. 3917 \code{$a.b(x)$} is parsed as a method invocation of method \code{$b()$} on objec t \code{$a$}, not as an invocation of getter \code{$b$} on \code{$a$} followed b y a function call \code{$(a.b)(x)$}. If a method or getter \code{$b$} exists, t he two will be equivalent. However, if \code{$b$} is not defined on \code{$a$}, the resulting invocation of \code{noSuchMethod()} would differ. The \code{Invoc ation} passed to \code{noSuchMethod()} would describe a call to a method \code{$ b$} with argument \code{$x$} in the former case, and a call to a getter \code{$b $} (with no arguments) in the latter.
3918 } 3918 }
3919 3919
3920 \LMHash{} 3920 \LMHash{}
3921 Otherwise: 3921 Otherwise:
3922 3922
3923 A function expression invocation $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldot s , x_{n+k}: a_{n+k})$ is equivalent to $e_f.call(a_1, \ldots , a_n, x_{n+1}: a_ {n+1}, \ldots , x_{n+k}: a_{n+k})$. 3923 A function expression invocation $e_f(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldot s , x_{n+k}: a_{n+k})$ is equivalent to $e_f.call(a_1, \ldots , a_n, x_{n+1}: a_ {n+1}, \ldots , x_{n+k}: a_{n+k})$.
3924 3924
(...skipping 2954 matching lines...) Expand 10 before | Expand all | Expand 10 after
6879 An import directive $I$ may optionally include a namespace combinator clauses us ed to restrict the set of names imported by $I$. Currently, two namespace combin ators are supported: \HIDE{} and \SHOW{}. 6879 An import directive $I$ may optionally include a namespace combinator clauses us ed to restrict the set of names imported by $I$. Currently, two namespace combin ators are supported: \HIDE{} and \SHOW{}.
6880 6880
6881 \LMHash{} 6881 \LMHash{}
6882 Let $I$ be an import directive that refers to a URI via the string $s_1$. Evalua tion of $I$ proceeds as follows: 6882 Let $I$ be an import directive that refers to a URI via the string $s_1$. Evalua tion of $I$ proceeds as follows:
6883 6883
6884 \LMHash{} 6884 \LMHash{}
6885 If $I$ is a deferred import, no evaluation takes place. Instead, a mapping of th e name of the prefix, $p$ to a {\em deferred prefix object} is added to the scop e of the current library $L$. 6885 If $I$ is a deferred import, no evaluation takes place. Instead, a mapping of th e name of the prefix, $p$ to a {\em deferred prefix object} is added to the scop e of the current library $L$.
6886 The deferred prefix object has the following methods: 6886 The deferred prefix object has the following methods:
6887 6887
6888 \begin{itemize} 6888 \begin{itemize}
6889 \item \code{loadLibrary}. This method returns a future $f$. When called, the met hod causes an immediate import $I'$ to be executed at some future time, where $I '$ is is derived from $I$ by eliding the word \DEFERRED{} and adding a \HIDE{} \ code{loadLibrary} combinator clause. When $I'$ executes without error, $f$ comp letes successfully. If $I'$ executes without error, we say that the call to \cod e{loadLibrary} has succeeded, otherwise we say the call has failed. 6889 \item \code{loadLibrary}. This method returns a future $f$. When called, the met hod causes an immediate import $I'$ to be executed at some future time, where $I '$ is derived from $I$ by eliding the word \DEFERRED{} and adding a \HIDE{} \cod e{loadLibrary} combinator clause. When $I'$ executes without error, $f$ complet es successfully. If $I'$ executes without error, we say that the call to \code{l oadLibrary} has succeeded, otherwise we say the call has failed.
6890 \item For every top level function $f$ named $id$ in the imported library $B$, a corresponding method named $id$ with the same signature as $f$. Calling the me thod results in a runtime error. 6890 \item For every top level function $f$ named $id$ in the imported library $B$, a corresponding method named $id$ with the same signature as $f$. Calling the me thod results in a runtime error.
6891 \item For every top level getter $g$ named $id$ in $B$, a corresponding getter n amed $id$ with the same signature as $g$. Calling the method results in a runti me error. 6891 \item For every top level getter $g$ named $id$ in $B$, a corresponding getter n amed $id$ with the same signature as $g$. Calling the method results in a runti me error.
6892 \item For every top level setter $s$ named $id$ in $B$, a corresponding setter n amed $id$ with the same signature as $s$. Calling the method results in a runti me error. 6892 \item For every top level setter $s$ named $id$ in $B$, a corresponding setter n amed $id$ with the same signature as $s$. Calling the method results in a runti me error.
6893 \item For every type $T$ named $id$ in $B$, a corresponding getter named $id$ wi th return type \code{Type}. Calling the method results in a runtime error. 6893 \item For every type $T$ named $id$ in $B$, a corresponding getter named $id$ wi th return type \code{Type}. Calling the method results in a runtime error.
6894 \end{itemize} 6894 \end{itemize}
6895 6895
6896 \rationale { 6896 \rationale {
6897 The purpose of adding members of $B$ to $p$ is to ensure that any warnings issu ed when using $p$ are correct, and no spurious warnings are generated. In fact, at runtime we cannot add these members until $B$ is loaded; but any such invoca tions will fail at runtime as specified by virtue of being completely absent. 6897 The purpose of adding members of $B$ to $p$ is to ensure that any warnings issu ed when using $p$ are correct, and no spurious warnings are generated. In fact, at runtime we cannot add these members until $B$ is loaded; but any such invoca tions will fail at runtime as specified by virtue of being completely absent.
6898 } 6898 }
6899 %But this is still a lie detectable by reflection. Probably revise so the type o f p has these members but p does not. 6899 %But this is still a lie detectable by reflection. Probably revise so the type o f p has these members but p does not.
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
7434 functionPrefix typeParameters? formalParameterList `{\escapegrammar ;}' 7434 functionPrefix typeParameters? formalParameterList `{\escapegrammar ;}'
7435 . 7435 .
7436 7436
7437 {\bf functionPrefix:} 7437 {\bf functionPrefix:}
7438 returnType? identifier 7438 returnType? identifier
7439 . 7439 .
7440 7440
7441 \end{grammar} 7441 \end{grammar}
7442 7442
7443 \LMHash{} 7443 \LMHash{}
7444 The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \l dots, T_n$ $p_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}])$} declared in a library $L$ is is to introduce the name $id$ into the scope of $L$, bound to th e function type $(T_1, \ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k }]) \rightarrow T$. The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \ldots, T_n$ $p_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_ {n+k}\})$} declared in a library $L$ is is to introduce the name $id$ into the s cope of $L$, bound to the function type $(T_1, \ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\}) \rightarrow T$. . In either case, iff no return t ype is specified, it is taken to be \DYNAMIC{}. Likewise, if a type annotation i s omitted on a formal parameter, it is taken to be \DYNAMIC{}. 7444 The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \l dots, T_n$ $p_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}])$} declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the f unction type $(T_1, \ldots, T_n, [T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}]) \rightarrow T$.
7445 The effect of a type alias of the form \code{\TYPEDEF{} $T$ $id (T_1$ $p_1, \l dots, T_n$ $p_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k}\})$} declared in a library $L$ is to introduce the name $id$ into the scope of $L$, bound to the function type $(T_1, \ldots, T_n, \{T_{n+1}$ $p_{n+1}, \ldots, T_{n+k}$ $p_{n+k }\}) \rightarrow T$.
7446 In either case, iff no return type is specified, it is taken to be \DYNAMIC{}. L ikewise, if a type annotation is omitted on a formal parameter, it is taken to b e \DYNAMIC{}.
7445 7447
7446 \LMHash{} 7448 \LMHash{}
7447 It is a compile-time error if any default values are specified in the signature of a function type alias. 7449 It is a compile-time error if any default values are specified in the signature of a function type alias.
7448 %A typedef may only refer to itself via the bounds of its generic parameters. 7450 %A typedef may only refer to itself via the bounds of its generic parameters.
7449 Any self reference in a typedef, either directly, or recursively via another ty pedef, is a compile time error. 7451 Any self reference in a typedef, either directly, or recursively via another ty pedef, is a compile time error.
7450 %via a chain of references that does not include a class declaration. 7452 %via a chain of references that does not include a class declaration.
7451 7453
7452 7454
7453 7455
7454 \subsection{Interface Types} 7456 \subsection{Interface Types}
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
8147 8149
8148 The invariant that each normative paragraph is associated with a line 8150 The invariant that each normative paragraph is associated with a line
8149 containing the text \LMHash{} should be maintained. Extra occurrences 8151 containing the text \LMHash{} should be maintained. Extra occurrences
8150 of \LMHash{} can be added if needed, e.g., in order to make 8152 of \LMHash{} can be added if needed, e.g., in order to make
8151 individual \item{}s in itemized lists addressable. Each \LM.. command 8153 individual \item{}s in itemized lists addressable. Each \LM.. command
8152 must occur on a separate line. \LMHash{} must occur immediately 8154 must occur on a separate line. \LMHash{} must occur immediately
8153 before the associated paragraph, and \LMLabel must occur immediately 8155 before the associated paragraph, and \LMLabel must occur immediately
8154 after the associated \section{}, \subsection{} etc. 8156 after the associated \section{}, \subsection{} etc.
8155 8157
8156 ---------------------------------------------------------------------- 8158 ----------------------------------------------------------------------
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/builder/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698