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
- Operators - All available operators
- Notations - Operator definitions
- Custom Grammar - Syntax rules