| \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}} |
| % ---------------------------------------------------------------------- |