## 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> ::=
x`= @`E |  | `local` `X` `in` `X``=` E`` x`= @``X` `end`
if E is no variable.

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