Contents | < Browse | Browse >

#-------------------------------------------------------------------#
|      Order of evaluation                                          |
#-------------------------------------------------------------------#

   Apart from assignment, all expressions are always evaluated
   from left to right. Be it math/bitwise/comparison or parameters
   to functions or elements of an immediate list.

   "a+b*c" is evaluated as:

      1. load value of a
      2. add value of b
      3. multiply with value of c

   "bla(x[]++, x[]++)" is evaluated as:

      1. load value of x[] as first parameter
      2. increment x
      3. load value of x[] as second paramater
      4. increment x
      5. call function

   Assignment always evaluates right hand side expression first,
   then if needed, evaluates the left hand side.

   "x[exp] := y[]++" is evaluated as:

      1. load value from y[]
      2. increment y
      3. evaluate exp
      4. store value in x[exp]