use :node;

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

fn SplatExpression(expression)

extends Node {

this.type = 'SplatExpression';

this.expression = expression;
this.expression.parent = this;

}

SplatExpression.prototype.codegen = () -> {

if !super.codegen() {
  return;
}

this.expression = this.expression.codegen();

return {
  "type": "CallExpression",
  "callee": {
    "type": "MemberExpression",
    "computed": false,
    "object": {
      "type": "MemberExpression",
      "computed": false,
      "object": {
        "type": "ArrayExpression",
        "elements": []
      },
      "property": {
        "type": "Identifier",
        "name": "slice"
      }
    },
    "property": {
      "type": "Identifier",
      "name": "call"
    }
  },
  "arguments": [this.expression]
};

};

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

exports.SplatExpression = SplatExpression;