/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['coffee-script/grammar.js']) {
  _$jscoverage['coffee-script/grammar.js'] = [];
  _$jscoverage['coffee-script/grammar.js'][2] = 0;
  _$jscoverage['coffee-script/grammar.js'][3] = 0;
  _$jscoverage['coffee-script/grammar.js'][5] = 0;
  _$jscoverage['coffee-script/grammar.js'][7] = 0;
  _$jscoverage['coffee-script/grammar.js'][9] = 0;
  _$jscoverage['coffee-script/grammar.js'][10] = 0;
  _$jscoverage['coffee-script/grammar.js'][11] = 0;
  _$jscoverage['coffee-script/grammar.js'][12] = 0;
  _$jscoverage['coffee-script/grammar.js'][13] = 0;
  _$jscoverage['coffee-script/grammar.js'][15] = 0;
  _$jscoverage['coffee-script/grammar.js'][16] = 0;
  _$jscoverage['coffee-script/grammar.js'][17] = 0;
  _$jscoverage['coffee-script/grammar.js'][18] = 0;
  _$jscoverage['coffee-script/grammar.js'][21] = 0;
  _$jscoverage['coffee-script/grammar.js'][24] = 0;
  _$jscoverage['coffee-script/grammar.js'][29] = 0;
  _$jscoverage['coffee-script/grammar.js'][31] = 0;
  _$jscoverage['coffee-script/grammar.js'][37] = 0;
  _$jscoverage['coffee-script/grammar.js'][43] = 0;
  _$jscoverage['coffee-script/grammar.js'][45] = 0;
  _$jscoverage['coffee-script/grammar.js'][50] = 0;
  _$jscoverage['coffee-script/grammar.js'][55] = 0;
  _$jscoverage['coffee-script/grammar.js'][57] = 0;
  _$jscoverage['coffee-script/grammar.js'][62] = 0;
  _$jscoverage['coffee-script/grammar.js'][64] = 0;
  _$jscoverage['coffee-script/grammar.js'][66] = 0;
  _$jscoverage['coffee-script/grammar.js'][68] = 0;
  _$jscoverage['coffee-script/grammar.js'][70] = 0;
  _$jscoverage['coffee-script/grammar.js'][72] = 0;
  _$jscoverage['coffee-script/grammar.js'][77] = 0;
  _$jscoverage['coffee-script/grammar.js'][79] = 0;
  _$jscoverage['coffee-script/grammar.js'][81] = 0;
  _$jscoverage['coffee-script/grammar.js'][86] = 0;
  _$jscoverage['coffee-script/grammar.js'][88] = 0;
  _$jscoverage['coffee-script/grammar.js'][91] = 0;
  _$jscoverage['coffee-script/grammar.js'][97] = 0;
  _$jscoverage['coffee-script/grammar.js'][99] = 0;
  _$jscoverage['coffee-script/grammar.js'][104] = 0;
  _$jscoverage['coffee-script/grammar.js'][109] = 0;
  _$jscoverage['coffee-script/grammar.js'][111] = 0;
  _$jscoverage['coffee-script/grammar.js'][116] = 0;
  _$jscoverage['coffee-script/grammar.js'][118] = 0;
  _$jscoverage['coffee-script/grammar.js'][124] = 0;
  _$jscoverage['coffee-script/grammar.js'][126] = 0;
  _$jscoverage['coffee-script/grammar.js'][128] = 0;
  _$jscoverage['coffee-script/grammar.js'][130] = 0;
  _$jscoverage['coffee-script/grammar.js'][132] = 0;
  _$jscoverage['coffee-script/grammar.js'][137] = 0;
  _$jscoverage['coffee-script/grammar.js'][139] = 0;
  _$jscoverage['coffee-script/grammar.js'][141] = 0;
  _$jscoverage['coffee-script/grammar.js'][147] = 0;
  _$jscoverage['coffee-script/grammar.js'][152] = 0;
  _$jscoverage['coffee-script/grammar.js'][154] = 0;
  _$jscoverage['coffee-script/grammar.js'][156] = 0;
  _$jscoverage['coffee-script/grammar.js'][161] = 0;
  _$jscoverage['coffee-script/grammar.js'][163] = 0;
  _$jscoverage['coffee-script/grammar.js'][168] = 0;
  _$jscoverage['coffee-script/grammar.js'][170] = 0;
  _$jscoverage['coffee-script/grammar.js'][172] = 0;
  _$jscoverage['coffee-script/grammar.js'][177] = 0;
  _$jscoverage['coffee-script/grammar.js'][179] = 0;
  _$jscoverage['coffee-script/grammar.js'][181] = 0;
  _$jscoverage['coffee-script/grammar.js'][183] = 0;
  _$jscoverage['coffee-script/grammar.js'][188] = 0;
  _$jscoverage['coffee-script/grammar.js'][190] = 0;
  _$jscoverage['coffee-script/grammar.js'][197] = 0;
  _$jscoverage['coffee-script/grammar.js'][199] = 0;
  _$jscoverage['coffee-script/grammar.js'][204] = 0;
  _$jscoverage['coffee-script/grammar.js'][209] = 0;
  _$jscoverage['coffee-script/grammar.js'][211] = 0;
  _$jscoverage['coffee-script/grammar.js'][213] = 0;
  _$jscoverage['coffee-script/grammar.js'][215] = 0;
  _$jscoverage['coffee-script/grammar.js'][217] = 0;
  _$jscoverage['coffee-script/grammar.js'][222] = 0;
  _$jscoverage['coffee-script/grammar.js'][224] = 0;
  _$jscoverage['coffee-script/grammar.js'][226] = 0;
  _$jscoverage['coffee-script/grammar.js'][228] = 0;
  _$jscoverage['coffee-script/grammar.js'][230] = 0;
  _$jscoverage['coffee-script/grammar.js'][232] = 0;
  _$jscoverage['coffee-script/grammar.js'][234] = 0;
  _$jscoverage['coffee-script/grammar.js'][236] = 0;
  _$jscoverage['coffee-script/grammar.js'][241] = 0;
  _$jscoverage['coffee-script/grammar.js'][243] = 0;
  _$jscoverage['coffee-script/grammar.js'][245] = 0;
  _$jscoverage['coffee-script/grammar.js'][247] = 0;
  _$jscoverage['coffee-script/grammar.js'][252] = 0;
  _$jscoverage['coffee-script/grammar.js'][254] = 0;
  _$jscoverage['coffee-script/grammar.js'][259] = 0;
  _$jscoverage['coffee-script/grammar.js'][261] = 0;
  _$jscoverage['coffee-script/grammar.js'][266] = 0;
  _$jscoverage['coffee-script/grammar.js'][268] = 0;
  _$jscoverage['coffee-script/grammar.js'][273] = 0;
  _$jscoverage['coffee-script/grammar.js'][278] = 0;
  _$jscoverage['coffee-script/grammar.js'][280] = 0;
  _$jscoverage['coffee-script/grammar.js'][285] = 0;
  _$jscoverage['coffee-script/grammar.js'][287] = 0;
  _$jscoverage['coffee-script/grammar.js'][292] = 0;
  _$jscoverage['coffee-script/grammar.js'][297] = 0;
  _$jscoverage['coffee-script/grammar.js'][299] = 0;
  _$jscoverage['coffee-script/grammar.js'][301] = 0;
  _$jscoverage['coffee-script/grammar.js'][303] = 0;
  _$jscoverage['coffee-script/grammar.js'][308] = 0;
  _$jscoverage['coffee-script/grammar.js'][310] = 0;
  _$jscoverage['coffee-script/grammar.js'][312] = 0;
  _$jscoverage['coffee-script/grammar.js'][314] = 0;
  _$jscoverage['coffee-script/grammar.js'][316] = 0;
  _$jscoverage['coffee-script/grammar.js'][322] = 0;
  _$jscoverage['coffee-script/grammar.js'][327] = 0;
  _$jscoverage['coffee-script/grammar.js'][329] = 0;
  _$jscoverage['coffee-script/grammar.js'][331] = 0;
  _$jscoverage['coffee-script/grammar.js'][333] = 0;
  _$jscoverage['coffee-script/grammar.js'][338] = 0;
  _$jscoverage['coffee-script/grammar.js'][343] = 0;
  _$jscoverage['coffee-script/grammar.js'][348] = 0;
  _$jscoverage['coffee-script/grammar.js'][350] = 0;
  _$jscoverage['coffee-script/grammar.js'][355] = 0;
  _$jscoverage['coffee-script/grammar.js'][357] = 0;
  _$jscoverage['coffee-script/grammar.js'][361] = 0;
  _$jscoverage['coffee-script/grammar.js'][365] = 0;
  _$jscoverage['coffee-script/grammar.js'][373] = 0;
  _$jscoverage['coffee-script/grammar.js'][375] = 0;
  _$jscoverage['coffee-script/grammar.js'][377] = 0;
  _$jscoverage['coffee-script/grammar.js'][379] = 0;
  _$jscoverage['coffee-script/grammar.js'][384] = 0;
  _$jscoverage['coffee-script/grammar.js'][386] = 0;
  _$jscoverage['coffee-script/grammar.js'][391] = 0;
  _$jscoverage['coffee-script/grammar.js'][393] = 0;
  _$jscoverage['coffee-script/grammar.js'][395] = 0;
  _$jscoverage['coffee-script/grammar.js'][400] = 0;
  _$jscoverage['coffee-script/grammar.js'][404] = 0;
  _$jscoverage['coffee-script/grammar.js'][405] = 0;
  _$jscoverage['coffee-script/grammar.js'][406] = 0;
  _$jscoverage['coffee-script/grammar.js'][407] = 0;
  _$jscoverage['coffee-script/grammar.js'][412] = 0;
  _$jscoverage['coffee-script/grammar.js'][414] = 0;
  _$jscoverage['coffee-script/grammar.js'][415] = 0;
  _$jscoverage['coffee-script/grammar.js'][420] = 0;
  _$jscoverage['coffee-script/grammar.js'][422] = 0;
  _$jscoverage['coffee-script/grammar.js'][427] = 0;
  _$jscoverage['coffee-script/grammar.js'][429] = 0;
  _$jscoverage['coffee-script/grammar.js'][434] = 0;
  _$jscoverage['coffee-script/grammar.js'][438] = 0;
  _$jscoverage['coffee-script/grammar.js'][443] = 0;
  _$jscoverage['coffee-script/grammar.js'][448] = 0;
  _$jscoverage['coffee-script/grammar.js'][454] = 0;
  _$jscoverage['coffee-script/grammar.js'][459] = 0;
  _$jscoverage['coffee-script/grammar.js'][465] = 0;
  _$jscoverage['coffee-script/grammar.js'][474] = 0;
  _$jscoverage['coffee-script/grammar.js'][476] = 0;
  _$jscoverage['coffee-script/grammar.js'][478] = 0;
  _$jscoverage['coffee-script/grammar.js'][480] = 0;
  _$jscoverage['coffee-script/grammar.js'][485] = 0;
  _$jscoverage['coffee-script/grammar.js'][490] = 0;
  _$jscoverage['coffee-script/grammar.js'][492] = 0;
  _$jscoverage['coffee-script/grammar.js'][497] = 0;
  _$jscoverage['coffee-script/grammar.js'][501] = 0;
  _$jscoverage['coffee-script/grammar.js'][508] = 0;
  _$jscoverage['coffee-script/grammar.js'][510] = 0;
  _$jscoverage['coffee-script/grammar.js'][515] = 0;
  _$jscoverage['coffee-script/grammar.js'][523] = 0;
  _$jscoverage['coffee-script/grammar.js'][525] = 0;
  _$jscoverage['coffee-script/grammar.js'][529] = 0;
  _$jscoverage['coffee-script/grammar.js'][533] = 0;
  _$jscoverage['coffee-script/grammar.js'][535] = 0;
  _$jscoverage['coffee-script/grammar.js'][537] = 0;
  _$jscoverage['coffee-script/grammar.js'][539] = 0;
  _$jscoverage['coffee-script/grammar.js'][541] = 0;
  _$jscoverage['coffee-script/grammar.js'][543] = 0;
  _$jscoverage['coffee-script/grammar.js'][545] = 0;
  _$jscoverage['coffee-script/grammar.js'][547] = 0;
  _$jscoverage['coffee-script/grammar.js'][549] = 0;
  _$jscoverage['coffee-script/grammar.js'][551] = 0;
  _$jscoverage['coffee-script/grammar.js'][553] = 0;
  _$jscoverage['coffee-script/grammar.js'][555] = 0;
  _$jscoverage['coffee-script/grammar.js'][556] = 0;
  _$jscoverage['coffee-script/grammar.js'][558] = 0;
  _$jscoverage['coffee-script/grammar.js'][562] = 0;
  _$jscoverage['coffee-script/grammar.js'][565] = 0;
  _$jscoverage['coffee-script/grammar.js'][567] = 0;
  _$jscoverage['coffee-script/grammar.js'][572] = 0;
  _$jscoverage['coffee-script/grammar.js'][574] = 0;
  _$jscoverage['coffee-script/grammar.js'][576] = 0;
  _$jscoverage['coffee-script/grammar.js'][577] = 0;
  _$jscoverage['coffee-script/grammar.js'][578] = 0;
  _$jscoverage['coffee-script/grammar.js'][579] = 0;
  _$jscoverage['coffee-script/grammar.js'][580] = 0;
  _$jscoverage['coffee-script/grammar.js'][581] = 0;
  _$jscoverage['coffee-script/grammar.js'][582] = 0;
  _$jscoverage['coffee-script/grammar.js'][583] = 0;
  _$jscoverage['coffee-script/grammar.js'][584] = 0;
  _$jscoverage['coffee-script/grammar.js'][585] = 0;
  _$jscoverage['coffee-script/grammar.js'][586] = 0;
  _$jscoverage['coffee-script/grammar.js'][587] = 0;
  _$jscoverage['coffee-script/grammar.js'][590] = 0;
  _$jscoverage['coffee-script/grammar.js'][591] = 0;
  _$jscoverage['coffee-script/grammar.js'][593] = 0;
  _$jscoverage['coffee-script/grammar.js'][595] = 0;
  _$jscoverage['coffee-script/grammar.js'][599] = 0;
}
_$jscoverage['coffee-script/grammar.js'][2]++;
(function () {
  _$jscoverage['coffee-script/grammar.js'][3]++;
  var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
  _$jscoverage['coffee-script/grammar.js'][5]++;
  Parser = require("jison").Parser;
  _$jscoverage['coffee-script/grammar.js'][7]++;
  unwrap = /^function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
  _$jscoverage['coffee-script/grammar.js'][9]++;
  o = (function (patternString, action, options) {
  _$jscoverage['coffee-script/grammar.js'][10]++;
  var match;
  _$jscoverage['coffee-script/grammar.js'][11]++;
  patternString = patternString.replace(/\s{2,}/g, " ");
  _$jscoverage['coffee-script/grammar.js'][12]++;
  if (! action) {
    _$jscoverage['coffee-script/grammar.js'][13]++;
    return [patternString, "$$ = $1;", options];
  }
  _$jscoverage['coffee-script/grammar.js'][15]++;
  action = (match = unwrap.exec(action))? match[1]: "(" + action + "())";
  _$jscoverage['coffee-script/grammar.js'][16]++;
  action = action.replace(/\bnew /g, "$&yy.");
  _$jscoverage['coffee-script/grammar.js'][17]++;
  action = action.replace(/\b(?:Block\.wrap|extend)\b/g, "yy.$&");
  _$jscoverage['coffee-script/grammar.js'][18]++;
  return [patternString, "$$ = " + action + ";", options];
});
  _$jscoverage['coffee-script/grammar.js'][21]++;
  grammar = {Root: [o("", (function () {
  _$jscoverage['coffee-script/grammar.js'][24]++;
  return new Block();
})), o("Body"), o("Block TERMINATOR")], Body: [o("Line", (function () {
  _$jscoverage['coffee-script/grammar.js'][29]++;
  return Block.wrap([$1]);
})), o("Body TERMINATOR Line", (function () {
  _$jscoverage['coffee-script/grammar.js'][31]++;
  return $1.push($3);
})), o("Body TERMINATOR")], Line: [o("Expression"), o("Statement")], Statement: [o("Return"), o("Comment"), o("STATEMENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][37]++;
  return new Literal($1);
}))], Expression: [o("Value"), o("Invocation"), o("Code"), o("Operation"), o("Assign"), o("If"), o("Try"), o("While"), o("For"), o("Switch"), o("Class"), o("Throw")], Block: [o("INDENT OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][43]++;
  return new Block();
})), o("INDENT Body OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][45]++;
  return $2;
}))], Identifier: [o("IDENTIFIER", (function () {
  _$jscoverage['coffee-script/grammar.js'][50]++;
  return new Literal($1);
}))], AlphaNumeric: [o("NUMBER", (function () {
  _$jscoverage['coffee-script/grammar.js'][55]++;
  return new Literal($1);
})), o("STRING", (function () {
  _$jscoverage['coffee-script/grammar.js'][57]++;
  return new Literal($1);
}))], Literal: [o("AlphaNumeric"), o("JS", (function () {
  _$jscoverage['coffee-script/grammar.js'][62]++;
  return new Literal($1);
})), o("REGEX", (function () {
  _$jscoverage['coffee-script/grammar.js'][64]++;
  return new Literal($1);
})), o("DEBUGGER", (function () {
  _$jscoverage['coffee-script/grammar.js'][66]++;
  return new Literal($1);
})), o("UNDEFINED", (function () {
  _$jscoverage['coffee-script/grammar.js'][68]++;
  return new Undefined();
})), o("NULL", (function () {
  _$jscoverage['coffee-script/grammar.js'][70]++;
  return new Null();
})), o("BOOL", (function () {
  _$jscoverage['coffee-script/grammar.js'][72]++;
  return new Bool($1);
}))], Assign: [o("Assignable = Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][77]++;
  return new Assign($1, $3);
})), o("Assignable = TERMINATOR Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][79]++;
  return new Assign($1, $4);
})), o("Assignable = INDENT Expression OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][81]++;
  return new Assign($1, $4);
}))], AssignObj: [o("ObjAssignable", (function () {
  _$jscoverage['coffee-script/grammar.js'][86]++;
  return new Value($1);
})), o("ObjAssignable : Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][88]++;
  return new Assign(new Value($1), $3, "object");
})), o("ObjAssignable :       INDENT Expression OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][91]++;
  return new Assign(new Value($1), $4, "object");
})), o("Comment")], ObjAssignable: [o("Identifier"), o("AlphaNumeric"), o("ThisProperty")], Return: [o("RETURN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][97]++;
  return new Return($2);
})), o("RETURN", (function () {
  _$jscoverage['coffee-script/grammar.js'][99]++;
  return new Return();
}))], Comment: [o("HERECOMMENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][104]++;
  return new Comment($1);
}))], Code: [o("PARAM_START ParamList PARAM_END FuncGlyph Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][109]++;
  return new Code($2, $5, $4);
})), o("FuncGlyph Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][111]++;
  return new Code([], $2, $1);
}))], FuncGlyph: [o("->", (function () {
  _$jscoverage['coffee-script/grammar.js'][116]++;
  return "func";
})), o("=>", (function () {
  _$jscoverage['coffee-script/grammar.js'][118]++;
  return "boundfunc";
}))], OptComma: [o(""), o(",")], ParamList: [o("", (function () {
  _$jscoverage['coffee-script/grammar.js'][124]++;
  return [];
})), o("Param", (function () {
  _$jscoverage['coffee-script/grammar.js'][126]++;
  return [$1];
})), o("ParamList , Param", (function () {
  _$jscoverage['coffee-script/grammar.js'][128]++;
  return $1.concat($3);
})), o("ParamList OptComma TERMINATOR Param", (function () {
  _$jscoverage['coffee-script/grammar.js'][130]++;
  return $1.concat($4);
})), o("ParamList OptComma INDENT ParamList OptComma OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][132]++;
  return $1.concat($4);
}))], Param: [o("ParamVar", (function () {
  _$jscoverage['coffee-script/grammar.js'][137]++;
  return new Param($1);
})), o("ParamVar ...", (function () {
  _$jscoverage['coffee-script/grammar.js'][139]++;
  return new Param($1, null, true);
})), o("ParamVar = Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][141]++;
  return new Param($1, $3);
}))], ParamVar: [o("Identifier"), o("ThisProperty"), o("Array"), o("Object")], Splat: [o("Expression ...", (function () {
  _$jscoverage['coffee-script/grammar.js'][147]++;
  return new Splat($1);
}))], SimpleAssignable: [o("Identifier", (function () {
  _$jscoverage['coffee-script/grammar.js'][152]++;
  return new Value($1);
})), o("Value Accessor", (function () {
  _$jscoverage['coffee-script/grammar.js'][154]++;
  return $1.add($2);
})), o("Invocation Accessor", (function () {
  _$jscoverage['coffee-script/grammar.js'][156]++;
  return new Value($1, [].concat($2));
})), o("ThisProperty")], Assignable: [o("SimpleAssignable"), o("Array", (function () {
  _$jscoverage['coffee-script/grammar.js'][161]++;
  return new Value($1);
})), o("Object", (function () {
  _$jscoverage['coffee-script/grammar.js'][163]++;
  return new Value($1);
}))], Value: [o("Assignable"), o("Literal", (function () {
  _$jscoverage['coffee-script/grammar.js'][168]++;
  return new Value($1);
})), o("Parenthetical", (function () {
  _$jscoverage['coffee-script/grammar.js'][170]++;
  return new Value($1);
})), o("Range", (function () {
  _$jscoverage['coffee-script/grammar.js'][172]++;
  return new Value($1);
})), o("This")], Accessor: [o(".  Identifier", (function () {
  _$jscoverage['coffee-script/grammar.js'][177]++;
  return new Access($2);
})), o("?. Identifier", (function () {
  _$jscoverage['coffee-script/grammar.js'][179]++;
  return new Access($2, "soak");
})), o(":: Identifier", (function () {
  _$jscoverage['coffee-script/grammar.js'][181]++;
  return [new Access(new Literal("prototype")), new Access($2)];
})), o("::", (function () {
  _$jscoverage['coffee-script/grammar.js'][183]++;
  return new Access(new Literal("prototype"));
})), o("Index")], Index: [o("INDEX_START IndexValue INDEX_END", (function () {
  _$jscoverage['coffee-script/grammar.js'][188]++;
  return $2;
})), o("INDEX_SOAK  Index", (function () {
  _$jscoverage['coffee-script/grammar.js'][190]++;
  return extend($2, {soak: true});
}))], IndexValue: [o("Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][197]++;
  return new Index($1);
})), o("Slice", (function () {
  _$jscoverage['coffee-script/grammar.js'][199]++;
  return new Slice($1);
}))], Object: [o("{ AssignList OptComma }", (function () {
  _$jscoverage['coffee-script/grammar.js'][204]++;
  return new Obj($2, $1.generated);
}))], AssignList: [o("", (function () {
  _$jscoverage['coffee-script/grammar.js'][209]++;
  return [];
})), o("AssignObj", (function () {
  _$jscoverage['coffee-script/grammar.js'][211]++;
  return [$1];
})), o("AssignList , AssignObj", (function () {
  _$jscoverage['coffee-script/grammar.js'][213]++;
  return $1.concat($3);
})), o("AssignList OptComma TERMINATOR AssignObj", (function () {
  _$jscoverage['coffee-script/grammar.js'][215]++;
  return $1.concat($4);
})), o("AssignList OptComma INDENT AssignList OptComma OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][217]++;
  return $1.concat($4);
}))], Class: [o("CLASS", (function () {
  _$jscoverage['coffee-script/grammar.js'][222]++;
  return new Class();
})), o("CLASS Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][224]++;
  return new Class(null, null, $2);
})), o("CLASS EXTENDS Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][226]++;
  return new Class(null, $3);
})), o("CLASS EXTENDS Expression Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][228]++;
  return new Class(null, $3, $4);
})), o("CLASS SimpleAssignable", (function () {
  _$jscoverage['coffee-script/grammar.js'][230]++;
  return new Class($2);
})), o("CLASS SimpleAssignable Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][232]++;
  return new Class($2, null, $3);
})), o("CLASS SimpleAssignable EXTENDS Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][234]++;
  return new Class($2, $4);
})), o("CLASS SimpleAssignable EXTENDS Expression Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][236]++;
  return new Class($2, $4, $5);
}))], Invocation: [o("Value OptFuncExist Arguments", (function () {
  _$jscoverage['coffee-script/grammar.js'][241]++;
  return new Call($1, $3, $2);
})), o("Invocation OptFuncExist Arguments", (function () {
  _$jscoverage['coffee-script/grammar.js'][243]++;
  return new Call($1, $3, $2);
})), o("SUPER", (function () {
  _$jscoverage['coffee-script/grammar.js'][245]++;
  return new Call("super", [new Splat(new Literal("arguments"))]);
})), o("SUPER Arguments", (function () {
  _$jscoverage['coffee-script/grammar.js'][247]++;
  return new Call("super", $2);
}))], OptFuncExist: [o("", (function () {
  _$jscoverage['coffee-script/grammar.js'][252]++;
  return false;
})), o("FUNC_EXIST", (function () {
  _$jscoverage['coffee-script/grammar.js'][254]++;
  return true;
}))], Arguments: [o("CALL_START CALL_END", (function () {
  _$jscoverage['coffee-script/grammar.js'][259]++;
  return [];
})), o("CALL_START ArgList OptComma CALL_END", (function () {
  _$jscoverage['coffee-script/grammar.js'][261]++;
  return $2;
}))], This: [o("THIS", (function () {
  _$jscoverage['coffee-script/grammar.js'][266]++;
  return new Value(new Literal("this"));
})), o("@", (function () {
  _$jscoverage['coffee-script/grammar.js'][268]++;
  return new Value(new Literal("this"));
}))], ThisProperty: [o("@ Identifier", (function () {
  _$jscoverage['coffee-script/grammar.js'][273]++;
  return new Value(new Literal("this"), [new Access($2)], "this");
}))], Array: [o("[ ]", (function () {
  _$jscoverage['coffee-script/grammar.js'][278]++;
  return new Arr([]);
})), o("[ ArgList OptComma ]", (function () {
  _$jscoverage['coffee-script/grammar.js'][280]++;
  return new Arr($2);
}))], RangeDots: [o("..", (function () {
  _$jscoverage['coffee-script/grammar.js'][285]++;
  return "inclusive";
})), o("...", (function () {
  _$jscoverage['coffee-script/grammar.js'][287]++;
  return "exclusive";
}))], Range: [o("[ Expression RangeDots Expression ]", (function () {
  _$jscoverage['coffee-script/grammar.js'][292]++;
  return new Range($2, $4, $3);
}))], Slice: [o("Expression RangeDots Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][297]++;
  return new Range($1, $3, $2);
})), o("Expression RangeDots", (function () {
  _$jscoverage['coffee-script/grammar.js'][299]++;
  return new Range($1, null, $2);
})), o("RangeDots Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][301]++;
  return new Range(null, $2, $1);
})), o("RangeDots", (function () {
  _$jscoverage['coffee-script/grammar.js'][303]++;
  return new Range(null, null, $1);
}))], ArgList: [o("Arg", (function () {
  _$jscoverage['coffee-script/grammar.js'][308]++;
  return [$1];
})), o("ArgList , Arg", (function () {
  _$jscoverage['coffee-script/grammar.js'][310]++;
  return $1.concat($3);
})), o("ArgList OptComma TERMINATOR Arg", (function () {
  _$jscoverage['coffee-script/grammar.js'][312]++;
  return $1.concat($4);
})), o("INDENT ArgList OptComma OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][314]++;
  return $2;
})), o("ArgList OptComma INDENT ArgList OptComma OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][316]++;
  return $1.concat($4);
}))], Arg: [o("Expression"), o("Splat")], SimpleArgs: [o("Expression"), o("SimpleArgs , Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][322]++;
  return [].concat($1, $3);
}))], Try: [o("TRY Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][327]++;
  return new Try($2);
})), o("TRY Block Catch", (function () {
  _$jscoverage['coffee-script/grammar.js'][329]++;
  return new Try($2, $3[0], $3[1]);
})), o("TRY Block FINALLY Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][331]++;
  return new Try($2, null, null, $4);
})), o("TRY Block Catch FINALLY Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][333]++;
  return new Try($2, $3[0], $3[1], $5);
}))], Catch: [o("CATCH Identifier Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][338]++;
  return [$2, $3];
}))], Throw: [o("THROW Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][343]++;
  return new Throw($2);
}))], Parenthetical: [o("( Body )", (function () {
  _$jscoverage['coffee-script/grammar.js'][348]++;
  return new Parens($2);
})), o("( INDENT Body OUTDENT )", (function () {
  _$jscoverage['coffee-script/grammar.js'][350]++;
  return new Parens($3);
}))], WhileSource: [o("WHILE Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][355]++;
  return new While($2);
})), o("WHILE Expression WHEN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][357]++;
  return new While($2, {guard: $4});
})), o("UNTIL Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][361]++;
  return new While($2, {invert: true});
})), o("UNTIL Expression WHEN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][365]++;
  return new While($2, {invert: true, guard: $4});
}))], While: [o("WhileSource Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][373]++;
  return $1.addBody($2);
})), o("Statement  WhileSource", (function () {
  _$jscoverage['coffee-script/grammar.js'][375]++;
  return $2.addBody(Block.wrap([$1]));
})), o("Expression WhileSource", (function () {
  _$jscoverage['coffee-script/grammar.js'][377]++;
  return $2.addBody(Block.wrap([$1]));
})), o("Loop", (function () {
  _$jscoverage['coffee-script/grammar.js'][379]++;
  return $1;
}))], Loop: [o("LOOP Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][384]++;
  return new While(new Literal("true")).addBody($2);
})), o("LOOP Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][386]++;
  return new While(new Literal("true")).addBody(Block.wrap([$2]));
}))], For: [o("Statement  ForBody", (function () {
  _$jscoverage['coffee-script/grammar.js'][391]++;
  return new For($1, $2);
})), o("Expression ForBody", (function () {
  _$jscoverage['coffee-script/grammar.js'][393]++;
  return new For($1, $2);
})), o("ForBody    Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][395]++;
  return new For($2, $1);
}))], ForBody: [o("FOR Range", (function () {
  _$jscoverage['coffee-script/grammar.js'][400]++;
  return ({source: new Value($2)});
})), o("ForStart ForSource", (function () {
  _$jscoverage['coffee-script/grammar.js'][404]++;
  $2.own = $1.own;
  _$jscoverage['coffee-script/grammar.js'][405]++;
  $2.name = $1[0];
  _$jscoverage['coffee-script/grammar.js'][406]++;
  $2.index = $1[1];
  _$jscoverage['coffee-script/grammar.js'][407]++;
  return $2;
}))], ForStart: [o("FOR ForVariables", (function () {
  _$jscoverage['coffee-script/grammar.js'][412]++;
  return $2;
})), o("FOR OWN ForVariables", (function () {
  _$jscoverage['coffee-script/grammar.js'][414]++;
  $3.own = true;
  _$jscoverage['coffee-script/grammar.js'][415]++;
  return $3;
}))], ForValue: [o("Identifier"), o("ThisProperty"), o("Array", (function () {
  _$jscoverage['coffee-script/grammar.js'][420]++;
  return new Value($1);
})), o("Object", (function () {
  _$jscoverage['coffee-script/grammar.js'][422]++;
  return new Value($1);
}))], ForVariables: [o("ForValue", (function () {
  _$jscoverage['coffee-script/grammar.js'][427]++;
  return [$1];
})), o("ForValue , ForValue", (function () {
  _$jscoverage['coffee-script/grammar.js'][429]++;
  return [$1, $3];
}))], ForSource: [o("FORIN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][434]++;
  return ({source: $2});
})), o("FOROF Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][438]++;
  return ({source: $2, object: true});
})), o("FORIN Expression WHEN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][443]++;
  return ({source: $2, guard: $4});
})), o("FOROF Expression WHEN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][448]++;
  return ({source: $2, guard: $4, object: true});
})), o("FORIN Expression BY Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][454]++;
  return ({source: $2, step: $4});
})), o("FORIN Expression WHEN Expression BY Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][459]++;
  return ({source: $2, guard: $4, step: $6});
})), o("FORIN Expression BY Expression WHEN Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][465]++;
  return ({source: $2, step: $4, guard: $6});
}))], Switch: [o("SWITCH Expression INDENT Whens OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][474]++;
  return new Switch($2, $4);
})), o("SWITCH Expression INDENT Whens ELSE Block OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][476]++;
  return new Switch($2, $4, $6);
})), o("SWITCH INDENT Whens OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][478]++;
  return new Switch(null, $3);
})), o("SWITCH INDENT Whens ELSE Block OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][480]++;
  return new Switch(null, $3, $5);
}))], Whens: [o("When"), o("Whens When", (function () {
  _$jscoverage['coffee-script/grammar.js'][485]++;
  return $1.concat($2);
}))], When: [o("LEADING_WHEN SimpleArgs Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][490]++;
  return [[$2, $3]];
})), o("LEADING_WHEN SimpleArgs Block TERMINATOR", (function () {
  _$jscoverage['coffee-script/grammar.js'][492]++;
  return [[$2, $3]];
}))], IfBlock: [o("IF Expression Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][497]++;
  return new If($2, $3, {type: $1});
})), o("IfBlock ELSE IF Expression Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][501]++;
  return $1.addElse(new If($4, $5, {type: $3}));
}))], If: [o("IfBlock"), o("IfBlock ELSE Block", (function () {
  _$jscoverage['coffee-script/grammar.js'][508]++;
  return $1.addElse($3);
})), o("Statement  POST_IF Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][510]++;
  return new If($3, Block.wrap([$1]), {type: $2, statement: true});
})), o("Expression POST_IF Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][515]++;
  return new If($3, Block.wrap([$1]), {type: $2, statement: true});
}))], Operation: [o("UNARY Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][523]++;
  return new Op($1, $2);
})), o("-     Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][525]++;
  return new Op("-", $2);
}), {prec: "UNARY"}), o("+     Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][529]++;
  return new Op("+", $2);
}), {prec: "UNARY"}), o("-- SimpleAssignable", (function () {
  _$jscoverage['coffee-script/grammar.js'][533]++;
  return new Op("--", $2);
})), o("++ SimpleAssignable", (function () {
  _$jscoverage['coffee-script/grammar.js'][535]++;
  return new Op("++", $2);
})), o("SimpleAssignable --", (function () {
  _$jscoverage['coffee-script/grammar.js'][537]++;
  return new Op("--", $1, null, true);
})), o("SimpleAssignable ++", (function () {
  _$jscoverage['coffee-script/grammar.js'][539]++;
  return new Op("++", $1, null, true);
})), o("Expression ?", (function () {
  _$jscoverage['coffee-script/grammar.js'][541]++;
  return new Existence($1);
})), o("Expression +  Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][543]++;
  return new Op("+", $1, $3);
})), o("Expression -  Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][545]++;
  return new Op("-", $1, $3);
})), o("Expression MATH     Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][547]++;
  return new Op($2, $1, $3);
})), o("Expression SHIFT    Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][549]++;
  return new Op($2, $1, $3);
})), o("Expression COMPARE  Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][551]++;
  return new Op($2, $1, $3);
})), o("Expression LOGIC    Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][553]++;
  return new Op($2, $1, $3);
})), o("Expression RELATION Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][555]++;
  if ($2.charAt(0) === "!") {
    _$jscoverage['coffee-script/grammar.js'][556]++;
    return new Op($2.slice(1), $1, $3).invert();
  }
  else {
    _$jscoverage['coffee-script/grammar.js'][558]++;
    return new Op($2, $1, $3);
  }
})), o("SimpleAssignable COMPOUND_ASSIGN       Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][562]++;
  return new Assign($1, $3, $2);
})), o("SimpleAssignable COMPOUND_ASSIGN       INDENT Expression OUTDENT", (function () {
  _$jscoverage['coffee-script/grammar.js'][565]++;
  return new Assign($1, $4, $2);
})), o("SimpleAssignable EXTENDS Expression", (function () {
  _$jscoverage['coffee-script/grammar.js'][567]++;
  return new Extends($1, $3);
}))]};
  _$jscoverage['coffee-script/grammar.js'][572]++;
  operators = [["left", ".", "?.", "::"], ["left", "CALL_START", "CALL_END"], ["nonassoc", "++", "--"], ["left", "?"], ["right", "UNARY"], ["left", "MATH"], ["left", "+", "-"], ["left", "SHIFT"], ["left", "RELATION"], ["left", "COMPARE"], ["left", "LOGIC"], ["nonassoc", "INDENT", "OUTDENT"], ["right", "=", ":", "COMPOUND_ASSIGN", "RETURN", "THROW", "EXTENDS"], ["right", "FORIN", "FOROF", "BY", "WHEN"], ["right", "IF", "ELSE", "FOR", "WHILE", "UNTIL", "LOOP", "SUPER", "CLASS"], ["right", "POST_IF"]];
  _$jscoverage['coffee-script/grammar.js'][574]++;
  tokens = [];
  _$jscoverage['coffee-script/grammar.js'][576]++;
  for (name in grammar) {
    _$jscoverage['coffee-script/grammar.js'][577]++;
    alternatives = grammar[name];
    _$jscoverage['coffee-script/grammar.js'][578]++;
    grammar[name] = (function () {
  _$jscoverage['coffee-script/grammar.js'][579]++;
  var _i, _j, _len, _len1, _ref, _results;
  _$jscoverage['coffee-script/grammar.js'][580]++;
  _results = [];
  _$jscoverage['coffee-script/grammar.js'][581]++;
  for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
    _$jscoverage['coffee-script/grammar.js'][582]++;
    alt = alternatives[_i];
    _$jscoverage['coffee-script/grammar.js'][583]++;
    _ref = alt[0].split(" ");
    _$jscoverage['coffee-script/grammar.js'][584]++;
    for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
      _$jscoverage['coffee-script/grammar.js'][585]++;
      token = _ref[_j];
      _$jscoverage['coffee-script/grammar.js'][586]++;
      if (! grammar[token]) {
        _$jscoverage['coffee-script/grammar.js'][587]++;
        tokens.push(token);
      }
}
    _$jscoverage['coffee-script/grammar.js'][590]++;
    if (name === "Root") {
      _$jscoverage['coffee-script/grammar.js'][591]++;
      alt[1] = "return " + alt[1];
    }
    _$jscoverage['coffee-script/grammar.js'][593]++;
    _results.push(alt);
}
  _$jscoverage['coffee-script/grammar.js'][595]++;
  return _results;
})();
}
  _$jscoverage['coffee-script/grammar.js'][599]++;
  exports.parser = new Parser({tokens: tokens.join(" "), bnf: grammar, operators: operators.reverse(), startSymbol: "Root"});
}).call(this);
_$jscoverage['coffee-script/grammar.js'].source = ["// Generated by CoffeeScript 1.4.0","(function() {","  var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;","","  Parser = require('jison').Parser;","","  unwrap = /^function\\s*\\(\\)\\s*\\{\\s*return\\s*([\\s\\S]*);\\s*\\}/;","","  o = function(patternString, action, options) {","    var match;","    patternString = patternString.replace(/\\s{2,}/g, ' ');","    if (!action) {","      return [patternString, '$$ = $1;', options];","    }","    action = (match = unwrap.exec(action)) ? match[1] : \"(\" + action + \"())\";","    action = action.replace(/\\bnew /g, '$&amp;yy.');","    action = action.replace(/\\b(?:Block\\.wrap|extend)\\b/g, 'yy.$&amp;');","    return [patternString, \"$$ = \" + action + \";\", options];","  };","","  grammar = {","    Root: [","      o('', function() {","        return new Block;","      }), o('Body'), o('Block TERMINATOR')","    ],","    Body: [","      o('Line', function() {","        return Block.wrap([$1]);","      }), o('Body TERMINATOR Line', function() {","        return $1.push($3);","      }), o('Body TERMINATOR')","    ],","    Line: [o('Expression'), o('Statement')],","    Statement: [","      o('Return'), o('Comment'), o('STATEMENT', function() {","        return new Literal($1);","      })","    ],","    Expression: [o('Value'), o('Invocation'), o('Code'), o('Operation'), o('Assign'), o('If'), o('Try'), o('While'), o('For'), o('Switch'), o('Class'), o('Throw')],","    Block: [","      o('INDENT OUTDENT', function() {","        return new Block;","      }), o('INDENT Body OUTDENT', function() {","        return $2;","      })","    ],","    Identifier: [","      o('IDENTIFIER', function() {","        return new Literal($1);","      })","    ],","    AlphaNumeric: [","      o('NUMBER', function() {","        return new Literal($1);","      }), o('STRING', function() {","        return new Literal($1);","      })","    ],","    Literal: [","      o('AlphaNumeric'), o('JS', function() {","        return new Literal($1);","      }), o('REGEX', function() {","        return new Literal($1);","      }), o('DEBUGGER', function() {","        return new Literal($1);","      }), o('UNDEFINED', function() {","        return new Undefined;","      }), o('NULL', function() {","        return new Null;","      }), o('BOOL', function() {","        return new Bool($1);","      })","    ],","    Assign: [","      o('Assignable = Expression', function() {","        return new Assign($1, $3);","      }), o('Assignable = TERMINATOR Expression', function() {","        return new Assign($1, $4);","      }), o('Assignable = INDENT Expression OUTDENT', function() {","        return new Assign($1, $4);","      })","    ],","    AssignObj: [","      o('ObjAssignable', function() {","        return new Value($1);","      }), o('ObjAssignable : Expression', function() {","        return new Assign(new Value($1), $3, 'object');","      }), o('ObjAssignable :\\","       INDENT Expression OUTDENT', function() {","        return new Assign(new Value($1), $4, 'object');","      }), o('Comment')","    ],","    ObjAssignable: [o('Identifier'), o('AlphaNumeric'), o('ThisProperty')],","    Return: [","      o('RETURN Expression', function() {","        return new Return($2);","      }), o('RETURN', function() {","        return new Return;","      })","    ],","    Comment: [","      o('HERECOMMENT', function() {","        return new Comment($1);","      })","    ],","    Code: [","      o('PARAM_START ParamList PARAM_END FuncGlyph Block', function() {","        return new Code($2, $5, $4);","      }), o('FuncGlyph Block', function() {","        return new Code([], $2, $1);","      })","    ],","    FuncGlyph: [","      o('-&gt;', function() {","        return 'func';","      }), o('=&gt;', function() {","        return 'boundfunc';","      })","    ],","    OptComma: [o(''), o(',')],","    ParamList: [","      o('', function() {","        return [];","      }), o('Param', function() {","        return [$1];","      }), o('ParamList , Param', function() {","        return $1.concat($3);","      }), o('ParamList OptComma TERMINATOR Param', function() {","        return $1.concat($4);","      }), o('ParamList OptComma INDENT ParamList OptComma OUTDENT', function() {","        return $1.concat($4);","      })","    ],","    Param: [","      o('ParamVar', function() {","        return new Param($1);","      }), o('ParamVar ...', function() {","        return new Param($1, null, true);","      }), o('ParamVar = Expression', function() {","        return new Param($1, $3);","      })","    ],","    ParamVar: [o('Identifier'), o('ThisProperty'), o('Array'), o('Object')],","    Splat: [","      o('Expression ...', function() {","        return new Splat($1);","      })","    ],","    SimpleAssignable: [","      o('Identifier', function() {","        return new Value($1);","      }), o('Value Accessor', function() {","        return $1.add($2);","      }), o('Invocation Accessor', function() {","        return new Value($1, [].concat($2));","      }), o('ThisProperty')","    ],","    Assignable: [","      o('SimpleAssignable'), o('Array', function() {","        return new Value($1);","      }), o('Object', function() {","        return new Value($1);","      })","    ],","    Value: [","      o('Assignable'), o('Literal', function() {","        return new Value($1);","      }), o('Parenthetical', function() {","        return new Value($1);","      }), o('Range', function() {","        return new Value($1);","      }), o('This')","    ],","    Accessor: [","      o('.  Identifier', function() {","        return new Access($2);","      }), o('?. Identifier', function() {","        return new Access($2, 'soak');","      }), o(':: Identifier', function() {","        return [new Access(new Literal('prototype')), new Access($2)];","      }), o('::', function() {","        return new Access(new Literal('prototype'));","      }), o('Index')","    ],","    Index: [","      o('INDEX_START IndexValue INDEX_END', function() {","        return $2;","      }), o('INDEX_SOAK  Index', function() {","        return extend($2, {","          soak: true","        });","      })","    ],","    IndexValue: [","      o('Expression', function() {","        return new Index($1);","      }), o('Slice', function() {","        return new Slice($1);","      })","    ],","    Object: [","      o('{ AssignList OptComma }', function() {","        return new Obj($2, $1.generated);","      })","    ],","    AssignList: [","      o('', function() {","        return [];","      }), o('AssignObj', function() {","        return [$1];","      }), o('AssignList , AssignObj', function() {","        return $1.concat($3);","      }), o('AssignList OptComma TERMINATOR AssignObj', function() {","        return $1.concat($4);","      }), o('AssignList OptComma INDENT AssignList OptComma OUTDENT', function() {","        return $1.concat($4);","      })","    ],","    Class: [","      o('CLASS', function() {","        return new Class;","      }), o('CLASS Block', function() {","        return new Class(null, null, $2);","      }), o('CLASS EXTENDS Expression', function() {","        return new Class(null, $3);","      }), o('CLASS EXTENDS Expression Block', function() {","        return new Class(null, $3, $4);","      }), o('CLASS SimpleAssignable', function() {","        return new Class($2);","      }), o('CLASS SimpleAssignable Block', function() {","        return new Class($2, null, $3);","      }), o('CLASS SimpleAssignable EXTENDS Expression', function() {","        return new Class($2, $4);","      }), o('CLASS SimpleAssignable EXTENDS Expression Block', function() {","        return new Class($2, $4, $5);","      })","    ],","    Invocation: [","      o('Value OptFuncExist Arguments', function() {","        return new Call($1, $3, $2);","      }), o('Invocation OptFuncExist Arguments', function() {","        return new Call($1, $3, $2);","      }), o('SUPER', function() {","        return new Call('super', [new Splat(new Literal('arguments'))]);","      }), o('SUPER Arguments', function() {","        return new Call('super', $2);","      })","    ],","    OptFuncExist: [","      o('', function() {","        return false;","      }), o('FUNC_EXIST', function() {","        return true;","      })","    ],","    Arguments: [","      o('CALL_START CALL_END', function() {","        return [];","      }), o('CALL_START ArgList OptComma CALL_END', function() {","        return $2;","      })","    ],","    This: [","      o('THIS', function() {","        return new Value(new Literal('this'));","      }), o('@', function() {","        return new Value(new Literal('this'));","      })","    ],","    ThisProperty: [","      o('@ Identifier', function() {","        return new Value(new Literal('this'), [new Access($2)], 'this');","      })","    ],","    Array: [","      o('[ ]', function() {","        return new Arr([]);","      }), o('[ ArgList OptComma ]', function() {","        return new Arr($2);","      })","    ],","    RangeDots: [","      o('..', function() {","        return 'inclusive';","      }), o('...', function() {","        return 'exclusive';","      })","    ],","    Range: [","      o('[ Expression RangeDots Expression ]', function() {","        return new Range($2, $4, $3);","      })","    ],","    Slice: [","      o('Expression RangeDots Expression', function() {","        return new Range($1, $3, $2);","      }), o('Expression RangeDots', function() {","        return new Range($1, null, $2);","      }), o('RangeDots Expression', function() {","        return new Range(null, $2, $1);","      }), o('RangeDots', function() {","        return new Range(null, null, $1);","      })","    ],","    ArgList: [","      o('Arg', function() {","        return [$1];","      }), o('ArgList , Arg', function() {","        return $1.concat($3);","      }), o('ArgList OptComma TERMINATOR Arg', function() {","        return $1.concat($4);","      }), o('INDENT ArgList OptComma OUTDENT', function() {","        return $2;","      }), o('ArgList OptComma INDENT ArgList OptComma OUTDENT', function() {","        return $1.concat($4);","      })","    ],","    Arg: [o('Expression'), o('Splat')],","    SimpleArgs: [","      o('Expression'), o('SimpleArgs , Expression', function() {","        return [].concat($1, $3);","      })","    ],","    Try: [","      o('TRY Block', function() {","        return new Try($2);","      }), o('TRY Block Catch', function() {","        return new Try($2, $3[0], $3[1]);","      }), o('TRY Block FINALLY Block', function() {","        return new Try($2, null, null, $4);","      }), o('TRY Block Catch FINALLY Block', function() {","        return new Try($2, $3[0], $3[1], $5);","      })","    ],","    Catch: [","      o('CATCH Identifier Block', function() {","        return [$2, $3];","      })","    ],","    Throw: [","      o('THROW Expression', function() {","        return new Throw($2);","      })","    ],","    Parenthetical: [","      o('( Body )', function() {","        return new Parens($2);","      }), o('( INDENT Body OUTDENT )', function() {","        return new Parens($3);","      })","    ],","    WhileSource: [","      o('WHILE Expression', function() {","        return new While($2);","      }), o('WHILE Expression WHEN Expression', function() {","        return new While($2, {","          guard: $4","        });","      }), o('UNTIL Expression', function() {","        return new While($2, {","          invert: true","        });","      }), o('UNTIL Expression WHEN Expression', function() {","        return new While($2, {","          invert: true,","          guard: $4","        });","      })","    ],","    While: [","      o('WhileSource Block', function() {","        return $1.addBody($2);","      }), o('Statement  WhileSource', function() {","        return $2.addBody(Block.wrap([$1]));","      }), o('Expression WhileSource', function() {","        return $2.addBody(Block.wrap([$1]));","      }), o('Loop', function() {","        return $1;","      })","    ],","    Loop: [","      o('LOOP Block', function() {","        return new While(new Literal('true')).addBody($2);","      }), o('LOOP Expression', function() {","        return new While(new Literal('true')).addBody(Block.wrap([$2]));","      })","    ],","    For: [","      o('Statement  ForBody', function() {","        return new For($1, $2);","      }), o('Expression ForBody', function() {","        return new For($1, $2);","      }), o('ForBody    Block', function() {","        return new For($2, $1);","      })","    ],","    ForBody: [","      o('FOR Range', function() {","        return {","          source: new Value($2)","        };","      }), o('ForStart ForSource', function() {","        $2.own = $1.own;","        $2.name = $1[0];","        $2.index = $1[1];","        return $2;","      })","    ],","    ForStart: [","      o('FOR ForVariables', function() {","        return $2;","      }), o('FOR OWN ForVariables', function() {","        $3.own = true;","        return $3;","      })","    ],","    ForValue: [","      o('Identifier'), o('ThisProperty'), o('Array', function() {","        return new Value($1);","      }), o('Object', function() {","        return new Value($1);","      })","    ],","    ForVariables: [","      o('ForValue', function() {","        return [$1];","      }), o('ForValue , ForValue', function() {","        return [$1, $3];","      })","    ],","    ForSource: [","      o('FORIN Expression', function() {","        return {","          source: $2","        };","      }), o('FOROF Expression', function() {","        return {","          source: $2,","          object: true","        };","      }), o('FORIN Expression WHEN Expression', function() {","        return {","          source: $2,","          guard: $4","        };","      }), o('FOROF Expression WHEN Expression', function() {","        return {","          source: $2,","          guard: $4,","          object: true","        };","      }), o('FORIN Expression BY Expression', function() {","        return {","          source: $2,","          step: $4","        };","      }), o('FORIN Expression WHEN Expression BY Expression', function() {","        return {","          source: $2,","          guard: $4,","          step: $6","        };","      }), o('FORIN Expression BY Expression WHEN Expression', function() {","        return {","          source: $2,","          step: $4,","          guard: $6","        };","      })","    ],","    Switch: [","      o('SWITCH Expression INDENT Whens OUTDENT', function() {","        return new Switch($2, $4);","      }), o('SWITCH Expression INDENT Whens ELSE Block OUTDENT', function() {","        return new Switch($2, $4, $6);","      }), o('SWITCH INDENT Whens OUTDENT', function() {","        return new Switch(null, $3);","      }), o('SWITCH INDENT Whens ELSE Block OUTDENT', function() {","        return new Switch(null, $3, $5);","      })","    ],","    Whens: [","      o('When'), o('Whens When', function() {","        return $1.concat($2);","      })","    ],","    When: [","      o('LEADING_WHEN SimpleArgs Block', function() {","        return [[$2, $3]];","      }), o('LEADING_WHEN SimpleArgs Block TERMINATOR', function() {","        return [[$2, $3]];","      })","    ],","    IfBlock: [","      o('IF Expression Block', function() {","        return new If($2, $3, {","          type: $1","        });","      }), o('IfBlock ELSE IF Expression Block', function() {","        return $1.addElse(new If($4, $5, {","          type: $3","        }));","      })","    ],","    If: [","      o('IfBlock'), o('IfBlock ELSE Block', function() {","        return $1.addElse($3);","      }), o('Statement  POST_IF Expression', function() {","        return new If($3, Block.wrap([$1]), {","          type: $2,","          statement: true","        });","      }), o('Expression POST_IF Expression', function() {","        return new If($3, Block.wrap([$1]), {","          type: $2,","          statement: true","        });","      })","    ],","    Operation: [","      o('UNARY Expression', function() {","        return new Op($1, $2);","      }), o('-     Expression', (function() {","        return new Op('-', $2);","      }), {","        prec: 'UNARY'","      }), o('+     Expression', (function() {","        return new Op('+', $2);","      }), {","        prec: 'UNARY'","      }), o('-- SimpleAssignable', function() {","        return new Op('--', $2);","      }), o('++ SimpleAssignable', function() {","        return new Op('++', $2);","      }), o('SimpleAssignable --', function() {","        return new Op('--', $1, null, true);","      }), o('SimpleAssignable ++', function() {","        return new Op('++', $1, null, true);","      }), o('Expression ?', function() {","        return new Existence($1);","      }), o('Expression +  Expression', function() {","        return new Op('+', $1, $3);","      }), o('Expression -  Expression', function() {","        return new Op('-', $1, $3);","      }), o('Expression MATH     Expression', function() {","        return new Op($2, $1, $3);","      }), o('Expression SHIFT    Expression', function() {","        return new Op($2, $1, $3);","      }), o('Expression COMPARE  Expression', function() {","        return new Op($2, $1, $3);","      }), o('Expression LOGIC    Expression', function() {","        return new Op($2, $1, $3);","      }), o('Expression RELATION Expression', function() {","        if ($2.charAt(0) === '!') {","          return new Op($2.slice(1), $1, $3).invert();","        } else {","          return new Op($2, $1, $3);","        }","      }), o('SimpleAssignable COMPOUND_ASSIGN\\","       Expression', function() {","        return new Assign($1, $3, $2);","      }), o('SimpleAssignable COMPOUND_ASSIGN\\","       INDENT Expression OUTDENT', function() {","        return new Assign($1, $4, $2);","      }), o('SimpleAssignable EXTENDS Expression', function() {","        return new Extends($1, $3);","      })","    ]","  };","","  operators = [['left', '.', '?.', '::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];","","  tokens = [];","","  for (name in grammar) {","    alternatives = grammar[name];","    grammar[name] = (function() {","      var _i, _j, _len, _len1, _ref, _results;","      _results = [];","      for (_i = 0, _len = alternatives.length; _i &lt; _len; _i++) {","        alt = alternatives[_i];","        _ref = alt[0].split(' ');","        for (_j = 0, _len1 = _ref.length; _j &lt; _len1; _j++) {","          token = _ref[_j];","          if (!grammar[token]) {","            tokens.push(token);","          }","        }","        if (name === 'Root') {","          alt[1] = \"return \" + alt[1];","        }","        _results.push(alt);","      }","      return _results;","    })();","  }","","  exports.parser = new Parser({","    tokens: tokens.join(' '),","    bnf: grammar,","    operators: operators.reverse(),","    startSymbol: 'Root'","  });","","}).call(this);"];
