use :node;

var Node = module.require('../Node').Node;

fn NewExpression(callee, args)

extends Node {

this.type = 'NewExpression';

this.callee = callee;
this.callee.parent = this;

::Object.defineProperty(this, 'arguments', { 
  value: args, 
  enumerable: true 
});

for arg in args {
  arg.parent = this;
}

}

NewExpression.prototype.codegen = () -> {

if !super.codegen() {
  return;
}

this.callee = this.callee.codegen();

var args = this.arguments;
for arg, i in args {
  args[i] = arg.codegen();
}

return this;

};

NewExpression.prototype.hasCallExpression = () -> true;

exports.NewExpression = NewExpression;