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

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

Issue 2638403006: Spec tweak. Fix semicolon escape-grammar where it doesn't match the rest. (Closed)
Patch Set: One more case. Created 3 years, 11 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 | no next file » | 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 2319 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 %By current rules, this is illegal. Make sure we preserve this. 2330 %By current rules, this is illegal. Make sure we preserve this.
2331 2331
2332 2332
2333 %\subsection{Interface Injection} 2333 %\subsection{Interface Injection}
2334 %\LMLabel{interfaceInjection} 2334 %\LMLabel{interfaceInjection}
2335 2335
2336 %An {\em interface injection declaration} causes a pre-existing class $S$ to be considered a subinterface of another interface $I$. It is a static type warning if $S$ is not a structural subtype of $I$. However, the subinterface relations i mplied by the interface injection declaration are considered to hold by both the typechecker and the runtime, regardless. 2336 %An {\em interface injection declaration} causes a pre-existing class $S$ to be considered a subinterface of another interface $I$. It is a static type warning if $S$ is not a structural subtype of $I$. However, the subinterface relations i mplied by the interface injection declaration are considered to hold by both the typechecker and the runtime, regardless.
2337 2337
2338 %\begin{grammar} 2338 %\begin{grammar}
2339 %classInterfaceInjection: 2339 %classInterfaceInjection:
2340 %class qualified typeParameters? interfaces '{\escapegrammar ;}' 2340 %class qualified typeParameters? interfaces `{\escapegrammar ;}'
2341 % . 2341 % .
2342 2342
2343 2343
2344 %interfaceInterfaceInjection: 2344 %interfaceInterfaceInjection:
2345 %interface qualified typeParameters? superinterfaces '{\escapegrammar ;}' 2345 %interface qualified typeParameters? superinterfaces `{\escapegrammar ;}'
2346 %. 2346 %.
2347 %\end{grammar} 2347 %\end{grammar}
2348 2348
2349 %\rationale{Since subinterface relations can be tested dynamically via \IS{}, in terface injection is not just a directive to the static checker. The dynamic rel ations implied must hold regardless of whether a static typecheck has succeeded , or has been performed at all. This makes sense from the perspective of preserv ing programmer intent. The injection describes a nominal type relation that the programmer wishes to hold. Just as a supertype mentioned within a class declarat ion is considered a supertype even though type errors might arise among (say) ov erridden and overriding methods, so it must be that the relation implied by an i njection holds regardless of type errors. 2349 %\rationale{Since subinterface relations can be tested dynamically via \IS{}, in terface injection is not just a directive to the static checker. The dynamic rel ations implied must hold regardless of whether a static typecheck has succeeded , or has been performed at all. This makes sense from the perspective of preserv ing programmer intent. The injection describes a nominal type relation that the programmer wishes to hold. Just as a supertype mentioned within a class declarat ion is considered a supertype even though type errors might arise among (say) ov erridden and overriding methods, so it must be that the relation implied by an i njection holds regardless of type errors.
2350 %In addition, this decision helps to produce meaningful and localized error mess ages. Any errors are reported at the point of injection rather than at program p oints that rely on the relation (a well known problem with structural subtyping in OO systems). 2350 %In addition, this decision helps to produce meaningful and localized error mess ages. Any errors are reported at the point of injection rather than at program p oints that rely on the relation (a well known problem with structural subtyping in OO systems).
2351 %} 2351 %}
2352 2352
2353 %\Q{When does an interface injection take effect? When the containing library is loaded? 2353 %\Q{When does an interface injection take effect? When the containing library is loaded?
2354 %What is the scope of such a declaration? Is it global, or only in the scope of the containing library? The scope of such a declaration is global. 2354 %What is the scope of such a declaration? Is it global, or only in the scope of the containing library? The scope of such a declaration is global.
2355 %An injection must be at top level. Who has the right to inject an interface $I$ into another class $C$? Anybody? But since this affects dynamic behavior, is th is a weird security issue? 2355 %An injection must be at top level. Who has the right to inject an interface $I$ into another class $C$? Anybody? But since this affects dynamic behavior, is th is a weird security issue?
(...skipping 3247 matching lines...) Expand 10 before | Expand all | Expand 10 after
5603 5603
5604 \subsection{Local Variable Declaration} 5604 \subsection{Local Variable Declaration}
5605 \LMLabel{localVariableDeclaration} 5605 \LMLabel{localVariableDeclaration}
5606 5606
5607 5607
5608 \LMHash{} 5608 \LMHash{}
5609 A {\em variable declaration statement }declares a new local variable. 5609 A {\em variable declaration statement }declares a new local variable.
5610 5610
5611 \begin{grammar} 5611 \begin{grammar}
5612 {\bf localVariableDeclaration:} 5612 {\bf localVariableDeclaration:}
5613 initializedVariableDeclaration {\escapegrammar';'} 5613 initializedVariableDeclaration `{\escapegrammar ;}'
5614 . 5614 .
5615 \end{grammar} 5615 \end{grammar}
5616 5616
5617 \LMHash{} 5617 \LMHash{}
5618 Executing a variable declaration statement of one of the forms \VAR{} $v = e;$ , $T$ $v = e; $, \CONST{} $v = e;$, \CONST{} $T$ $v = e;$, \FINAL{} $v = e;$ o r \FINAL{} $T$ $v = e;$ proceeds as follows: 5618 Executing a variable declaration statement of one of the forms \VAR{} $v = e;$ , $T$ $v = e; $, \CONST{} $v = e;$, \CONST{} $T$ $v = e;$, \FINAL{} $v = e;$ o r \FINAL{} $T$ $v = e;$ proceeds as follows:
5619 5619
5620 \LMHash{} 5620 \LMHash{}
5621 The expression $e$ is evaluated to an object $o$. Then, the variable $v$ is set to $o$. 5621 The expression $e$ is evaluated to an object $o$. Then, the variable $v$ is set to $o$.
5622 5622
5623 \LMHash{} 5623 \LMHash{}
(...skipping 1727 matching lines...) Expand 10 before | Expand all | Expand 10 after
7351 7351
7352 {\bf typeAlias:} 7352 {\bf typeAlias:}
7353 metadata \TYPEDEF{} typeAliasBody 7353 metadata \TYPEDEF{} typeAliasBody
7354 . 7354 .
7355 7355
7356 {\bf typeAliasBody:} 7356 {\bf typeAliasBody:}
7357 functionTypeAlias 7357 functionTypeAlias
7358 . 7358 .
7359 7359
7360 {\bf functionTypeAlias:} 7360 {\bf functionTypeAlias:}
7361 functionPrefix typeParameters? formalParameterList '{\escapegrammar ;}' 7361 functionPrefix typeParameters? formalParameterList `{\escapegrammar ;}'
7362 . 7362 .
7363 7363
7364 {\bf functionPrefix:} 7364 {\bf functionPrefix:}
7365 returnType? identifier 7365 returnType? identifier
7366 . 7366 .
7367 7367
7368 \end{grammar} 7368 \end{grammar}
7369 7369
7370 \LMHash{} 7370 \LMHash{}
7371 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{}. 7371 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{}.
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after
8040 8040
8041 The invariant that each normative paragraph is associated with a line 8041 The invariant that each normative paragraph is associated with a line
8042 containing the text \LMHash{} should be maintained. Extra occurrences 8042 containing the text \LMHash{} should be maintained. Extra occurrences
8043 of \LMHash{} can be added if needed, e.g., in order to make 8043 of \LMHash{} can be added if needed, e.g., in order to make
8044 individual \item{}s in itemized lists addressable. Each \LM.. command 8044 individual \item{}s in itemized lists addressable. Each \LM.. command
8045 must occur on a separate line. \LMHash{} must occur immediately 8045 must occur on a separate line. \LMHash{} must occur immediately
8046 before the associated paragraph, and \LMLabel must occur immediately 8046 before the associated paragraph, and \LMLabel must occur immediately
8047 after the associated \section{}, \subsection{} etc. 8047 after the associated \section{}, \subsection{} etc.
8048 8048
8049 ---------------------------------------------------------------------- 8049 ----------------------------------------------------------------------
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698