Types

Most types are universally valid. However, restrictions apply to function types as well as the limits of table types and memory types, which must be checked during validation.

Limits

Limits must have meaningful bounds.

\(\{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^? \}\)

  • If the maximum \(m^?\) is not empty, then its value must not be smaller than \(n\).
  • Then the limit is valid.
\[\frac{ (n \leq m)^? }{ \href{../valid/types.html#valid-limits}{\vdash} \{ \href{../syntax/types.html#syntax-limits}{\mathsf{min}}~n, \href{../syntax/types.html#syntax-limits}{\mathsf{max}}~m^? \} \mathrel{\mbox{ok}} }\]

Function Types

Function types may not specify more than one result.

\([t_1^n] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^m]\)

  • The arity \(m\) must not be larger than \(1\).
  • Then the function type is valid.
\[\frac{ }{ \href{../valid/types.html#valid-functype}{\vdash} [t_1^\ast] \href{../syntax/types.html#syntax-functype}{\rightarrow} [t_2^?] \mathrel{\mbox{ok}} }\]

Note

This restriction may be removed in future versions of WebAssembly.

Table Types

\(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-elemtype}{\mathit{elemtype}}\)

  • The limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) must be valid.
  • Then the table type is valid.
\[\frac{ \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \mathrel{\mbox{ok}} }{ \href{../valid/types.html#valid-tabletype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}}~\href{../syntax/types.html#syntax-elemtype}{\mathit{elemtype}} \mathrel{\mbox{ok}} }\]

Memory Types

\(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\)

  • The limits \(\href{../syntax/types.html#syntax-limits}{\mathit{limits}}\) must be valid.
  • Then the memory type is valid.
\[\frac{ \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \mathrel{\mbox{ok}} }{ \href{../valid/types.html#valid-memtype}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} \mathrel{\mbox{ok}} }\]

Global Types

\(\href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}}\)

  • Then the global type is valid.
\[\frac{ }{ \href{../valid/types.html#valid-globaltype}{\vdash} \href{../syntax/types.html#syntax-mut}{\mathit{mut}}~\href{../syntax/types.html#syntax-valtype}{\mathit{valtype}} \mathrel{\mbox{ok}} }\]