code: func (l *State) Arith(op Operator) {
  	if op != OpUnaryMinus {
  		l.checkElementCount(2)
  	} else {
  		l.checkElementCount(1)
  		l.push(l.stack[l.top-1])
  	}
  	o1, o2 := l.stack[l.top-2], l.stack[l.top-1]
  	if n1, n2, ok := pairAsNumbers(o1, o2); ok {
  		l.stack[l.top-2] = arith(op, n1, n2)
  	} else {
  		l.stack[l.top-2] = l.arith(o1, o2, tm(op-OpAdd)+tmAdd)
  	}
  	l.top--
  }
docs: // Arith performs an arithmetic operation over the two values (or one, in
  // case of negation) at the top of the stack, with the value at the top being
  // the second operand, ops these values and pushes the result of the operation.
  // The function follows the semantics of the corresponding Lua operator
  // (that is, it may call metamethods).
  //
  // http://www.lua.org/manual/5.2/manual.html#lua_arith