Changed dartLangSpec errors to warnings

Partially resolves issue #34349.
Also note that #34365 and #34319 are affected by this change.

Change-Id: I1d9023464090ff2c07f9dc062353202ddb82ba25
Reviewed-on: https://dart-review.googlesource.com/c/78121
Reviewed-by: Leaf Petersen <leafp@google.com>
This commit is contained in:
Erik Ernst
2018-10-24 07:13:32 +00:00
parent 4695b5f138
commit e4e82da85d
+43 -26
View File
@@ -606,8 +606,8 @@ No state is ever shared between isolates.
Isolates are created by spawning (\ref{spawningAnIsolate}).
\section{Errors}
\LMLabel{errors}
\section{Errors and Warnings}
\LMLabel{errorsAndWarnings}
\LMHash{}
This specification distinguishes between several kinds of errors.
@@ -648,6 +648,12 @@ This is necessary so that the embedder can clean up resources etc.
It is then the embedder's decision whether to terminate the isolate or not.
}
\LMHash{}
{\em Compile-time warnings} are situations that do not preclude execution,
but which are unlikely to be intended,
and likely to cause bugs or inconveniences.
A compile-time warning must be reported by a Dart compiler before the associated code is executed.
\LMHash{}
When this specification says that a {\em run-time error} occurs,
it means that a corresponding error object is thrown.
@@ -699,11 +705,11 @@ the same set of variable names in the same order,
with the same type and modifiers.
\LMHash{}
An initialized variable declaration that contains one or more terms of the form
An \syntax{<initializedVariableDeclaration>} that contains one or more terms of the form
\syntax{<initializedIdentifier>}
(\commentary{a declaration that declares two or more initialized variables})
(\commentary{that is, a declaration that declares two or more initialized variables})
is equivalent to multiple variable declarations declaring
the same set of variable names in the same order,
the same set of variable names, in the same order,
with the same initialization, type, and modifiers.
\commentary{
@@ -737,7 +743,8 @@ but in this situation \id{} is still a referencing identifier.
}
\LMHash{}
An {\em initialized variable} is a variable whose declaring identifier is
An {\em initializing variable declaration}
is a variable declaration whose declaring identifier is
immediately followed by `\code{=}' and an {\em initializing expression}.
\LMHash{}
@@ -832,7 +839,8 @@ A mutable static class variable introduces a static setter into the immediately
A mutable instance variable introduces an instance setter into the immediately enclosing class.
\LMHash{}
Let $v$ be an initialized variable and let $e$ be the associated initializing expression.
Let $v$ be variable declared in an initializing variable declaration,
and let $e$ be the associated initializing expression.
It is a compile-time error if the static type of $e$ is not assignable to the declared type of $v$.
It is a compile-time error if a final instance variable whose declaration has an initializer expression
is also initialized by a constructor, either by an initializing formal or an initializer list entry.
@@ -1499,7 +1507,7 @@ It is a compile-time error if an instance method $m_1$ overrides an instance mem
\LMHash{}
%% TODO(eernst): We need to use the concept of 'correctly overrides' rather than 'is a subtype of', e.g., to treat `void` correctly.
It is a compile-time error if an instance method $m_1$ overrides an instance member $m_2$ and the type of $m_1$ is not a subtype of the type of $m_2$.
It is a compile-time error if an instance method $m_1$ overrides an instance member $m_2$, the signature of $m_2$ explicitly specifies a default value for a formal parameter $p$, and the signature of $m_1$ implies a different default value for $p$.
It is a compile-time warning if an instance method $m_1$ overrides an instance member $m_2$, the signature of $m_2$ explicitly specifies a default value for a formal parameter $p$, and the signature of $m_1$ implies a different default value for $p$.
\commentary{
A method declaration may conflict with other declarations
@@ -1605,7 +1613,7 @@ is not 0.
It is a compile-time error to declare an optional parameter in an operator.
\LMHash{}
It is a compile-time error if the return type of a user-declared operator
It is a compile-time warning if the return type of a user-declared operator
\syntax{`[]='}
is explicitly declared and not \VOID{}.
@@ -1993,10 +2001,12 @@ We could enforce this via the grammar, but we'd have to specify the evaluation r
}
\LMHash{}
It is a compile-time error if a setter declares a return type other than \VOID{}.
It is a compile-time warning if a setter declares a return type other than \VOID{}.
It is a compile-time error if a setter $m_1$ overrides (\ref{inheritanceAndOverriding}) a setter $m_2$
and the parameter type of $m_1$ is not a supertype of the parameter type of $m_2$.
It is a compile-time error if a class has a setter named $v=$ with argument type $T$ and a getter named $v$ with return type $S$,
It is a compile-time warning if a class has
a setter named $v=$ with argument type $T$ and
a getter named $v$ with return type $S$,
and $S$ may not be assigned to $T$.
\commentary{
@@ -2358,13 +2368,17 @@ It is a compile-time error if $k$'s initializer list contains an initializer for
It is a compile-time error if $k$ includes an initializing formal for a final variable $f$ whose declaration includes an initialization expression.
\LMHash{}
Each final instance variable $f$ declared in the immediately enclosing class must have an initializer in $k$'s initializer list unless it has already been initialized by one of the following means:
Let $f$ be a final instance variable declared in
the immediately enclosing class.
A compile-time error occurs unless $f$ is initialized
by one of the following means:
\begin{itemize}
\item Initialization at the declaration of $f$.
\item Initialization by means of an initializing formal of $k$.
\item $f$ is declared by an initializing variable declaration.
\item $f$ is initialized by means of an initializing formal of $k$.
\item $f$ has an initializer in $k$'s initializer list.
\end{itemize}
or a compile-time error occurs.
\LMHash{}
It is a compile-time error if $k$'s initializer list contains an initializer for a variable that is not an instance variable declared in the immediately surrounding class.
\commentary{
@@ -5832,7 +5846,7 @@ An isolate's memory is finite, as is the space available to its thread's call st
It is possible for a running isolate to exhaust its memory or stack, resulting in a run-time error that cannot be effectively caught, which will force the isolate to be suspended.
\commentary{
As discussed in section \ref{errors}, the handling of a suspended isolate is the responsibility of the embedder.
As discussed in section \ref{errorsAndWarnings}, the handling of a suspended isolate is the responsibility of the embedder.
}
@@ -7384,8 +7398,8 @@ Then, the variable $v$ is bound to $o$.
If no error occurs, the value of the assignment expression is $o$.
\commentary{
If $v$ is a final variable, a compile-time error has occurred,
but a type check may cause a dynamic error.
If $v$ is a final variable, a compile-time error has occurred and execution is unspecified.
But a program with no compile-time errors may incur a dynamic type error.
}
% add local functions per bug 23218
@@ -8815,9 +8829,11 @@ The type of a local variable with a declaration of one of the forms
is \DYNAMIC{}.
\LMHash{}
Let $v$ be an initialized local variable and let $e$ be the associated initializing expression.
Let $v$ be a local variable declared by an initializing variable declaration,
and let $e$ be the associated initializing expression.
It is a compile-time error if the static type of $e$ is not assignable to the type of $v$.
It is a compile-time error if a local variable $v$ is final and $v$ is not an initialized variable.
It is a compile-time error if a local variable $v$ is final,
and the declaration of $v$ is not an initializing variable declaration.
\commentary{
It is also a compile-time error to assign to a final local variable
@@ -9493,7 +9509,7 @@ There are obviously situations where code does not fall through, and yet does no
}
\LMHash{}
It is a compile-time error if all of the following conditions hold:
It is a compile-time warning if all of the following conditions hold:
\begin{itemize}
\item The switch statement does not have a default clause.
\item The static type of $e$ is an enumerated type with elements $\id_1, \ldots, \id_n$.
@@ -9501,7 +9517,7 @@ It is a compile-time error if all of the following conditions hold:
\end{itemize}
\commentary{
In other words, an error will be raised if a switch statement over an enum is not exhaustive.
In other words, a warning will be emitted if a switch statement over an enum is not exhaustive.
}
@@ -9736,8 +9752,8 @@ In the case of a generator function, the value returned by the function is the i
}
\LMHash{}
Let $f$ be the function immediately enclosing a return statement of the form \RETURN{};.
It is a compile-time error if $f$ is neither a generator nor a generative constructor and either:
Let $f$ be the function immediately enclosing a return statement of the form \code{\RETURN{};}.
It is a compile-time warning if $f$ is neither a generator nor a generative constructor and either:
\begin{itemize}
%% TODO(eernst): Integrating generalized-void.md, "may not be assigned
%% to void" is useless. Update, also considering invalid_returns.md.
@@ -9747,7 +9763,8 @@ It is a compile-time error if $f$ is neither a generator nor a generative constr
\end{itemize}
\commentary{
Hence, a compile-time error will not be raised if $f$ has no declared return type,
Hence, a compile-time warning will not be raised if $f$ has no declared return type,
%% TODO(eernst): Update when integrating generalized-void.md!
since the return type would be \DYNAMIC{} and \DYNAMIC{} may be assigned to \VOID{} and to \code{Future<Null>}.
However, any synchronous non-generator function that declares a return type must return an expression explicitly.
}
@@ -10436,7 +10453,7 @@ In contrast a library comprises both imports and their usage; the library is und
}
\LMHash{}
It is a compile-time error to import two different libraries with the same name unless their name is the empty string.
It is a compile-time warning to import two different libraries with the same name unless their name is the empty string.
\commentary{
A widely disseminated library should be given a name that will not conflict with other such libraries.