From a91ec70cfa5a0dd31a761110031f23277e410576 Mon Sep 17 00:00:00 2001 From: Onoshko Dan Date: Sat, 24 May 2014 01:13:43 +0700 Subject: [PATCH] fixes --- lib/browser-cola.js | 6 +++--- lib/translate.js | 9 ++++++--- package.json | 2 +- tools/node.js | 10 ++++++---- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/browser-cola.js b/lib/browser-cola.js index 794de5c6..6b55cecf 100644 --- a/lib/browser-cola.js +++ b/lib/browser-cola.js @@ -3,6 +3,6 @@ if(this.next_is("punc","("))return this.function_(Cola.AST_Defun,type);return tmp=this.var_(false,type),this.semicolon(),tmp}if(!this.is_js){var _this=this,balance=1,isfun=false;this.dumpS();this.next();if(this.is("punc","(")){this.next();this.next_until(function(){if(_this.is("punc","("))balance++;else if(_this.is("punc",")"))balance--;return balance==0||_this.is("eof")});isfun=(this.next(),this.is("punc","{")||this.is("punc","=>"))}this.restoreS();if(isfun)return this.function_(Cola.AST_Defun)}return this.next_is("punc",":")?this.labeled_statement():this.simple_statement();case"punc":switch(this.S.token.value){case"@":if(!this.is_js&&this.next_is("name"))return new Cola.AST_Command({name:this.next().value,args:function(name){var args=[];if(name=="require"||name=="include"){while(!this.peek().nlb&&!this.next_is("eof")){this.next();if(!this.is("string"))this.unexpected();args.push(this.S.token.value)}this.next()}else if(name=="use"){this.next();if(!this.is("name"))this.unexpected();args.push(this.S.token.value);if(this.S.token.value=="closure"){this.next();args.push(this.is("punc","{"),new Cola.AST_BlockStatement({start:this.S.token,body:this.block_(!this.is("punc","{")),end:this.prev()}))}else if(this.S.token.value!="asmjs"&&this.S.token.value!="strict")this.unexpected()}else this.unexpected();return args}.call(this,this.S.token.value)});case"{":if(this.is_js)return new Cola.AST_BlockStatement({start:this.S.token,body:this.block_(),end:this.prev()});this.dumpS();var balance=0,is_object=false;this.next_until(function(){if(_this.is("punc","{"))balance++;else if(_this.is("punc","}"))balance--;return balance==0||_this.is("eof")});is_object=this.next_is("operator");this.restoreS();if(is_object)return this.simple_statement();return new Cola.AST_BlockStatement({start:this.S.token,body:this.block_(),end:this.prev()});case"[":case"(":return this.simple_statement();case";":this.next();return new Cola.AST_EmptyStatement;default:this.unexpected()}case"keyword":switch(tmp=this.S.token.value,this.next(),tmp){case"break":return this.break_cont(Cola.AST_Break);case"continue":return this.break_cont(Cola.AST_Continue);case"debugger":this.semicolon();return new Cola.AST_Debugger;case"do":return new Cola.AST_Do({body:this.in_loop(function(){return this.statement()}),condition:(this.expect_token("keyword","while"),tmp=this.parenthesised(),this.semicolon(),tmp)});case"while":return new Cola.AST_While({condition:this.parenthesised(),body:this.in_loop(function(){return this.statement()})});case"for":return this.for_();case"function":return this.function_(Cola.AST_Defun);case"if":return this.if_();case"return":if(this.S.in_function==0)this.croak("'return' outside of function");return new Cola.AST_Return({value:this.is("punc",";")?(this.next(),null):this.can_insert_semicolon()?null:(tmp=this.expression(true),this.semicolon(),tmp)});case"switch":return new Cola.AST_Switch({expression:this.is("punc","{")&&!this.is_js?new Cola.AST_Noop:this.parenthesised(),body:this.in_loop(this.switch_body_)});case"throw":if(this.S.token.nlb)this.croak("Illegal newline after 'throw'");return new Cola.AST_Throw({value:(tmp=this.expression(true),this.semicolon(),tmp)});case"try":return this.try_();case"var":return tmp=this.var_(),this.semicolon(),tmp;case"const":return tmp=this.const_(),this.semicolon(),tmp;case"with":return new Cola.AST_With({expression:this.parenthesised(),body:this.statement()});default:this.unexpected()}}});Cola.Parser.prototype.labeled_statement=function(){var label=this.as_symbol(Cola.AST_Label),_this=this;if(Cola.find_if(function(l){return l.name==label.name},this.S.labels)){this.croak("Label "+label.name+" defined twice")}this.expect(":");this.S.labels.push(label);var stat=this.statement();this.S.labels.pop();if(!(stat instanceof Cola.AST_IterationStatement)){label.references.forEach(function(ref){if(ref instanceof Cola.AST_Continue){ref=ref.label.start;_this.croak("Continue label `"+label.name+"` refers to non-IterationStatement.",ref.line,ref.col,ref.pos)}})}return new Cola.AST_LabeledStatement({body:stat,label:label})};Cola.Parser.prototype.simple_statement=function(tmp){return new Cola.AST_SimpleStatement({body:(tmp=this.expression(true),this.semicolon(),tmp)})};Cola.Parser.prototype.break_cont=function(type){var label=null,ldef;if(!this.can_insert_semicolon()){label=this.as_symbol(Cola.AST_LabelRef,true)}if(label!=null){ldef=Cola.find_if(function(l){return l.name==label.name},this.S.labels);if(!ldef)this.croak("Undefined label "+label.name);label.thedef=ldef}else if(this.S.in_loop==0)this.croak(type.TYPE+" not inside a loop or switch");this.semicolon();var stat=new type({label:label});if(ldef)ldef.references.push(stat);return stat};Cola.Parser.prototype.for_=function(){this.expect("(");var init=null;if(!this.is("punc",";")){init=this.is("keyword","var")?(this.next(),this.var_(true)):this.expression(true,true);if(this.is("operator","in")){if(init instanceof Cola.AST_Var&&init.definitions.length>1)this.croak("Only one variable declaration allowed in for..in loop");this.next();return this.for_in(init)}}return this.regular_for(init)};Cola.Parser.prototype.regular_for=function(init){this.expect(";");var test=this.is("punc",";")?null:this.expression(true);this.expect(";");var step=this.is("punc",")")?null:this.expression(true);this.expect(")");var _this=this;return new Cola.AST_For({init:init,condition:test,step:step,body:this.in_loop(function(){return this.statement()})})};Cola.Parser.prototype.for_in=function(init){var lhs=init instanceof Cola.AST_Var?init.definitions[0].name:null;var obj=this.expression(true);this.expect(")");var _this=this;return new Cola.AST_ForIn({init:init,name:lhs,object:obj,body:this.in_loop(function(){return this.statement()})})};Cola.Parser.prototype.as_funcarg=function(splatedexist){var name=this.as_symbol(Cola.AST_SymbolFunarg),type=name,argtype="positional",defval=new Cola.AST_Noop;if(this.is("name"))name=this.as_symbol(Cola.AST_SymbolFunarg);if(this.is("punc","...")){if(splatedexist)this.token_error(this.S,"Unexpected token: splated argument can be only one.");if(type!=name&&type.name!="Array")this.token_error(this.S,"Unexpected token: splated argument must have `Array` type.");this.next();argtype="splated"}else if(this.is("operator","=")){this.next();defval=this.expression(false)}else if(this.is("punc",":")){this.next();argtype="named";if(!this.is("punc",",")&&!this.is("punc",")")){defval=this.expression(false)}}return new Cola.AST_ArgDef({name:name,type:argtype=="splated"?"Array":type==name?"dynamic":type.name,argtype:argtype,defval:defval,start:type.start,end:this.prev()})};Cola.Parser.prototype.function_=function(ctor,type){!type&&(type="dynamic");var in_statement=ctor===Cola.AST_Defun,_this=this,splatedexist=false;var name=this.is("name")?this.as_symbol(in_statement?Cola.AST_SymbolDefun:Cola.AST_SymbolLambda):null;if(in_statement&&!name)this.unexpected();this.expect("(");return new ctor({type:type,name:name,argnames:function(first,a){while(!_this.is("punc",")")){if(first)first=false;else _this.expect(",");a.push(_this.is_js?_this.as_symbol(Cola.AST_SymbolFunarg):_this.as_funcarg(splatedexist));splatedexist=a[a.length-1].argtype=="splated"}_this.next();return a}(true,[]),body:function(loop,labels){++_this.S.in_function;_this.S.in_directives=true;_this.S.in_loop=0;_this.S.labels=[];var tmp,a=!_this.is_js&&_this.is("punc","=>")?(_this.next(),[new Cola.AST_Return({start:new Cola.AST_Token({nlb:false,type:"keyword",value:"return"}),value:function(){tmp=_this.expression(true);if(ctor===Cola.AST_Defun){_this.semicolon();_this.next()}return tmp}(),end:_this.prev()})]):_this.block_();--_this.S.in_function;_this.S.in_loop=loop;_this.S.labels=labels;return a}(this.S.in_loop,this.S.labels)})};Cola.Parser.prototype.if_=function(inline){var cond=this.parenthesised(),body=inline&&!this.is_js?this.expression(true):this.statement(),belse=null;if(this.is("keyword","else")){this.next();if(inline&&!this.is_js)belse=this.is("keyword","if")?(this.next(),this.if_(true)):this.expression(true);else belse=this.statement()}return new Cola.AST_If({condition:cond,body:body,alternative:belse,inline:inline})};Cola.Parser.prototype.block_=function(to_eof){if(this.is_js||!to_eof)this.expect("{");var a=[];if(this.is_js||!to_eof)while(!this.is("punc","}")){if(this.is("eof"))this.unexpected();a.push(this.statement())}else while(!this.is("eof"))a.push(this.statement());this.next();return a};Cola.Parser.prototype.switch_body_=function(){this.expect("{");var a=[],cur=null,branch=null,tmp;while(!this.is("punc","}")){if(this.is("eof"))this.unexpected();if(this.is("keyword","case")||!this.is_js&&this.is("keyword","when")){if(branch)branch.end=this.prev();cur=[];branch=new(!this.is_js&&this.is("keyword","when")?Cola.AST_When:Cola.AST_Case)({start:(tmp=this.S.token,this.next(),tmp),expression:this.expression(true),body:cur});a.push(branch);this.expect(":")}else if(this.is("keyword","default")){if(branch)branch.end=this.prev();cur=[];branch=new Cola.AST_Default({start:(tmp=this.S.token,this.next(),this.expect(":"),tmp),body:cur});a.push(branch)}else{if(!cur)this.unexpected();cur.push(this.statement())}}if(branch)branch.end=this.prev();this.next();return a};Cola.Parser.prototype.try_=function(){var body=this.block_(),bcatch=null,bfinally=null;if(this.is("keyword","catch")){var start=this.S.token;this.next();this.expect("(");var name=this.as_symbol(Cola.AST_SymbolCatch);this.expect(")");bcatch=new Cola.AST_Catch({start:start,argname:name,body:this.block_(),end:this.prev()})}if(this.is("keyword","finally")){var start=this.S.token;this.next();bfinally=new Cola.AST_Finally({start:start,body:this.block_(),end:this.prev()})}if(!bcatch&&!bfinally)this.croak("Missing catch/finally blocks");return new Cola.AST_Try({body:body,bcatch:bcatch,bfinally:bfinally})};Cola.Parser.prototype.vardefs=function(no_in,in_const,type){var a=[],was_template=false;for(;;){was_template=false;a.push(new Cola.AST_VarDef({start:this.S.token,type:type,name:function(_this){was_template=!_this.is_js&&(_this.is("punc","[")||_this.is("punc","{"));if(!_this.is_js&&_this.is("punc","["))return _this.array_(true,true);if(!_this.is_js&&_this.is("punc","{"))return _this.object_(true,true);return _this.as_symbol(in_const?Cola.AST_SymbolConst:Cola.AST_SymbolVar)}(this),value:this.is("operator","=")?(this.next(),this.expression(false,no_in)):was_template?this.expect_token("operator","="):null,end:this.prev()}));if(!this.is("punc",","))break;this.next()}return a};Cola.Parser.prototype.var_=function(no_in,type){!type&&(type="dynamic");return new Cola.AST_Var({start:this.prev(),definitions:this.vardefs(no_in,false,type),type:type,end:this.prev()})};Cola.Parser.prototype.const_=function(){return new Cola.AST_Const({start:this.prev(),definitions:this.vardefs(false,true),end:this.prev()})};Cola.Parser.prototype.new_=function(){var start=this.S.token;this.expect_token("operator","new");var newexp=this.expr_atom(false),args;if(this.is("punc","(")){this.next();args=this.expr_list(")",false,false,!this.is_js)}else{args=[]}return this.subscripts(new Cola.AST_New({start:start,expression:newexp,args:args,end:this.prev()}),true)};Cola.Parser.prototype.string_template_=function(start_token){var body=[new Cola.AST_String({start:start_token,end:start_token,value:start_token.value})];this.next();while(this.is("punc","@")||this.is("punc","@{")||this.is("punc","{{")||this.is("string",null))if(this.is("string",null)){body.push(new Cola.AST_String({start:this.S.token,end:this.S.token,value:this.S.token.value}));this.next()}else if(this.is("punc","@")){this.next();body.push(this._make_symbol(Cola.AST_SymbolRef));this.next()}else if(this.is("punc","@{")){this.next();body.push(this.expression(true));this.expect("}")}else if(this.is("punc","{{")){this.next();body.push(this.expression(true));this.expect("}}")}var last=body[body.length-1];body[0].value=body[0].value.replace(/^[ \t]*[\n\r]/,"");if(last instanceof Cola.AST_String){var offstr=last.value.match(/[\n\r][ \t]*$/);if(offstr){offstr=offstr[0];for(var i in body)if(body[i]instanceof Cola.AST_String){body[i].value=body[i].value.replace(new RegExp(offstr,"g"),"\n");body[i].value=body[i].value.replace(/\n/g,"\n")}last.value=last.value.replace(/[\n\r]$/,"")}}if(body.length==1)return body[0];return new Cola.AST_StringTemplate({start:start_token,end:this.prev(),body:body})};Cola.Parser.prototype.as_atom_node=function(){var tok=this.S.token,ret;switch(tok.type){case"name":case"keyword":ret=this._make_symbol(Cola.AST_SymbolRef);break;case"num":ret=new Cola.AST_Number({start:tok,end:tok,value:tok.value});break;case"string":if(this.is_js){ret=new Cola.AST_String({start:tok,end:tok,value:tok.value});break}else return this.string_template_(tok);case"regexp":ret=new Cola.AST_RegExp({start:tok,end:tok,value:tok.value});break;case"atom":if(!this.is_js)switch(tok.value){case"off":case"no":ret=new Cola.AST_False({start:tok,end:tok});break;case"on":case"yes":ret=new Cola.AST_True({start:tok,end:tok});break}switch(tok.value){case"false":ret=new Cola.AST_False({start:tok,end:tok});break;case"true":ret=new Cola.AST_True({start:tok,end:tok});break;case"null":ret=new Cola.AST_Null({start:tok,end:tok});break}break}this.next();return ret};Cola.Parser.prototype.expr_atom=function(allow_calls){if(this.is("operator","new")){return this.new_()}var type,start=this.S.token;if(this.is("punc")){switch(start.value){case"(":if(!this.is_js){var _this=this,balance=1,isfun=false;this.dumpS();this.next();this.next_until(function(){if(_this.is("punc","("))balance++;else if(_this.is("punc",")"))balance--;return balance==0||_this.is("eof")});isfun=(this.next(),this.is("punc","{")||this.is("punc","=>"));this.restoreS();if(isfun)return this.function_(Cola.AST_Function)}this.next();var ex=this.expression(true);ex.start=start;ex.end=this.S.token;this.expect(")");return this.subscripts(ex,allow_calls);case"[":return this.subscripts(this.array_(),allow_calls);case"{":return this.subscripts(this.object_(),allow_calls)}this.unexpected()}if(!this.is_js&&this.is("name")){if(this.next_is("name")){type=this.S.token.value,this.next();return this.function_(Cola.AST_Defun,type)}var _this=this,balance=1,isfun=false;this.dumpS();this.next();if(this.is("punc","(")){this.next();this.next_until(function(){if(_this.is("punc","("))balance++;else if(_this.is("punc",")"))balance--;return balance==0||_this.is("eof")});isfun=(this.next(),this.is("punc","{")||this.is("punc","=>"))}this.restoreS();if(isfun)return this.function_(Cola.AST_Defun)}if(this.is("keyword","function")){this.next();var func=this.function_(Cola.AST_Function);func.start=start;func.end=this.prev();return this.subscripts(func,allow_calls)}if(this.is("keyword","if")&&!this.is_js){this.next();var f=this.if_(true),s=f;return f}if(this.is("keyword","switch")&&!this.is_js){this.next();var swtch={start:start,expression:this.is("punc","{")?new Cola.AST_Noop:this.parenthesised(),body:this.in_loop(this.switch_body_),end:this.prev()},_this=this;swtch.body.forEach(function(branch){if(branch.body.length!=1||!(branch.body[0]instanceof Cola.AST_SimpleStatement))_this.unexpected(branch.start)});return new Cola.AST_Switch(swtch)}if(Cola.ATOMIC_START_TOKEN[this.S.token.type]){return this.subscripts(this.as_atom_node(),allow_calls)}this.unexpected()};Cola.Parser.prototype.expr_list=function(closing,allow_trailing_comma,allow_empty,allow_named_args){var first=true,a=[],name;while(!this.is("punc",closing)){if(first)first=false;else this.expect(",");if(allow_trailing_comma&&this.is("punc",closing))break;if(this.is("punc",",")&&allow_empty){a.push(new Cola.AST_Hole({start:this.S.token,end:this.S.token}))}else if(this.is("name")&&allow_named_args){name=Cola.$_cola_clone(this.S.token);this.dumpS();this.next();if(this.is("punc",":")){this.next();a.push(new Cola.AST_Namedarg({name:name.value,value:this.expression(false),start:name,end:this.prev()}))}else{this.restoreS();a.push(this.expression(false))}}else a.push(this.expression(false))}this.next();return a};Cola.Parser.prototype.array_=Cola.Parser.embed_tokens(function(is_template,is_var){this.expect("[");if(!this.is_js&&!this.is("punc","]")&&!this.is("punc",",")&&!(this.is("name")&&this.next_is("name"))){this.dumpS();var tmp,from=this.expression(false,false,true),triple;if((this.is("punc","..")||this.is("punc","..."))&&!this.next_is("punc",",")&&!this.next_is("punc","]")){triple=this.is("punc","...");this.next();return new Cola.AST_ArrayRange({from:from,to:(tmp=this.expression(true,false,true),this.expect("]"),tmp),triple:triple,start:from.start,end:this.prev()})}this.restoreS()}if(this.is_js)return new Cola.AST_Array({elements:this.expr_list("]",!this.options.strict,true)});var is_array=is_template?false:null,vardef=false,first=true,a=[],val,skiped=false;while(!this.is("punc","]")){if(first)first=false;else this.expect(",");if(this.is("punc",",")||this.is("punc","]")){a.push(new Cola.AST_Hole({start:this.S.token,end:this.S.token}));if(!this.options.strict&&this.is("punc","]"))break}else if(this.is("punc","...")&&is_array!==true){if(skiped)this.unexpected();this.next();skiped=true;is_array=false;a.push(new Cola.AST_Noop)}else if(!is_var&&this.is("name")&&this.next_is("name")&&!Cola.cKEYWORDS(this.peek().value)){if(is_array===true)this.unexpected();is_array=false;vardef=true;a.push(new Cola.AST_VarDef({start:this.S.token,type:this.S.token.value,name:function(_this){_this.next();val=_this.as_symbol(Cola.AST_SymbolVar);if(_this.is("punc","...")&&is_array!==true){if(skiped)_this.unexpected();_this.next();skiped=true;is_array=false;val.splated=true}return val}(this),value:null,end:this.prev()}))}else{if(is_array===false&&this.is("punc","["))val=this.array_(true,is_var);else if(is_array===false&&this.is("punc","{"))val=this.object_(true,is_var);else val=this.expression(false);if(val.vardef)vardef=true;if(this.is("punc","...")&&is_array!==true){if(skiped)this.unexpected();this.next();skiped=true;is_array=false;val.splated=true}if(val instanceof Cola.AST_ObjectTemplate||val instanceof Cola.AST_ArrayTemplate){if(is_array===true)this.unexpected();is_array=false}if(!(val instanceof Cola.AST_SymbolRef||val instanceof Cola.AST_ObjectTemplate||val instanceof Cola.AST_ArrayTemplate||!is_var&&(val instanceof Cola.AST_Dot||val instanceof Cola.AST_Sub)||val instanceof Cola.AST_Object&&val.template==true||val instanceof Cola.AST_Array&&val.template==true)){if(is_array===false)this.unexpected();is_array=true}a.push(val)}}this.next();return is_array===true||is_array===null?new Cola.AST_Array({elements:a,template:is_array===null,vardef:vardef}):new Cola.AST_ArrayTemplate({elements:a,vardef:vardef})});Cola.Parser.prototype.object_=Cola.Parser.embed_tokens(function(is_template,is_var){this.expect("{");var first=true,a=[],ptype,is_object=is_template?false:null,vardef=false,val;while(!this.is("punc","}")){if(first)first=false;else this.expect(",");if(!this.options.strict&&this.is("punc","}"))break;var start=this.S.token;var type=start.type;var name=this.as_property_name();if(!this.is_js&&!is_var&&this.is("name")&&!this.next_is("punc","(")&&!Cola.cKEYWORDS(name)){vardef=true;ptype=name;name=this.as_name()}else ptype=false;if(type=="name"&&!this.is("punc",":")){if(name=="get"){if(!this.is_js&&is_object===false)this.unexpected();is_object=true;a.push(new Cola.AST_ObjectGetter({start:start,type:ptype,key:this.as_atom_node(),value:this.function_(Cola.AST_Accessor),end:this.prev()}));continue}if(name=="set"){if(!this.is_js&&is_object===false)this.unexpected();is_object=true;a.push(new Cola.AST_ObjectSetter({start:start,type:ptype,key:this.as_atom_node(),value:this.function_(Cola.AST_Accessor),end:this.prev()}));continue}}if(!this.is_js&&!this.is("punc",":")){val=new Cola.AST_SymbolRef({name:name})}else{this.expect(":");if(is_object===false&&this.is("punc","["))val=this.array_(true,is_var);else if(is_object===false&&this.is("punc","{"))val=this.object_(true,is_var);else val=this.expression(false);if(ptype&&!(val instanceof Cola.AST_SymbolRef))this.unexpected(val.start);if(val.vardef)vardef=true;if(val instanceof Cola.AST_ObjectTemplate||val instanceof Cola.AST_ArrayTemplate){if(is_object===true||ptype)this.unexpected();is_object=false}if(!(val instanceof Cola.AST_SymbolRef||val instanceof Cola.AST_ObjectTemplate||val instanceof Cola.AST_ArrayTemplate||!is_var&&(val instanceof Cola.AST_Dot||val instanceof Cola.AST_Sub)||val instanceof Cola.AST_Object&&val.template==true||val instanceof Cola.AST_Array&&val.template==true)){if(is_object===false)this.unexpected();is_object=true}}a.push(new Cola.AST_ObjectKeyVal({start:start,type:ptype,key:name,value:val,end:this.prev()}))}this.next();return is_object===true||is_object===null?new Cola.AST_Object({properties:a,template:is_object===null,vardef:vardef}):new Cola.AST_ObjectTemplate({properties:a,vardef:vardef})});Cola.Parser.prototype.as_property_name=function(){var tmp=this.S.token;this.next();switch(tmp.type){case"num":case"string":case"name":case"operator":case"keyword":case"atom":return tmp.value;default:this.unexpected()}};Cola.Parser.prototype.as_name=function(){var tmp=this.S.token;this.next();switch(tmp.type){case"name":case"operator":case"keyword":case"atom":return tmp.value;default:this.unexpected()}};Cola.Parser.prototype._make_symbol=function(type){var name=this.S.token.value;return new(name=="this"?Cola.AST_This:type)({name:String(name),start:this.S.token,end:this.S.token})};Cola.Parser.prototype.as_symbol=function(type,noerror){if(!this.is("name")){if(!noerror)this.croak("Name expected");return null}var sym=this._make_symbol(type);this.next();return sym};Cola.Parser.prototype.subscripts=function(expr,allow_calls){var start=expr.start;if(this.is("punc",".")){this.next();return this.subscripts(new Cola.AST_Dot({start:start,expression:expr,property:this.as_name(),end:this.prev()}),allow_calls)}if(this.is("punc","::")&&!this.is_js){this.next();return this.subscripts(new Cola.AST_Proto({start:start,expression:expr,property:this.as_name(),end:this.prev()}),allow_calls)}if(this.is("punc","[")){this.next();var prop,triple;if(this.is_js)prop=this.expression(true);else if(this.is("punc","]"))prop=new Cola.AST_Noop;else{if(this.is("punc","..")||this.is("punc","..."))prop=new Cola.AST_Number({value:0});else prop=this.expression(true,false,true);this.dumpS();if(this.is("punc","..")||this.is("punc","...")){triple=this.is("punc","...");this.next();prop=new Cola.AST_ArrayRange({from:prop,to:this.is("punc","]")?new Cola.AST_Noop:this.expression(true,false,true),triple:triple,start:prop.start,end:this.prev()})}else this.restoreS()}this.expect("]");return this.subscripts(new Cola.AST_Sub({start:start,expression:expr,property:prop,end:this.prev()}),allow_calls)}if(allow_calls&&this.is("punc","(")){this.next();return this.subscripts(new Cola.AST_Call({start:start,expression:expr,args:this.expr_list(")",false,false,!this.is_js),end:this.prev()}),true)}return expr};Cola.Parser.prototype.maybe_unary=function(allow_calls){var start=this.S.token;if(this.is("operator")&&this.UNARY_PREFIX(start.value)){this.next();this.handle_regexp();var ex=this.make_unary(Cola.AST_UnaryPrefix,start.value,this.maybe_unary(allow_calls));ex.start=start;ex.end=this.prev();return ex}var val=this.expr_atom(allow_calls);while(this.is("operator")&&this.UNARY_POSTFIX(this.S.token.value)&&!this.S.token.nlb){val=this.make_unary(Cola.AST_UnaryPostfix,this.S.token.value,val);val.start=start;val.end=this.S.token;this.next()}return val};Cola.Parser.prototype.make_unary=function(ctor,op,expr){if((op=="++"||op=="--")&&!this.is_assignable(expr))this.croak("Invalid use of "+op+" operator");return new ctor({operator:op,expression:expr})};Cola.Parser.prototype.expr_op=function(left,min_prec,no_in,is_comp,rightest){var op=this.is("operator")?this.S.token.value:null,cop=Cola.COMPARISON(op);if(op=="in"&&no_in)op=null;var prec=op!=null?this.PRECEDENCE[op]:null;if(!this.is_js&&is_comp&&cop){this.next();var right=this.maybe_unary(true);return this.expr_op(new Cola.AST_Binary({start:left.start,left:left,operator:"&&",right:new Cola.AST_Binary({start:rightest.start,left:rightest,operator:op,right:right,end:right.end}),end:right.end}),min_prec,no_in,true,right)}if(prec!=null&&prec>min_prec){this.next();var right=!this.is_js&&cop?this.maybe_unary(true):this.expr_op(this.maybe_unary(true),prec,no_in);return this.expr_op(new Cola.AST_Binary({start:left.start,left:left,operator:op,right:right,end:right.end}),min_prec,no_in,cop,right)}return left};Cola.Parser.prototype.expr_ops=function(no_in){return this.expr_op(this.maybe_unary(true),0,no_in)};Cola.Parser.prototype.maybe_conditional=function(no_in){var start=this.S.token;var expr=this.expr_ops(no_in);if(this.is("operator","?")){this.next();var yes=this.expression(false);return new Cola.AST_Conditional({start:start,condition:expr,consequent:yes,alternative:this.is_js||this.is("punc",":")?(this.expect(":"),this.expression(false,no_in)):new Cola.AST_Noop,end:this.prev()})}return expr};Cola.Parser.prototype.is_assignable=function(expr){if(!this.options.strict)return true;if(expr instanceof Cola.AST_This)return false;return expr instanceof Cola.AST_PropAccess||expr instanceof Cola.AST_Symbol};Cola.Parser.prototype.maybe_assign=function(no_in){var start=this.S.token;var left=this.maybe_conditional(no_in),val=this.S.token.value;if(this.is("operator")&&this.ASSIGNMENT(val)){if(this.is_assignable(left)){this.next();return new Cola.AST_Assign({start:start,left:left,operator:val,right:this.maybe_assign(no_in),end:this.prev()})}this.croak("Invalid assignment")}return left};Cola.Parser.prototype.cascade=function(expr,start){var last,props={start:start,expression:expr,subexpressions:[]};while(this.next()){if(this.is("name")||this.is("punc","[")){last=this.expression(false,false,true);if(this.is("punc",":")){last=this.cascade(last,last.start);this.next()}props.subexpressions.push(last);if(!(last instanceof Cola.AST_SymbolRef||last instanceof Cola.AST_Binary||last instanceof Cola.AST_Call||last instanceof Cola.AST_Sub||last instanceof Cola.AST_Dot||last instanceof Cola.AST_Array||last instanceof Cola.AST_Cascade))this.unexpected()}if(!this.is("punc",".."))break}props.end=this.S.token;return new Cola.AST_Cascade(props)};Cola.Parser.prototype.expression=function(commas,no_in,in_dd){var start=this.S.token;var expr=this.maybe_assign(no_in);if(!in_dd&&!this.is_js&&this.is("punc",".."))return this.cascade(expr,start);if(commas&&this.is("punc",",")){if(expr instanceof Cola.AST_Assign&&(expr.left instanceof Cola.AST_ArrayTemplate||expr.left instanceof Cola.AST_ObjectTemplate||(expr.left instanceof Cola.AST_Array||expr.left instanceof Cola.AST_Object)&&expr.left.template)&&expr.left.vardef)this.unexpected();this.next();return new Cola.AST_Seq({start:start,car:expr,cdr:this.expression(true,no_in),end:this.peek()})}return expr};Cola.Parser.prototype.in_loop=function(cont){++this.S.in_loop;var ret=cont.call(this);--this.S.in_loop;return ret};"use strict";!this.Cola&&(this.Cola={});Cola.TreeTransformer=function(before,after){Cola.TreeWalker.call(this);this.before=before;this.after=after};Cola.TreeTransformer.prototype.__proto__=new Cola.TreeWalker;(function(undefined){function _(node,descend){node.DEFMETHOD("_descend",descend);node.DEFMETHOD("transform",function(tw,in_list){var x,y;tw.push(this);if(tw.before)x=tw.before(this,descend,in_list);if(x===undefined){if(!tw.after){x=this;descend(x,tw)}else{tw.stack[tw.stack.length-1]=x=this.clone();descend(x,tw);y=tw.after(x,in_list);if(y!==undefined)x=y}}tw.pop();return x})}function do_list(list,tw){return Cola.MAP(list,function(node){var r=node.transform(tw,true);if(!r)r=Cola.MAP.continue();else if(r instanceof Array)r=Cola.MAP.splice(r);return r})}_(Cola.AST_Node,Cola.noop);_(Cola.AST_LabeledStatement,function(self,tw){self.label=self.label.transform(tw);self.body=self.body.transform(tw)});_(Cola.AST_SimpleStatement,function(self,tw){self.body=self.body.transform(tw)});_(Cola.AST_Block,function(self,tw){self.body=do_list(self.body,tw)});_(Cola.AST_DWLoop,function(self,tw){self.condition=self.condition.transform(tw);self.body=self.body.transform(tw)});_(Cola.AST_For,function(self,tw){if(self.init)self.init=self.init.transform(tw);if(self.condition)self.condition=self.condition.transform(tw);if(self.step)self.step=self.step.transform(tw);self.body=self.body.transform(tw)});_(Cola.AST_ForIn,function(self,tw){self.init=self.init.transform(tw);self.object=self.object.transform(tw);self.body=self.body.transform(tw)});_(Cola.AST_With,function(self,tw){self.expression=self.expression.transform(tw);self.body=self.body.transform(tw)});_(Cola.AST_Exit,function(self,tw){if(self.value)self.value=self.value.transform(tw)});_(Cola.AST_LoopControl,function(self,tw){if(self.label)self.label=self.label.transform(tw)});_(Cola.AST_If,function(self,tw){self.condition=self.condition.transform(tw);self.body=self.body.transform(tw);if(self.alternative)self.alternative=self.alternative.transform(tw)});_(Cola.AST_Switch,function(self,tw){self.expression=self.expression.transform(tw);self.body=do_list(self.body,tw)});_(Cola.AST_Case,function(self,tw){self.expression=self.expression.transform(tw);self.body=do_list(self.body,tw)});_(Cola.AST_Try,function(self,tw){self.body=do_list(self.body,tw);if(self.bcatch)self.bcatch=self.bcatch.transform(tw);if(self.bfinally)self.bfinally=self.bfinally.transform(tw)});_(Cola.AST_Catch,function(self,tw){self.argname=self.argname.transform(tw);self.body=do_list(self.body,tw)});_(Cola.AST_Definitions,function(self,tw){self.definitions=do_list(self.definitions,tw)});_(Cola.AST_VarDef,function(self,tw){self.name=self.name.transform(tw);if(self.value)self.value=self.value.transform(tw)});_(Cola.AST_Lambda,function(self,tw){if(self.name)self.name=self.name.transform(tw);self.argnames=do_list(self.argnames,tw);self.body=do_list(self.body,tw)});_(Cola.AST_Call,function(self,tw){self.expression=self.expression.transform(tw);self.args=do_list(self.args,tw)});_(Cola.AST_Seq,function(self,tw){self.car=self.car.transform(tw);self.cdr=self.cdr.transform(tw)});_(Cola.AST_Dot,function(self,tw){self.expression=self.expression.transform(tw)});_(Cola.AST_Sub,function(self,tw){self.expression=self.expression.transform(tw);self.property=self.property.transform(tw)});_(Cola.AST_Unary,function(self,tw){self.expression=self.expression.transform(tw)});_(Cola.AST_Binary,function(self,tw){self.left=self.left.transform(tw);self.right=self.right.transform(tw)});_(Cola.AST_Conditional,function(self,tw){self.condition=self.condition.transform(tw);self.consequent=self.consequent.transform(tw);self.alternative=self.alternative.transform(tw)});_(Cola.AST_Array,function(self,tw){self.elements=do_list(self.elements,tw)});_(Cola.AST_Object,function(self,tw){self.properties=do_list(self.properties,tw)});_(Cola.AST_ObjectProperty,function(self,tw){self.value=self.value.transform(tw)})})();"use strict";!this.Cola&&(this.Cola={});Cola.SymbolDef=function(scope,index,orig){this.name=orig.name;this.orig=[orig];this.scope=scope;this.references=[];this.global=false;this.mangled_name=null;this.undeclared=false;this.constant=false;this.index=index};Cola.SymbolDef.prototype={unmangleable:function(options){return this.global&&!(options&&options.toplevel)||this.undeclared||!(options&&options.eval)&&(this.scope.uses_eval||this.scope.uses_with)},mangle:function(options){if(!this.mangled_name&&!this.unmangleable(options)){var s=this.scope;if(!options.screw_ie8&&this.orig[0]instanceof Cola.AST_SymbolLambda)s=s.parent_scope;this.mangled_name=s.next_mangled(options,this)}}};Cola.AST_Toplevel.DEFMETHOD("figure_out_scope",function(options){options=Cola.defaults(options,{screw_ie8:false});var self=this;var scope=self.parent_scope=null;var defun=null;var nesting=0;var tw=new Cola.TreeWalker(function(node,descend){if(options.screw_ie8&&node instanceof Cola.AST_Catch){var save_scope=scope;scope=new Cola.AST_Scope(node);scope.init_scope_vars(nesting);scope.parent_scope=save_scope;descend();scope=save_scope;return true}if(node instanceof Cola.AST_Scope){node.init_scope_vars(nesting); var save_scope=node.parent_scope=scope;var save_defun=defun;defun=scope=node;++nesting;descend();--nesting;scope=save_scope;defun=save_defun;return true}if(node instanceof Cola.AST_Directive){node.scope=scope;Cola.push_uniq(scope.directives,node.value);return true}if(node instanceof Cola.AST_With){for(var s=scope;s;s=s.parent_scope)s.uses_with=true;return}if(node instanceof Cola.AST_Symbol){node.scope=scope}if(node instanceof Cola.AST_SymbolLambda){defun.def_function(node)}else if(node instanceof Cola.AST_SymbolDefun){(node.scope=defun.parent_scope).def_function(node)}else if(node instanceof Cola.AST_SymbolVar||node instanceof Cola.AST_SymbolConst){var def=defun.def_variable(node);def.constant=node instanceof Cola.AST_SymbolConst;def.init=tw.parent().value}else if(node instanceof Cola.AST_SymbolCatch){(options.screw_ie8?scope:defun).def_variable(node)}});self.walk(tw);var func=null;var globals=self.globals=new Cola.Dictionary;var tw=new Cola.TreeWalker(function(node,descend){if(node instanceof Cola.AST_Lambda){var prev_func=func;func=node;descend();func=prev_func;return true}if(node instanceof Cola.AST_SymbolRef){var name=node.name;var sym=node.scope.find_variable(name);if(!sym){var g;if(globals.has(name)){g=globals.get(name)}else{g=new Cola.SymbolDef(self,globals.size(),node);g.undeclared=true;g.global=true;globals.set(name,g)}node.thedef=g;if(name=="eval"&&tw.parent()instanceof Cola.AST_Call){for(var s=node.scope;s&&!s.uses_eval;s=s.parent_scope)s.uses_eval=true}if(func&&name=="arguments"){func.uses_arguments=true}}else{node.thedef=sym}node.reference();return true}});self.walk(tw)});Cola.AST_Scope.DEFMETHOD("init_scope_vars",function(nesting){this.directives=[];this.variables=new Cola.Dictionary;this.functions=new Cola.Dictionary;this.uses_with=false;this.uses_eval=false;this.parent_scope=null;this.enclosed=[];this.cname=-1;this.nesting=nesting});Cola.AST_Scope.DEFMETHOD("strict",function(){return this.has_directive("use strict")});Cola.AST_Lambda.DEFMETHOD("init_scope_vars",function(){Cola.AST_Scope.prototype.init_scope_vars.apply(this,arguments);this.uses_arguments=false});Cola.AST_SymbolRef.DEFMETHOD("reference",function(){var def=this.definition();def.references.push(this);var s=this.scope;while(s){Cola.push_uniq(s.enclosed,def);if(s===def.scope)break;s=s.parent_scope}this.frame=this.scope.nesting-def.scope.nesting});Cola.AST_Scope.DEFMETHOD("find_variable",function(name){if(name instanceof Cola.AST_Symbol)name=name.name;return this.variables.get(name)||this.parent_scope&&this.parent_scope.find_variable(name)});Cola.AST_Scope.DEFMETHOD("has_directive",function(value){return this.parent_scope&&this.parent_scope.has_directive(value)||(this.directives.indexOf(value)>=0?this:null)});Cola.AST_Scope.DEFMETHOD("def_function",function(symbol){this.functions.set(symbol.name,this.def_variable(symbol))});Cola.AST_Scope.DEFMETHOD("def_variable",function(symbol){var def;if(!this.variables.has(symbol.name)){def=new Cola.SymbolDef(this,this.variables.size(),symbol);this.variables.set(symbol.name,def);def.global=!this.parent_scope}else{def=this.variables.get(symbol.name);def.orig.push(symbol)}return symbol.thedef=def});Cola.AST_Scope.DEFMETHOD("next_mangled",function(options){var ext=this.enclosed;out:while(true){var m=Cola.base54(++this.cname);if(!Cola.is_identifier(m,true))continue;if(options.except.indexOf(m)>=0)continue;for(var i=ext.length;--i>=0;){var sym=ext[i];var name=sym.mangled_name||sym.unmangleable(options)&&sym.name;if(m==name)continue out}return m}});Cola.AST_Function.DEFMETHOD("next_mangled",function(options,def){var tricky_def=def.orig[0]instanceof Cola.AST_SymbolFunarg&&this.name&&this.name.definition();while(true){var name=Cola.AST_Lambda.prototype.next_mangled.call(this,options,def);if(!(tricky_def&&tricky_def.mangled_name==name))return name}});Cola.AST_Scope.DEFMETHOD("references",function(sym){if(sym instanceof Cola.AST_Symbol)sym=sym.definition();return this.enclosed.indexOf(sym)<0?null:sym});Cola.AST_Symbol.DEFMETHOD("unmangleable",function(options){return this.definition().unmangleable(options)});Cola.AST_SymbolAccessor.DEFMETHOD("unmangleable",function(){return true});Cola.AST_Label.DEFMETHOD("unmangleable",function(){return false});Cola.AST_Symbol.DEFMETHOD("unreferenced",function(){return this.definition().references.length==0&&!(this.scope.uses_eval||this.scope.uses_with)});Cola.AST_Symbol.DEFMETHOD("undeclared",function(){return this.definition().undeclared});Cola.AST_LabelRef.DEFMETHOD("undeclared",function(){return false});Cola.AST_Label.DEFMETHOD("undeclared",function(){return false});Cola.AST_Symbol.DEFMETHOD("definition",function(){return this.thedef});Cola.AST_Symbol.DEFMETHOD("global",function(){return this.definition().global});Cola.AST_Toplevel.DEFMETHOD("_default_mangler_options",function(options){return Cola.defaults(options,{except:[],eval:false,sort:false,toplevel:false,screw_ie8:false})});Cola.AST_Toplevel.DEFMETHOD("mangle_names",function(options){options=this._default_mangler_options(options);var lname=-1;var to_mangle=[];var tw=new Cola.TreeWalker(function(node,descend){if(node instanceof Cola.AST_LabeledStatement){var save_nesting=lname;descend();lname=save_nesting;return true}if(node instanceof Cola.AST_Scope){var p=tw.parent(),a=[];node.variables.each(function(symbol){if(options.except.indexOf(symbol.name)<0){a.push(symbol)}});if(options.sort)a.sort(function(a,b){return b.references.length-a.references.length});to_mangle.push.apply(to_mangle,a);return}if(node instanceof Cola.AST_Label){var name;do name=Cola.base54(++lname);while(!Cola.is_identifier(name,true));node.mangled_name=name;return true}if(options.screw_ie8&&node instanceof Cola.AST_SymbolCatch){to_mangle.push(node.definition());return}});this.walk(tw);to_mangle.forEach(function(def){def.mangle(options)})});Cola.AST_Toplevel.DEFMETHOD("compute_char_frequency",function(options){options=this._default_mangler_options(options);var tw=new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Constant)Cola.base54.consider(node.print_to_string());else if(node instanceof Cola.AST_Return)Cola.base54.consider("return");else if(node instanceof Cola.AST_Throw)Cola.base54.consider("throw");else if(node instanceof Cola.AST_Continue)Cola.base54.consider("continue");else if(node instanceof Cola.AST_Break)Cola.base54.consider("break");else if(node instanceof Cola.AST_Debugger)Cola.base54.consider("debugger");else if(node instanceof Cola.AST_Directive)Cola.base54.consider(node.value);else if(node instanceof Cola.AST_While)Cola.base54.consider("while");else if(node instanceof Cola.AST_Do)Cola.base54.consider("do while");else if(node instanceof Cola.AST_If){Cola.base54.consider("if");if(node.alternative)Cola.base54.consider("else")}else if(node instanceof Cola.AST_Var)Cola.base54.consider("var");else if(node instanceof Cola.AST_Const)Cola.base54.consider("const");else if(node instanceof Cola.AST_Lambda)Cola.base54.consider("function");else if(node instanceof Cola.AST_For)Cola.base54.consider("for");else if(node instanceof Cola.AST_ForIn)Cola.base54.consider("for in");else if(node instanceof Cola.AST_Switch)Cola.base54.consider("switch");else if(node instanceof Cola.AST_Case)Cola.base54.consider("case");else if(node instanceof Cola.AST_Default)Cola.base54.consider("default");else if(node instanceof Cola.AST_With)Cola.base54.consider("with");else if(node instanceof Cola.AST_ObjectSetter)Cola.base54.consider("set"+node.key);else if(node instanceof Cola.AST_ObjectGetter)Cola.base54.consider("get"+node.key);else if(node instanceof Cola.AST_ObjectKeyVal)Cola.base54.consider(node.key);else if(node instanceof Cola.AST_New)Cola.base54.consider("new");else if(node instanceof Cola.AST_This)Cola.base54.consider("this");else if(node instanceof Cola.AST_Try)Cola.base54.consider("try");else if(node instanceof Cola.AST_Catch)Cola.base54.consider("catch");else if(node instanceof Cola.AST_Finally)Cola.base54.consider("finally");else if(node instanceof Cola.AST_Symbol&&node.unmangleable(options))Cola.base54.consider(node.name);else if(node instanceof Cola.AST_Unary||node instanceof Cola.AST_Binary)Cola.base54.consider(node.operator);else if(node instanceof Cola.AST_Dot)Cola.base54.consider(node.property)});this.walk(tw);Cola.base54.sort()});Cola.base54=function(){var string="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";var chars,frequency;function reset(){frequency=Object.create(null);chars=string.split("").map(function(ch){return ch.charCodeAt(0)});chars.forEach(function(ch){frequency[ch]=0})}base54.consider=function(str){for(var i=str.length;--i>=0;){var code=str.charCodeAt(i);if(code in frequency)++frequency[code]}};base54.sort=function(){chars=Cola.mergeSort(chars,function(a,b){if(Cola.is_digit(a)&&!Cola.is_digit(b))return 1;if(Cola.is_digit(b)&&!Cola.is_digit(a))return-1;return frequency[b]-frequency[a]})};base54.reset=reset;reset();base54.get=function(){return chars};base54.freq=function(){return frequency};function base54(num){var ret="",base=54;do{ret+=String.fromCharCode(chars[num%base]);num=Math.floor(num/base);base=64}while(num>0);return ret}return base54}();Cola.AST_Toplevel.DEFMETHOD("scope_warnings",function(options){options=Cola.defaults(options,{undeclared:false,unreferenced:true,assign_to_global:true,func_arguments:true,nested_defuns:true,eval:true});var tw=new Cola.TreeWalker(function(node){if(options.undeclared&&node instanceof Cola.AST_SymbolRef&&node.undeclared()){Cola.AST_Node.warn("Undeclared symbol: {name} [{file}:{line},{col}]",{name:node.name,file:node.start.file,line:node.start.line,col:node.start.col})}if(options.assign_to_global){var sym=null;if(node instanceof Cola.AST_Assign&&node.left instanceof Cola.AST_SymbolRef)sym=node.left;else if(node instanceof Cola.AST_ForIn&&node.init instanceof Cola.AST_SymbolRef)sym=node.init;if(sym&&(sym.undeclared()||sym.global()&&sym.scope!==sym.definition().scope)){Cola.AST_Node.warn("{msg}: {name} [{file}:{line},{col}]",{msg:sym.undeclared()?"Accidental global?":"Assignment to global",name:sym.name,file:sym.start.file,line:sym.start.line,col:sym.start.col})}}if(options.eval&&node instanceof Cola.AST_SymbolRef&&node.undeclared()&&node.name=="eval"){Cola.AST_Node.warn("Eval is used [{file}:{line},{col}]",node.start)}if(options.unreferenced&&(node instanceof Cola.AST_SymbolDeclaration||node instanceof Cola.AST_Label)&&node.unreferenced()){Cola.AST_Node.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]",{type:node instanceof Cola.AST_Label?"Label":"Symbol",name:node.name,file:node.start.file,line:node.start.line,col:node.start.col})}if(options.func_arguments&&node instanceof Cola.AST_Lambda&&node.uses_arguments){Cola.AST_Node.warn("arguments used in function {name} [{file}:{line},{col}]",{name:node.name?node.name.name:"anonymous",file:node.start.file,line:node.start.line,col:node.start.col})}if(options.nested_defuns&&node instanceof Cola.AST_Defun&&!(tw.parent()instanceof Cola.AST_Scope)){Cola.AST_Node.warn('Function {name} declared in nested statement "{type}" [{file}:{line},{col}]',{name:node.name.name,type:tw.parent().TYPE,file:node.start.file,line:node.start.line,col:node.start.col})}});this.walk(tw)});"use strict";!this.Cola&&(this.Cola={});Cola.OutputStream=function(options){this.options=Cola.defaults(options,{indent_start:0,indent_level:4,quote_keys:false,space_colon:true,ascii_only:false,unescape_regexps:false,inline_script:false,width:80,max_line_len:32e3,beautify:false,source_map:null,bracketize:false,semicolons:true,comments:false,preserve_line:false,screw_ie8:false,preamble:null},true);this.indentation=0;this.current_col=0;this.current_line=1;this.current_pos=0;this.OUTPUT="";this.might_need_space=false;this.might_need_semicolon=false;this.last=null;this.requireSemicolonChars=Cola.makePredicate("( [ + * / - , .");if(this.options.preamble){this.print(this.options.preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}this.stack=[]};Cola.OutputStream.prototype.to_ascii=function(str,identifier){return str.replace(/[\u0080-\uffff]/g,function(ch){var code=ch.charCodeAt(0).toString(16);if(code.length<=2&&!identifier){while(code.length<2)code="0"+code;return"\\x"+code}else{while(code.length<4)code="0"+code;return"\\u"+code}})};Cola.OutputStream.prototype.make_string=function(str){var dq=0,sq=0;str=str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g,function(s){switch(s){case"\\":return"\\\\";case"\b":return"\\b";case"\f":return"\\f";case"\n":return"\\n";case"\r":return"\\r";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case'"':++dq;return'"';case"'":++sq;return"'";case"\x00":return"\\x00"}return s});if(this.options.ascii_only)str=this.to_ascii(str);if(dq>sq)return"'"+str.replace(/\x27/g,"\\'")+"'";else return'"'+str.replace(/\x22/g,'\\"')+'"'};Cola.OutputStream.prototype.encode_string=function(str){var ret=this.make_string(str);if(this.options.inline_script)ret=ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1");return ret};Cola.OutputStream.prototype.make_name=function(name){name=name.toString();if(this.options.ascii_only)name=this.to_ascii(name,true);return name};Cola.OutputStream.prototype.make_indent=function(back){return Cola.repeat_string(" ",this.options.indent_start+this.indentation-back*this.options.indent_level)};Cola.OutputStream.prototype.last_char=function(){return this.last.charAt(this.last.length-1)};Cola.OutputStream.prototype.maybe_newline=function(){if(this.options.max_line_len&&this.current_col>this.options.max_line_len)this.print("\n")};Cola.OutputStream.prototype.print=function(str){str=String(str);var ch=str.charAt(0);if(this.might_need_semicolon){if((!ch||";}".indexOf(ch)<0)&&!/[;]$/.test(this.last)){if(this.options.semicolons||this.requireSemicolonChars(ch)){this.OUTPUT+=";";this.current_col++;this.current_pos++}else{this.OUTPUT+="\n";this.current_pos++;this.current_line++;this.current_col=0}if(!this.options.beautify)this.might_need_space=false}this.might_need_semicolon=false;this.maybe_newline()}if(!this.options.beautify&&this.options.preserve_line&&this.stack[stack.length-1]){var target_line=this.stack[stack.length-1].start.line;while(this.current_line=this.options.width};Cola.OutputStream.prototype.print_name=function(name){this.print(this.make_name(name))};Cola.OutputStream.prototype.print_string=function(str){this.print(this.encode_string(str))};Cola.OutputStream.prototype.option=function(opt){return this.options[opt]};Cola.OutputStream.prototype.push_node=function(node){this.stack.push(node)};Cola.OutputStream.prototype.pop_node=function(){return this.stack.pop()};Cola.OutputStream.prototype.parent=function(n){return this.stack[this.stack.length-2-(n||0)]};(function(){function DEFPRINT(nodetype,generator){nodetype.DEFMETHOD("_codegen",generator)}Cola.AST_Node.DEFMETHOD("print",function(stream,force_parens){var self=this,generator=self._codegen;function doit(){self.add_comments(stream);self.add_source_map(stream);generator(self,stream)}stream.push_node(self);if(force_parens||self.needs_parens(stream)){stream.with_parens(doit)}else{doit()}stream.pop_node()});Cola.AST_Node.DEFMETHOD("print_to_string",function(options){var s=new Cola.OutputStream(options);this.print(s);return s.get()});Cola.AST_Node.DEFMETHOD("add_comments",function(output){var c=output.option("comments"),self=this;if(c){var start=self.start;if(start&&!start._comments_dumped){start._comments_dumped=true;var comments=start.comments_before||[];if(self instanceof Cola.AST_Exit&&self.value){self.value.walk(new Cola.TreeWalker(function(node){if(node.start&&node.start.comments_before){comments=comments.concat(node.start.comments_before);node.start.comments_before=[]}if(node instanceof Cola.AST_Function||node instanceof Cola.AST_Array||node instanceof Cola.AST_Object){return true}}))}if(c.test){comments=comments.filter(function(comment){return c.test(comment.value)})}else if(typeof c=="function"){comments=comments.filter(function(comment){return c(self,comment)})}comments.forEach(function(c){if(/comment[134]/.test(c.type)){output.print("//"+c.value+"\n");output.indent()}else if(c.type=="comment2"){output.print("/*"+c.value+"*/");if(start.nlb){output.print("\n");output.indent()}else{output.space()}}})}}});function PARENS(nodetype,func){nodetype.DEFMETHOD("needs_parens",func)}PARENS(Cola.AST_Node,function(){return false});PARENS(Cola.AST_Function,function(output){return first_in_statement(output)});PARENS(Cola.AST_Object,function(output){return first_in_statement(output)});PARENS(Cola.AST_Unary,function(output){var p=output.parent();return p instanceof Cola.AST_PropAccess&&p.expression===this});PARENS(Cola.AST_Seq,function(output){var p=output.parent();return p instanceof Cola.AST_Call||p instanceof Cola.AST_Unary||p instanceof Cola.AST_Binary||p instanceof Cola.AST_VarDef||p instanceof Cola.AST_PropAccess||p instanceof Cola.AST_Array||p instanceof Cola.AST_ObjectProperty||p instanceof Cola.AST_Conditional});PARENS(Cola.AST_Binary,function(output){var p=output.parent();if(p instanceof Cola.AST_Call&&p.expression===this)return true;if(p instanceof Cola.AST_Unary)return true;if(p instanceof Cola.AST_PropAccess&&p.expression===this)return true;if(p instanceof Cola.AST_Binary){var po=p.operator,pp=Cola.PRECEDENCE[po];var so=this.operator,sp=Cola.PRECEDENCE[so];if(pp>sp||pp==sp&&this===p.right){return true}}});PARENS(Cola.AST_PropAccess,function(output){var p=output.parent();if(p instanceof Cola.AST_New&&p.expression===this){try{this.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Call)throw p}))}catch(ex){if(ex!==p)throw ex;return true}}});PARENS(Cola.AST_Call,function(output){var p=output.parent(),p1;if(p instanceof Cola.AST_New&&p.expression===this)return true;return this.expression instanceof Cola.AST_Function&&p instanceof Cola.AST_PropAccess&&p.expression===this&&(p1=output.parent(1))instanceof Cola.AST_Assign&&p1.left===p});PARENS(Cola.AST_New,function(output){var p=output.parent();if(no_constructor_parens(this,output)&&(p instanceof Cola.AST_PropAccess||p instanceof Cola.AST_Call&&p.expression===this))return true});PARENS(Cola.AST_Number,function(output){var p=output.parent();if(this.getValue()<0&&p instanceof Cola.AST_PropAccess&&p.expression===this)return true});PARENS(Cola.AST_NaN,function(output){var p=output.parent();if(p instanceof Cola.AST_PropAccess&&p.expression===this)return true});function assign_and_conditional_paren_rules(output){var p=output.parent();if(p instanceof Cola.AST_Unary)return true;if(p instanceof Cola.AST_Binary&&!(p instanceof Cola.AST_Assign))return true;if(p instanceof Cola.AST_Call&&p.expression===this)return true;if(p instanceof Cola.AST_Conditional&&p.condition===this)return true;if(p instanceof Cola.AST_PropAccess&&p.expression===this)return true}PARENS(Cola.AST_Assign,assign_and_conditional_paren_rules);PARENS(Cola.AST_Conditional,assign_and_conditional_paren_rules);DEFPRINT(Cola.AST_Directive,function(self,output){output.print_string(self.value);output.semicolon()});DEFPRINT(Cola.AST_Debugger,function(self,output){output.print("debugger");output.semicolon()});function display_body(body,is_toplevel,output){var last=body.length-1;body.forEach(function(stmt,i){if(!(stmt instanceof Cola.AST_EmptyStatement)){output.indent();stmt.print(output);if(!(i==last&&is_toplevel)){output.newline();if(is_toplevel)output.newline()}}})}Cola.AST_StatementWithBody.DEFMETHOD("_do_print_body",function(output){force_statement(this.body,output)});DEFPRINT(Cola.AST_Statement,function(self,output){self.body.print(output);output.semicolon()});DEFPRINT(Cola.AST_Toplevel,function(self,output){display_body(self.body,true,output);output.print("")});DEFPRINT(Cola.AST_LabeledStatement,function(self,output){self.label.print(output);output.colon();self.body.print(output)});DEFPRINT(Cola.AST_SimpleStatement,function(self,output){self.body.print(output);output.semicolon()});function print_bracketed(body,output){if(body.length>0)output.with_block(function(){display_body(body,false,output)});else output.print("{}")}DEFPRINT(Cola.AST_BlockStatement,function(self,output){print_bracketed(self.body,output)});DEFPRINT(Cola.AST_EmptyStatement,function(self,output){output.semicolon()});DEFPRINT(Cola.AST_Do,function(self,output){output.print("do");output.space();self._do_print_body(output);output.space();output.print("while");output.space();output.with_parens(function(){self.condition.print(output)});output.semicolon()});DEFPRINT(Cola.AST_While,function(self,output){output.print("while");output.space();output.with_parens(function(){self.condition.print(output)});output.space();self._do_print_body(output)});DEFPRINT(Cola.AST_For,function(self,output){output.print("for");output.space();output.with_parens(function(){if(self.init){if(self.init instanceof Cola.AST_Definitions){self.init.print(output)}else{parenthesize_for_noin(self.init,output,true)}output.print(";");output.space()}else{output.print(";")}if(self.condition){self.condition.print(output);output.print(";");output.space()}else{output.print(";")}if(self.step){self.step.print(output)}});output.space();self._do_print_body(output)});DEFPRINT(Cola.AST_ForIn,function(self,output){output.print("for");output.space();output.with_parens(function(){self.init.print(output);output.space();output.print("in");output.space();self.object.print(output)});output.space();self._do_print_body(output)});DEFPRINT(Cola.AST_With,function(self,output){output.print("with");output.space();output.with_parens(function(){self.expression.print(output)});output.space();self._do_print_body(output)});Cola.AST_Lambda.DEFMETHOD("_do_print",function(output,nokeyword){var self=this;if(!nokeyword){output.print("function")}if(self.name){output.space();self.name.print(output)}output.with_parens(function(){self.argnames.forEach(function(arg,i){if(i)output.comma();arg.print(output)})});output.space();print_bracketed(self.body,output)});DEFPRINT(Cola.AST_Lambda,function(self,output){self._do_print(output)});Cola.AST_Exit.DEFMETHOD("_do_print",function(output,kind){output.print(kind);if(this.value){output.space();this.value.print(output)}output.semicolon()});DEFPRINT(Cola.AST_Return,function(self,output){self._do_print(output,"return")});DEFPRINT(Cola.AST_Throw,function(self,output){self._do_print(output,"throw")});Cola.AST_LoopControl.DEFMETHOD("_do_print",function(output,kind){output.print(kind);if(this.label){output.space();this.label.print(output)}output.semicolon()});DEFPRINT(Cola.AST_Break,function(self,output){self._do_print(output,"break")});DEFPRINT(Cola.AST_Continue,function(self,output){self._do_print(output,"continue")});function make_then(self,output){if(output.option("bracketize")){make_block(self.body,output);return}if(!self.body)return output.force_semicolon();if(self.body instanceof Cola.AST_Do&&!output.option("screw_ie8")){make_block(self.body,output);return}var b=self.body;while(true){if(b instanceof Cola.AST_If){if(!b.alternative){make_block(self.body,output);return}b=b.alternative}else if(b instanceof Cola.AST_StatementWithBody){b=b.body}else break}force_statement(self.body,output)}DEFPRINT(Cola.AST_If,function(self,output){output.print("if");output.space();output.with_parens(function(){self.condition.print(output)});output.space();if(self.alternative){make_then(self,output);output.space();output.print("else");output.space();force_statement(self.alternative,output)}else{self._do_print_body(output)}});DEFPRINT(Cola.AST_Switch,function(self,output){output.print("switch");output.space();output.with_parens(function(){self.expression.print(output)});output.space();if(self.body.length>0)output.with_block(function(){self.body.forEach(function(stmt,i){if(i)output.newline();output.indent(true);stmt.print(output)})});else output.print("{}")});Cola.AST_SwitchBranch.DEFMETHOD("_do_print_body",function(output){if(this.body.length>0){output.newline();this.body.forEach(function(stmt){output.indent();stmt.print(output);output.newline()})}});DEFPRINT(Cola.AST_Default,function(self,output){output.print("default:");self._do_print_body(output)});DEFPRINT(Cola.AST_Case,function(self,output){output.print("case");output.space();self.expression.print(output);output.print(":");self._do_print_body(output)});DEFPRINT(Cola.AST_Try,function(self,output){output.print("try");output.space();print_bracketed(self.body,output);if(self.bcatch){output.space();self.bcatch.print(output)}if(self.bfinally){output.space();self.bfinally.print(output)}});DEFPRINT(Cola.AST_Catch,function(self,output){output.print("catch");output.space();output.with_parens(function(){self.argname.print(output)});output.space();print_bracketed(self.body,output)});DEFPRINT(Cola.AST_Finally,function(self,output){output.print("finally");output.space();print_bracketed(self.body,output)});Cola.AST_Definitions.DEFMETHOD("_do_print",function(output,kind){output.print(kind);output.space();this.definitions.forEach(function(def,i){if(i)output.comma();def.print(output)});var p=output.parent();var in_for=p instanceof Cola.AST_For||p instanceof Cola.AST_ForIn;var avoid_semicolon=in_for&&p.init===this;if(!avoid_semicolon)output.semicolon()});DEFPRINT(Cola.AST_Var,function(self,output){self._do_print(output,"var")});DEFPRINT(Cola.AST_Const,function(self,output){self._do_print(output,"const")});function parenthesize_for_noin(node,output,noin){if(!noin)node.print(output);else try{node.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Binary&&node.operator=="in")throw output}));node.print(output)}catch(ex){if(ex!==output)throw ex;node.print(output,true)}}DEFPRINT(Cola.AST_VarDef,function(self,output){self.name.print(output);if(self.value){output.space();output.print("=");output.space();var p=output.parent(1);var noin=p instanceof Cola.AST_For||p instanceof Cola.AST_ForIn;parenthesize_for_noin(self.value,output,noin)}});DEFPRINT(Cola.AST_Call,function(self,output){self.expression.print(output);if(self instanceof Cola.AST_New&&no_constructor_parens(self,output))return;output.with_parens(function(){self.args.forEach(function(expr,i){if(i)output.comma();expr.print(output)})})});DEFPRINT(Cola.AST_New,function(self,output){output.print("new");output.space();Cola.AST_Call.prototype._codegen(self,output)});Cola.AST_Seq.DEFMETHOD("_do_print",function(output){this.car.print(output);if(this.cdr){output.comma();if(output.should_break()){output.newline();output.indent()}this.cdr.print(output)}});DEFPRINT(Cola.AST_Seq,function(self,output){self._do_print(output)});DEFPRINT(Cola.AST_Dot,function(self,output){var expr=self.expression;expr.print(output);if(expr instanceof Cola.AST_Number&&expr.getValue()>=0){if(!/[xa-f.]/i.test(output.last())){output.print(".")}}output.print(".");output.add_mapping(self.end);output.print_name(self.property)});DEFPRINT(Cola.AST_Sub,function(self,output){self.expression.print(output);output.print("[");self.property.print(output);output.print("]")});DEFPRINT(Cola.AST_UnaryPrefix,function(self,output){var op=self.operator;output.print(op);if(/^[a-z]/i.test(op))output.space();self.expression.print(output)});DEFPRINT(Cola.AST_UnaryPostfix,function(self,output){self.expression.print(output);output.print(self.operator)});DEFPRINT(Cola.AST_Binary,function(self,output){self.left.print(output);output.space();output.print(self.operator);if(self.operator=="<"&&self.right instanceof Cola.AST_UnaryPrefix&&self.right.operator=="!"&&self.right.expression instanceof Cola.AST_UnaryPrefix&&self.right.expression.operator=="--"){output.print(" ")}else{output.space()}self.right.print(output)});DEFPRINT(Cola.AST_Conditional,function(self,output){self.condition.print(output);output.space();output.print("?");output.space();self.consequent.print(output);output.space();output.colon();self.alternative.print(output)});DEFPRINT(Cola.AST_Array,function(self,output){output.with_square(function(){var a=self.elements,len=a.length;if(len>0)output.space();a.forEach(function(exp,i){if(i)output.comma();exp.print(output);if(i===len-1&&exp instanceof Cola.AST_Hole)output.comma()});if(len>0)output.space()})});DEFPRINT(Cola.AST_Object,function(self,output){if(self.properties.length>0)output.with_block(function(){self.properties.forEach(function(prop,i){if(i){output.print(",");output.newline()}output.indent();prop.print(output)});output.newline()});else output.print("{}")});DEFPRINT(Cola.AST_ObjectKeyVal,function(self,output){var key=self.key;if(output.option("quote_keys")){output.print_string(key+"")}else if((typeof key=="number"||!output.option("beautify")&&+key+""==key)&&parseFloat(key)>=0){output.print(make_num(key))}else if(Cola.RESERVED_WORDS(key)?output.option("screw_ie8"):Cola.is_identifier_string(key)){output.print_name(key)}else{output.print_string(key)}output.colon();self.value.print(output)});DEFPRINT(Cola.AST_ObjectSetter,function(self,output){output.print("set");output.space();self.key.print(output);self.value._do_print(output,true)});DEFPRINT(Cola.AST_ObjectGetter,function(self,output){output.print("get");output.space();self.key.print(output);self.value._do_print(output,true)});DEFPRINT(Cola.AST_Symbol,function(self,output){var def=self.definition();output.print_name(def?def.mangled_name||def.name:self.name) });DEFPRINT(Cola.AST_Undefined,function(self,output){output.print("void 0")});DEFPRINT(Cola.AST_Hole,Cola.noop);DEFPRINT(Cola.AST_Infinity,function(self,output){output.print("1/0")});DEFPRINT(Cola.AST_NaN,function(self,output){output.print("0/0")});DEFPRINT(Cola.AST_This,function(self,output){output.print("this")});DEFPRINT(Cola.AST_Constant,function(self,output){output.print(self.getValue())});DEFPRINT(Cola.AST_String,function(self,output){output.print_string(self.getValue())});DEFPRINT(Cola.AST_Number,function(self,output){output.print(make_num(self.getValue()))});function regexp_safe_literal(code){return[92,47,46,43,42,63,40,41,91,93,123,125,36,94,58,124,33,10,13,0,65279,8232,8233].indexOf(code)<0}DEFPRINT(Cola.AST_RegExp,function(self,output){var str=self.getValue().toString();if(output.option("ascii_only")){str=output.to_ascii(str)}else if(output.option("unescape_regexps")){str=str.split("\\\\").map(function(str){return str.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g,function(s){var code=parseInt(s.substr(2),16);return regexp_safe_literal(code)?String.fromCharCode(code):s})}).join("\\\\")}output.print(str);var p=output.parent();if(p instanceof Cola.AST_Binary&&/^in/.test(p.operator)&&p.left===self)output.print(" ")});function force_statement(stat,output){if(output.option("bracketize")){if(!stat||stat instanceof Cola.AST_EmptyStatement)output.print("{}");else if(stat instanceof Cola.AST_BlockStatement)stat.print(output);else output.with_block(function(){output.indent();stat.print(output);output.newline()})}else{if(!stat||stat instanceof Cola.AST_EmptyStatement)output.force_semicolon();else stat.print(output)}}function first_in_statement(output){var a=output.stack,i=a.length,node=a[--i],p=a[--i];while(i>0){if(p instanceof Cola.AST_Statement&&p.body===node)return true;if(p instanceof Cola.AST_Seq&&p.car===node||p instanceof Cola.AST_Call&&p.expression===node&&!(p instanceof Cola.AST_New)||p instanceof Cola.AST_Dot&&p.expression===node||p instanceof Cola.AST_Sub&&p.expression===node||p instanceof Cola.AST_Conditional&&p.condition===node||p instanceof Cola.AST_Binary&&p.left===node||p instanceof Cola.AST_UnaryPostfix&&p.expression===node){node=p;p=a[--i]}else{return false}}}function no_constructor_parens(self,output){return self.args.length==0&&!output.option("beautify")}function best_of(a){var best=a[0],len=best.length;for(var i=1;i=0){a.push("0x"+num.toString(16).toLowerCase(),"0"+num.toString(8))}else{a.push("-0x"+(-num).toString(16).toLowerCase(),"-0"+(-num).toString(8))}if(m=/^(.*?)(0+)$/.exec(num)){a.push(m[1]+"e"+m[2].length)}}else if(m=/^0?\.(0+)(.*)$/.exec(num)){a.push(m[2]+"e-"+(m[1].length+m[2].length),str.substr(str.indexOf(".")))}return best_of(a)}function make_block(stmt,output){if(stmt instanceof Cola.AST_BlockStatement){stmt.print(output);return}output.with_block(function(){output.indent();stmt.print(output);output.newline()})}function DEFMAP(nodetype,generator){nodetype.DEFMETHOD("add_source_map",function(stream){generator(this,stream)})}DEFMAP(Cola.AST_Node,Cola.noop);function basic_sourcemap_gen(self,output){output.add_mapping(self.start)}DEFMAP(Cola.AST_Directive,basic_sourcemap_gen);DEFMAP(Cola.AST_Debugger,basic_sourcemap_gen);DEFMAP(Cola.AST_Symbol,basic_sourcemap_gen);DEFMAP(Cola.AST_Jump,basic_sourcemap_gen);DEFMAP(Cola.AST_StatementWithBody,basic_sourcemap_gen);DEFMAP(Cola.AST_LabeledStatement,Cola.noop);DEFMAP(Cola.AST_Lambda,basic_sourcemap_gen);DEFMAP(Cola.AST_Switch,basic_sourcemap_gen);DEFMAP(Cola.AST_SwitchBranch,basic_sourcemap_gen);DEFMAP(Cola.AST_BlockStatement,basic_sourcemap_gen);DEFMAP(Cola.AST_Toplevel,Cola.noop);DEFMAP(Cola.AST_New,basic_sourcemap_gen);DEFMAP(Cola.AST_Try,basic_sourcemap_gen);DEFMAP(Cola.AST_Catch,basic_sourcemap_gen);DEFMAP(Cola.AST_Finally,basic_sourcemap_gen);DEFMAP(Cola.AST_Definitions,basic_sourcemap_gen);DEFMAP(Cola.AST_Constant,basic_sourcemap_gen);DEFMAP(Cola.AST_ObjectProperty,function(self,output){output.add_mapping(self.start,self.key)})})();"use strict";!this.Cola&&(this.Cola={});Cola.Compressor=function(options,false_by_default){if(!(this instanceof Cola.Compressor))return new Cola.Compressor(options,false_by_default);Cola.TreeTransformer.call(this,this.before,this.after);this.options=Cola.defaults(options,{sequences:!false_by_default,properties:!false_by_default,dead_code:!false_by_default,drop_debugger:!false_by_default,unsafe:false,unsafe_comps:false,conditionals:!false_by_default,comparisons:!false_by_default,evaluate:!false_by_default,booleans:!false_by_default,loops:!false_by_default,unused:!false_by_default,hoist_funs:!false_by_default,keep_fargs:false,hoist_vars:false,if_return:!false_by_default,join_vars:!false_by_default,cascade:!false_by_default,side_effects:!false_by_default,pure_getters:false,pure_funcs:null,negate_iife:!false_by_default,screw_ie8:false,drop_console:false,angular:false,warnings:true,global_defs:{},is_js:false},true)};Cola.Compressor.prototype=new Cola.TreeTransformer;Cola.merge(Cola.Compressor.prototype,{option:function(key){return this.options[key]},warn:function(){if(this.options.warnings)Cola.AST_Node.warn.apply(Cola.AST_Node,arguments)},before:function(node,descend,in_list){if(node._squeezed)return node;var was_scope=false;if(node instanceof Cola.AST_Scope){node=node.hoist_declarations(this);was_scope=true}descend(node,this);node=node.optimize(this);if(was_scope&&node instanceof Cola.AST_Scope){node.drop_unused(this);descend(node,this)}node._squeezed=true;return node}});Cola.Compressor.MathFuncs={abs:true,acos:true,asin:true,atan:true,atan2:true,ceil:true,cos:true,exp:true,floor:true,imul:true,log:true,max:true,min:true,pow:true,round:true,sin:true,sqrt:true,tan:true};(function(){function OPT(node,optimizer){node.DEFMETHOD("optimize",function(compressor){var self=this;if(self._optimized)return self;var opt=optimizer(self,compressor);opt._optimized=true;if(opt===self)return opt;return opt.transform(compressor)})}OPT(Cola.AST_Node,function(self,compressor){return self});Cola.AST_Node.DEFMETHOD("equivalent_to",function(node){return this.print_to_string()==node.print_to_string()});function make_node(ctor,orig,props){if(!props)props={};if(orig){if(!props.start)props.start=orig.start;if(!props.end)props.end=orig.end}return new ctor(props)}function make_node_from_constant(compressor,val,orig){if(val instanceof Cola.AST_Node)return val.transform(compressor);switch(typeof val){case"string":return make_node(Cola.AST_String,orig,{value:val}).optimize(compressor);case"number":return make_node(isNaN(val)?Cola.AST_NaN:Cola.AST_Number,orig,{value:val}).optimize(compressor);case"boolean":return make_node(val?Cola.AST_True:Cola.AST_False,orig).optimize(compressor);case"undefined":return make_node(Cola.AST_Undefined,orig).optimize(compressor);default:if(val===null){return make_node(Cola.AST_Null,orig).optimize(compressor)}if(val instanceof RegExp){return make_node(Cola.AST_RegExp,orig).optimize(compressor)}throw new Error(Cola.string_template("Can't handle constant of type: {type}",{type:typeof val}))}}function as_statement_array(thing){if(thing===null)return[];if(thing instanceof Cola.AST_BlockStatement)return thing.body;if(thing instanceof Cola.AST_EmptyStatement)return[];if(thing instanceof Cola.AST_Statement)return[thing];throw new Error("Can't convert thing to statement array")}function is_empty(thing){if(thing===null)return true;if(thing instanceof Cola.AST_EmptyStatement)return true;if(thing instanceof Cola.AST_BlockStatement)return thing.body.length==0;return false}function loop_body(x){if(x instanceof Cola.AST_Switch)return x;if(x instanceof Cola.AST_For||x instanceof Cola.AST_ForIn||x instanceof Cola.AST_DWLoop){return x.body instanceof Cola.AST_BlockStatement?x.body:x}return x}function tighten_body(statements,compressor){var CHANGED;do{CHANGED=false;if(compressor.option("angular")){statements=process_for_angular(statements)}statements=eliminate_spurious_blocks(statements);if(compressor.option("dead_code")){statements=eliminate_dead_code(statements,compressor)}if(compressor.option("if_return")){statements=handle_if_return(statements,compressor)}if(compressor.option("sequences")){statements=sequencesize(statements,compressor)}if(compressor.option("join_vars")){statements=join_consecutive_vars(statements,compressor)}}while(CHANGED);if(compressor.option("negate_iife")){negate_iifes(statements,compressor)}return statements;function process_for_angular(statements){function make_injector(func,name){return make_node(Cola.AST_SimpleStatement,func,{body:make_node(Cola.AST_Assign,func,{operator:"=",left:make_node(Cola.AST_Dot,name,{expression:make_node(Cola.AST_SymbolRef,name,name),property:"$inject"}),right:make_node(Cola.AST_Array,func,{elements:func.argnames.map(function(sym){return make_node(Cola.AST_String,sym,{value:sym.name})})})})})}return statements.reduce(function(a,stat){a.push(stat);var token=stat.start;var comments=token.comments_before;if(comments&&comments.length>0){var last=comments.pop();if(/@ngInject/.test(last.value)){if(stat instanceof Cola.AST_Defun){a.push(make_injector(stat,stat.name))}else if(stat instanceof Cola.AST_Definitions){stat.definitions.forEach(function(def){if(def.value&&def.value instanceof Cola.AST_Lambda){a.push(make_injector(def.value,def.name))}})}else{compressor.warn("Unknown statement marked with @ngInject [{file}:{line},{col}]",token)}}}return a},[])}function eliminate_spurious_blocks(statements){var seen_dirs=[];return statements.reduce(function(a,stat){if(stat instanceof Cola.AST_BlockStatement){CHANGED=true;a.push.apply(a,eliminate_spurious_blocks(stat.body))}else if(stat instanceof Cola.AST_EmptyStatement){CHANGED=true}else if(stat instanceof Cola.AST_Directive){if(seen_dirs.indexOf(stat.value)<0){a.push(stat);seen_dirs.push(stat.value)}else{CHANGED=true}}else{a.push(stat)}return a},[])}function handle_if_return(statements,compressor){var self=compressor.self();var in_lambda=self instanceof Cola.AST_Lambda;var ret=[];loop:for(var i=statements.length;--i>=0;){var stat=statements[i];switch(true){case in_lambda&&stat instanceof Cola.AST_Return&&!stat.value&&ret.length==0:CHANGED=true;continue loop;case stat instanceof Cola.AST_If:if(stat.body instanceof Cola.AST_Return){if((in_lambda&&ret.length==0||ret[0]instanceof Cola.AST_Return&&!ret[0].value)&&!stat.body.value&&!stat.alternative){CHANGED=true;var cond=make_node(Cola.AST_SimpleStatement,stat.condition,{body:stat.condition});ret.unshift(cond);continue loop}if(ret[0]instanceof Cola.AST_Return&&stat.body.value&&ret[0].value&&!stat.alternative){CHANGED=true;stat=stat.clone();stat.alternative=ret[0];ret[0]=stat.transform(compressor);continue loop}if((ret.length==0||ret[0]instanceof Cola.AST_Return)&&stat.body.value&&!stat.alternative&&in_lambda){CHANGED=true;stat=stat.clone();stat.alternative=ret[0]||make_node(Cola.AST_Return,stat,{value:make_node(Cola.AST_Undefined,stat)});ret[0]=stat.transform(compressor);continue loop}if(!stat.body.value&&in_lambda){CHANGED=true;stat=stat.clone();stat.condition=stat.condition.negate(compressor);stat.body=make_node(Cola.AST_BlockStatement,stat,{body:as_statement_array(stat.alternative).concat(ret)});stat.alternative=null;ret=[stat.transform(compressor)];continue loop}if(ret.length==1&&in_lambda&&ret[0]instanceof Cola.AST_SimpleStatement&&(!stat.alternative||stat.alternative instanceof Cola.AST_SimpleStatement)){CHANGED=true;ret.push(make_node(Cola.AST_Return,ret[0],{value:make_node(Cola.AST_Undefined,ret[0])}).transform(compressor));ret=as_statement_array(stat.alternative).concat(ret);ret.unshift(stat);continue loop}}var ab=aborts(stat.body);var lct=ab instanceof Cola.AST_LoopControl?compressor.loopcontrol_target(ab.label):null;if(ab&&(ab instanceof Cola.AST_Return&&!ab.value&&in_lambda||ab instanceof Cola.AST_Continue&&self===loop_body(lct)||ab instanceof Cola.AST_Break&&lct instanceof Cola.AST_BlockStatement&&self===lct)){if(ab.label){Cola.remove(ab.label.thedef.references,ab)}CHANGED=true;var body=as_statement_array(stat.body).slice(0,-1);stat=stat.clone();stat.condition=stat.condition.negate(compressor);stat.body=make_node(Cola.AST_BlockStatement,stat,{body:as_statement_array(stat.alternative).concat(ret)});stat.alternative=make_node(Cola.AST_BlockStatement,stat,{body:body});ret=[stat.transform(compressor)];continue loop}var ab=aborts(stat.alternative);var lct=ab instanceof Cola.AST_LoopControl?compressor.loopcontrol_target(ab.label):null;if(ab&&(ab instanceof Cola.AST_Return&&!ab.value&&in_lambda||ab instanceof Cola.AST_Continue&&self===loop_body(lct)||ab instanceof Cola.AST_Break&&lct instanceof Cola.AST_BlockStatement&&self===lct)){if(ab.label){Cola.remove(ab.label.thedef.references,ab)}CHANGED=true;stat=stat.clone();stat.body=make_node(Cola.AST_BlockStatement,stat.body,{body:as_statement_array(stat.body).concat(ret)});stat.alternative=make_node(Cola.AST_BlockStatement,stat.alternative,{body:as_statement_array(stat.alternative).slice(0,-1)});ret=[stat.transform(compressor)];continue loop}ret.unshift(stat);break;default:ret.unshift(stat);break}}return ret}function eliminate_dead_code(statements,compressor){var has_quit=false;var orig=statements.length;var self=compressor.self();statements=statements.reduce(function(a,stat){if(has_quit){extract_declarations_from_unreachable_code(compressor,stat,a)}else{if(stat instanceof Cola.AST_LoopControl){var lct=compressor.loopcontrol_target(stat.label);if(stat instanceof Cola.AST_Break&&lct instanceof Cola.AST_BlockStatement&&loop_body(lct)===self||stat instanceof Cola.AST_Continue&&loop_body(lct)===self){if(stat.label){Cola.remove(stat.label.thedef.references,stat)}}else{a.push(stat)}}else{a.push(stat)}if(aborts(stat))has_quit=true}return a},[]);CHANGED=statements.length!=orig;return statements}function sequencesize(statements,compressor){if(statements.length<2)return statements;var seq=[],ret=[];function push_seq(){seq=Cola.AST_Seq.from_array(seq);if(seq)ret.push(make_node(Cola.AST_SimpleStatement,seq,{body:seq}));seq=[]}statements.forEach(function(stat){if(stat instanceof Cola.AST_SimpleStatement)seq.push(stat.body);else push_seq(),ret.push(stat)});push_seq();ret=sequencesize_2(ret,compressor);CHANGED=ret.length!=statements.length;return ret}function sequencesize_2(statements,compressor){function cons_seq(right){ret.pop();var left=prev.body;if(left instanceof Cola.AST_Seq){left.add(right)}else{left=Cola.AST_Seq.cons(left,right)}return left.transform(compressor)}var ret=[],prev=null;statements.forEach(function(stat){if(prev){if(stat instanceof Cola.AST_For){var opera={};try{prev.body.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Binary&&node.operator=="in")throw opera}));if(stat.init&&!(stat.init instanceof Cola.AST_Definitions)){stat.init=cons_seq(stat.init)}else if(!stat.init){stat.init=prev.body;ret.pop()}}catch(ex){if(ex!==opera)throw ex}}else if(stat instanceof Cola.AST_If){stat.condition=cons_seq(stat.condition)}else if(stat instanceof Cola.AST_With){stat.expression=cons_seq(stat.expression)}else if(stat instanceof Cola.AST_Exit&&stat.value){stat.value=cons_seq(stat.value)}else if(stat instanceof Cola.AST_Exit){stat.value=cons_seq(make_node(Cola.AST_Undefined,stat))}else if(stat instanceof Cola.AST_Switch){stat.expression=cons_seq(stat.expression)}}ret.push(stat);prev=stat instanceof Cola.AST_SimpleStatement?stat:null});return ret}function join_consecutive_vars(statements,compressor){var prev=null;return statements.reduce(function(a,stat){if(stat instanceof Cola.AST_Definitions&&prev&&prev.TYPE==stat.TYPE){prev.definitions=prev.definitions.concat(stat.definitions);CHANGED=true}else if(stat instanceof Cola.AST_For&&prev instanceof Cola.AST_Definitions&&(!stat.init||stat.init.TYPE==prev.TYPE)){CHANGED=true;a.pop();if(stat.init){stat.init.definitions=prev.definitions.concat(stat.init.definitions)}else{stat.init=prev}a.push(stat);prev=stat}else{prev=stat;a.push(stat)}return a},[])}function negate_iifes(statements,compressor){statements.forEach(function(stat){if(stat instanceof Cola.AST_SimpleStatement){stat.body=function transform(thing){return thing.transform(new Cola.TreeTransformer(function(node){if(node instanceof Cola.AST_Call&&node.expression instanceof Cola.AST_Function){return make_node(Cola.AST_UnaryPrefix,node,{operator:"!",expression:node})}else if(node instanceof Cola.AST_Call){node.expression=transform(node.expression)}else if(node instanceof Cola.AST_Seq){node.car=transform(node.car)}else if(node instanceof Cola.AST_Conditional){var expr=transform(node.condition);if(expr!==node.condition){node.condition=expr;var tmp=node.consequent;node.consequent=node.alternative;node.alternative=tmp}}return node}))}(stat.body)}})}}function extract_declarations_from_unreachable_code(compressor,stat,target){compressor.warn("Dropping unreachable code [{file}:{line},{col}]",stat.start);stat.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Definitions){compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]",node.start);node.remove_initializers();target.push(node);return true}if(node instanceof Cola.AST_Defun){target.push(node);return true}if(node instanceof Cola.AST_Scope){return true}}))}(function(def){var unary_bool=["!","delete"];var binary_bool=["in","instanceof","==","!=","===","!==","<","<=",">=",">"];def(Cola.AST_Node,function(){return false});def(Cola.AST_UnaryPrefix,function(){return Cola.member(this.operator,unary_bool)});def(Cola.AST_Binary,function(){return Cola.member(this.operator,binary_bool)||(this.operator=="&&"||this.operator=="||")&&this.left.is_boolean()&&this.right.is_boolean()});def(Cola.AST_Conditional,function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()});def(Cola.AST_Assign,function(){return this.operator=="="&&this.right.is_boolean()});def(Cola.AST_Seq,function(){return this.cdr.is_boolean()});def(Cola.AST_True,function(){return true});def(Cola.AST_False,function(){return true})})(function(node,func){node.DEFMETHOD("is_boolean",func)});(function(def){def(Cola.AST_Node,function(){return false});def(Cola.AST_String,function(){return true});def(Cola.AST_UnaryPrefix,function(){return this.operator=="typeof"});def(Cola.AST_Binary,function(compressor){return this.operator=="+"&&(this.left.is_string(compressor)||this.right.is_string(compressor))});def(Cola.AST_Assign,function(compressor){return(this.operator=="="||this.operator=="+=")&&this.right.is_string(compressor)});def(Cola.AST_Seq,function(compressor){return this.cdr.is_string(compressor)});def(Cola.AST_Conditional,function(compressor){return this.consequent.is_string(compressor)&&this.alternative.is_string(compressor)});def(Cola.AST_Call,function(compressor){return compressor.option("unsafe")&&this.expression instanceof Cola.AST_SymbolRef&&this.expression.name=="String"&&this.expression.undeclared()})})(function(node,func){node.DEFMETHOD("is_string",func)});function best_of(ast1,ast2){return ast1.print_to_string().length>ast2.print_to_string().length?ast2:ast1}(function(def){Cola.AST_Node.DEFMETHOD("evaluate",function(compressor){if(!compressor.option("evaluate"))return[this];try{var val=this._eval(compressor);return[best_of(make_node_from_constant(compressor,val,this),this),val]}catch(ex){if(ex!==def)throw ex;return[this]}});def(Cola.AST_Statement,function(){throw new Error(Cola.string_template("Cannot evaluate a statement [{file}:{line},{col}]",this.start))});def(Cola.AST_Function,function(){throw def});function ev(node,compressor){if(!compressor)throw new Error("Compressor must be passed");return node._eval(compressor)}def(Cola.AST_Node,function(){throw def});def(Cola.AST_Constant,function(){return this.getValue()});def(Cola.AST_UnaryPrefix,function(compressor){var e=this.expression;switch(this.operator){case"!":return!ev(e,compressor);case"typeof":if(e instanceof Cola.AST_Function)return typeof function(){};e=ev(e,compressor);if(e instanceof RegExp)throw def;return typeof e;case"void":return void ev(e,compressor);case"~":return~ev(e,compressor);case"-":e=ev(e,compressor);if(e===0)throw def;return-e;case"+":return+ev(e,compressor)}throw def});def(Cola.AST_Binary,function(c){var left=this.left,right=this.right;switch(this.operator){case"&&":return ev(left,c)&&ev(right,c);case"||":return ev(left,c)||ev(right,c);case"|":return ev(left,c)|ev(right,c);case"&":return ev(left,c)&ev(right,c);case"^":return ev(left,c)^ev(right,c);case"+":return ev(left,c)+ev(right,c);case"*":return ev(left,c)*ev(right,c);case"/":return ev(left,c)/ev(right,c);case"%":return ev(left,c)%ev(right,c);case"-":return ev(left,c)-ev(right,c);case"<<":return ev(left,c)<>":return ev(left,c)>>ev(right,c);case">>>":return ev(left,c)>>>ev(right,c);case"==":return ev(left,c)==ev(right,c);case"===":return ev(left,c)===ev(right,c);case"!=":return ev(left,c)!=ev(right,c);case"!==":return ev(left,c)!==ev(right,c);case"<":return ev(left,c)":return ev(left,c)>ev(right,c);case">=":return ev(left,c)>=ev(right,c);case"in":return ev(left,c)in ev(right,c);case"instanceof":return ev(left,c)instanceof ev(right,c)}throw def});def(Cola.AST_Conditional,function(compressor){return ev(this.condition,compressor)?ev(this.consequent,compressor):ev(this.alternative,compressor)});def(Cola.AST_SymbolRef,function(compressor){var d=this.definition();if(d&&d.constant&&d.init)return ev(d.init,compressor);throw def})})(function(node,func){node.DEFMETHOD("_eval",func)});(function(def){function basic_negation(exp){return make_node(Cola.AST_UnaryPrefix,exp,{operator:"!",expression:exp})}def(Cola.AST_Node,function(){return basic_negation(this)});def(Cola.AST_Statement,function(){throw new Error("Cannot negate a statement")});def(Cola.AST_Function,function(){return basic_negation(this)});def(Cola.AST_UnaryPrefix,function(){if(this.operator=="!")return this.expression;return basic_negation(this)});def(Cola.AST_Seq,function(compressor){var self=this.clone();self.cdr=self.cdr.negate(compressor);return self});def(Cola.AST_Conditional,function(compressor){var self=this.clone();self.consequent=self.consequent.negate(compressor);self.alternative=self.alternative.negate(compressor);return best_of(basic_negation(this),self)});def(Cola.AST_Binary,function(compressor){var self=this.clone(),op=this.operator;if(compressor.option("unsafe_comps")){switch(op){case"<=":self.operator=">";return self;case"<":self.operator=">=";return self;case">=":self.operator="<";return self;case">":self.operator="<=";return self}}switch(op){case"==":self.operator="!=";return self;case"!=":self.operator="==";return self;case"===":self.operator="!==";return self;case"!==":self.operator="===";return self;case"&&":self.operator="||";self.left=self.left.negate(compressor);self.right=self.right.negate(compressor);return best_of(basic_negation(this),self);case"||":self.operator="&&";self.left=self.left.negate(compressor);self.right=self.right.negate(compressor);return best_of(basic_negation(this),self)}return basic_negation(this)})})(function(node,func){node.DEFMETHOD("negate",function(compressor){return func.call(this,compressor)})});(function(def){def(Cola.AST_Node,function(compressor){return true});def(Cola.AST_EmptyStatement,function(compressor){return false});def(Cola.AST_Constant,function(compressor){return false});def(Cola.AST_This,function(compressor){return false});def(Cola.AST_Call,function(compressor){var pure=compressor.option("pure_funcs");if(!pure)return true;return pure.indexOf(this.expression.print_to_string())<0});def(Cola.AST_Block,function(compressor){for(var i=this.body.length;--i>=0;){if(this.body[i].has_side_effects(compressor))return true}return false});def(Cola.AST_SimpleStatement,function(compressor){return this.body.has_side_effects(compressor)});def(Cola.AST_Defun,function(compressor){return true});def(Cola.AST_Function,function(compressor){return false});def(Cola.AST_Binary,function(compressor){return this.left.has_side_effects(compressor)||this.right.has_side_effects(compressor)});def(Cola.AST_Assign,function(compressor){return true});def(Cola.AST_Conditional,function(compressor){return this.condition.has_side_effects(compressor)||this.consequent.has_side_effects(compressor)||this.alternative.has_side_effects(compressor)});def(Cola.AST_Unary,function(compressor){return this.operator=="delete"||this.operator=="++"||this.operator=="--"||this.expression.has_side_effects(compressor)});def(Cola.AST_SymbolRef,function(compressor){return false});def(Cola.AST_Object,function(compressor){for(var i=this.properties.length;--i>=0;)if(this.properties[i].has_side_effects(compressor))return true;return false});def(Cola.AST_ObjectProperty,function(compressor){return this.value.has_side_effects(compressor)});def(Cola.AST_Array,function(compressor){for(var i=this.elements.length;--i>=0;)if(this.elements[i].has_side_effects(compressor))return true;return false});def(Cola.AST_Dot,function(compressor){if(!compressor.option("pure_getters"))return true;return this.expression.has_side_effects(compressor)});def(Cola.AST_Sub,function(compressor){if(!compressor.option("pure_getters"))return true;return this.expression.has_side_effects(compressor)||this.property.has_side_effects(compressor)});def(Cola.AST_PropAccess,function(compressor){return!compressor.option("pure_getters")});def(Cola.AST_Seq,function(compressor){return this.car.has_side_effects(compressor)||this.cdr.has_side_effects(compressor)})})(function(node,func){node.DEFMETHOD("has_side_effects",func)});function aborts(thing){return thing&&thing.aborts()}(function(def){def(Cola.AST_Statement,function(){return null});def(Cola.AST_Jump,function(){return this});function block_aborts(){var n=this.body.length;return n>0&&aborts(this.body[n-1])}def(Cola.AST_BlockStatement,block_aborts);def(Cola.AST_SwitchBranch,block_aborts);def(Cola.AST_If,function(){return this.alternative&&aborts(this.body)&&aborts(this.alternative)})})(function(node,func){node.DEFMETHOD("aborts",func)});OPT(Cola.AST_Directive,function(self,compressor){if(self.scope.has_directive(self.value)!==self.scope){return make_node(Cola.AST_EmptyStatement,self)}return self});OPT(Cola.AST_Debugger,function(self,compressor){if(compressor.option("drop_debugger"))return make_node(Cola.AST_EmptyStatement,self);return self});OPT(Cola.AST_LabeledStatement,function(self,compressor){if(self.body instanceof Cola.AST_Break&&compressor.loopcontrol_target(self.body.label)===self.body){return make_node(Cola.AST_EmptyStatement,self)}return self.label.references.length==0?self.body:self});OPT(Cola.AST_Block,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});OPT(Cola.AST_BlockStatement,function(self,compressor){self.body=tighten_body(self.body,compressor);switch(self.body.length){case 1:return self.body[0];case 0:return make_node(Cola.AST_EmptyStatement,self)}return self});Cola.AST_Scope.DEFMETHOD("drop_unused",function(compressor){var self=this;if(compressor.option("unused")&&!(self instanceof Cola.AST_Toplevel)&&!self.uses_eval){var in_use=[];var initializations=new Cola.Dictionary;var scope=this;var tw=new Cola.TreeWalker(function(node,descend){if(node!==self){if(node instanceof Cola.AST_Defun){initializations.add(node.name.name,node);return true}if(node instanceof Cola.AST_Definitions&&scope===self){node.definitions.forEach(function(def){if(def.value){initializations.add(def.name.name,def.value);if(def.value.has_side_effects(compressor)){def.value.walk(tw)}}});return true}if(node instanceof Cola.AST_SymbolRef){Cola.push_uniq(in_use,node.definition());return true}if(node instanceof Cola.AST_Scope){var save_scope=scope;scope=node;descend();scope=save_scope;return true}}});self.walk(tw);for(var i=0;i=0;){var sym=a[i];if(sym.unreferenced()){a.pop();compressor.warn("Dropping unused function argument {name} [{file}:{line},{col}]",{name:sym.name,file:sym.start.file,line:sym.start.line,col:sym.start.col})}else break}}}if(node instanceof Cola.AST_Defun&&node!==self){if(!Cola.member(node.name.definition(),in_use)){compressor.warn("Dropping unused function {name} [{file}:{line},{col}]",{name:node.name.name,file:node.name.start.file,line:node.name.start.line,col:node.name.start.col});return make_node(Cola.AST_EmptyStatement,node)}return node}if(node instanceof Cola.AST_Definitions&&!(tt.parent()instanceof Cola.AST_ForIn)){var def=node.definitions.filter(function(def){if(Cola.member(def.name.definition(),in_use))return true;var w={name:def.name.name,file:def.name.start.file,line:def.name.start.line,col:def.name.start.col};if(def.value&&def.value.has_side_effects(compressor)){def._unused_side_effects=true;compressor.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",w);return true}compressor.warn("Dropping unused variable {name} [{file}:{line},{col}]",w);return false});def=Cola.mergeSort(def,function(a,b){if(!a.value&&b.value)return-1;if(!b.value&&a.value)return 1;return 0});var side_effects=[];for(var i=0;i0){side_effects.push(x.value);x.value=Cola.AST_Seq.from_array(side_effects);side_effects=[]}++i}}if(side_effects.length>0){side_effects=make_node(Cola.AST_BlockStatement,node,{body:[make_node(Cola.AST_SimpleStatement,node,{body:Cola.AST_Seq.from_array(side_effects)})]})}else{side_effects=null}if(def.length==0&&!side_effects){return make_node(Cola.AST_EmptyStatement,node)}if(def.length==0){return side_effects}node.definitions=def;if(side_effects){side_effects.body.unshift(node);node=side_effects}return node}if(node instanceof Cola.AST_For){descend(node,this);if(node.init instanceof Cola.AST_BlockStatement){var body=node.init.body.slice(0,-1);node.init=node.init.body.slice(-1)[0].body;body.push(node);return in_list?Cola.MAP.splice(body):make_node(Cola.AST_BlockStatement,node,{body:body})}}if(node instanceof Cola.AST_Scope&&node!==self)return node});self.transform(tt)}});Cola.AST_Scope.DEFMETHOD("hoist_declarations",function(compressor){var hoist_funs=compressor.option("hoist_funs");var hoist_vars=compressor.option("hoist_vars");var self=this;if(hoist_funs||hoist_vars){var dirs=[];var hoisted=[];var vars=new Cola.Dictionary,vars_found=0,var_decl=0;self.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Scope&&node!==self)return true;if(node instanceof Cola.AST_Var){++var_decl;return true}}));hoist_vars=hoist_vars&&var_decl>1;var tt=new Cola.TreeTransformer(function before(node){if(node!==self){if(node instanceof Cola.AST_Directive){dirs.push(node);return make_node(Cola.AST_EmptyStatement,node)}if(node instanceof Cola.AST_Defun&&hoist_funs){hoisted.push(node);return make_node(Cola.AST_EmptyStatement,node)}if(node instanceof Cola.AST_Var&&hoist_vars){node.definitions.forEach(function(def){vars.set(def.name.name,def);++vars_found});var seq=node.to_assignments();var p=tt.parent();if(p instanceof Cola.AST_ForIn&&p.init===node){if(seq==null)return node.definitions[0].name;return seq}if(p instanceof Cola.AST_For&&p.init===node){return seq}if(!seq)return make_node(Cola.AST_EmptyStatement,node);return make_node(Cola.AST_SimpleStatement,node,{body:seq})}if(node instanceof Cola.AST_Scope)return node}});self=self.transform(tt);if(vars_found>0){var defs=[];vars.each(function(def,name){if(self instanceof Cola.AST_Lambda&&Cola.find_if(function(x){return x.name==def.name.name -},self.argnames)){vars.del(name)}else{def=def.clone();def.value=null;defs.push(def);vars.set(name,def)}});if(defs.length>0){for(var i=0;i1){if(cond[1]){return make_node(Cola.AST_For,self,{body:self.body})}else if(self instanceof Cola.AST_While){if(compressor.option("dead_code")){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(Cola.AST_BlockStatement,self,{body:a})}}}return self});function if_break_in_loop(self,compressor){function drop_it(rest){rest=as_statement_array(rest);if(self.body instanceof Cola.AST_BlockStatement){self.body=self.body.clone();self.body.body=rest.concat(self.body.body.slice(1));self.body=self.body.transform(compressor)}else{self.body=make_node(Cola.AST_BlockStatement,self.body,{body:rest}).transform(compressor)}if_break_in_loop(self,compressor)}var first=self.body instanceof Cola.AST_BlockStatement?self.body.body[0]:self.body;if(first instanceof Cola.AST_If){if(first.body instanceof Cola.AST_Break&&compressor.loopcontrol_target(first.body.label)===self){if(self.condition){self.condition=make_node(Cola.AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition.negate(compressor)})}else{self.condition=first.condition.negate(compressor)}drop_it(first.alternative)}else if(first.alternative instanceof Cola.AST_Break&&compressor.loopcontrol_target(first.alternative.label)===self){if(self.condition){self.condition=make_node(Cola.AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition})}else{self.condition=first.condition}drop_it(first.body)}}}OPT(Cola.AST_While,function(self,compressor){if(!compressor.option("loops"))return self;self=Cola.AST_DWLoop.prototype.optimize.call(self,compressor);if(self instanceof Cola.AST_While){if_break_in_loop(self,compressor);self=make_node(Cola.AST_For,self,self).transform(compressor)}return self});OPT(Cola.AST_For,function(self,compressor){var cond=self.condition;if(cond){cond=cond.evaluate(compressor);self.condition=cond[0]}if(!compressor.option("loops"))return self;if(cond){if(cond.length>1&&!cond[1]){if(compressor.option("dead_code")){var a=[];if(self.init instanceof Cola.AST_Statement){a.push(self.init)}else if(self.init){a.push(make_node(Cola.AST_SimpleStatement,self.init,{body:self.init}))}extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(Cola.AST_BlockStatement,self,{body:a})}}}if_break_in_loop(self,compressor);return self});OPT(Cola.AST_If,function(self,compressor){if(!compressor.option("conditionals"))return self;var cond=self.condition.evaluate(compressor);self.condition=cond[0];if(cond.length>1){if(cond[1]){compressor.warn("Condition always true [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];if(self.alternative){extract_declarations_from_unreachable_code(compressor,self.alternative,a)}a.push(self.body);return make_node(Cola.AST_BlockStatement,self,{body:a}).transform(compressor)}}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);if(self.alternative)a.push(self.alternative);return make_node(Cola.AST_BlockStatement,self,{body:a}).transform(compressor)}}}if(is_empty(self.alternative))self.alternative=null;var negated=self.condition.negate(compressor);var negated_is_best=best_of(self.condition,negated)===negated;if(self.alternative&&negated_is_best){negated_is_best=false;self.condition=negated;var tmp=self.body;self.body=self.alternative||make_node(Cola.AST_EmptyStatement);self.alternative=tmp}if(is_empty(self.body)&&is_empty(self.alternative)){return make_node(Cola.AST_SimpleStatement,self.condition,{body:self.condition}).transform(compressor)}if(self.body instanceof Cola.AST_SimpleStatement&&self.alternative instanceof Cola.AST_SimpleStatement){return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:self.body.body,alternative:self.alternative.body})}).transform(compressor)}if(is_empty(self.alternative)&&self.body instanceof Cola.AST_SimpleStatement){if(negated_is_best)return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"||",left:negated,right:self.body.body})}).transform(compressor);return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"&&",left:self.condition,right:self.body.body})}).transform(compressor)}if(self.body instanceof Cola.AST_EmptyStatement&&self.alternative&&self.alternative instanceof Cola.AST_SimpleStatement){return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"||",left:self.condition,right:self.alternative.body})}).transform(compressor)}if(self.body instanceof Cola.AST_Exit&&self.alternative instanceof Cola.AST_Exit&&self.body.TYPE==self.alternative.TYPE){return make_node(self.body.CTOR,self,{value:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:self.body.value||make_node(Cola.AST_Undefined,self.body).optimize(compressor),alternative:self.alternative.value||make_node(Cola.AST_Undefined,self.alternative).optimize(compressor)})}).transform(compressor)}if(self.body instanceof Cola.AST_If&&!self.body.alternative&&!self.alternative){self.condition=make_node(Cola.AST_Binary,self.condition,{operator:"&&",left:self.condition,right:self.body.condition}).transform(compressor);self.body=self.body.body}if(aborts(self.body)){if(self.alternative){var alt=self.alternative;self.alternative=null;return make_node(Cola.AST_BlockStatement,self,{body:[self,alt]}).transform(compressor)}}if(aborts(self.alternative)){var body=self.body;self.body=self.alternative;self.condition=negated_is_best?negated:self.condition.negate(compressor);self.alternative=null;return make_node(Cola.AST_BlockStatement,self,{body:[self,body]}).transform(compressor)}return self});OPT(Cola.AST_Switch,function(self,compressor){if(self.body.length==0&&compressor.option("conditionals")){return make_node(Cola.AST_SimpleStatement,self,{body:self.expression}).transform(compressor)}for(;;){var last_branch=self.body[self.body.length-1];if(last_branch){var stat=last_branch.body[last_branch.body.length-1];if(stat instanceof Cola.AST_Break&&loop_body(compressor.loopcontrol_target(stat.label))===self)last_branch.body.pop();if(last_branch instanceof Cola.AST_Default&&last_branch.body.length==0){self.body.pop();continue}}break}var exp=self.expression.evaluate(compressor);out:if(exp.length==2)try{self.expression=exp[0];if(!compressor.option("dead_code"))break out;var value=exp[1];var in_if=false;var in_block=false;var started=false;var stopped=false;var ruined=false;var tt=new Cola.TreeTransformer(function(node,descend,in_list){if(node instanceof Cola.AST_Lambda||node instanceof Cola.AST_SimpleStatement){return node}else if(node instanceof Cola.AST_Switch&&node===self){node=node.clone();descend(node,this);return ruined?node:make_node(Cola.AST_BlockStatement,node,{body:node.body.reduce(function(a,branch){return a.concat(branch.body)},[])}).transform(compressor)}else if(node instanceof Cola.AST_If||node instanceof Cola.AST_Try){var save=in_if;in_if=!in_block;descend(node,this);in_if=save;return node}else if(node instanceof Cola.AST_StatementWithBody||node instanceof Cola.AST_Switch){var save=in_block;in_block=true;descend(node,this);in_block=save;return node}else if(node instanceof Cola.AST_Break&&this.loopcontrol_target(node.label)===self){if(in_if){ruined=true;return node}if(in_block)return node;stopped=true;return in_list?Cola.MAP.skip:make_node(Cola.AST_EmptyStatement,node)}else if(node instanceof Cola.AST_SwitchBranch&&this.parent()===self){if(stopped)return Cola.MAP.skip;if(node instanceof Cola.AST_Case){var exp=node.expression.evaluate(compressor);if(exp.length<2){throw self}if(exp[1]===value||started){started=true;if(aborts(node))stopped=true;descend(node,this);return node}return Cola.MAP.skip}descend(node,this);return node}});tt.stack=compressor.stack.slice();self=self.transform(tt)}catch(ex){if(ex!==self)throw ex}return self});OPT(Cola.AST_Case,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});OPT(Cola.AST_Try,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});Cola.AST_Definitions.DEFMETHOD("remove_initializers",function(){this.definitions.forEach(function(def){def.value=null})});Cola.AST_Definitions.DEFMETHOD("to_assignments",function(){var assignments=this.definitions.reduce(function(a,def){if(def.value){var name=make_node(Cola.AST_SymbolRef,def.name,def.name);a.push(make_node(Cola.AST_Assign,def,{operator:"=",left:name,right:def.value}))}return a},[]);if(assignments.length==0)return null;return Cola.AST_Seq.from_array(assignments)});OPT(Cola.AST_Definitions,function(self,compressor){if(self.definitions.length==0)return make_node(Cola.AST_EmptyStatement,self);return self});OPT(Cola.AST_Function,function(self,compressor){self=Cola.AST_Lambda.prototype.optimize.call(self,compressor);if(compressor.option("unused")){if(self.name&&self.name.unreferenced()){self.name=null}}return self});OPT(Cola.AST_Call,function(self,compressor){if(compressor.option("evaluate")){if(self.expression instanceof Cola.AST_Dot&&Cola.Compressor.MathFuncs[self.expression.property]&&self.expression.expression instanceof Cola.AST_SymbolRef&&self.expression.expression.name=="Math"){var args=[],allstatic=true,val;self.args.some(function(arg){if(arg instanceof Cola.AST_Constant)args.push(arg.value);else return!(allstatic=false)});if(allstatic){val=Math[self.expression.property].apply({},args);if((""+val).length<=15)return make_node(Cola.AST_Number,self,{value:val}).transform(compressor)}}else if(!compressor.option("is_js")&&self.expression instanceof Cola.AST_SymbolRef&&Cola.Compressor.StdFuncs[self.expression.name]&&self.args[0]instanceof Cola.AST_Constant){if(self.expression.name=="$_cola_isset"||self.expression.name=="$_cola_isntset")return make_node(Cola.AST_Boolean,self,{value:Cola[self.expression.name](self.args[0].value)}).transform(compressor);if((self.expression.name=="$_cola_is"||self.expression.name=="$_cola_isnt")&&self.args[1]instanceof Cola.AST_SymbolRef&&(self.args[1].value=="Number"||self.args[1].value=="Boolean"||self.args[1].value=="String"))return make_node(Cola.AST_Boolean,self,{value:Cola[self.expression.name](self.args[0].value,eval(self.args[1].value))}).transform(compressor);if(self.expression.name=="$_cola_modulo"&&self.args[1]instanceof Cola.AST_Constant)return make_node(Cola.AST_Number,self,{value:Cola.$_cola_modulo(self.args[0].value,self.args[1].value)}).transform(compressor)}}if(compressor.option("unsafe")){var exp=self.expression;if(exp instanceof Cola.AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Array":if(self.args.length!=1){return make_node(Cola.AST_Array,self,{elements:self.args}).transform(compressor)}break;case"Object":if(self.args.length==0){return make_node(Cola.AST_Object,self,{properties:[]})}break;case"String":if(self.args.length==0)return make_node(Cola.AST_String,self,{value:""});if(self.args.length<=1)return make_node(Cola.AST_Binary,self,{left:self.args[0],operator:"+",right:make_node(Cola.AST_String,self,{value:""})}).transform(compressor);break;case"Number":if(self.args.length==0)return make_node(Cola.AST_Number,self,{value:0});if(self.args.length==1)return make_node(Cola.AST_UnaryPrefix,self,{expression:self.args[0],operator:"+"}).transform(compressor);case"Boolean":if(self.args.length==0)return make_node(Cola.AST_False,self);if(self.args.length==1)return make_node(Cola.AST_UnaryPrefix,self,{expression:make_node(Cola.AST_UnaryPrefix,null,{expression:self.args[0],operator:"!"}),operator:"!"}).transform(compressor);break;case"Function":if(Cola.all(self.args,function(x){return x instanceof Cola.AST_String})){try{var code="(function("+self.args.slice(0,-1).map(function(arg){return arg.value}).join(",")+"){"+self.args[self.args.length-1].value+"})()";var ast=Cola.parse(code);ast.figure_out_scope({screw_ie8:compressor.option("screw_ie8")});var comp=new Cola.Compressor(compressor.options);ast=ast.transform(comp);ast.figure_out_scope({screw_ie8:compressor.option("screw_ie8")});ast.mangle_names();var fun;try{ast.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Lambda){fun=node;throw ast}}))}catch(ex){if(ex!==ast)throw ex}var args=fun.argnames.map(function(arg,i){return make_node(Cola.AST_String,self.args[i],{value:arg.print_to_string()})});var code=new Cola.OutputStream;Cola.AST_BlockStatement.prototype._codegen.call(fun,fun,code);code=code.toString().replace(/^\{|\}$/g,"");args.push(make_node(Cola.AST_String,self.args[self.args.length-1],{value:code}));self.args=args;return self}catch(ex){if(ex instanceof Cola.JS_Parse_Error){compressor.warn("Error parsing code passed to new Function [{file}:{line},{col}]",self.args[self.args.length-1].start);compressor.warn(ex.toString())}else{console.log(ex);throw ex}}}break}}else if(exp instanceof Cola.AST_Dot&&exp.property=="toString"&&self.args.length==0){return make_node(Cola.AST_Binary,self,{left:make_node(Cola.AST_String,self,{value:""}),operator:"+",right:exp.expression}).transform(compressor)}else if(exp instanceof Cola.AST_Dot&&exp.expression instanceof Cola.AST_Array&&exp.property=="join")EXIT:{var separator=self.args.length==0?",":self.args[0].evaluate(compressor)[1];if(separator==null)break EXIT;var elements=exp.expression.elements.reduce(function(a,el){el=el.evaluate(compressor);if(a.length==0||el.length==1){a.push(el)}else{var last=a[a.length-1];if(last.length==2){var val=""+last[1]+separator+el[1];a[a.length-1]=[make_node_from_constant(compressor,val,last[0]),val]}else{a.push(el)}}return a},[]);if(elements.length==0)return make_node(Cola.AST_String,self,{value:""});if(elements.length==1)return elements[0][0];if(separator==""){var first;if(elements[0][0]instanceof Cola.AST_String||elements[1][0]instanceof Cola.AST_String){first=elements.shift()[0]}else{first=make_node(Cola.AST_String,self,{value:""})}return elements.reduce(function(prev,el){return make_node(Cola.AST_Binary,el[0],{operator:"+",left:prev,right:el[0]})},first).transform(compressor)}var node=self.clone();node.expression=node.expression.clone();node.expression.expression=node.expression.expression.clone();node.expression.expression.elements=elements.map(function(el){return el[0]});return best_of(self,node)}}if(compressor.option("side_effects")){if(self.expression instanceof Cola.AST_Function&&self.args.length==0&&!Cola.AST_Block.prototype.has_side_effects.call(self.expression,compressor)){return make_node(Cola.AST_Undefined,self).transform(compressor)}}if(compressor.option("drop_console")){if(self.expression instanceof Cola.AST_PropAccess&&self.expression.expression instanceof Cola.AST_SymbolRef&&self.expression.expression.name=="console"&&self.expression.expression.undeclared()){return make_node(Cola.AST_Undefined,self).transform(compressor)}}return self.evaluate(compressor)[0]});OPT(Cola.AST_New,function(self,compressor){if(compressor.option("unsafe")){var exp=self.expression;if(exp instanceof Cola.AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Object":case"RegExp":case"Function":case"Error":case"Array":return make_node(Cola.AST_Call,self,self).transform(compressor)}}}return self});OPT(Cola.AST_Seq,function(self,compressor){if(!compressor.option("side_effects"))return self;if(!self.car.has_side_effects(compressor)){var p;if(!(self.cdr instanceof Cola.AST_SymbolRef&&self.cdr.name=="eval"&&self.cdr.undeclared()&&(p=compressor.parent())instanceof Cola.AST_Call&&p.expression===self)){return self.cdr}}if(compressor.option("cascade")){if(self.car instanceof Cola.AST_Assign&&!self.car.left.has_side_effects(compressor)){if(self.car.left.equivalent_to(self.cdr)){return self.car}if(self.cdr instanceof Cola.AST_Call&&self.cdr.expression.equivalent_to(self.car.left)){self.cdr.expression=self.car;return self.cdr}}if(!self.car.has_side_effects(compressor)&&!self.cdr.has_side_effects(compressor)&&self.car.equivalent_to(self.cdr)){return self.car}}if(self.cdr instanceof Cola.AST_UnaryPrefix&&self.cdr.operator=="void"&&!self.cdr.expression.has_side_effects(compressor)){self.cdr.operator=self.car;return self.cdr}if(self.cdr instanceof Cola.AST_Undefined){return make_node(Cola.AST_UnaryPrefix,self,{operator:"void",expression:self.car})}return self});Cola.AST_Unary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.expression instanceof Cola.AST_Seq){var seq=this.expression;var x=seq.to_array();this.expression=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}}return this});OPT(Cola.AST_UnaryPostfix,function(self,compressor){return self.lift_sequences(compressor)});OPT(Cola.AST_UnaryPrefix,function(self,compressor){self=self.lift_sequences(compressor);var e=self.expression;if(compressor.option("booleans")&&compressor.in_boolean_context()){switch(self.operator){case"!":if(e instanceof Cola.AST_UnaryPrefix&&e.operator=="!"){return e.expression}break;case"typeof":compressor.warn("Boolean expression always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}if(e instanceof Cola.AST_Binary&&self.operator=="!"){self=best_of(self,e.negate(compressor))}}return self.evaluate(compressor)[0]});function has_side_effects_or_prop_access(node,compressor){var save_pure_getters=compressor.option("pure_getters");compressor.options.pure_getters=false;var ret=node.has_side_effects(compressor);compressor.options.pure_getters=save_pure_getters;return ret}Cola.AST_Binary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.left instanceof Cola.AST_Seq){var seq=this.left;var x=seq.to_array();this.left=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}if(this.right instanceof Cola.AST_Seq&&this instanceof Cola.AST_Assign&&!has_side_effects_or_prop_access(this.left,compressor)){var seq=this.right;var x=seq.to_array();this.right=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}}return this});var commutativeOperators=Cola.makePredicate("== === != !== * & | ^");OPT(Cola.AST_Binary,function(self,compressor){var reverse=compressor.has_directive("use asm")?Cola.noop:function(op,force){if(force||!(self.left.has_side_effects(compressor)||self.right.has_side_effects(compressor))){if(op)self.operator=op;var tmp=self.left;self.left=self.right;self.right=tmp}};if(commutativeOperators(self.operator)){if(self.right instanceof Cola.AST_Constant&&!(self.left instanceof Cola.AST_Constant)){if(!(self.left instanceof Cola.AST_Binary&&Cola.PRECEDENCE[self.left.operator]>=Cola.PRECEDENCE[self.operator])){reverse(null,true)}}if(/^[!=]==?$/.test(self.operator)){if(self.left instanceof Cola.AST_SymbolRef&&self.right instanceof Cola.AST_Conditional){if(self.right.consequent instanceof Cola.AST_SymbolRef&&self.right.consequent.definition()===self.left.definition()){if(/^==/.test(self.operator))return self.right.condition;if(/^!=/.test(self.operator))return self.right.condition.negate(compressor)}if(self.right.alternative instanceof Cola.AST_SymbolRef&&self.right.alternative.definition()===self.left.definition()){if(/^==/.test(self.operator))return self.right.condition.negate(compressor);if(/^!=/.test(self.operator))return self.right.condition}}if(self.right instanceof Cola.AST_SymbolRef&&self.left instanceof Cola.AST_Conditional){if(self.left.consequent instanceof Cola.AST_SymbolRef&&self.left.consequent.definition()===self.right.definition()){if(/^==/.test(self.operator))return self.left.condition;if(/^!=/.test(self.operator))return self.left.condition.negate(compressor)}if(self.left.alternative instanceof Cola.AST_SymbolRef&&self.left.alternative.definition()===self.right.definition()){if(/^==/.test(self.operator))return self.left.condition.negate(compressor);if(/^!=/.test(self.operator))return self.left.condition}}}}self=self.lift_sequences(compressor);if(compressor.option("comparisons"))switch(self.operator){case"===":case"!==":if(self.left.is_string(compressor)&&self.right.is_string(compressor)||self.left.is_boolean()&&self.right.is_boolean()){self.operator=self.operator.substr(0,2)}case"==":case"!=":if(self.left instanceof Cola.AST_String&&self.left.value=="undefined"&&self.right instanceof Cola.AST_UnaryPrefix&&self.right.operator=="typeof"&&compressor.option("unsafe")){if(!(self.right.expression instanceof Cola.AST_SymbolRef)||!self.right.expression.undeclared()){self.right=self.right.expression;self.left=make_node(Cola.AST_Undefined,self.left).optimize(compressor);if(self.operator.length==2)self.operator+="="}}break}if(compressor.option("booleans")&&compressor.in_boolean_context())switch(self.operator){case"&&":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&!ll[1]||rr.length>1&&!rr[1]){compressor.warn("Boolean && always false [{file}:{line},{col}]",self.start);return make_node(Cola.AST_False,self)}if(ll.length>1&&ll[1]){return rr[0]}if(rr.length>1&&rr[1]){return ll[0]}break;case"||":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&ll[1]||rr.length>1&&rr[1]){compressor.warn("Boolean || always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}if(ll.length>1&&!ll[1]){return rr[0]}if(rr.length>1&&!rr[1]){return ll[0]}break;case"+":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&ll[0]instanceof Cola.AST_String&&ll[1]||rr.length>1&&rr[0]instanceof Cola.AST_String&&rr[1]){compressor.warn("+ in boolean context always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}break}if(compressor.option("comparisons")){if(!(compressor.parent()instanceof Cola.AST_Binary)||compressor.parent()instanceof Cola.AST_Assign){var negated=make_node(Cola.AST_UnaryPrefix,self,{operator:"!",expression:self.negate(compressor)});self=best_of(self,negated)}switch(self.operator){case"<":reverse(">");break;case"<=":reverse(">=");break}}if(self.operator=="+"&&self.right instanceof Cola.AST_String&&self.right.getValue()===""&&self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.is_string(compressor)){return self.left}if(compressor.option("evaluate")){if(self.operator=="+"){if(self.left instanceof Cola.AST_Constant&&self.right instanceof Cola.AST_Binary&&self.right.operator=="+"&&self.right.left instanceof Cola.AST_Constant&&self.right.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:make_node(Cola.AST_String,null,{value:""+self.left.getValue()+self.right.left.getValue(),start:self.left.start,end:self.right.left.end}),right:self.right.right})}if(self.right instanceof Cola.AST_Constant&&self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.right instanceof Cola.AST_Constant&&self.left.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:self.left.left,right:make_node(Cola.AST_String,null,{value:""+self.left.right.getValue()+self.right.getValue(),start:self.left.right.start,end:self.right.end})})}if(self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.is_string(compressor)&&self.left.right instanceof Cola.AST_Constant&&self.right instanceof Cola.AST_Binary&&self.right.operator=="+"&&self.right.left instanceof Cola.AST_Constant&&self.right.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:make_node(Cola.AST_Binary,self.left,{operator:"+",left:self.left.left,right:make_node(Cola.AST_String,null,{value:""+self.left.right.getValue()+self.right.left.getValue(),start:self.left.right.start,end:self.right.left.end})}),right:self.right.right})}}}if(self.right instanceof Cola.AST_Binary&&self.right.operator==self.operator&&(self.operator=="*"||self.operator=="&&"||self.operator=="||")){self.left=make_node(Cola.AST_Binary,self.left,{operator:self.operator,left:self.left,right:self.right.left});self.right=self.right.right;return self.transform(compressor)}return self.evaluate(compressor)[0]});OPT(Cola.AST_SymbolRef,function(self,compressor){if(self.undeclared()){var defines=compressor.option("global_defs");if(defines&&defines.hasOwnProperty(self.name)){return make_node_from_constant(compressor,defines[self.name],self)}switch(self.name){case"undefined":return make_node(Cola.AST_Undefined,self);case"NaN":return make_node(Cola.AST_NaN,self);case"Infinity":return make_node(Cola.AST_Infinity,self)}}return self});OPT(Cola.AST_Undefined,function(self,compressor){if(compressor.option("unsafe")){var scope=compressor.find_parent(Cola.AST_Scope);var undef=scope.find_variable("undefined");if(undef){var ref=make_node(Cola.AST_SymbolRef,self,{name:"undefined",scope:scope,thedef:undef});ref.reference();return ref}}return self});var ASSIGN_OPS=["+","-","/","*","%",">>","<<",">>>","|","^","&"];OPT(Cola.AST_Assign,function(self,compressor){self=self.lift_sequences(compressor);if(self.operator=="="&&self.left instanceof Cola.AST_SymbolRef&&self.right instanceof Cola.AST_Binary&&self.right.left instanceof Cola.AST_SymbolRef&&self.right.left.name==self.left.name&&Cola.member(self.right.operator,ASSIGN_OPS)){self.operator=self.right.operator+"=";self.right=self.right.right}return self});OPT(Cola.AST_Conditional,function(self,compressor){if(!compressor.option("conditionals"))return self;if(self.condition instanceof Cola.AST_Seq){var car=self.condition.car;self.condition=self.condition.cdr;return Cola.AST_Seq.cons(car,self)}var cond=self.condition.evaluate(compressor);if(cond.length>1){if(cond[1]){compressor.warn("Condition always true [{file}:{line},{col}]",self.start);return self.consequent}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.start);return self.alternative}}var negated=cond[0].negate(compressor);if(best_of(cond[0],negated)===negated){self=make_node(Cola.AST_Conditional,self,{condition:negated,consequent:self.alternative,alternative:self.consequent})}var consequent=self.consequent;var alternative=self.alternative;if(consequent instanceof Cola.AST_Assign&&alternative instanceof Cola.AST_Assign&&consequent.operator==alternative.operator&&consequent.left.equivalent_to(alternative.left)){return make_node(Cola.AST_Assign,self,{operator:consequent.operator,left:consequent.left,right:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:consequent.right,alternative:alternative.right})})}if(consequent instanceof Cola.AST_Call&&alternative.TYPE===consequent.TYPE&&consequent.args.length==alternative.args.length&&consequent.expression.equivalent_to(alternative.expression)){if(consequent.args.length==0){return make_node(Cola.AST_Seq,self,{car:self.condition,cdr:consequent})}if(consequent.args.length==1){consequent.args[0]=make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:consequent.args[0],alternative:alternative.args[0]});return consequent}}if(consequent instanceof Cola.AST_Conditional&&consequent.alternative.equivalent_to(alternative)){return make_node(Cola.AST_Conditional,self,{condition:make_node(Cola.AST_Binary,self,{left:self.condition,operator:"&&",right:consequent.condition}),consequent:consequent.consequent,alternative:alternative})}return self});OPT(Cola.AST_Boolean,function(self,compressor){if(compressor.option("booleans")){var p=compressor.parent();if(p instanceof Cola.AST_Binary&&(p.operator=="=="||p.operator=="!=")){compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:p.operator,value:self.value,file:p.start.file,line:p.start.line,col:p.start.col});return make_node(Cola.AST_Number,self,{value:+self.value})}return make_node(Cola.AST_UnaryPrefix,self,{operator:"!",expression:make_node(Cola.AST_Number,self,{value:1-self.value})})}return self});OPT(Cola.AST_Sub,function(self,compressor){var prop=self.property;if(prop instanceof Cola.AST_String&&compressor.option("properties")){prop=prop.getValue();if(Cola.RESERVED_WORDS(prop)?compressor.option("screw_ie8"):Cola.is_identifier_string(prop)){return make_node(Cola.AST_Dot,self,{expression:self.expression,property:prop})}var v=parseFloat(prop);if(!isNaN(v)&&v.toString()==prop){self.property=make_node(Cola.AST_Number,self.property,{value:v})}}return self});function literals_in_boolean_context(self,compressor){if(compressor.option("booleans")&&compressor.in_boolean_context()){return make_node(Cola.AST_True,self)}return self}OPT(Cola.AST_Array,literals_in_boolean_context);OPT(Cola.AST_Object,literals_in_boolean_context);OPT(Cola.AST_RegExp,literals_in_boolean_context)})();"use strict";!this.Cola&&(this.Cola={});Cola.AST_Toplevel.prototype.toJavaScript=function(options){if(this.language=="js")return this;this.language="js";options=Cola.defaults(options,{main_binding:true,main_event:"DOMContentLoaded",parser:{},std:true,path_prefix:""});var $_cola_ast=Cola.parse(Cola.$_cola,{is_js:true}),$_cola_hash={},_this,required=[],required_hash={},tt=new Cola.TreeTransformer(function(node,descend,in_list){var newNode,props={},parent=this.parent();node=node.clone();if(options.main_binding&&parent instanceof Cola.AST_Toplevel&&node instanceof Cola.AST_Defun&&node.name instanceof Cola.AST_SymbolDefun&&node.name.name=="main"){props={args:[new Cola.AST_String({value:options.main_event}),node,new Cola.AST_False],expression:new Cola.AST_Dot({property:"addEventListener",expression:new Cola.AST_SymbolRef({name:"window"})})};node=new Cola.AST_SimpleStatement({body:new Cola.AST_Call(props),start:node.start,end:node.left})}else if(node instanceof Cola.AST_Binary&&node.operator=="**"){props={args:[node.left,node.right],start:node.start,end:node.left,expression:new Cola.AST_Dot({property:"pow",expression:new Cola.AST_SymbolRef({name:"Math"})})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="%%"){$_cola_hash[Cola.$_cola_modulo.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_modulo"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_SimpleStatement&&node.body instanceof Cola.AST_Assign&&node.body.operator=="?="){if(node.body.left instanceof Cola.AST_Sub&&node.body.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.body.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})};node.body.left.property=new Cola.AST_Binary(props) -}$_cola_hash[Cola.$_cola_isntset.i]=true;node.body.operator="=";props={args:[node.body.left],expression:new Cola.AST_SymbolRef({name:"$_cola_isntset"})};node=new Cola.AST_If({body:node.clone(),start:node.start,end:node.end,condition:new Cola.AST_Call(props)})}else if(node instanceof Cola.AST_Assign&&node.operator=="?="){if(node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})};node.left.property=new Cola.AST_Binary(props)}$_cola_hash[Cola.$_cola_isntset.i]=true;node.operator="=";props={args:[node.left],expression:new Cola.AST_SymbolRef({name:"$_cola_isntset"})};node=new Cola.AST_Conditional({start:node.start,end:node.end,condition:new Cola.AST_Call(props),consequent:node.clone(),alternative:node.left})}else if(node instanceof Cola.AST_Conditional&&node.alternative instanceof Cola.AST_Noop){$_cola_hash[Cola.$_cola_isset.i]=true;props={args:[node.condition],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isset"})};node.alternative=node.consequent;node.consequent=node.condition;node.condition=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="is"){$_cola_hash[Cola.$_cola_is.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_is"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="isnt"){$_cola_hash[Cola.$_cola_isnt.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isnt"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_UnaryPostfix&&node.operator=="??"||node instanceof Cola.AST_UnaryPrefix&&node.operator=="isset"){$_cola_hash[Cola.$_cola_isset.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isset"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_UnaryPrefix&&node.operator=="clone"){$_cola_hash[Cola.$_cola_clone.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_clone"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator=="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"push",expression:node.left.expression};props={args:[node.right],start:node.start,end:node.end,expression:new Cola.AST_Dot(props)};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator!="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})};node.left.property=new Cola.AST_Binary(props)}else if(node instanceof Cola.AST_Sub&&node.property instanceof Cola.AST_Noop){$_cola_hash[Cola.$_cola_array_last.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_last"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator=="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_ArrayRange){$_cola_hash[Cola.$_cola_array_asplice.i]=true;props={args:[node.left.expression,node.left.property.from,node.left.property.to,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_asplice"})};if(node.left.property.to instanceof Cola.AST_Noop)props.args[2]=new Cola.AST_Number({value:"9e9"});else if(node.left.property.triple)props.args[2]=new Cola.AST_Binary({operator:"-",left:node.left.property.to,right:new Cola.AST_Number({value:1})});node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Sub&&node.property instanceof Cola.AST_ArrayRange){props={property:"slice",expression:node.expression};props={args:[node.property.from],start:node.start,end:node.end,expression:new Cola.AST_Dot(props)};if(!node.property.triple&&!(node.property.to instanceof Cola.AST_Noop))props.args[1]=new Cola.AST_Binary({operator:"+",left:node.property.to,right:new Cola.AST_Number({value:1})});else if(!(node.property.to instanceof Cola.AST_Noop))props.args[1]=node.property.to;node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_ArrayRange){$_cola_hash[Cola.$_cola_array_range.i]=true;props={args:[node.from,node.to],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_range"})};if(node.triple)props.args[1]=new Cola.AST_Binary({operator:"-",left:node.to,right:new Cola.AST_Number({value:1})});node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Call){props={properties:[]};var delQueue=[];node.args.forEach(function(val,i){if(!(val instanceof Cola.AST_Namedarg))return;$_cola_hash[Cola.$_cola_func_named_args.i]=true;delQueue.push(i);props.properties.push(new Cola.AST_ObjectKeyVal({key:val.name,value:val.value,start:val.start,end:val.end}))});if(delQueue.length!=0){delQueue.reverse().forEach(function(val){node.args.splice(val,1)});props={args:[new Cola.AST_Object(props)],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_func_named_args"})};node.args.push(new Cola.AST_New(props))}}else if((node instanceof Cola.AST_Function||node instanceof Cola.AST_Defun)&&node.argnames.length!=0){var posed=[],named=[],onfront=true,delQueue=[],pos=0,splated,aftersplated=-1;node.argnames.forEach(function(val,i){if(val.argtype=="positional"){if(val.defval instanceof Cola.AST_Noop&&onfront)pos++,node.argnames[i]=val.name;else{onfront=false;delQueue.push(i);posed.push({pos:pos++,val:val})}splated&&splated.after++}else if(val.argtype=="named"){delQueue.push(i);named.push(val)}else if(val.argtype=="splated"){onfront=false;delQueue.push(i);posed.push(splated={pos:pos++,after:0,val:val})}});if(delQueue.length!=0)delQueue.reverse().forEach(function(val){node.argnames.splice(val,1)});props={type:"dynamic",definitions:[]};posed.forEach(function(val,i){var pos=val.pos;val=val.val;if(val.argtype=="splated"){aftersplated=0;props.definitions.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola_i"}),value:null}));props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(splated.val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:splated.pos+splated.after+1}),right:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[new Cola.AST_SymbolRef({name:"arguments"}),new Cola.AST_Number({value:splated.pos}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:new Cola.AST_SymbolRef({name:"arguments"})}),right:new Cola.AST_Number({value:splated.after})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:splated.pos})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(val.defval instanceof Cola.AST_Noop)props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated++})})})}));else props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"!==",left:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated})})}),right:new Cola.AST_SymbolRef({name:"undefined"})}),consequent:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated++})})}),alternative:val.defval})}))});named.forEach(function(val,i){if(val.defval instanceof Cola.AST_Noop)props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name})}));else props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"!==",left:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name}),right:new Cola.AST_SymbolRef({name:"undefined"})}),consequent:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name}),alternative:val.defval})}))});if(delQueue.length!=0||named.length!=0)node.body.unshift(new Cola.AST_Var(props));if(named.length!=0){$_cola_hash[Cola.$_cola_func_named_args.i]=true;$_cola_hash[Cola.$_cola_func_set_named_args.i]=true;node.body.unshift(new Cola.AST_SimpleStatement({body:new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_SymbolRef({name:"$_cola_func_set_named_args"})})}))}}else if(node instanceof Cola.AST_Cascade){$_cola_hash[Cola.$_cola_arguments_def.i]=true;props={type:"dynamic",body:[],argnames:[new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"$_cola_expr",start:node.expression.start,end:node.expression.end})}),new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"arguments",start:new Cola.AST_Token,end:new Cola.AST_Token})})]};var Expr,Parent=false;node.subexpressions.forEach(function(expr){Expr=expr,Parent=false;while(true)if(expr instanceof Cola.AST_Call||expr instanceof Cola.AST_Dot||expr instanceof Cola.AST_Sub||expr instanceof Cola.AST_Cascade){Parent=expr;expr=expr.expression}else if(expr instanceof Cola.AST_Binary){Parent=expr;expr=expr.left}else if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange||expr instanceof Cola.AST_SymbolRef)break;if(!Parent){if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange)Expr=new Cola.AST_Sub({start:Expr.start,end:Expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr instanceof Cola.AST_ArrayRange?expr:expr.elements.length==0?new Cola.AST_Noop:expr.elements[0]});else if(expr instanceof Cola.AST_SymbolRef)Expr=new Cola.AST_Dot({start:Expr.start,end:Expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:Expr.name})}else{if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange)expr=new Cola.AST_Sub({start:expr.start,end:expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr instanceof Cola.AST_ArrayRange?expr:expr.elements.length==0?new Cola.AST_Noop:expr.elements[0]});else expr=new Cola.AST_Dot({start:expr.start,end:expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr.name});if(Parent instanceof Cola.AST_Call||Parent instanceof Cola.AST_Dot||Parent instanceof Cola.AST_Sub||Parent instanceof Cola.AST_Cascade)Parent.expression=expr;else if(Parent instanceof Cola.AST_Binary)Parent.left=expr}props.body.push(new Cola.AST_SimpleStatement({start:Expr.start,end:Expr.end,body:Expr}))});props.body.push(new Cola.AST_Return({value:new Cola.AST_SymbolRef({name:"$_cola_expr"})}));props={expression:new Cola.AST_Function(props),property:"call"};node=new Cola.AST_Call({start:node.start,end:node.end,args:[new Cola.AST_SymbolRef({name:"this"}),node.expression,new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Var){var defs=[];node.definitions.forEach(function(def,i){if(!(def.name instanceof Cola.AST_ArrayTemplate||def.name instanceof Cola.AST_ObjectTemplate)){defs.push(def);return}var Symbol=def.value instanceof Cola.AST_SymbolRef?def.value:new Cola.AST_SymbolRef({name:"$_cola_tmp"});if(!(def.value instanceof Cola.AST_SymbolRef))defs.push(new Cola.AST_VarDef({type:node.type,name:new Cola.AST_SymbolVar(Symbol),value:def.value}));(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if(el instanceof Cola.AST_SymbolRef&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(el),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_SymbolRef)defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:node.type,name:new Cola.AST_SymbolVar(el),value:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:node.type,name:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolVar({name:el.key}):new Cola.AST_SymbolVar(el.value),value:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(def.name,Symbol,"_")});node.definitions=defs}else if(node.body instanceof Cola.AST_Assign&&(node.body.left instanceof Cola.AST_ArrayTemplate||node.body.left instanceof Cola.AST_ObjectTemplate||(node.body.left instanceof Cola.AST_Array||node.body.left instanceof Cola.AST_Object)&&node.body.left.template)&&node instanceof Cola.AST_SimpleStatement){if(node.body.left.vardef&&node.body.operator!="=")Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype,node.body.left.start);node=node.body;var defs=[];var Symbol=node.right instanceof Cola.AST_SymbolRef?node.right:new Cola.AST_SymbolRef({name:"$_cola_tmp"});if(!(node.right instanceof Cola.AST_SymbolRef))defs.push(new Cola.AST_VarDef({type:"dynamic",name:new Cola.AST_SymbolVar(Symbol),value:node.right}));(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_Array||def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if(el instanceof Cola.AST_VarDef&&el.name.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.name.splated=undefined;el.value=new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})});defs.push(el)}else if((el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_VarDef){el.value=new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})});defs.push(el)}else if(el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.type&&(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Noop&&el.start.type=="name"))defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:el.type,name:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolVar({name:el.key}):new Cola.AST_SymbolVar(el.value),value:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Sub||el.value instanceof Cola.AST_Dot||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_Assign({operator:node.operator,left:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolRef({name:el.key}):el.value,right:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(node.left,Symbol,"_");if(defs.length==0)return node;node=[];var sdef,sdefs=[],prev=defs[0].CTOR;defs.forEach(function _(def,i){sdef=false;if(def instanceof prev)sdefs.push(def);else{if(prev==Cola.AST_VarDef)sdef=new Cola.AST_Var({type:"dynamic",definitions:sdefs});else if(sdefs.length==1)sdef=sdefs[0];else{sdefs.reverse().forEach(function(def){if(!sdef)sdef=def;else sdef=new Cola.AST_Seq({car:def,cdr:sdef})})}node.push(!(sdef instanceof Cola.AST_Var)?new Cola.AST_SimpleStatement({body:sdef}):sdef);prev=def.CTOR;sdefs=[def]}if(i==defs.length-1)_(false)})}else if(node instanceof Cola.AST_Assign&&(node.left instanceof Cola.AST_ArrayTemplate||node.left instanceof Cola.AST_ObjectTemplate||(node.left instanceof Cola.AST_Array||node.left instanceof Cola.AST_Object)&&node.left.template)){if(node.left.vardef)Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype,node.start);$_cola_hash[Cola.$_cola_arguments_def.i]=true;var defs=[];var Symbol=new Cola.AST_SymbolRef({name:"$_cola_expr"});(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_Array||def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if((el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Sub||el.value instanceof Cola.AST_Dot||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_Assign({operator:node.operator,left:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolRef({name:el.key}):el.value,right:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(node.left,Symbol,"_");if(defs.length==0)return node;props={type:"dynamic",body:[],argnames:[new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"$_cola_expr",start:node.right.start,end:node.right.end})}),new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"arguments",start:new Cola.AST_Token,end:new Cola.AST_Token})})]};var sdef,sdefs=[],prev=defs[0].CTOR;defs.forEach(function _(def,i){sdef=false;if(def instanceof prev)sdefs.push(def);else{if(prev==Cola.AST_VarDef)sdef=new Cola.AST_Var({type:"dynamic",definitions:sdefs});else if(sdefs.length==1)sdef=sdefs[0];else{sdefs.reverse().forEach(function(def){if(!sdef)sdef=def;else sdef=new Cola.AST_Seq({car:def,cdr:sdef})})}props.body.push(!(sdef instanceof Cola.AST_Var)?new Cola.AST_SimpleStatement({body:sdef}):sdef);prev=def.CTOR;sdefs=[def]}if(i==defs.length-1)_(false)});props.body.push(new Cola.AST_Return({value:new Cola.AST_SymbolRef({name:"$_cola_expr"})}));props={expression:new Cola.AST_Function(props),property:"call"};node=new Cola.AST_Call({start:node.start,end:node.end,args:[new Cola.AST_SymbolRef({name:"this"}),node.right,new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_If&&node.inline&&!(parent instanceof Cola.AST_If&&parent.inline)){$_cola_hash[Cola.$_cola_arguments_def.i]=true;var s=node;while(true){s.inline=false;s.body=new Cola.AST_Return({value:s.body});if(s.alternative instanceof Cola.AST_If)s=s.alternative;else if(s.alternative==null)break;else{s.alternative=new Cola.AST_Return({value:s.alternative});break}}props={expression:new Cola.AST_Function({type:"dynamic",body:[node],argnames:[]}),property:"apply"};node=new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"this"}),new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Switch&&!(parent instanceof Cola.AST_Block)){$_cola_hash[Cola.$_cola_arguments_def.i]=true;node.body.forEach(function(branch){if(!branch.body.length)return;branch.body[0]=new Cola.AST_Return({value:branch.body[0].body})});props={expression:new Cola.AST_Function({type:"dynamic",body:[node],argnames:[]}),property:"apply"};node=new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"this"}),new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Switch&&node.expression instanceof Cola.AST_Noop){node.expression=new Cola.AST_False;node.body.forEach(function(branch){if(branch instanceof Cola.AST_Default)return;if(branch.expression instanceof Cola.AST_Seq){var seq=branch.expression;while(true){seq.car=new Cola.AST_UnaryPrefix({operator:"!",expression:seq.car});if(seq.cdr instanceof Cola.AST_Seq)seq=seq.cdr;else{seq.cdr=new Cola.AST_UnaryPrefix({operator:"!",expression:seq.cdr});break}}return}branch.expression=new Cola.AST_UnaryPrefix({operator:"!",expression:branch.expression})})}else if(node instanceof Cola.AST_When){node=new Cola.AST_Case(node);node.body.push(new Cola.AST_Break)}else if(node instanceof Cola.AST_SwitchBranch&&!(node instanceof Cola.AST_Default)&&node.expression instanceof Cola.AST_Seq){var branches=[],seq=node.expression;while(true){branches.push(new node.CTOR({expression:seq.car,body:[]}));if(seq.cdr instanceof Cola.AST_Seq)seq=seq.cdr;else{node.expression=seq.cdr;branches.push(node);break}}node=branches}else if(node instanceof Cola.AST_Proto){props=new Cola.AST_Dot(node);props.expression=new Cola.AST_Dot(node);props.expression.property="prototype";node=props}else if(node instanceof Cola.AST_StringTemplate){newNode=new Cola.AST_Binary({operator:"+",left:node.body[0],right:node.body[1]});for(var i=2;i=_to;i--)range.push(i);return range};Cola.$_cola_array_range.i=7;Cola.$_cola_array_asplice=function $_cola_array_asplice(_array,_from,_to,_a){_to=_to-_from+1;return[].splice.apply(_array,[_from,_to].concat(_a)),_a};Cola.$_cola_array_asplice.i=8;Cola.$_cola_func_named_args=function $_cola_func_named_args(_args){this.$=_args};Cola.$_cola_func_named_args.i=9;Cola.$_cola_func_set_named_args=function $_cola_func_set_named_args(_args){if(_args[_args.length-1]instanceof $_cola_func_named_args){var nargs=_args[_args.length-1].$;for(var i in nargs)if(nargs.hasOwnProperty(i))_args[i]=nargs[i]}};Cola.$_cola_func_set_named_args.i=10;Cola.$_cola_arguments_def={i:11};Cola.$_cola=Cola.$_cola_is+Cola.$_cola_isnt+Cola.$_cola_modulo+Cola.$_cola_isset+Cola.$_cola_isntset+Cola.$_cola_clone+Cola.$_cola_array_last+Cola.$_cola_array_range+Cola.$_cola_array_asplice+Cola.$_cola_func_named_args+Cola.$_cola_func_set_named_args+"var arguments;";Cola.Compressor.StdFuncs={$_cola_is:true,$_cola_isnt:true,$_cola_modulo:true,$_cola_isset:true,$_cola_isntset:true};window.addEventListener("DOMContentLoaded",Cola.bootstrap,false); \ No newline at end of file +},self.argnames)){vars.del(name)}else{def=def.clone();def.value=null;defs.push(def);vars.set(name,def)}});if(defs.length>0){for(var i=0;i1){if(cond[1]){return make_node(Cola.AST_For,self,{body:self.body})}else if(self instanceof Cola.AST_While){if(compressor.option("dead_code")){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(Cola.AST_BlockStatement,self,{body:a})}}}return self});function if_break_in_loop(self,compressor){function drop_it(rest){rest=as_statement_array(rest);if(self.body instanceof Cola.AST_BlockStatement){self.body=self.body.clone();self.body.body=rest.concat(self.body.body.slice(1));self.body=self.body.transform(compressor)}else{self.body=make_node(Cola.AST_BlockStatement,self.body,{body:rest}).transform(compressor)}if_break_in_loop(self,compressor)}var first=self.body instanceof Cola.AST_BlockStatement?self.body.body[0]:self.body;if(first instanceof Cola.AST_If){if(first.body instanceof Cola.AST_Break&&compressor.loopcontrol_target(first.body.label)===self){if(self.condition){self.condition=make_node(Cola.AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition.negate(compressor)})}else{self.condition=first.condition.negate(compressor)}drop_it(first.alternative)}else if(first.alternative instanceof Cola.AST_Break&&compressor.loopcontrol_target(first.alternative.label)===self){if(self.condition){self.condition=make_node(Cola.AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition})}else{self.condition=first.condition}drop_it(first.body)}}}OPT(Cola.AST_While,function(self,compressor){if(!compressor.option("loops"))return self;self=Cola.AST_DWLoop.prototype.optimize.call(self,compressor);if(self instanceof Cola.AST_While){if_break_in_loop(self,compressor);self=make_node(Cola.AST_For,self,self).transform(compressor)}return self});OPT(Cola.AST_For,function(self,compressor){var cond=self.condition;if(cond){cond=cond.evaluate(compressor);self.condition=cond[0]}if(!compressor.option("loops"))return self;if(cond){if(cond.length>1&&!cond[1]){if(compressor.option("dead_code")){var a=[];if(self.init instanceof Cola.AST_Statement){a.push(self.init)}else if(self.init){a.push(make_node(Cola.AST_SimpleStatement,self.init,{body:self.init}))}extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(Cola.AST_BlockStatement,self,{body:a})}}}if_break_in_loop(self,compressor);return self});OPT(Cola.AST_If,function(self,compressor){if(!compressor.option("conditionals"))return self;var cond=self.condition.evaluate(compressor);self.condition=cond[0];if(cond.length>1){if(cond[1]){compressor.warn("Condition always true [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];if(self.alternative){extract_declarations_from_unreachable_code(compressor,self.alternative,a)}a.push(self.body);return make_node(Cola.AST_BlockStatement,self,{body:a}).transform(compressor)}}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);if(self.alternative)a.push(self.alternative);return make_node(Cola.AST_BlockStatement,self,{body:a}).transform(compressor)}}}if(is_empty(self.alternative))self.alternative=null;var negated=self.condition.negate(compressor);var negated_is_best=best_of(self.condition,negated)===negated;if(self.alternative&&negated_is_best){negated_is_best=false;self.condition=negated;var tmp=self.body;self.body=self.alternative||make_node(Cola.AST_EmptyStatement);self.alternative=tmp}if(is_empty(self.body)&&is_empty(self.alternative)){return make_node(Cola.AST_SimpleStatement,self.condition,{body:self.condition}).transform(compressor)}if(self.body instanceof Cola.AST_SimpleStatement&&self.alternative instanceof Cola.AST_SimpleStatement){return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:self.body.body,alternative:self.alternative.body})}).transform(compressor)}if(is_empty(self.alternative)&&self.body instanceof Cola.AST_SimpleStatement){if(negated_is_best)return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"||",left:negated,right:self.body.body})}).transform(compressor);return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"&&",left:self.condition,right:self.body.body})}).transform(compressor)}if(self.body instanceof Cola.AST_EmptyStatement&&self.alternative&&self.alternative instanceof Cola.AST_SimpleStatement){return make_node(Cola.AST_SimpleStatement,self,{body:make_node(Cola.AST_Binary,self,{operator:"||",left:self.condition,right:self.alternative.body})}).transform(compressor)}if(self.body instanceof Cola.AST_Exit&&self.alternative instanceof Cola.AST_Exit&&self.body.TYPE==self.alternative.TYPE){return make_node(self.body.CTOR,self,{value:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:self.body.value||make_node(Cola.AST_Undefined,self.body).optimize(compressor),alternative:self.alternative.value||make_node(Cola.AST_Undefined,self.alternative).optimize(compressor)})}).transform(compressor)}if(self.body instanceof Cola.AST_If&&!self.body.alternative&&!self.alternative){self.condition=make_node(Cola.AST_Binary,self.condition,{operator:"&&",left:self.condition,right:self.body.condition}).transform(compressor);self.body=self.body.body}if(aborts(self.body)){if(self.alternative){var alt=self.alternative;self.alternative=null;return make_node(Cola.AST_BlockStatement,self,{body:[self,alt]}).transform(compressor)}}if(aborts(self.alternative)){var body=self.body;self.body=self.alternative;self.condition=negated_is_best?negated:self.condition.negate(compressor);self.alternative=null;return make_node(Cola.AST_BlockStatement,self,{body:[self,body]}).transform(compressor)}return self});OPT(Cola.AST_Switch,function(self,compressor){if(self.body.length==0&&compressor.option("conditionals")){return make_node(Cola.AST_SimpleStatement,self,{body:self.expression}).transform(compressor)}for(;;){var last_branch=self.body[self.body.length-1];if(last_branch){var stat=last_branch.body[last_branch.body.length-1];if(stat instanceof Cola.AST_Break&&loop_body(compressor.loopcontrol_target(stat.label))===self)last_branch.body.pop();if(last_branch instanceof Cola.AST_Default&&last_branch.body.length==0){self.body.pop();continue}}break}var exp=self.expression.evaluate(compressor);out:if(exp.length==2)try{self.expression=exp[0];if(!compressor.option("dead_code"))break out;var value=exp[1];var in_if=false;var in_block=false;var started=false;var stopped=false;var ruined=false;var tt=new Cola.TreeTransformer(function(node,descend,in_list){if(node instanceof Cola.AST_Lambda||node instanceof Cola.AST_SimpleStatement){return node}else if(node instanceof Cola.AST_Switch&&node===self){node=node.clone();descend(node,this);return ruined?node:make_node(Cola.AST_BlockStatement,node,{body:node.body.reduce(function(a,branch){return a.concat(branch.body)},[])}).transform(compressor)}else if(node instanceof Cola.AST_If||node instanceof Cola.AST_Try){var save=in_if;in_if=!in_block;descend(node,this);in_if=save;return node}else if(node instanceof Cola.AST_StatementWithBody||node instanceof Cola.AST_Switch){var save=in_block;in_block=true;descend(node,this);in_block=save;return node}else if(node instanceof Cola.AST_Break&&this.loopcontrol_target(node.label)===self){if(in_if){ruined=true;return node}if(in_block)return node;stopped=true;return in_list?Cola.MAP.skip:make_node(Cola.AST_EmptyStatement,node)}else if(node instanceof Cola.AST_SwitchBranch&&this.parent()===self){if(stopped)return Cola.MAP.skip;if(node instanceof Cola.AST_Case){var exp=node.expression.evaluate(compressor);if(exp.length<2){throw self}if(exp[1]===value||started){started=true;if(aborts(node))stopped=true;descend(node,this);return node}return Cola.MAP.skip}descend(node,this);return node}});tt.stack=compressor.stack.slice();self=self.transform(tt)}catch(ex){if(ex!==self)throw ex}return self});OPT(Cola.AST_Case,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});OPT(Cola.AST_Try,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});Cola.AST_Definitions.DEFMETHOD("remove_initializers",function(){this.definitions.forEach(function(def){def.value=null})});Cola.AST_Definitions.DEFMETHOD("to_assignments",function(){var assignments=this.definitions.reduce(function(a,def){if(def.value){var name=make_node(Cola.AST_SymbolRef,def.name,def.name);a.push(make_node(Cola.AST_Assign,def,{operator:"=",left:name,right:def.value}))}return a},[]);if(assignments.length==0)return null;return Cola.AST_Seq.from_array(assignments)});OPT(Cola.AST_Definitions,function(self,compressor){if(self.definitions.length==0)return make_node(Cola.AST_EmptyStatement,self);return self});OPT(Cola.AST_Function,function(self,compressor){self=Cola.AST_Lambda.prototype.optimize.call(self,compressor);if(compressor.option("unused")){if(self.name&&self.name.unreferenced()){self.name=null}}return self});OPT(Cola.AST_Call,function(self,compressor){if(compressor.option("evaluate")){if(self.expression instanceof Cola.AST_Dot&&Cola.Compressor.MathFuncs[self.expression.property]&&self.expression.expression instanceof Cola.AST_SymbolRef&&self.expression.expression.name=="Math"){var args=[],allstatic=true,val;self.args.some(function(arg){if(arg instanceof Cola.AST_Constant)args.push(arg.value);else return!(allstatic=false)});if(allstatic){val=Math[self.expression.property].apply({},args);if((""+val).length<=15)return make_node(Cola.AST_Number,self,{value:val}).transform(compressor)}}else if(!compressor.option("is_js")&&self.expression instanceof Cola.AST_SymbolRef&&Cola.Compressor.StdFuncs[self.expression.name]&&self.args[0]instanceof Cola.AST_Constant){if(self.expression.name=="$_cola_isset"||self.expression.name=="$_cola_isntset")return make_node(Cola.AST_Boolean,self,{value:Cola[self.expression.name](self.args[0].value)}).transform(compressor);if((self.expression.name=="$_cola_is"||self.expression.name=="$_cola_isnt")&&self.args[1]instanceof Cola.AST_SymbolRef&&(self.args[1].value=="Number"||self.args[1].value=="Boolean"||self.args[1].value=="String"))return make_node(Cola.AST_Boolean,self,{value:Cola[self.expression.name](self.args[0].value,eval(self.args[1].value))}).transform(compressor);if(self.expression.name=="$_cola_modulo"&&self.args[1]instanceof Cola.AST_Constant)return make_node(Cola.AST_Number,self,{value:Cola.$_cola_modulo(self.args[0].value,self.args[1].value)}).transform(compressor)}}if(compressor.option("unsafe")){var exp=self.expression;if(exp instanceof Cola.AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Array":if(self.args.length!=1){return make_node(Cola.AST_Array,self,{elements:self.args}).transform(compressor)}break;case"Object":if(self.args.length==0){return make_node(Cola.AST_Object,self,{properties:[]})}break;case"String":if(self.args.length==0)return make_node(Cola.AST_String,self,{value:""});if(self.args.length<=1)return make_node(Cola.AST_Binary,self,{left:self.args[0],operator:"+",right:make_node(Cola.AST_String,self,{value:""})}).transform(compressor);break;case"Number":if(self.args.length==0)return make_node(Cola.AST_Number,self,{value:0});if(self.args.length==1)return make_node(Cola.AST_UnaryPrefix,self,{expression:self.args[0],operator:"+"}).transform(compressor);case"Boolean":if(self.args.length==0)return make_node(Cola.AST_False,self);if(self.args.length==1)return make_node(Cola.AST_UnaryPrefix,self,{expression:make_node(Cola.AST_UnaryPrefix,null,{expression:self.args[0],operator:"!"}),operator:"!"}).transform(compressor);break;case"Function":if(Cola.all(self.args,function(x){return x instanceof Cola.AST_String})){try{var code="(function("+self.args.slice(0,-1).map(function(arg){return arg.value}).join(",")+"){"+self.args[self.args.length-1].value+"})()";var ast=Cola.parse(code);ast.figure_out_scope({screw_ie8:compressor.option("screw_ie8")});var comp=new Cola.Compressor(compressor.options);ast=ast.transform(comp);ast.figure_out_scope({screw_ie8:compressor.option("screw_ie8")});ast.mangle_names();var fun;try{ast.walk(new Cola.TreeWalker(function(node){if(node instanceof Cola.AST_Lambda){fun=node;throw ast}}))}catch(ex){if(ex!==ast)throw ex}var args=fun.argnames.map(function(arg,i){return make_node(Cola.AST_String,self.args[i],{value:arg.print_to_string()})});var code=new Cola.OutputStream;Cola.AST_BlockStatement.prototype._codegen.call(fun,fun,code);code=code.toString().replace(/^\{|\}$/g,"");args.push(make_node(Cola.AST_String,self.args[self.args.length-1],{value:code}));self.args=args;return self}catch(ex){if(ex instanceof Cola.JS_Parse_Error){compressor.warn("Error parsing code passed to new Function [{file}:{line},{col}]",self.args[self.args.length-1].start);compressor.warn(ex.toString())}else{console.log(ex);throw ex}}}break}}else if(exp instanceof Cola.AST_Dot&&exp.property=="toString"&&self.args.length==0){return make_node(Cola.AST_Binary,self,{left:make_node(Cola.AST_String,self,{value:""}),operator:"+",right:exp.expression}).transform(compressor)}else if(exp instanceof Cola.AST_Dot&&exp.expression instanceof Cola.AST_Array&&exp.property=="join")EXIT:{var separator=self.args.length==0?",":self.args[0].evaluate(compressor)[1];if(separator==null)break EXIT;var elements=exp.expression.elements.reduce(function(a,el){el=el.evaluate(compressor);if(a.length==0||el.length==1){a.push(el)}else{var last=a[a.length-1];if(last.length==2){var val=""+last[1]+separator+el[1];a[a.length-1]=[make_node_from_constant(compressor,val,last[0]),val]}else{a.push(el)}}return a},[]);if(elements.length==0)return make_node(Cola.AST_String,self,{value:""});if(elements.length==1)return elements[0][0];if(separator==""){var first;if(elements[0][0]instanceof Cola.AST_String||elements[1][0]instanceof Cola.AST_String){first=elements.shift()[0]}else{first=make_node(Cola.AST_String,self,{value:""})}return elements.reduce(function(prev,el){return make_node(Cola.AST_Binary,el[0],{operator:"+",left:prev,right:el[0]})},first).transform(compressor)}var node=self.clone();node.expression=node.expression.clone();node.expression.expression=node.expression.expression.clone();node.expression.expression.elements=elements.map(function(el){return el[0]});return best_of(self,node)}}if(compressor.option("side_effects")){if(self.expression instanceof Cola.AST_Function&&self.args.length==0&&!Cola.AST_Block.prototype.has_side_effects.call(self.expression,compressor)){return make_node(Cola.AST_Undefined,self).transform(compressor)}}if(compressor.option("drop_console")){if(self.expression instanceof Cola.AST_PropAccess&&self.expression.expression instanceof Cola.AST_SymbolRef&&self.expression.expression.name=="console"&&self.expression.expression.undeclared()){return make_node(Cola.AST_Undefined,self).transform(compressor)}}return self.evaluate(compressor)[0]});OPT(Cola.AST_New,function(self,compressor){if(compressor.option("unsafe")){var exp=self.expression;if(exp instanceof Cola.AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Object":case"RegExp":case"Function":case"Error":case"Array":return make_node(Cola.AST_Call,self,self).transform(compressor)}}}return self});OPT(Cola.AST_Seq,function(self,compressor){if(!compressor.option("side_effects"))return self;if(!self.car.has_side_effects(compressor)){var p;if(!(self.cdr instanceof Cola.AST_SymbolRef&&self.cdr.name=="eval"&&self.cdr.undeclared()&&(p=compressor.parent())instanceof Cola.AST_Call&&p.expression===self)){return self.cdr}}if(compressor.option("cascade")){if(self.car instanceof Cola.AST_Assign&&!self.car.left.has_side_effects(compressor)){if(self.car.left.equivalent_to(self.cdr)){return self.car}if(self.cdr instanceof Cola.AST_Call&&self.cdr.expression.equivalent_to(self.car.left)){self.cdr.expression=self.car;return self.cdr}}if(!self.car.has_side_effects(compressor)&&!self.cdr.has_side_effects(compressor)&&self.car.equivalent_to(self.cdr)){return self.car}}if(self.cdr instanceof Cola.AST_UnaryPrefix&&self.cdr.operator=="void"&&!self.cdr.expression.has_side_effects(compressor)){self.cdr.operator=self.car;return self.cdr}if(self.cdr instanceof Cola.AST_Undefined){return make_node(Cola.AST_UnaryPrefix,self,{operator:"void",expression:self.car})}return self});Cola.AST_Unary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.expression instanceof Cola.AST_Seq){var seq=this.expression;var x=seq.to_array();this.expression=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}}return this});OPT(Cola.AST_UnaryPostfix,function(self,compressor){return self.lift_sequences(compressor)});OPT(Cola.AST_UnaryPrefix,function(self,compressor){self=self.lift_sequences(compressor);var e=self.expression;if(compressor.option("booleans")&&compressor.in_boolean_context()){switch(self.operator){case"!":if(e instanceof Cola.AST_UnaryPrefix&&e.operator=="!"){return e.expression}break;case"typeof":compressor.warn("Boolean expression always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}if(e instanceof Cola.AST_Binary&&self.operator=="!"){self=best_of(self,e.negate(compressor))}}return self.evaluate(compressor)[0]});function has_side_effects_or_prop_access(node,compressor){var save_pure_getters=compressor.option("pure_getters");compressor.options.pure_getters=false;var ret=node.has_side_effects(compressor);compressor.options.pure_getters=save_pure_getters;return ret}Cola.AST_Binary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.left instanceof Cola.AST_Seq){var seq=this.left;var x=seq.to_array();this.left=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}if(this.right instanceof Cola.AST_Seq&&this instanceof Cola.AST_Assign&&!has_side_effects_or_prop_access(this.left,compressor)){var seq=this.right;var x=seq.to_array();this.right=x.pop();x.push(this);seq=Cola.AST_Seq.from_array(x).transform(compressor);return seq}}return this});var commutativeOperators=Cola.makePredicate("== === != !== * & | ^");OPT(Cola.AST_Binary,function(self,compressor){var reverse=compressor.has_directive("use asm")?Cola.noop:function(op,force){if(force||!(self.left.has_side_effects(compressor)||self.right.has_side_effects(compressor))){if(op)self.operator=op;var tmp=self.left;self.left=self.right;self.right=tmp}};if(commutativeOperators(self.operator)){if(self.right instanceof Cola.AST_Constant&&!(self.left instanceof Cola.AST_Constant)){if(!(self.left instanceof Cola.AST_Binary&&Cola.PRECEDENCE[self.left.operator]>=Cola.PRECEDENCE[self.operator])){reverse(null,true)}}if(/^[!=]==?$/.test(self.operator)){if(self.left instanceof Cola.AST_SymbolRef&&self.right instanceof Cola.AST_Conditional){if(self.right.consequent instanceof Cola.AST_SymbolRef&&self.right.consequent.definition()===self.left.definition()){if(/^==/.test(self.operator))return self.right.condition;if(/^!=/.test(self.operator))return self.right.condition.negate(compressor)}if(self.right.alternative instanceof Cola.AST_SymbolRef&&self.right.alternative.definition()===self.left.definition()){if(/^==/.test(self.operator))return self.right.condition.negate(compressor);if(/^!=/.test(self.operator))return self.right.condition}}if(self.right instanceof Cola.AST_SymbolRef&&self.left instanceof Cola.AST_Conditional){if(self.left.consequent instanceof Cola.AST_SymbolRef&&self.left.consequent.definition()===self.right.definition()){if(/^==/.test(self.operator))return self.left.condition;if(/^!=/.test(self.operator))return self.left.condition.negate(compressor)}if(self.left.alternative instanceof Cola.AST_SymbolRef&&self.left.alternative.definition()===self.right.definition()){if(/^==/.test(self.operator))return self.left.condition.negate(compressor);if(/^!=/.test(self.operator))return self.left.condition}}}}self=self.lift_sequences(compressor);if(compressor.option("comparisons"))switch(self.operator){case"===":case"!==":if(self.left.is_string(compressor)&&self.right.is_string(compressor)||self.left.is_boolean()&&self.right.is_boolean()){self.operator=self.operator.substr(0,2)}case"==":case"!=":if(self.left instanceof Cola.AST_String&&self.left.value=="undefined"&&self.right instanceof Cola.AST_UnaryPrefix&&self.right.operator=="typeof"&&compressor.option("unsafe")){if(!(self.right.expression instanceof Cola.AST_SymbolRef)||!self.right.expression.undeclared()){self.right=self.right.expression;self.left=make_node(Cola.AST_Undefined,self.left).optimize(compressor);if(self.operator.length==2)self.operator+="="}}break}if(compressor.option("booleans")&&compressor.in_boolean_context())switch(self.operator){case"&&":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&!ll[1]||rr.length>1&&!rr[1]){compressor.warn("Boolean && always false [{file}:{line},{col}]",self.start);return make_node(Cola.AST_False,self)}if(ll.length>1&&ll[1]){return rr[0]}if(rr.length>1&&rr[1]){return ll[0]}break;case"||":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&ll[1]||rr.length>1&&rr[1]){compressor.warn("Boolean || always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}if(ll.length>1&&!ll[1]){return rr[0]}if(rr.length>1&&!rr[1]){return ll[0]}break;case"+":var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll.length>1&&ll[0]instanceof Cola.AST_String&&ll[1]||rr.length>1&&rr[0]instanceof Cola.AST_String&&rr[1]){compressor.warn("+ in boolean context always true [{file}:{line},{col}]",self.start);return make_node(Cola.AST_True,self)}break}if(compressor.option("comparisons")){if(!(compressor.parent()instanceof Cola.AST_Binary)||compressor.parent()instanceof Cola.AST_Assign){var negated=make_node(Cola.AST_UnaryPrefix,self,{operator:"!",expression:self.negate(compressor)});self=best_of(self,negated)}switch(self.operator){case"<":reverse(">");break;case"<=":reverse(">=");break}}if(self.operator=="+"&&self.right instanceof Cola.AST_String&&self.right.getValue()===""&&self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.is_string(compressor)){return self.left}if(compressor.option("evaluate")){if(self.operator=="+"){if(self.left instanceof Cola.AST_Constant&&self.right instanceof Cola.AST_Binary&&self.right.operator=="+"&&self.right.left instanceof Cola.AST_Constant&&self.right.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:make_node(Cola.AST_String,null,{value:""+self.left.getValue()+self.right.left.getValue(),start:self.left.start,end:self.right.left.end}),right:self.right.right})}if(self.right instanceof Cola.AST_Constant&&self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.right instanceof Cola.AST_Constant&&self.left.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:self.left.left,right:make_node(Cola.AST_String,null,{value:""+self.left.right.getValue()+self.right.getValue(),start:self.left.right.start,end:self.right.end})})}if(self.left instanceof Cola.AST_Binary&&self.left.operator=="+"&&self.left.is_string(compressor)&&self.left.right instanceof Cola.AST_Constant&&self.right instanceof Cola.AST_Binary&&self.right.operator=="+"&&self.right.left instanceof Cola.AST_Constant&&self.right.is_string(compressor)){self=make_node(Cola.AST_Binary,self,{operator:"+",left:make_node(Cola.AST_Binary,self.left,{operator:"+",left:self.left.left,right:make_node(Cola.AST_String,null,{value:""+self.left.right.getValue()+self.right.left.getValue(),start:self.left.right.start,end:self.right.left.end})}),right:self.right.right})}}}if(self.right instanceof Cola.AST_Binary&&self.right.operator==self.operator&&(self.operator=="*"||self.operator=="&&"||self.operator=="||")){self.left=make_node(Cola.AST_Binary,self.left,{operator:self.operator,left:self.left,right:self.right.left});self.right=self.right.right;return self.transform(compressor)}return self.evaluate(compressor)[0]});OPT(Cola.AST_SymbolRef,function(self,compressor){if(self.undeclared()){var defines=compressor.option("global_defs");if(defines&&defines.hasOwnProperty(self.name)){return make_node_from_constant(compressor,defines[self.name],self)}switch(self.name){case"undefined":return make_node(Cola.AST_Undefined,self);case"NaN":return make_node(Cola.AST_NaN,self);case"Infinity":return make_node(Cola.AST_Infinity,self)}}return self});OPT(Cola.AST_Undefined,function(self,compressor){if(compressor.option("unsafe")){var scope=compressor.find_parent(Cola.AST_Scope);var undef=scope.find_variable("undefined");if(undef){var ref=make_node(Cola.AST_SymbolRef,self,{name:"undefined",scope:scope,thedef:undef});ref.reference();return ref}}return self});var ASSIGN_OPS=["+","-","/","*","%",">>","<<",">>>","|","^","&"];OPT(Cola.AST_Assign,function(self,compressor){self=self.lift_sequences(compressor);if(self.operator=="="&&self.left instanceof Cola.AST_SymbolRef&&self.right instanceof Cola.AST_Binary&&self.right.left instanceof Cola.AST_SymbolRef&&self.right.left.name==self.left.name&&Cola.member(self.right.operator,ASSIGN_OPS)){self.operator=self.right.operator+"=";self.right=self.right.right}return self});OPT(Cola.AST_Conditional,function(self,compressor){if(!compressor.option("conditionals"))return self;if(self.condition instanceof Cola.AST_Seq){var car=self.condition.car;self.condition=self.condition.cdr;return Cola.AST_Seq.cons(car,self)}var cond=self.condition.evaluate(compressor);if(cond.length>1){if(cond[1]){compressor.warn("Condition always true [{file}:{line},{col}]",self.start);return self.consequent}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.start);return self.alternative}}var negated=cond[0].negate(compressor);if(best_of(cond[0],negated)===negated){self=make_node(Cola.AST_Conditional,self,{condition:negated,consequent:self.alternative,alternative:self.consequent})}var consequent=self.consequent;var alternative=self.alternative;if(consequent instanceof Cola.AST_Assign&&alternative instanceof Cola.AST_Assign&&consequent.operator==alternative.operator&&consequent.left.equivalent_to(alternative.left)){return make_node(Cola.AST_Assign,self,{operator:consequent.operator,left:consequent.left,right:make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:consequent.right,alternative:alternative.right})})}if(consequent instanceof Cola.AST_Call&&alternative.TYPE===consequent.TYPE&&consequent.args.length==alternative.args.length&&consequent.expression.equivalent_to(alternative.expression)){if(consequent.args.length==0){return make_node(Cola.AST_Seq,self,{car:self.condition,cdr:consequent})}if(consequent.args.length==1){consequent.args[0]=make_node(Cola.AST_Conditional,self,{condition:self.condition,consequent:consequent.args[0],alternative:alternative.args[0]});return consequent}}if(consequent instanceof Cola.AST_Conditional&&consequent.alternative.equivalent_to(alternative)){return make_node(Cola.AST_Conditional,self,{condition:make_node(Cola.AST_Binary,self,{left:self.condition,operator:"&&",right:consequent.condition}),consequent:consequent.consequent,alternative:alternative})}return self});OPT(Cola.AST_Boolean,function(self,compressor){if(compressor.option("booleans")){var p=compressor.parent();if(p instanceof Cola.AST_Binary&&(p.operator=="=="||p.operator=="!=")){compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:p.operator,value:self.value,file:p.start.file,line:p.start.line,col:p.start.col});return make_node(Cola.AST_Number,self,{value:+self.value})}return make_node(Cola.AST_UnaryPrefix,self,{operator:"!",expression:make_node(Cola.AST_Number,self,{value:1-self.value})})}return self});OPT(Cola.AST_Sub,function(self,compressor){var prop=self.property;if(prop instanceof Cola.AST_String&&compressor.option("properties")){prop=prop.getValue();if(Cola.RESERVED_WORDS(prop)?compressor.option("screw_ie8"):Cola.is_identifier_string(prop)){return make_node(Cola.AST_Dot,self,{expression:self.expression,property:prop})}var v=parseFloat(prop);if(!isNaN(v)&&v.toString()==prop){self.property=make_node(Cola.AST_Number,self.property,{value:v})}}return self});function literals_in_boolean_context(self,compressor){if(compressor.option("booleans")&&compressor.in_boolean_context()){return make_node(Cola.AST_True,self)}return self}OPT(Cola.AST_Array,literals_in_boolean_context);OPT(Cola.AST_Object,literals_in_boolean_context);OPT(Cola.AST_RegExp,literals_in_boolean_context)})();"use strict";!this.Cola&&(this.Cola={});Cola.AST_Toplevel.prototype.toJavaScript=function(options){if(this.language=="js")return this;this.language="js";options=Cola.defaults(options,{main_binding:true,main_event:"DOMContentLoaded",parser:{},std:true,path_prefix:""});var $_cola_ast=Cola.parse(Cola.$_cola,{is_js:true}),$_cola_hash={},_this,required=[],required_hash={},tt=new Cola.TreeTransformer(function(node,descend,in_list){var newNode,props={},parent=this.parent();node=node.clone();if(options.main_binding&&parent instanceof Cola.AST_Toplevel&&node instanceof Cola.AST_Defun&&node.name instanceof Cola.AST_SymbolDefun&&node.name.name=="main"){node.name=new Cola.AST_SymbolLambda(node.name);node=new Cola.AST_Function(node);props={args:[new Cola.AST_String({value:options.main_event}),node,new Cola.AST_False],expression:new Cola.AST_Dot({property:"addEventListener",expression:new Cola.AST_SymbolRef({name:"window"})})};node=new Cola.AST_SimpleStatement({body:new Cola.AST_Call(props),start:node.start,end:node.left})}else if(node instanceof Cola.AST_Binary&&node.operator=="**"){props={args:[node.left,node.right],start:node.start,end:node.left,expression:new Cola.AST_Dot({property:"pow",expression:new Cola.AST_SymbolRef({name:"Math"})})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="%%"){$_cola_hash[Cola.$_cola_modulo.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_modulo"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_SimpleStatement&&node.body instanceof Cola.AST_Assign&&node.body.operator=="?="){if(node.body.left instanceof Cola.AST_Sub&&node.body.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.body.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})}; +node.body.left.property=new Cola.AST_Binary(props)}$_cola_hash[Cola.$_cola_isntset.i]=true;node.body.operator="=";props={args:[node.body.left],expression:new Cola.AST_SymbolRef({name:"$_cola_isntset"})};node=new Cola.AST_If({body:node.clone(),start:node.start,end:node.end,condition:new Cola.AST_Call(props)})}else if(node instanceof Cola.AST_Assign&&node.operator=="?="){if(node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})};node.left.property=new Cola.AST_Binary(props)}$_cola_hash[Cola.$_cola_isntset.i]=true;node.operator="=";props={args:[node.left],expression:new Cola.AST_SymbolRef({name:"$_cola_isntset"})};node=new Cola.AST_Conditional({start:node.start,end:node.end,condition:new Cola.AST_Call(props),consequent:node.clone(),alternative:node.left})}else if(node instanceof Cola.AST_Conditional&&node.alternative instanceof Cola.AST_Noop){$_cola_hash[Cola.$_cola_isset.i]=true;props={args:[node.condition],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isset"})};node.alternative=node.consequent;node.consequent=node.condition;node.condition=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="is"){$_cola_hash[Cola.$_cola_is.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_is"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Binary&&node.operator=="isnt"){$_cola_hash[Cola.$_cola_isnt.i]=true;props={args:[node.left,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isnt"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_UnaryPostfix&&node.operator=="??"||node instanceof Cola.AST_UnaryPrefix&&node.operator=="isset"){$_cola_hash[Cola.$_cola_isset.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_isset"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_UnaryPrefix&&node.operator=="clone"){$_cola_hash[Cola.$_cola_clone.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_clone"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator=="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"push",expression:node.left.expression};props={args:[node.right],start:node.start,end:node.end,expression:new Cola.AST_Dot(props)};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator!="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_Noop){props={property:"length",expression:node.left.expression};props={operator:"-",left:new Cola.AST_Dot(props),right:new Cola.AST_Number({value:1})};node.left.property=new Cola.AST_Binary(props)}else if(node instanceof Cola.AST_Sub&&node.property instanceof Cola.AST_Noop){$_cola_hash[Cola.$_cola_array_last.i]=true;props={args:[node.expression],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_last"})};node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Assign&&node.operator=="="&&node.left instanceof Cola.AST_Sub&&node.left.property instanceof Cola.AST_ArrayRange){$_cola_hash[Cola.$_cola_array_asplice.i]=true;props={args:[node.left.expression,node.left.property.from,node.left.property.to,node.right],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_asplice"})};if(node.left.property.to instanceof Cola.AST_Noop)props.args[2]=new Cola.AST_Number({value:"9e9"});else if(node.left.property.triple)props.args[2]=new Cola.AST_Binary({operator:"-",left:node.left.property.to,right:new Cola.AST_Number({value:1})});node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Sub&&node.property instanceof Cola.AST_ArrayRange){props={property:"slice",expression:node.expression};props={args:[node.property.from],start:node.start,end:node.end,expression:new Cola.AST_Dot(props)};if(!node.property.triple&&!(node.property.to instanceof Cola.AST_Noop))props.args[1]=new Cola.AST_Binary({operator:"+",left:node.property.to,right:new Cola.AST_Number({value:1})});else if(!(node.property.to instanceof Cola.AST_Noop))props.args[1]=node.property.to;node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_ArrayRange){$_cola_hash[Cola.$_cola_array_range.i]=true;props={args:[node.from,node.to],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_array_range"})};if(node.triple)props.args[1]=new Cola.AST_Binary({operator:"-",left:node.to,right:new Cola.AST_Number({value:1})});node=new Cola.AST_Call(props)}else if(node instanceof Cola.AST_Call){props={properties:[]};var delQueue=[];node.args.forEach(function(val,i){if(!(val instanceof Cola.AST_Namedarg))return;$_cola_hash[Cola.$_cola_func_named_args.i]=true;delQueue.push(i);props.properties.push(new Cola.AST_ObjectKeyVal({key:val.name,value:val.value,start:val.start,end:val.end}))});if(delQueue.length!=0){delQueue.reverse().forEach(function(val){node.args.splice(val,1)});props={args:[new Cola.AST_Object(props)],start:node.start,end:node.end,expression:new Cola.AST_SymbolRef({name:"$_cola_func_named_args"})};node.args.push(new Cola.AST_New(props))}}else if((node instanceof Cola.AST_Function||node instanceof Cola.AST_Defun)&&node.argnames.length!=0){var posed=[],named=[],onfront=true,delQueue=[],pos=0,splated,aftersplated=-1;node.argnames.forEach(function(val,i){if(val.argtype=="positional"){if(val.defval instanceof Cola.AST_Noop&&onfront)pos++,node.argnames[i]=val.name;else{onfront=false;delQueue.push(i);posed.push({pos:pos++,val:val})}splated&&splated.after++}else if(val.argtype=="named"){delQueue.push(i);named.push(val)}else if(val.argtype=="splated"){onfront=false;delQueue.push(i);posed.push(splated={pos:pos++,after:0,val:val})}});if(delQueue.length!=0)delQueue.reverse().forEach(function(val){node.argnames.splice(val,1)});props={type:"dynamic",definitions:[]};posed.forEach(function(val,i){var pos=val.pos;val=val.val;if(val.argtype=="splated"){aftersplated=0;props.definitions.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola_i"}),value:null}));props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(splated.val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:splated.pos+splated.after+1}),right:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[new Cola.AST_SymbolRef({name:"arguments"}),new Cola.AST_Number({value:splated.pos}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:new Cola.AST_SymbolRef({name:"arguments"})}),right:new Cola.AST_Number({value:splated.after})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:splated.pos})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(val.defval instanceof Cola.AST_Noop)props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated++})})})}));else props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"!==",left:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated})})}),right:new Cola.AST_SymbolRef({name:"undefined"})}),consequent:new Cola.AST_Sub({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:aftersplated==-1?new Cola.AST_Number({value:pos}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola_i"}),right:new Cola.AST_Number({value:aftersplated++})})}),alternative:val.defval})}))});named.forEach(function(val,i){if(val.defval instanceof Cola.AST_Noop)props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name})}));else props.definitions.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(val.name),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"!==",left:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name}),right:new Cola.AST_SymbolRef({name:"undefined"})}),consequent:new Cola.AST_Dot({expression:new Cola.AST_SymbolRef({name:"arguments"}),property:val.name.name}),alternative:val.defval})}))});if(delQueue.length!=0||named.length!=0)node.body.unshift(new Cola.AST_Var(props));if(named.length!=0){$_cola_hash[Cola.$_cola_func_named_args.i]=true;$_cola_hash[Cola.$_cola_func_set_named_args.i]=true;node.body.unshift(new Cola.AST_SimpleStatement({body:new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_SymbolRef({name:"$_cola_func_set_named_args"})})}))}}else if(node instanceof Cola.AST_Cascade){$_cola_hash[Cola.$_cola_arguments_def.i]=true;props={type:"dynamic",body:[],argnames:[new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"$_cola_expr",start:node.expression.start,end:node.expression.end})}),new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"arguments",start:new Cola.AST_Token,end:new Cola.AST_Token})})]};var Expr,Parent=false;node.subexpressions.forEach(function(expr){Expr=expr,Parent=false;while(true)if(expr instanceof Cola.AST_Call||expr instanceof Cola.AST_Dot||expr instanceof Cola.AST_Sub||expr instanceof Cola.AST_Cascade){Parent=expr;expr=expr.expression}else if(expr instanceof Cola.AST_Binary){Parent=expr;expr=expr.left}else if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange||expr instanceof Cola.AST_SymbolRef)break;if(!Parent){if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange)Expr=new Cola.AST_Sub({start:Expr.start,end:Expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr instanceof Cola.AST_ArrayRange?expr:expr.elements.length==0?new Cola.AST_Noop:expr.elements[0]});else if(expr instanceof Cola.AST_SymbolRef)Expr=new Cola.AST_Dot({start:Expr.start,end:Expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:Expr.name})}else{if(expr instanceof Cola.AST_Array||expr instanceof Cola.AST_ArrayRange)expr=new Cola.AST_Sub({start:expr.start,end:expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr instanceof Cola.AST_ArrayRange?expr:expr.elements.length==0?new Cola.AST_Noop:expr.elements[0]});else expr=new Cola.AST_Dot({start:expr.start,end:expr.end,expression:new Cola.AST_SymbolRef({name:"$_cola_expr"}),property:expr.name});if(Parent instanceof Cola.AST_Call||Parent instanceof Cola.AST_Dot||Parent instanceof Cola.AST_Sub||Parent instanceof Cola.AST_Cascade)Parent.expression=expr;else if(Parent instanceof Cola.AST_Binary)Parent.left=expr}props.body.push(new Cola.AST_SimpleStatement({start:Expr.start,end:Expr.end,body:Expr}))});props.body.push(new Cola.AST_Return({value:new Cola.AST_SymbolRef({name:"$_cola_expr"})}));props={expression:new Cola.AST_Function(props),property:"call"};node=new Cola.AST_Call({start:node.start,end:node.end,args:[new Cola.AST_SymbolRef({name:"this"}),node.expression,new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Var){var defs=[];node.definitions.forEach(function(def,i){if(!(def.name instanceof Cola.AST_ArrayTemplate||def.name instanceof Cola.AST_ObjectTemplate)){defs.push(def);return}var Symbol=def.value instanceof Cola.AST_SymbolRef?def.value:new Cola.AST_SymbolRef({name:"$_cola_tmp"});if(!(def.value instanceof Cola.AST_SymbolRef))defs.push(new Cola.AST_VarDef({type:node.type,name:new Cola.AST_SymbolVar(Symbol),value:def.value}));(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if(el instanceof Cola.AST_SymbolRef&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_VarDef({name:new Cola.AST_SymbolVar(el),value:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_SymbolRef)defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:node.type,name:new Cola.AST_SymbolVar(el),value:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:node.type,name:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolVar({name:el.key}):new Cola.AST_SymbolVar(el.value),value:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(def.name,Symbol,"_")});node.definitions=defs}else if(node.body instanceof Cola.AST_Assign&&(node.body.left instanceof Cola.AST_ArrayTemplate||node.body.left instanceof Cola.AST_ObjectTemplate||(node.body.left instanceof Cola.AST_Array||node.body.left instanceof Cola.AST_Object)&&node.body.left.template)&&node instanceof Cola.AST_SimpleStatement){if(node.body.left.vardef&&node.body.operator!="=")Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype,node.body.left.start);node=node.body;var defs=[];var Symbol=node.right instanceof Cola.AST_SymbolRef?node.right:new Cola.AST_SymbolRef({name:"$_cola_tmp"});if(!(node.right instanceof Cola.AST_SymbolRef))defs.push(new Cola.AST_VarDef({type:"dynamic",name:new Cola.AST_SymbolVar(Symbol),value:node.right}));(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_Array||def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if(el instanceof Cola.AST_VarDef&&el.name.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.name.splated=undefined;el.value=new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})});defs.push(el)}else if((el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_VarDef){el.value=new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})});defs.push(el)}else if(el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.type&&(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Noop&&el.start.type=="name"))defs.push(new Cola.AST_VarDef({start:node.start,end:node.end,type:el.type,name:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolVar({name:el.key}):new Cola.AST_SymbolVar(el.value),value:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Sub||el.value instanceof Cola.AST_Dot||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_Assign({operator:node.operator,left:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolRef({name:el.key}):el.value,right:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(node.left,Symbol,"_");if(defs.length==0)return node;node=[];var sdef,sdefs=[],prev=defs[0].CTOR;defs.forEach(function _(def,i){sdef=false;if(def instanceof prev)sdefs.push(def);else{if(prev==Cola.AST_VarDef)sdef=new Cola.AST_Var({type:"dynamic",definitions:sdefs});else if(sdefs.length==1)sdef=sdefs[0];else{sdefs.reverse().forEach(function(def){if(!sdef)sdef=def;else sdef=new Cola.AST_Seq({car:def,cdr:sdef})})}node.push(!(sdef instanceof Cola.AST_Var)?new Cola.AST_SimpleStatement({body:sdef}):sdef);prev=def.CTOR;sdefs=[def]}if(i==defs.length-1)_(false)})}else if(node instanceof Cola.AST_Assign&&(node.left instanceof Cola.AST_ArrayTemplate||node.left instanceof Cola.AST_ObjectTemplate||(node.left instanceof Cola.AST_Array||node.left instanceof Cola.AST_Object)&&node.left.template)){if(node.left.vardef)Cola.Parser.prototype.unexpected.call(Cola.Parser.prototype,node.start);$_cola_hash[Cola.$_cola_arguments_def.i]=true;var defs=[];var Symbol=new Cola.AST_SymbolRef({name:"$_cola_expr"});(function _rec(def,symbol,uid){var skiped=false,k=0,is_arrayt=def instanceof Cola.AST_Array||def instanceof Cola.AST_ArrayTemplate,_=is_arrayt?def.elements:def.properties;_.forEach(is_arrayt?function(el,j){if((el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)&&el.splated){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:null}));el.splated=undefined;defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Conditional({condition:new Cola.AST_Binary({operator:"<=",left:new Cola.AST_Number({value:_.length}),right:new Cola.AST_Dot({expression:symbol,property:"length"})}),consequent:new Cola.AST_Call({expression:new Cola.AST_Dot({property:"call",expression:new Cola.AST_Dot({property:"slice",expression:new Cola.AST_Array({elements:[]})})}),args:[symbol,new Cola.AST_Number({value:j}),new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),right:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-j-1})})})]}),alternative:new Cola.AST_Seq({car:new Cola.AST_Assign({operator:"=",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:j})}),cdr:new Cola.AST_Array({elements:[]})})})}))}else if(el instanceof Cola.AST_SymbolRef||el instanceof Cola.AST_Sub||el instanceof Cola.AST_Dot)defs.push(new Cola.AST_Assign({operator:node.operator,left:el,right:new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})})}));else if(el instanceof Cola.AST_Noop){skiped=true;defs.push(new Cola.AST_VarDef({type:"int",name:new Cola.AST_SymbolVar({name:"$_cola"+uid+"i"}),value:new Cola.AST_Binary({operator:"-",left:new Cola.AST_Dot({property:"length",expression:symbol}),right:new Cola.AST_Number({value:_.length-1-j})})}))}else if(el instanceof Cola.AST_Hole||el instanceof Cola.AST_ArrayTemplate&&el.elements.length==0||el instanceof Cola.AST_ObjectTemplate&&el.properties.length==0)k++;else _rec(el,new Cola.AST_Sub({expression:symbol,property:!skiped?new Cola.AST_Number({value:j}):new Cola.AST_Binary({operator:"+",left:new Cola.AST_SymbolRef({name:"$_cola"+uid+"i"}),right:new Cola.AST_Number({value:k++})})}),uid+"_")}:function(el,j){if(el.value instanceof Cola.AST_SymbolRef||el.value instanceof Cola.AST_Sub||el.value instanceof Cola.AST_Dot||el.value instanceof Cola.AST_Noop&&el.start.type=="name")defs.push(new Cola.AST_Assign({operator:node.operator,left:el.value instanceof Cola.AST_Noop?new Cola.AST_SymbolRef({name:el.key}):el.value,right:el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})})}));else _rec(el.value,el.start.type=="name"?new Cola.AST_Dot({expression:symbol,property:el.key}):new Cola.AST_Sub({expression:symbol,property:new Cola.AST_String({value:el.key})}),uid+"_")})})(node.left,Symbol,"_");if(defs.length==0)return node;props={type:"dynamic",body:[],argnames:[new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"$_cola_expr",start:node.right.start,end:node.right.end})}),new Cola.AST_ArgDef({argtype:"positional",type:"dynamic",defval:new Cola.AST_Noop,name:new Cola.AST_SymbolFunarg({name:"arguments",start:new Cola.AST_Token,end:new Cola.AST_Token})})]};var sdef,sdefs=[],prev=defs[0].CTOR;defs.forEach(function _(def,i){sdef=false;if(def instanceof prev)sdefs.push(def);else{if(prev==Cola.AST_VarDef)sdef=new Cola.AST_Var({type:"dynamic",definitions:sdefs});else if(sdefs.length==1)sdef=sdefs[0];else{sdefs.reverse().forEach(function(def){if(!sdef)sdef=def;else sdef=new Cola.AST_Seq({car:def,cdr:sdef})})}props.body.push(!(sdef instanceof Cola.AST_Var)?new Cola.AST_SimpleStatement({body:sdef}):sdef);prev=def.CTOR;sdefs=[def]}if(i==defs.length-1)_(false)});props.body.push(new Cola.AST_Return({value:new Cola.AST_SymbolRef({name:"$_cola_expr"})}));props={expression:new Cola.AST_Function(props),property:"call"};node=new Cola.AST_Call({start:node.start,end:node.end,args:[new Cola.AST_SymbolRef({name:"this"}),node.right,new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_If&&node.inline&&!(parent instanceof Cola.AST_If&&parent.inline)){$_cola_hash[Cola.$_cola_arguments_def.i]=true;var s=node;while(true){s.inline=false;s.body=new Cola.AST_Return({value:s.body});if(s.alternative instanceof Cola.AST_If)s=s.alternative;else if(s.alternative==null)break;else{s.alternative=new Cola.AST_Return({value:s.alternative});break}}props={expression:new Cola.AST_Function({type:"dynamic",body:[node],argnames:[]}),property:"apply"};node=new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"this"}),new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Switch&&!(parent instanceof Cola.AST_Block)){$_cola_hash[Cola.$_cola_arguments_def.i]=true;node.body.forEach(function(branch){if(!branch.body.length)return;branch.body[0]=new Cola.AST_Return({value:branch.body[0].body})});props={expression:new Cola.AST_Function({type:"dynamic",body:[node],argnames:[]}),property:"apply"};node=new Cola.AST_Call({args:[new Cola.AST_SymbolRef({name:"this"}),new Cola.AST_SymbolRef({name:"arguments"})],expression:new Cola.AST_Dot(props)})}else if(node instanceof Cola.AST_Switch&&node.expression instanceof Cola.AST_Noop){node.expression=new Cola.AST_False;node.body.forEach(function(branch){if(branch instanceof Cola.AST_Default)return;if(branch.expression instanceof Cola.AST_Seq){var seq=branch.expression;while(true){seq.car=new Cola.AST_UnaryPrefix({operator:"!",expression:seq.car});if(seq.cdr instanceof Cola.AST_Seq)seq=seq.cdr;else{seq.cdr=new Cola.AST_UnaryPrefix({operator:"!",expression:seq.cdr});break}}return}branch.expression=new Cola.AST_UnaryPrefix({operator:"!",expression:branch.expression})})}else if(node instanceof Cola.AST_When){node=new Cola.AST_Case(node);node.body.push(new Cola.AST_Break)}else if(node instanceof Cola.AST_SwitchBranch&&!(node instanceof Cola.AST_Default)&&node.expression instanceof Cola.AST_Seq){var branches=[],seq=node.expression;while(true){branches.push(new node.CTOR({expression:seq.car,body:[]}));if(seq.cdr instanceof Cola.AST_Seq)seq=seq.cdr;else{node.expression=seq.cdr;branches.push(node);break}}node=branches}else if(node instanceof Cola.AST_Proto){props=new Cola.AST_Dot(node);props.expression=new Cola.AST_Dot(node);props.expression.property="prototype";node=props}else if(node instanceof Cola.AST_StringTemplate){newNode=new Cola.AST_Binary({operator:"+",left:node.body[0],right:node.body[1]});for(var i=2;i=_to;i--)range.push(i);return range};Cola.$_cola_array_range.i=7;Cola.$_cola_array_asplice=function $_cola_array_asplice(_array,_from,_to,_a){_to=_to-_from+1;return[].splice.apply(_array,[_from,_to].concat(_a)),_a};Cola.$_cola_array_asplice.i=8;Cola.$_cola_func_named_args=function $_cola_func_named_args(_args){this.$=_args};Cola.$_cola_func_named_args.i=9;Cola.$_cola_func_set_named_args=function $_cola_func_set_named_args(_args){if(_args[_args.length-1]instanceof $_cola_func_named_args){var nargs=_args[_args.length-1].$;for(var i in nargs)if(nargs.hasOwnProperty(i))_args[i]=nargs[i]}};Cola.$_cola_func_set_named_args.i=10;Cola.$_cola_arguments_def={i:11};Cola.$_cola=Cola.$_cola_is+Cola.$_cola_isnt+Cola.$_cola_modulo+Cola.$_cola_isset+Cola.$_cola_isntset+Cola.$_cola_clone+Cola.$_cola_array_last+Cola.$_cola_array_range+Cola.$_cola_array_asplice+Cola.$_cola_func_named_args+Cola.$_cola_func_set_named_args+"var arguments;";Cola.Compressor.StdFuncs={$_cola_is:true,$_cola_isnt:true,$_cola_modulo:true,$_cola_isset:true,$_cola_isntset:true};window.addEventListener("DOMContentLoaded",Cola.bootstrap,false); \ No newline at end of file diff --git a/lib/translate.js b/lib/translate.js index bdface7b..0f3c9bac 100644 --- a/lib/translate.js +++ b/lib/translate.js @@ -74,6 +74,9 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){ */ if(options.main_binding && parent instanceof Cola.AST_Toplevel && node instanceof Cola.AST_Defun && node.name instanceof Cola.AST_SymbolDefun && node.name.name == "main"){ + node.name = new Cola.AST_SymbolLambda(node.name); + node = new Cola.AST_Function(node); + props = { args : [new Cola.AST_String({ value : options.main_event }), node, new Cola.AST_False()], expression : new Cola.AST_Dot({ @@ -1780,7 +1783,7 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){ options.parser.is_js = /\.js$/.test(file); options.parser.filename = file; - var tl = Cola.parse(Cola.getSource(options.path_prefix + file), options.parser); + var tl = Cola.parse(Cola.getSource(options.path_prefix + file, options.path_prefix != ""), options.parser); if (options.parser.is_js) tl = tl.toJavaScript({ main_binding : options.main_binding, main_event : options.main_event, @@ -1802,8 +1805,8 @@ Cola.AST_Toplevel.prototype.toJavaScript = function(options){ options.parser.is_js = /\.js$/.test(file); options.parser.filename = file; - - var tl = Cola.parse(Cola.getSource(options.path_prefix + file), options.parser); + + var tl = Cola.parse(Cola.getSource(options.path_prefix + file, options.path_prefix != ""), options.parser); if (options.parser.is_js) tl = tl.toJavaScript({ main_binding : options.main_binding, main_event : options.main_event, diff --git a/package.json b/package.json index 08cca9ec..b21eb75f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "ColaScript translator / parser / mangler / compressor / beautifier toolkit", "homepage": "https://github.com/TrigenSoftware/ColaScript", "main": "tools/node.js", - "version": "0.5.0", + "version": "0.5.4", "engines": { "node" : ">=0.4.0" }, "maintainers": [{ "name": "Dan Onoshko (dangreen)", diff --git a/tools/node.js b/tools/node.js index a7b8a183..8c2d4926 100644 --- a/tools/node.js +++ b/tools/node.js @@ -40,8 +40,8 @@ Cola.AST_Node.warn_function = function(txt) { sys.error("WARN: " + txt); }; -Cola.getSource = function(file) { - return fs.readFileSync(path.join(process.cwd(), file), "utf8"); +Cola.getSource = function(file, not_cwd) { + return fs.readFileSync(not_cwd ? file : path.join(process.cwd(), file), "utf8"); }; // XXX: perhaps we shouldn't export everything but heck, I'm lazy. @@ -63,7 +63,8 @@ exports.translate = function(files, options) { output : null, compress : {}, is_js : false, - main_binding : true + main_binding : true, + path_prefix : "" }); Cola.base54.reset(); @@ -88,7 +89,8 @@ exports.translate = function(files, options) { }); if (!options.is_js) toplevel = toplevel.toJavaScript({ - main_binding: options.main_binding, + main_binding: options.main_binding, + path_prefix : options.path_prefix, parser: { filename: options.fromString ? "?" : file, is_js : options.is_js