## 5.3 Class Extensions

### Classes

<statement> ::=

x`= class` [`$` ]`` ...`end` |  | `class` x`` ...`end`

### Method Names

<method head>, <method head label> ::=

`unit` |  | `!`Unit.'unit'``

<method head>, <method head label> ::=

`true` |  | `!`Bool.'true'``

<method head>, <method head label> ::=

`false` |  | `!`Bool.'false'``

### Locks

<statement> ::=

x`= lock` E `end` |  | `lock` x`=` E `end`

### Operators

<statement> ::=

E1`<-` E2 |  | `local` `X` `in` `X``=` E1`` `X``<-` E2 `end`

if E1 is no variable.

<statement> ::=

x`<-` E |  | `local` `X` `in` `X``=` E`` `x``<-` `X` `end`

if E is no variable.

<statement> ::=

x`=` E1`<-` E2 |  | `local` `X` `in` `X``=` E1`` x`=` `X``<-` E2 `end`

if E1 is no variable.

<statement> ::=

x`=` y`<-` E |  | `local` `X` `in` `X``=` E`` x`=` y`<-` `X` `end`

if E is no variable.

<statement> ::=

x`=` E1`,` E2 |  | E1`,` E2'

if exactly one `$` occurs in E2 in pattern position. E2' is the result of replacing this `$` in E2 by x.

<statement> ::=

E1`,` E2 |  | `local` `X` `in` `X``=` E1`` `X``,` E2 `end`

if E1 is no variable.

<statement> ::=

x`,` E |  | `local` `X` `in` `X``=` E`` `x``,` `X` `end`

if E is no variable.