# 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 that are within a given range.

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

• The value of $$n$$ must not be larger than $$k$$.
• If the maximum $$m^?$$ is not empty, then:
• Its value must not be larger than $$k$$.
• Its value must not be smaller than $$n$$.
• Then the limit is valid within range $$k$$.
$\frac{ n \leq k \qquad (m \leq k)^? \qquad (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^? \} : k }$

## 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

The restriction to at most one result 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 within range $$2^{32}$$.
• Then the table type is valid.
$\frac{ \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} : 2^{32} }{ \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 within range $$2^{16}$$.
• Then the memory type is valid.
$\frac{ \href{../valid/types.html#valid-limits}{\vdash} \href{../syntax/types.html#syntax-limits}{\mathit{limits}} : 2^{16} }{ \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}}$$¶

• 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}} }$