Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Default Prefix and Postfix Operations

Ursus provides convenient prefix and postfix operators for common operations, similar to C-style languages.

Increment and Decrement

Prefix Increment

Syntax:

++variable

Semantics:

variable := variable + {1}

Returns: New value

Example:

::// var 'x : uint256 := {5} .
::// var 'y : uint256 := ++x .
(* x = 6, y = 6 *)

Postfix Increment

Syntax:

variable++

Semantics:

(let tmp := variable in variable := variable + {1}; tmp)

Returns: Old value

Example:

::// var 'x : uint256 := {5} .
::// var 'y : uint256 := x++ .
(* x = 6, y = 5 *)

Prefix Decrement

Syntax:

--variable

Semantics:

variable := variable - {1}

Returns: New value

Example:

::// var 'x : uint256 := {5} .
::// var 'y : uint256 := --x .
(* x = 4, y = 4 *)

Postfix Decrement

Syntax:

variable--

Semantics:

(let tmp := variable in variable := variable - {1}; tmp)

Returns: Old value

Example:

::// var 'x : uint256 := {5} .
::// var 'y : uint256 := x-- .
(* x = 4, y = 5 *)

Compound Assignment Operators

Addition Assignment

Syntax:

variable += expression

Equivalent to:

variable := variable + expression

Example:

::// balance += amount .
(* balance := balance + amount *)

Subtraction Assignment

Syntax:

variable -= expression

Equivalent to:

variable := variable - expression

Example:

::// balance -= fee .

Multiplication Assignment

Syntax:

variable *= expression

Equivalent to:

variable := variable * expression

Example:

::// total *= {2} .

Division Assignment

Syntax:

variable /= expression

Equivalent to:

variable := variable / expression

Example:

::// share /= {10} .

Modulo Assignment

Syntax:

variable %= expression

Equivalent to:

variable := variable % expression

Example:

::// remainder %= divisor .

Bitwise AND Assignment

Syntax:

variable &= expression

Equivalent to:

variable := variable & expression

Example:

::// flags &= mask .

Bitwise OR Assignment

Syntax:

variable |= expression

Equivalent to:

variable := variable | expression

Example:

::// flags |= {0x01} .

Bitwise XOR Assignment

Syntax:

variable ^= expression

Equivalent to:

variable := variable ^ expression

Example:

::// state ^= toggle .

Usage Examples

Counter Pattern

Ursus Definition incrementCounter: UExpression uint256 false.
{
    ::// counter++ .
    ::// _result := counter |.
}
return.
Defined.

Accumulator Pattern

Ursus Definition addToTotal (amount: uint256): UExpression unit false.
{
    ::// total += amount |.
}
return.
Defined.

Loop with Increment

Ursus Definition sumRange (n: uint256): UExpression uint256 false.
{
    ::// var 'i : uint256 := {0} .
    ::// var 'sum : uint256 := {0} .
    ::// while i < n do { ->> } | .
    {
        ::// sum += i .
        ::// i++ |.
    }
}
return sum.
Defined.

Bitwise Flags

Ursus Definition setFlag (flag: uint8): UExpression unit false.
{
    ::// flags |= flag |.
}
return.
Defined.

Ursus Definition clearFlag (flag: uint8): UExpression unit false.
{
    ::// flags &= ~flag |.
}
return.
Defined.

Type Requirements

All operators require compatible types:

Valid:

::// x += {1} .  (* uint256 += uint256 *)
::// flags |= {0x01} .  (* uint8 |= uint8 *)

Invalid:

::// x += "hello" .  (* Type error *)
::// balance += address .  (* Type error *)

See Also