| \def\builtinId#1{\textsf{\textbf{#1}}} | 
 | \def\keyword#1{\textsf{\textbf{#1}}} | 
 | \def\metavar#1{\ensuremath{\mathit{#1}}} | 
 |  | 
 | \def\ABSTRACT{\builtinId{abstract}} | 
 | \def\AS{\builtinId{as}} | 
 | \def\COVARIANT{\builtinId{covariant}} | 
 | \def\DEFERRED{\builtinId{deferred}} | 
 | \def\DYNAMIC{\builtinId{dynamic}} | 
 | \def\EXPORT{\builtinId{export}} | 
 | \def\EXTERNAL{\builtinId{external}} | 
 | \def\FACTORY{\builtinId{factory}} | 
 | \def\FUNCTION{\builtinId{Function}} | 
 | \def\GET{\builtinId{get}} | 
 | \def\IMPLEMENTS{\builtinId{implements}} | 
 | \def\IMPORT{\builtinId{import}} | 
 | \def\INTERFACE{\builtinId{interface}} | 
 | \def\LIBRARY{\builtinId{library}} | 
 | \def\MIXIN{\builtinId{mixin}} | 
 | \def\OPERATOR{\builtinId{operator}} | 
 | \def\PART{\builtinId{part}} | 
 | \def\SET{\builtinId{set}} | 
 | \def\STATIC{\builtinId{static}} | 
 | \def\TYPEDEF{\builtinId{typedef}} | 
 |  | 
 | \def\ASSERT{\keyword{assert}} | 
 | \def\ASYNC{\keyword{async}} | 
 | \def\AWAIT{\keyword{await}} | 
 | \def\BREAK{\keyword{break}} | 
 | \def\CASE{\keyword{case}} | 
 | \def\CATCH{\keyword{catch}} | 
 | \def\CLASS{\keyword{class}} | 
 | \def\CONST{\keyword{const}} | 
 | \def\CONTINUE{\keyword{continue}} | 
 | \def\DEFAULT{\keyword{default}} | 
 | \def\DO{\keyword{do}} | 
 | \def\ELSE{\keyword{else}} | 
 | \def\ENUM{\keyword{enum}} | 
 | \def\EXTENDS{\keyword{extends}} | 
 | \def\FALSE{\keyword{false}} | 
 | \def\FINAL{\keyword{final}} | 
 | \def\FINALLY{\keyword{finally}} | 
 | \def\FOR{\keyword{for}} | 
 | \def\HIDE{\keyword{hide}} | 
 | \def\IF{\keyword{if}} | 
 | \def\IN{\keyword{in}} | 
 | \def\IS{\keyword{is}} | 
 | \def\NEW{\keyword{new}} | 
 | \def\NULL{\keyword{null}} | 
 | \def\OF{\keyword{of}} | 
 | \def\ON{\keyword{on}} | 
 | \def\RETHROW{\keyword{rethrow}} | 
 | \def\RETURN{\keyword{return}} | 
 | \def\SHOW{\keyword{show}} | 
 | \def\SUPER{\keyword{super}} | 
 | \def\SWITCH{\keyword{switch}} | 
 | \def\SYNC{\keyword{sync}} | 
 | \def\THIS{\keyword{this}} | 
 | \def\THROW{\keyword{throw}} | 
 | \def\TRUE{\keyword{true}} | 
 | \def\TRY{\keyword{try}} | 
 | \def\VAR{\keyword{var}} | 
 | \def\VOID{\keyword{void}} | 
 | \def\WHILE{\keyword{while}} | 
 | \def\WITH{\keyword{with}} | 
 | \def\YIELD{\keyword{yield}} | 
 |  | 
 | % Used for inline code snippets. | 
 | \def\code#1{\texttt{#1}} | 
 |  | 
 | % `call` has no special lexical status, so we just use \code{}. | 
 | \def\CALL{\code{call}} | 
 |  | 
 | % Define commands for `<<`, `>>`, `>>>` that avoid introducing guillemets. | 
 | \def\ltlt{<\mbox <} | 
 | \def\gtgt{>\mbox >} | 
 | \def\gtgtgt{>\mbox >\mbox >} | 
 |  | 
 | % Used as line break in the right hand side of a grammar | 
 | % alternative, that is, when starting a "continuation line". | 
 | \newcommand{\gnewline}{\leavevmode\\} | 
 |  | 
 | % Metavariables for argument lists. | 
 | \newcommand{\argumentList}[1]{\metavar{{#1}s}} | 
 | \newcommand{\parameterList}[1]{\metavar{{#1}s}} | 
 |  | 
 | % Colors used for for different kinds of text. | 
 | \definecolor{normativeColor}{rgb}{0,0,0} | 
 | \definecolor{commentaryColor}{rgb}{0.5,0.5,0.5} | 
 | \definecolor{rationaleColor}{rgb}{0.5,0.5,0.5} | 
 |  | 
 | % Environments for different kinds of text. | 
 | \newenvironment{Q}[1]{{\bf{}Upcoming: {#1}}}{} | 
 | \newenvironment{rationale}[1]{{\color{rationaleColor}\it{#1}}}{} | 
 | \newenvironment{commentary}[1]{{\color{commentaryColor}\sf{#1}}}{} | 
 |  | 
 | % Auxiliary functions. | 
 | \newcommand{\flatten}[1]{\ensuremath{\mbox{\it flatten}({#1})}} | 
 | \newcommand{\futureOrBase}[1]{\ensuremath{\mbox{\it futureOrBase}({#1})}} | 
 | \newcommand{\overrides}[1]{\ensuremath{\mbox{\it overrides}({#1})}} | 
 | \newcommand{\inherited}[1]{\ensuremath{\mbox{\it inherited}({#1})}} | 
 |  | 
 | % Used as a mini-section marker, indicating visibly that a range of | 
 | % text (usually just a couple of paragraphs) are concerned with one | 
 | % specific topic in a list of similar topics (like many forms of | 
 | % expressions of a similar nature). | 
 | \newcommand{\Case}[1]{\textbf{Case }$\langle\hspace{0.1em}${#1}$\hspace{0.1em}\rangle$\textbf{.}} | 
 | \newcommand{\EndCase}{\mbox{}\hfill$\scriptscriptstyle\Box$\xspace} | 
 |  | 
 | \newenvironment{dartCode}[1][!ht] {% | 
 |   \def\@programcr{\@addfield\strut}% | 
 |   \let\\=\@programcr% | 
 |   \relax\@vobeyspaces\obeylines% | 
 |   \ttfamily\color{commentaryColor}% | 
 |   \vspace{1em}% | 
 | }{\normalcolor\vspace{1em}} | 
 |  | 
 | \newenvironment{normativeDartCode}[1][!ht] {% | 
 |   \def\@programcr{\@addfield\strut}% | 
 |   \let\\=\@programcr% | 
 |   \relax\@vobeyspaces\obeylines% | 
 |   \ttfamily\color{normativeColor}% | 
 |   \vspace{1em}% | 
 | }{\normalcolor\vspace{1em}} | 
 |  | 
 | % Used for comments in a code context. | 
 | \def\comment#1{\textsf{#1}} | 
 |  | 
 | % A commonly used metavariable for an identifier, operator. | 
 | \newcommand{\id}{\metavar{id}} | 
 | \newcommand{\op}{\metavar{op}} | 
 |  | 
 | % Used for defining occurrence of phrase, with customized index entry. | 
 | \newcommand{\IndexCustom}[2]{% | 
 |   \leavevmode\marginpar{\ensuremath{\diamond}}\emph{#1}\index{#2}} | 
 |  | 
 | % Used when one concept should have >1 entry in the index. Does not add | 
 | % the diamond in the margin and shows no text where the command occurs. | 
 | % Intended to be used immediately after another \Index... command. | 
 | \newcommand{\IndexExtraEntry}[1]{\index{#1}} | 
 |  | 
 | % Used for a defining occurrence of a phrase, adding it to the index. | 
 | \newcommand{\Index}[1]{\IndexCustom{#1}{#1}} | 
 |  | 
 | % Same appearance, but not adding an entry to the index. | 
 | \newcommand{\NoIndex}[1]{% | 
 |   \leavevmode\marginpar{\ensuremath{\diamond}}\emph{#1}} | 
 |  | 
 | % Used to specify comma separated lists of similar symbols. | 
 | \newcommand{\List}[3]{\ensuremath{{#1}_{#2},\,\ldots,\ {#1}_{#3}}} | 
 |  | 
 | % Used to specify comma separated lists of pairs of similar symbols, | 
 | % as needed, e.g., for declarations of formal parameters. | 
 | % Parameters: Name of first part of pair, name of second part, | 
 | % index at start, index at end. | 
 | \newcommand{\PairList}[4]{\ensuremath{% | 
 |   {#1}_{#3}\ {#2}_{#3},\,\ldots,\ {#1}_{#4}\ {#2}_{#4}}} | 
 |  | 
 | % Used to specify comma separated lists of triples of similar symbols, | 
 | % as needed, e.g., for declarations of formal parameters with defaults. | 
 | % Parameters: Name of first part of triple, name of second part, | 
 | % name of third part, index at start, index at end. | 
 | \newcommand{\TripleList}[5]{\ensuremath{% | 
 |   {#1}_{#4}\ {#2}_{#4}\ {#3}_{#4},\,\ldots,\ {#1}_{#5}\ {#2}_{#5}\ {#3}_{#5}}} | 
 |  | 
 | % Used to abbreviate \EXTENDS{} in function types. | 
 | \newcommand{\FunctionTypeExtends}{\ensuremath{\triangleleft}} | 
 |  | 
 | % Used to specify comma separated lists of pairs of symbols | 
 | % separated by \EXTENDS{}, as needed for type parameter declarations. | 
 | % Parameters: Type parameter name, bound name, number of type parameters. | 
 | \newcommand{\TypeParameters}[3]{\ensuremath{% | 
 |   {#1}_1\,\EXTENDS\,{#2}_1,\,\ldots,\ % | 
 |   {#1}_{#3}\,\EXTENDS\,{#2}_{#3}}} | 
 |  | 
 | % Used to specify comma separated lists of symbols followed by | 
 | % \EXTENDS{}, as needed for type parameter declarations where we do | 
 | % not intend to refer explicitly to the bounds. | 
 | % Parameters: Type parameter name, number of type parameters. | 
 | \newcommand{\TypeParametersNoBounds}[2]{\ensuremath{% | 
 |   {#1}_1\,\EXTENDS\,\ldots,\ \ldots,\ {#1}_{#2}\,\EXTENDS\,\ldots}} | 
 |  | 
 | % For consistency, we may as well use this whenever possible. | 
 | \newcommand{\TypeParametersStd}{\TypeParameters{X}{B}{s}} | 
 |  | 
 | % Used to specify comma separated lists of pairs of symbols | 
 | % separated by \EXTENDS{}, as needed for type parameter declarations. | 
 | % Parameters: Type parameter name, bound name, number of type parameters. | 
 | \newcommand{\FTTypeParameters}[3]{\ensuremath{% | 
 |   {#1}_1\FunctionTypeExtends{#2}_1,\,\ldots,\ % | 
 |   {#1}_{#3}\FunctionTypeExtends{#2}_{#3}}} | 
 |  | 
 | % Used to specify simple non-generic function types: Same syntax as in source. | 
 | % Arguments: Return type, formal parameter declarations. | 
 | \newcommand{\FunctionTypeSimple}[2]{\code{\ensuremath{#1}\ \FUNCTION({#2})}} | 
 |  | 
 | % Used to specify simple generic function types: Same syntax as in source. | 
 | % Arguments: Return type, formal parameter declarations. | 
 | \newcommand{\FunctionTypeSimpleGeneric}[3]{\code{% | 
 |   \ensuremath{#1}\ \FUNCTION<{#2}>({#3})}} | 
 |  | 
 | % Used to specify function types: Same syntax as in source. | 
 | % Arguments: Return type, spacer, type parameter name, bound name, | 
 | %   number of type parameters, formal parameter declarations. | 
 | \newcommand{\FunctionType}[6]{\leavevmode\par\noindent\code{% | 
 |   \ensuremath{#1}{#2}\FUNCTION<\FTTypeParameters{#3}{#4}{#5}>({#6})}} | 
 |  | 
 | % Same as \FunctionType except suitable for inline usage, hence omitting | 
 | % the spacer argument. | 
 | \newcommand{\RawFunctionType}[5]{\code{% | 
 |   \ensuremath{#1}\ \FUNCTION<\FTTypeParameters{#2}{#3}{#4}>({#5})}} | 
 |  | 
 | % Used to specify function type parameter lists with positional optionals. | 
 | % Arguments: Parameter type, number of required parameters, | 
 | % number of optional parameters. | 
 | \newcommand{\FunctionTypePositionalArguments}[3]{% | 
 |   \List{#1}{1}{#2},\ [\List{#1}{{#2}+1}{{#2}+{#3}}]} | 
 |  | 
 | \newcommand{\FunctionTypePositionalArgumentsStd}{% | 
 |   \FunctionTypePositionalArguments{T}{n}{k}} | 
 |  | 
 | % Used to specify function types with positional optionals: | 
 | % Arguments: Return type, spacer, type parameter name, bound name, | 
 | %   number of type parameters, parameter type, number of required parameters, | 
 | %   number of optional parameters. | 
 | \newcommand{\FunctionTypePositional}[8]{% | 
 |   \FunctionType{#1}{#2}{#3}{#4}{#5}{% | 
 |     \FunctionTypePositionalArguments{#6}{#7}{#8}}} | 
 |  | 
 | % Same as \FunctionTypePositional except suitable for inline usage, | 
 | % hence omitting the spacer argument. | 
 | \newcommand{\RawFunctionTypePositional}[7]{% | 
 |   \RawFunctionType{#1}{#2}{#3}{#4}{% | 
 |     \FunctionTypePositionalArguments{#5}{#6}{#7}}} | 
 |  | 
 | % Used to specify function type parameter lists with named optionals. | 
 | % Arguments: Parameter type, number of required parameters, | 
 | % name of optional parameters, number of optional parameters. | 
 | \newcommand{\FunctionTypeNamedArguments}[4]{% | 
 |   \List{#1}{1}{#2},\ \{\PairList{#1}{#3}{{#2}+1}{{#2}+{#4}}\}} | 
 |    | 
 | \newcommand{\FunctionTypeNamedArgumentsStd}{% | 
 |   \FunctionTypeNamedArguments{T}{n}{x}{k}} | 
 |  | 
 | % Used to specify function types with named parameters: | 
 | % Arguments: Return type, spacer, type parameter name, bound name, | 
 | %   number of type parameters, parameter type, number of required parameters, | 
 | %   name of optional parameters, number of optional parameters. | 
 | \newcommand{\FunctionTypeNamed}[9]{% | 
 |   \FunctionType{#1}{#2}{#3}{#4}{#5}{% | 
 |     \FunctionTypeNamedArguments{#6}{#7}{#8}{#9}}} | 
 |  | 
 | % Same as \FunctionType except suitable for inline usage, hence omitting | 
 | % the spacer argument. | 
 | \newcommand{\RawFunctionTypeNamed}[8]{% | 
 |   \RawFunctionType{#1}{#2}{#3}{#4}{% | 
 |     \FunctionTypeNamedArguments{#5}{#6}{#7}{#8}}} | 
 |  | 
 | % Used to specify function types with no optional parameters: | 
 | % Arguments: Return type, spacer, type parameter name, bound name, | 
 | %   number of type parameters, parameter type, | 
 | %   number of parameters (all required). | 
 | \newcommand{\FunctionTypeAllRequired}[7]{% | 
 |   \FunctionType{#1}{#2}{#3}{#4}{#5}{\List{#6}{1}{#7}}} | 
 |  | 
 | \newcommand{\FunctionTypePositionalStd}[1]{% | 
 |   \FunctionTypePositional{#1}{ }{X}{B}{s}{T}{n}{k}} | 
 |  | 
 | \newcommand{\RawFunctionTypePositionalStd}[1]{% | 
 |   \RawFunctionTypePositional{#1}{X}{B}{s}{T}{n}{k}} | 
 |  | 
 | \newcommand{\FunctionTypeNamedStd}[1]{% | 
 |   \FunctionTypeNamed{#1}{ }{X}{B}{s}{T}{n}{x}{k}} | 
 |  | 
 | \newcommand{\RawFunctionTypeNamedStd}[1]{% | 
 |   \RawFunctionTypeNamed{#1}{X}{B}{s}{T}{n}{x}{k}} | 
 |  | 
 | \newcommand{\FunctionTypeAllRequiredStd}[1]{% | 
 |   \FunctionTypeAllRequired{#1}{ }{X}{B}{s}{T}{n}} | 
 |  | 
 | \newcommand{\FunctionTypePositionalStdCr}[1]{% | 
 |   \FunctionTypePositional{#1}{\\}{X}{B}{s}{T}{n}{k}} | 
 |  | 
 | \newcommand{\FunctionTypeNamedStdCr}[1]{% | 
 |   \FunctionTypeNamed{#1}{\\}{X}{B}{s}{T}{n}{x}{k}} | 
 |  | 
 | \newcommand{\FunctionTypeAllRequiredStdCr}[1]{% | 
 |   \FunctionTypeAllRequired{#1}{\\}{X}{B}{s}{T}{n}} | 
 |  | 
 | \newcommand{\MoreSignatureSpecificSymbol}{\ensuremath{\preceq}} | 
 | \newcommand{\NotMoreSignatureSpecificSymbol}{\ensuremath{\not\preceq}} | 
 | \newcommand{\LessSignatureSpecificSymbol}{\ensuremath{\succeq}} | 
 |  | 
 | \newcommand{\MoreSignatureSpecific}[2]{% | 
 |   \ensuremath{{#1}\MoreSignatureSpecificSymbol{#2}}} | 
 | \newcommand{\NotMoreSignatureSpecific}[2]{% | 
 |   \ensuremath{{#1}\NotMoreSignatureSpecificSymbol{#2}}} | 
 |  | 
 | % Judgment expressing that a subtype relation exists. | 
 | \newcommand{\Subtype}[3]{\ensuremath{{#1}\vdash{#2}\,<:\,{#3}}} | 
 | \newcommand{\SubtypeStd}[2]{\Subtype{\Gamma}{#1}{#2}} | 
 | % Subtype judgment where the environment is omitted (NE: "no environment"). | 
 | \newcommand{\SubtypeNE}[2]{\ensuremath{{#1}\,<:\,{#2}}} | 
 |  | 
 | % Judgment expressing that a supertype relation exists. | 
 | \newcommand{\Supertype}[3]{\ensuremath{{#1}\vdash{#2}\,:>\,{#3}}} | 
 | \newcommand{\SupertypeStd}[2]{\Supertype{\Gamma}{#1}{#2}} | 
 |  | 
 | % Judgment expressing that an assignability relation exists. | 
 | \newcommand{\AssignableRelationSymbol}{\ensuremath{\Longleftrightarrow}} | 
 | \newcommand{\Assignable}[3]{% | 
 |   \ensuremath{{#1}\vdash{#2}\,\AssignableRelationSymbol\,{#3}}} | 
 | \newcommand{\AssignableStd}[2]{\Assignable{\Gamma}{#1}{#2}} | 
 |  | 
 | % Semantic function delivering the superinterfaces of a class. | 
 | \newcommand{\Superinterfaces}[1]{\ensuremath{\metavar{Superinterfaces}({#1})}} | 
 | \newcommand{\Superinterface}[2]{{#1}\in\Superinterfaces{#2}} | 
 |  | 
 | % ---------------------------------------------------------------------- | 
 | % Support for hash valued Location Markers | 
 |  | 
 | % very small font, to enable 40 char hash values in the margin | 
 | \makeatletter | 
 | \ifcase \@ptsize \relax% 10pt | 
 |   \newcommand{\miniscule}{\@setfontsize\miniscule{2}{3}}% \tiny: 5/6 | 
 | \or% 11pt | 
 |   \newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7 | 
 | \or% 12pt | 
 |   \newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7 | 
 | \fi | 
 | \makeatother | 
 |  | 
 | % white: location markers should not create visual noise | 
 | \definecolor{LMdim}{gray}{1.0} | 
 |  | 
 | % insert location marker showing hash value of following paragraph | 
 | \newcommand{\LMHash}[1]{\leavevmode\marginpar{\quad% | 
 |     \raisebox{0.5ex}{\miniscule{\color{LMdim}#1}}\vspace{-2\baselineskip}}% | 
 |   \color{normativeColor}} | 
 |  | 
 | % support convenient renewcommand | 
 | \let\OriginalLMHash\LMHash | 
 |  | 
 | % define a label, and show the associated logical location marker | 
 | \newcommand{\LMLabel}[1]{% | 
 |   \vspace{-\baselineskip}\leavevmode\OriginalLMHash{\raisebox{10ex}{#1}}% | 
 |   \label{#1}} | 
 | % ---------------------------------------------------------------------- |