
















(function(root,mod){if(typeof exports=="object"&&typeof module=="object")return mod(exports,require("./acorn")); if(typeof define=="function"&&define.amd)return define(["exports","./acorn"],mod); mod(root.acorn||(root.acorn={}),root.acorn);})(this,function(exports,acorn){"use strict";var tt=acorn.tokTypes;var options,input,fetchToken,context;exports.parse_dammit=function(inpt,opts){if(!opts)opts={};input=String(inpt);options=opts;if(!opts.tabSize)opts.tabSize=4;fetchToken=acorn.tokenize(inpt,opts);sourceFile=options.sourceFile||null;context=[];nextLineStart=0;ahead.length=0;next();return parseTopLevel();};var lastEnd,token={start:0,end:0},ahead=[];var curLineStart,nextLineStart,curIndent,lastEndLoc,sourceFile;function next(){lastEnd=token.end;if(options.locations)
lastEndLoc=token.endLoc;if(ahead.length)
token=ahead.shift();else
token=readToken();if(token.start>=nextLineStart){while(token.start>=nextLineStart){curLineStart=nextLineStart;nextLineStart=lineEnd(curLineStart)+1;}
curIndent=indentationAfter(curLineStart);}}
function readToken(){for(;;){try{return fetchToken();}catch(e){if(!(e instanceof SyntaxError))throw e; var msg=e.message,pos=e.raisedAt,replace=true;if(/unterminated/i.test(msg)){pos=lineEnd(e.pos);if(/string/.test(msg)){replace={start:e.pos,end:pos,type:tt.string,value:input.slice(e.pos+1,pos)};}else if(/regular expr/i.test(msg)){var re=input.slice(e.pos,pos);try{re=new RegExp(re);}catch(e){}
replace={start:e.pos,end:pos,type:tt.regexp,value:re};}else{replace=false;}}else if(/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number/i.test(msg)){while(pos<input.length&&!isSpace(input.charCodeAt(pos)))++pos;}else if(/character escape|expected hexadecimal/i.test(msg)){while(pos<input.length){var ch=input.charCodeAt(pos++);if(ch===34||ch===39||isNewline(ch))break;}}else if(/unexpected character/i.test(msg)){pos++;replace=false;}else{throw e;}
resetTo(pos);if(replace===true)replace={start:pos,end:pos,type:tt.name,value:"✖"};if(replace){if(options.locations){replace.startLoc=acorn.getLineInfo(input,replace.start);replace.endLoc=acorn.getLineInfo(input,replace.end);}
return replace;}}}}
function resetTo(pos){var ch=input.charAt(pos-1);var reAllowed=!ch||/[\[\{\(,;:?\/*=+\-~!|&%^<>]/.test(ch)||/[enwfd]/.test(ch)&&/\b(keywords|case|else|return|throw|new|in|(instance|type)of|delete|void)$/.test(input.slice(pos-10,pos));fetchToken.jumpTo(pos,reAllowed);}
function copyToken(token){var copy={start:token.start,end:token.end,type:token.type,value:token.value};if(options.locations){copy.startLoc=token.startLoc;copy.endLoc=token.endLoc;}
return copy;}
function lookAhead(n){
 if(!ahead.length)
token=copyToken(token);while(n>ahead.length)
ahead.push(copyToken(readToken()));return ahead[n-1];}
var newline=/[\n\r\u2028\u2029]/;function isNewline(ch){return ch===10||ch===13||ch===8232||ch===8329;}
function isSpace(ch){return(ch<14&&ch>8)||ch===32||ch===160||isNewline(ch);}
function pushCx(){context.push(curIndent);}
function popCx(){curIndent=context.pop();}
function lineEnd(pos){while(pos<input.length&&!isNewline(input.charCodeAt(pos)))++pos;return pos;}
function indentationAfter(pos){for(var count=0;;++pos){var ch=input.charCodeAt(pos);if(ch===32)++count;else if(ch===9)count+=options.tabSize;else return count;}}
function closes(closeTok,indent,line,blockHeuristic){if(token.type===closeTok||token.type===tt.eof)return true;if(line!=curLineStart&&curIndent<indent&&tokenStartsLine()&&(!blockHeuristic||nextLineStart>=input.length||indentationAfter(nextLineStart)<indent))return true;return false;}
function tokenStartsLine(){for(var p=token.start-1;p>=curLineStart;--p){var ch=input.charCodeAt(p);if(ch!==9&&ch!==32)return false;}
return true;}
function node_t(start){this.type=null;this.start=start;this.end=null;}
function node_loc_t(start){this.start=start||token.startLoc||{line:1,column:0};this.end=null;if(sourceFile!==null)this.source=sourceFile;}
function startNode(){var node=new node_t(token.start);if(options.locations)
node.loc=new node_loc_t();if(options.directSourceFile)
node.sourceFile=options.directSourceFile;return node;}
function startNodeFrom(other){var node=new node_t(other.start);if(options.locations)
node.loc=new node_loc_t(other.loc.start);return node;}
function finishNode(node,type){node.type=type;node.end=lastEnd;if(options.locations)
node.loc.end=lastEndLoc;return node;}
function getDummyLoc(){if(options.locations){var loc=new node_loc_t();loc.end=loc.start;return loc;}};function dummyIdent(){var dummy=new node_t(token.start);dummy.type="Identifier";dummy.end=token.start;dummy.name="✖";dummy.loc=getDummyLoc();return dummy;}
function isDummy(node){return node.name=="✖";}
function eat(type){if(token.type===type){next();return true;}}
function canInsertSemicolon(){return(token.type===tt.eof||token.type===tt.braceR||newline.test(input.slice(lastEnd,token.start)));}
function semicolon(){eat(tt.semi);}
function expect(type){if(eat(type))return true;if(lookAhead(1).type==type){next();next();return true;}
if(lookAhead(2).type==type){next();next();next();return true;}}
function checkLVal(expr){if(expr.type==="Identifier"||expr.type==="MemberExpression")return expr;return dummyIdent();}
function parseTopLevel(){var node=startNode();node.body=[];while(token.type!==tt.eof)node.body.push(parseStatement());return finishNode(node,"Program");}
function parseStatement(){var starttype=token.type,node=startNode();switch(starttype){case tt._break:case tt._continue:next();var isBreak=starttype===tt._break;node.label=token.type===tt.name?parseIdent():null;semicolon();return finishNode(node,isBreak?"BreakStatement":"ContinueStatement");case tt._debugger:next();semicolon();return finishNode(node,"DebuggerStatement");case tt._do:next();node.body=parseStatement();node.test=eat(tt._while)?parseParenExpression():dummyIdent();semicolon();return finishNode(node,"DoWhileStatement");case tt._for:next();pushCx();expect(tt.parenL);if(token.type===tt.semi)return parseFor(node,null);if(token.type===tt._var){var init=startNode();next();parseVar(init,true);if(init.declarations.length===1&&eat(tt._in))
return parseForIn(node,init);return parseFor(node,init);}
var init=parseExpression(false,true);if(eat(tt._in)){return parseForIn(node,checkLVal(init));}
return parseFor(node,init);case tt._function:next();return parseFunction(node,true);case tt._if:next();node.test=parseParenExpression();node.consequent=parseStatement();node.alternate=eat(tt._else)?parseStatement():null;return finishNode(node,"IfStatement");case tt._return:next();if(eat(tt.semi)||canInsertSemicolon())node.argument=null;else{node.argument=parseExpression();semicolon();}
return finishNode(node,"ReturnStatement");case tt._switch:var blockIndent=curIndent,line=curLineStart;next();node.discriminant=parseParenExpression();node.cases=[];pushCx();expect(tt.braceL);for(var cur;!closes(tt.braceR,blockIndent,line,true);){if(token.type===tt._case||token.type===tt._default){var isCase=token.type===tt._case;if(cur)finishNode(cur,"SwitchCase");node.cases.push(cur=startNode());cur.consequent=[];next();if(isCase)cur.test=parseExpression();else cur.test=null;expect(tt.colon);}else{if(!cur){node.cases.push(cur=startNode());cur.consequent=[];cur.test=null;}
cur.consequent.push(parseStatement());}}
if(cur)finishNode(cur,"SwitchCase");popCx();eat(tt.braceR);return finishNode(node,"SwitchStatement");case tt._throw:next();node.argument=parseExpression();semicolon();return finishNode(node,"ThrowStatement");case tt._try:next();node.block=parseBlock();node.handler=null;if(token.type===tt._catch){var clause=startNode();next();expect(tt.parenL);clause.param=parseIdent();expect(tt.parenR);clause.guard=null;clause.body=parseBlock();node.handler=finishNode(clause,"CatchClause");}
node.finalizer=eat(tt._finally)?parseBlock():null;if(!node.handler&&!node.finalizer)return node.block;return finishNode(node,"TryStatement");case tt._var:next();node=parseVar(node);semicolon();return node;case tt._while:next();node.test=parseParenExpression();node.body=parseStatement();return finishNode(node,"WhileStatement");case tt._with:next();node.object=parseParenExpression();node.body=parseStatement();return finishNode(node,"WithStatement");case tt.braceL:return parseBlock();case tt.semi:next();return finishNode(node,"EmptyStatement");default:var expr=parseExpression();if(isDummy(expr)){next();if(token.type===tt.eof)return finishNode(node,"EmptyStatement");return parseStatement();}else if(starttype===tt.name&&expr.type==="Identifier"&&eat(tt.colon)){node.body=parseStatement();node.label=expr;return finishNode(node,"LabeledStatement");}else{node.expression=expr;semicolon();return finishNode(node,"ExpressionStatement");}}}
function parseBlock(){var node=startNode();pushCx();expect(tt.braceL);var blockIndent=curIndent,line=curLineStart;node.body=[];while(!closes(tt.braceR,blockIndent,line,true))
node.body.push(parseStatement());popCx();eat(tt.braceR);return finishNode(node,"BlockStatement");}
function parseFor(node,init){node.init=init;node.test=node.update=null;if(eat(tt.semi)&&token.type!==tt.semi)node.test=parseExpression();if(eat(tt.semi)&&token.type!==tt.parenR)node.update=parseExpression();popCx();expect(tt.parenR);node.body=parseStatement();return finishNode(node,"ForStatement");}
function parseForIn(node,init){node.left=init;node.right=parseExpression();popCx();expect(tt.parenR);node.body=parseStatement();return finishNode(node,"ForInStatement");}
function parseVar(node,noIn){node.declarations=[];node.kind="var";while(token.type===tt.name){var decl=startNode();decl.id=parseIdent();decl.init=eat(tt.eq)?parseExpression(true,noIn):null;node.declarations.push(finishNode(decl,"VariableDeclarator"));if(!eat(tt.comma))break;}
if(!node.declarations.length){var decl=startNode();decl.id=dummyIdent();node.declarations.push(finishNode(decl,"VariableDeclarator"));}
return finishNode(node,"VariableDeclaration");}
function parseExpression(noComma,noIn){var expr=parseMaybeAssign(noIn);if(!noComma&&token.type===tt.comma){var node=startNodeFrom(expr);node.expressions=[expr];while(eat(tt.comma))node.expressions.push(parseMaybeAssign(noIn));return finishNode(node,"SequenceExpression");}
return expr;}
function parseParenExpression(){pushCx();expect(tt.parenL);var val=parseExpression();popCx();expect(tt.parenR);return val;}
function parseMaybeAssign(noIn){var left=parseMaybeConditional(noIn);if(token.type.isAssign){var node=startNodeFrom(left);node.operator=token.value;node.left=checkLVal(left);next();node.right=parseMaybeAssign(noIn);return finishNode(node,"AssignmentExpression");}
return left;}
function parseMaybeConditional(noIn){var expr=parseExprOps(noIn);if(eat(tt.question)){var node=startNodeFrom(expr);node.test=expr;node.consequent=parseExpression(true);node.alternate=expect(tt.colon)?parseExpression(true,noIn):dummyIdent();return finishNode(node,"ConditionalExpression");}
return expr;}
function parseExprOps(noIn){var indent=curIndent,line=curLineStart;return parseExprOp(parseMaybeUnary(noIn),-1,noIn,indent,line);}
function parseExprOp(left,minPrec,noIn,indent,line){if(curLineStart!=line&&curIndent<indent&&tokenStartsLine())return left;var prec=token.type.binop;if(prec!=null&&(!noIn||token.type!==tt._in)){if(prec>minPrec){var node=startNodeFrom(left);node.left=left;node.operator=token.value;next();if(curLineStart!=line&&curIndent<indent&&tokenStartsLine())
node.right=dummyIdent();else
node.right=parseExprOp(parseMaybeUnary(noIn),prec,noIn,indent,line);var node=finishNode(node,/&&|\|\|/.test(node.operator)?"LogicalExpression":"BinaryExpression");return parseExprOp(node,minPrec,noIn,indent,line);}}
return left;}
function parseMaybeUnary(noIn){if(token.type.prefix){var node=startNode(),update=token.type.isUpdate;node.operator=token.value;node.prefix=true;next();node.argument=parseMaybeUnary(noIn);if(update)node.argument=checkLVal(node.argument);return finishNode(node,update?"UpdateExpression":"UnaryExpression");}
var expr=parseExprSubscripts();while(token.type.postfix&&!canInsertSemicolon()){var node=startNodeFrom(expr);node.operator=token.value;node.prefix=false;node.argument=checkLVal(expr);next();expr=finishNode(node,"UpdateExpression");}
return expr;}
function parseExprSubscripts(){return parseSubscripts(parseExprAtom(),false,curIndent,curLineStart);}
function parseSubscripts(base,noCalls,startIndent,line){for(;;){if(curLineStart!=line&&curIndent<=startIndent&&tokenStartsLine()){if(token.type==tt.dot&&curIndent==startIndent)
--startIndent;else
return base;}
if(eat(tt.dot)){var node=startNodeFrom(base);node.object=base;if(curLineStart!=line&&curIndent<=startIndent&&tokenStartsLine())
node.property=dummyIdent();else
node.property=parsePropertyName()||dummyIdent();node.computed=false;base=finishNode(node,"MemberExpression");}else if(token.type==tt.bracketL){pushCx();next();var node=startNodeFrom(base);node.object=base;node.property=parseExpression();node.computed=true;popCx();expect(tt.bracketR);base=finishNode(node,"MemberExpression");}else if(!noCalls&&token.type==tt.parenL){pushCx();var node=startNodeFrom(base);node.callee=base;node.arguments=parseExprList(tt.parenR);base=finishNode(node,"CallExpression");}else{return base;}}}
function parseExprAtom(){switch(token.type){case tt._this:var node=startNode();next();return finishNode(node,"ThisExpression");case tt.name:return parseIdent();case tt.num:case tt.string:case tt.regexp:var node=startNode();node.value=token.value;node.raw=input.slice(token.start,token.end);next();return finishNode(node,"Literal");case tt._null:case tt._true:case tt._false:var node=startNode();node.value=token.type.atomValue;node.raw=token.type.keyword;next();return finishNode(node,"Literal");case tt.parenL:var tokStart1=token.start;next();var val=parseExpression();val.start=tokStart1;val.end=token.end;expect(tt.parenR);return val;case tt.bracketL:var node=startNode();pushCx();node.elements=parseExprList(tt.bracketR);return finishNode(node,"ArrayExpression");case tt.braceL:return parseObj();case tt._function:var node=startNode();next();return parseFunction(node,false);case tt._new:return parseNew();default:return dummyIdent();}}
function parseNew(){var node=startNode(),startIndent=curIndent,line=curLineStart;next();node.callee=parseSubscripts(parseExprAtom(),true,startIndent,line);if(token.type==tt.parenL){pushCx();node.arguments=parseExprList(tt.parenR);}else{node.arguments=[];}
return finishNode(node,"NewExpression");}
function parseObj(){var node=startNode();node.properties=[];pushCx();next();var propIndent=curIndent,line=curLineStart;while(!closes(tt.braceR,propIndent,line)){var name=parsePropertyName();if(!name){if(isDummy(parseExpression(true)))next();eat(tt.comma);continue;}
var prop={key:name},isGetSet=false,kind;if(eat(tt.colon)){prop.value=parseExpression(true);kind=prop.kind="init";}else if(options.ecmaVersion>=5&&prop.key.type==="Identifier"&&(prop.key.name==="get"||prop.key.name==="set")){isGetSet=true;kind=prop.kind=prop.key.name;prop.key=parsePropertyName()||dummyIdent();prop.value=parseFunction(startNode(),false);}else{next();eat(tt.comma);continue;}
node.properties.push(prop);eat(tt.comma);}
popCx();eat(tt.braceR);return finishNode(node,"ObjectExpression");}
function parsePropertyName(){if(token.type===tt.num||token.type===tt.string)return parseExprAtom();if(token.type===tt.name||token.type.keyword)return parseIdent();}
function parseIdent(){var node=startNode();node.name=token.type===tt.name?token.value:token.type.keyword;next();return finishNode(node,"Identifier");}
function parseFunction(node,isStatement){if(token.type===tt.name)node.id=parseIdent();else if(isStatement)node.id=dummyIdent();else node.id=null;node.params=[];pushCx();expect(tt.parenL);while(token.type==tt.name){node.params.push(parseIdent());eat(tt.comma);}
popCx();eat(tt.parenR);node.body=parseBlock();return finishNode(node,isStatement?"FunctionDeclaration":"FunctionExpression");}
function parseExprList(close){var indent=curIndent,line=curLineStart,elts=[],continuedLine=nextLineStart;next(); if(curLineStart>continuedLine)continuedLine=curLineStart;while(!closes(close,indent+(curLineStart<=continuedLine?1:0),line)){var elt=parseExpression(true);if(isDummy(elt)){if(closes(close,indent,line))break;next();}else{elts.push(elt);}
while(eat(tt.comma)){}}
popCx();eat(close);return elts;}});