Skip to content

Commit 97aa802

Browse files
committed
Correction: Add definition of normalizedType/topMergeType for member signatures
1 parent 731eaf2 commit 97aa802

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

specification/dartLangSpec.tex

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11588,7 +11588,7 @@ \subsubsection{Sets}
1158811588
and it is evaluated at run time.
1158911589
Only run-time set literals can be mutated after they are created.
1159011590
% This error can occur because being constant is a dynamic property, here.
11591-
Attempting to mutate a constant set literal
11591+
Attempting to mutate a constant set literal
1159211592
will result in a \DynamicError{dynamic error}.
1159311593

1159411594
\commentary{%
@@ -23278,6 +23278,34 @@ \subsection{Functions Dealing with Extreme Types}
2327823278
and then recursively taking \TopMergeTypeName{} of the rest.
2327923279
\commentary{The ordering of the arguments makes no difference.}
2328023280

23281+
\LMHash{}%
23282+
We generalize \TopMergeTypeName{} such that
23283+
it can be applied to two or more member signatures rather than types.
23284+
The case with more than two member signatures is defined in the same way as
23285+
the case with more than two types.
23286+
With member signatures $m_1$ and $m_2$
23287+
that are structurally identical modulo the choice of top types
23288+
and the occurrences of the modifier \COVARIANT,
23289+
\TopMergeType{$m_1$}{$m_2$} is a member signature $m$ such
23290+
that every pair of types $T_1$ and $T_2$ that occur in $m_1$ respectively $m_2$
23291+
yields \TopMergeType{$T_1$}{$T_2$} in the result,
23292+
the modifier \COVARIANT{} occurs on every parameter in $m$
23293+
where the corresponding parameter in $m_1$ or in $m_2$ has that modifier,
23294+
and all other non-type parts of $m_1$ and $m_2$ occur identically in the result.
23295+
23296+
\commentary{%
23297+
For example,
23298+
23299+
\noindent
23300+
\TopMergeType{\VOID\,\,m(List<\DYNAMIC>)}
23301+
{\DYNAMIC\,\,m(\COVARIANT\,\,List<Object?>)}
23302+
23303+
\noindent
23304+
is the member signature
23305+
\code{Object?\,\,m(\COVARIANT\,\,List<Object?>)}.%
23306+
}
23307+
23308+
2328123309
\LMHash{}%
2328223310
The \IndexCustom{\IsTopTypeName}{isTopType@\IsTopTypeName}
2328323311
predicate is true for any type which is in
@@ -23526,6 +23554,21 @@ \subsection{Type Normalization}
2352623554
\end{displaymath}
2352723555
}
2352823556

23557+
\LMHash{}%
23558+
We generalize \NormalizedTypeOfName{} such that
23559+
it can be applied to a member signature rather than a type.
23560+
This maps a member signature $m$ to a member signature $m'$ such
23561+
that every type $T$ that occurs in $m$ is replaced by
23562+
\NormalizedTypeOf{$T$}, and all other parts of $m'$ are identical to
23563+
the corresponding part of $m$.
23564+
23565+
\commentary{%
23566+
For example,
23567+
\NormalizedTypeOf{\VOID\,\,m(\COVARIANT\,\,FutureOr<Object>)}
23568+
is the member signature
23569+
\code{\VOID\,\,m(\COVARIANT\,\,Object)}.%
23570+
}
23571+
2352923572

2353023573
\subsection{The Canonical Syntax of Types}
2353123574
\LMLabel{theCanonicalSyntaxOfTypes}

0 commit comments

Comments
 (0)