Bash.AST.Arithmetic (Bash v0.6.0)

Copy Markdown View Source

Arithmetic expression for (( ... )) constructs.

Examples

# (( x = 5 ))
%Arithmetic{
  operator: :assign,
  operands: [
    {:var, "x"},
    {:literal, 5}
  ]
}

# (( x + 5 ))
%Arithmetic{
  operator: :add,
  operands: [
    {:var, "x"},
    {:literal, 5}
  ]
}

# (( x > 5 ))
%Arithmetic{
  operator: :gt,
  operands: [
    {:var, "x"},
    {:literal, 5}
  ]
}

# (( x++ ))
%Arithmetic{
  operator: :post_increment,
  operands: [{:var, "x"}]
}

# (( (x + y) * z ))
%Arithmetic{
  operator: :mul,
  operands: [
    %Arithmetic{operator: :add, operands: [{:var, "x"}, {:var, "y"}]},
    {:var, "z"}
  ]
}

Summary

Types

operand()

@type operand() :: {:var, String.t()} | {:literal, integer()} | t()

operator()

@type operator() ::
  :assign
  | :add_assign
  | :sub_assign
  | :mul_assign
  | :div_assign
  | :mod_assign
  | :add
  | :sub
  | :mul
  | :div
  | :mod
  | :pow
  | :pre_increment
  | :post_increment
  | :pre_decrement
  | :post_decrement
  | :eq
  | :ne
  | :lt
  | :le
  | :gt
  | :ge
  | :and
  | :or
  | :not
  | :bit_and
  | :bit_or
  | :bit_xor
  | :bit_not
  | :left_shift
  | :right_shift
  | :ternary

t()

@type t() :: %Bash.AST.Arithmetic{
  exit_code: 0..255 | nil,
  expression: term(),
  meta: Bash.AST.Meta.t(),
  operands: [operand()],
  operator: operator(),
  state_updates: map()
}