function OperatorNode(op, fn, args, implicit) {
    if (!(this instanceof OperatorNode)) {
      throw new SyntaxError('Constructor must be called with the new operator');
    } // validate input


    if (typeof op !== 'string') {
      throw new TypeError('string expected for parameter "op"');
    }

    if (typeof fn !== 'string') {
      throw new TypeError('string expected for parameter "fn"');
    }

    if (!Array.isArray(args) || !args.every(type.isNode)) {
      throw new TypeError('Array containing Nodes expected for parameter "args"');
    }

    this.implicit = implicit === true;
    this.op = op;
    this.fn = fn;
    this.args = args || [];
  }
@constructor OperatorNode
@extends {Node}
An operator with two arguments, like 2+3

@param {string} op           Operator name, for example '+'
@param {string} fn           Function name, for example 'add'
@param {Node[]} args         Operator arguments
@param {boolean} [implicit]  Is this an implicit multiplication?