Index: docs/language/dartLangSpec.tex |
=================================================================== |
--- docs/language/dartLangSpec.tex (revision 42379) |
+++ docs/language/dartLangSpec.tex (working copy) |
@@ -7,7 +7,7 @@ |
\usepackage{lmodern} |
\newcommand{\code}[1]{{\sf #1}} |
\title{Dart Programming Language Specification \\ |
-{\large Version 1.6}} |
+{\large Version 1.9}} |
%\author{The Dart Team} |
% For information about Location Markers (and in particular the |
@@ -1115,16 +1115,14 @@ |
\begin{dartCode} |
class Base \{ |
int get one =$>$ 1; |
- \} |
+ \} |
- abstract class Mix \{ |
+ abstract class Mix \{ |
int get one; |
int get two =$>$ one + one; |
- \} |
+ \} |
- class C extends Base with Mix \{ |
- \} |
-\} |
+ class C extends Base with Mix \{ \} |
\end{dartCode} |
\rationale{At run time, the concrete method \cd{one} declared in \cd{Base} will be executed, and no problem should arise. Therefore no warning should be issued and so we suppress warnings if a corresponding concrete member exists in the hierarchy. } |
@@ -1805,7 +1803,7 @@ |
\item Superinterface members are not inherited by a class, but are inherited by its implicit interface. Interfaces have their own inheritance rules (\ref{interfaceInheritanceAndOverriding}). |
\item A member is abstract if it has no body and is not labeled \EXTERNAL{} (\ref{abstractInstanceMembers}, \ref{externalFunctions}). |
\item A class is abstract iff it is explicitly labeled \ABSTRACT{}.% or if it declares (not just inherits) an abstract member (\ref{classes}). |
-\item It is a static warning a concrete class has an abstract member (declared or inherited). |
+\item It is a static warning if a concrete class has an abstract member (declared or inherited). |
\item It is a static warning and a dynamic error to call a non-factory constructor of an abstract class (\ref{new}). |
\item If a class defines an instance member named $m$, and any of its superinterfaces have a member named $m$, the interface of the class overrides $m$. |
\item An interface inherits all members of its superinterfaces that are not overridden and not members of multiple superinterfaces. |
@@ -6388,7 +6386,8 @@ |
\LMLabel{scripts} |
\LMHash{} |
-A {\em script} is a library whose exported namespace (\ref{exports}) includes a top-level function \code{main}. |
+A {\em script} is a library whose exported namespace (\ref{exports}) includes a top-level member named \code{main}. It is a static warning if the static type of \code{main} is not assignable to a function type or is a function type with more than two required parameters. |
+ |
A script $S$ may be executed as follows: |
\LMHash{} |
@@ -6399,7 +6398,11 @@ |
\end{enumerate} |
\LMHash{} |
-It is a run time error if $S$ does not declare or import a top-level function \code{main}. It is a static warning if \code{main} has more than two required parameters. |
+It is a run time error if $S$ does not declare or export either: |
+\begin{itemize} |
+\item A top-level function named \code{main}, or |
+\item A top-level getter named \code{main} that returns a function. |
+\end{itemize} |
\commentary { |
Note that if \code{main} requires more than two arguments, a run time error will occur. |