// Generated by CoffeeScript 2.0.0-beta7
void function () {
  var construct, Expression, Node, OPERATORS, randomElement, UnaryExpression;
  Node = require('../node');
  Expression = require('../classes/Expression');
  construct = require('../combinators').construct;
  randomElement = require('../random').randomElement;
  OPERATORS = [
    '-',
    '+',
    '!',
    '~',
    'typeof',
    'void',
    'delete'
  ];
  UnaryExpression = function (super$) {
    extends$(UnaryExpression, super$);
    UnaryExpression.prototype.type = UnaryExpression.name;
    UnaryExpression.prototype.prefix = true;
    function UnaryExpression(depth, ancestors) {
      --depth;
      ancestors = [this].concat(ancestors);
      this.operator = randomElement(OPERATORS);
      this.argument = Expression(depth, ancestors);
    }
    return UnaryExpression;
  }(Node);
  module.exports = construct(UnaryExpression);
  function isOwn$(o, p) {
    return {}.hasOwnProperty.call(o, p);
  }
  function extends$(child, parent) {
    for (var key in parent)
      if (isOwn$(parent, key))
        child[key] = parent[key];
    function ctor() {
      this.constructor = child;
    }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor;
    child.__super__ = parent.prototype;
    return child;
  }
}.call(this);
