!this.Cola&&(this.Cola={});if(typeofwindow!="undefined"){Cola.getSource=function(url){varxhr=newXMLHttpRequest;xhr.open("GET",url,false);xhr.send();returnxhr.status==200?xhr.responseText:""};Cola.dirname=function(dir){returndir.replace(/\/[^\/]*$/,"")};Cola.getPackages=function(){varpackages=document.querySelector('script[type="text/packages-json"]');if(packages){returnJSON.parse(packages.innerHTML)}packages=document.querySelector('script[type="text/packages-json"][src]');if(packages){returnJSON.parse(Cola.getSource(packages.src))}if(packages=Cola.getSource("/packages.json")){returnJSON.parse(packages)}return{}}}else{varpath=require("path");varfs=require("fs");Cola.getSource=function(file){try{returnfs.readFileSync(Cola.notRoot(file)?path.join(process.cwd(),file):file,"utf8")}catch(e){return""}};Cola.getPackages=function(path){if(!path)path="packages.json";returnJSON.parse(Cola.getSource(path))};Cola.dirname=path.dirname}Cola.tryGetRequiredSource=function(src){varsource;if(source=Cola.getSource(src))return[src,source];if(source=Cola.getSource(src+".cola"))return[src,source];if(source=Cola.getSource(src+".js"))return[src,source];returnfalse};Cola.notRoot=function(path){returnpath[0]!="/"&&!/^http/.test(path)};Cola.translate=function(source,opts){varstream=newCola.OutputStream({beautify:true}),ast;try{ast=Cola.parse(source).toJavaScript(opts);ast.print(stream);returnstream.toString()}catch(e){throwe}};Cola.eval=function(source,opts){returneval.call(this,Cola.translate(source,opts))};Cola.bootstraped=false;Cola.bootstrap=function(){if(Cola.bootstraped)return;Cola.bootstraped=true;Array.prototype.forEach.call(document.querySelectorAll('script[type="text/colascript"][src]'),function(script){if(/\.js$/.test(script.src))eval.call(window,Cola.getSource(script.src));elseCola.eval.call(window,Cola.getSource(script.src),{path:Cola.dirname(script.src)})});varevent=document.createEvent("HTMLEvents");event.initEvent("DOMContentLoaded",true,true);event.eventName="DOMContentLoaded";window.dispatchEvent(event);event=document.createEvent("HTMLEvents");event.initEvent("load",true,true);event.eventName="load";window.dispatchEvent(event)};Cola.modsVerifi=function(mods,allowedMods){mods=mods.slice();allowedMods.forEach(function(mod){Cola.remove(mods,mod)});return!mods.length};Cola.modsContains=function(mods,allowedMods){for(variinallowedMods)if(allowedMods.hasOwnProperty(i)&&mods.indexOf(allowedMods[i])!=-1)returntrue;returnfalse};"use strict";Cola.array_to_hash=function(a){varret=Object.create(null);for(vari=0;i<a.length;++i)ret[a[i]]=true;returnret};Cola.slice=function(a,start){returnArray.prototype.slice.call(a,start||0)};Cola.characters=function(str){returnstr.split("")};Cola.member=function(name,array){for(vari=array.length;--i>=0;)if(array[i]==name)returntrue;returnfalse};Cola.find_if=function(func,array){for(vari=0,n=array.length;i<n;++i){if(func(array[i]))returnarray[i]}};Cola.repeat_string=function(str,i){if(i<=0)return"";if(i==1)returnstr;vard=Cola.repeat_string(str,i>>1);d+=d;if(i&1)d+=str;returnd};Cola.DefaultsError=function(msg,defs){Error.call(this,msg);this.msg=msg;this.defs=defs};Cola.DefaultsError.prototype=Object.create(Error.prototype);Cola.DefaultsError.prototype.constructor=Cola.DefaultsError;Cola.DefaultsError.croak=function(msg,defs){thrownewCola.DefaultsError(msg,defs)};Cola.defaults=function(args,defs,croak){if(args===true)args={};varret=args||{};if(croak)for(variinret)if(ret.hasOwnProperty(i)&&!defs.hasOwnProperty(i))Cola.DefaultsError.croak("`"+i+"` is not a supported option",defs);for(variindefs)if(defs.hasOwnProperty(i)){ret[i]=args&&args.hasOwnProperty(i)?args[i]:defs[i]}returnret};Cola.merge=function(obj,ext){for(variinext)if(ext.hasOwnProperty(i)){obj[i]=ext[i]}returnobj};Cola.noop=function(){};Cola.MAP=function(){functionMAP(a,f,backwards){varret=[],top=[],i;functiondoit(){varval=f(a[i],i);varis_last=valinstanceofLast;if(is_last)val=val.v;if(valinstanceofContinue)returnfalse;if(valinstanceofAtTop){val=val.v;if(valinstanceofSplice){top.push.a
Cola.AST_SymbolAccessor=Cola.DEFNODE("SymbolAccessor",null,{$documentation:"The name of a property accessor (setter/getter function)"},Cola.AST_Symbol);Cola.AST_SymbolDeclaration=Cola.DEFNODE("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)",$propdoc:{init:"[AST_Node*/S] array of initializers for this declaration."}},Cola.AST_Symbol);Cola.AST_SymbolVar=Cola.DEFNODE("SymbolVar",null,{$documentation:"Symbol defining a variable"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolConst=Cola.DEFNODE("SymbolConst",null,{$documentation:"A constant declaration"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolClass=Cola.DEFNODE("SymbolClass",null,{$iscola:true,$documentation:"Symbol defining a class"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolSingleton=Cola.DEFNODE("SymbolSingleton",null,{$iscola:true,$documentation:"Symbol defining a singleton"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolFunarg=Cola.DEFNODE("SymbolFunarg","type",{$documentation:"Symbol naming a function argument"},Cola.AST_SymbolVar);Cola.AST_SymbolDefun=Cola.DEFNODE("SymbolDefun",null,{$documentation:"Symbol defining a function"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolLambda=Cola.DEFNODE("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},Cola.AST_SymbolDeclaration);Cola.AST_SymbolCatch=Cola.DEFNODE("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},Cola.AST_SymbolDeclaration);Cola.AST_Label=Cola.DEFNODE("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[];this.thedef=this}},Cola.AST_Symbol);Cola.AST_SymbolRef=Cola.DEFNODE("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},Cola.AST_Symbol);Cola.AST_LabelRef=Cola.DEFNODE("LabelRef",null,{$documentation:"Reference to a label symbol"},Cola.AST_Symbol);Cola.AST_This=Cola.DEFNODE("This",null,{$documentation:"The `this` symbol"},Cola.AST_Symbol);Cola.AST_Constant=Cola.DEFNODE("Constant",null,{$documentation:"Base class for all constants",getValue:function(){returnthis.value}});Cola.AST_String=Cola.DEFNODE("String","value",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string"}},Cola.AST_Constant);Cola.AST_StringTemplate=Cola.DEFNODE("StringTemplate","body",{$iscola:true,$documentation:"A string template",$propdoc:{body:"[AST_Statement*] the contents of this string template"},_walk:function(visitor){returnvisitor._visit(this,function(){Cola.walk_body(this,visitor)})}},Cola.AST_Statement);Cola.AST_Number=Cola.DEFNODE("Number","value",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value"}},Cola.AST_Constant);Cola.AST_RegExp=Cola.DEFNODE("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},Cola.AST_Constant);Cola.AST_Atom=Cola.DEFNODE("Atom",null,{$documentation:"Base class for atoms"},Cola.AST_Constant);Cola.AST_Null=Cola.DEFNODE("Null",null,{$documentation:"The `null` atom",value:null},Cola.AST_Atom);Cola.AST_NaN=Cola.DEFNODE("NaN",null,{$documentation:"The impossible value",value:0/0},Cola.AST_Atom);Cola.AST_Undefined=Cola.DEFNODE("Undefined",null,{$documentation:"The `undefined` value",value:function(){}()},Cola.AST_Atom);Cola.AST_Hole=Cola.DEFNODE("Hole",null,{$documentation:"A hole in an array",value:function(){}()},Cola.AST_Atom);Cola.AST_Infinity=Cola.DEFNODE("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},Cola.AST_Atom);Cola.AST_Boolean=Cola.DEFNODE("Boolean",null,{$documentation:"Base class for booleans"},Cola.AST_Atom);Cola.AST_False=Cola.DEFNODE("False",null,{$documentation:"The `false` atom",value:false},Cola.AST_Boolean);Cola.AST_True=Cola.DEFNODE("True",null,{$documentation:"The `true` atom",value:true},Cola.AST_Boolean);Cola.TreeWalker=function(callback){this.visit=callback;this.stack=[]};Cola.TreeWalker.prototype={_visit:function(node,descend){this.stack.push(node);varret=thi
}vara=str.split(/\r?\n/),n=a.length-1;this.current_line+=n;if(n==0){this.current_col+=a[n].length}else{this.current_col=a[n].length}this.current_pos+=str.length;this.last=str;this.OUTPUT+=str};Cola.OutputStream.prototype.space=function(){this.options.beautify?this.print(" "):this.might_need_space=true};Cola.OutputStream.prototype.indent=function(half){if(this.options.beautify){this.print(this.make_indent(half?.5:0))}};Cola.OutputStream.prototype.with_indent=function(col,cont){if(!this.options.beautify)returncont();if(col===true)col=this.next_indent();varsave_indentation=this.indentation;this.indentation=col;varret=cont();this.indentation=save_indentation;returnret};Cola.OutputStream.prototype.newline=function(){if(this.options.beautify)this.print("\n")};Cola.OutputStream.prototype.semicolon=function(){this.options.beautify?this.print(";"):this.might_need_semicolon=true};Cola.OutputStream.prototype.force_semicolon=function(){this.might_need_semicolon=false;this.print(";")};Cola.OutputStream.prototype.next_indent=function(){returnthis.indentation+this.options.indent_level};Cola.OutputStream.prototype.with_block=function(cont){varret;this.print("{");this.newline();this.with_indent(this.next_indent(),function(){ret=cont()});this.indent();this.print("}");returnret};Cola.OutputStream.prototype.with_parens=function(cont){this.print("(");varret=cont();this.print(")");returnret};Cola.OutputStream.prototype.with_square=function(cont){this.print("[");varret=cont();this.print("]");returnret};Cola.OutputStream.prototype.comma=function(){this.print(",");this.space()};Cola.OutputStream.prototype.colon=function(){this.print(":");if(this.options.space_colon)this.space()};Cola.OutputStream.prototype.add_mapping=function(token,name){if(!this.options.source_map)return;try{if(token&&!token.file)console.log(token);if(token)this.options.source_map.add(token.file||"?",this.current_line,this.current_col,token.line,token.col,!name&&token.type=="name"?token.value:name)}catch(ex){Cola.AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:token.file,line:token.line,col:token.col,cline:this.current_line,ccol:this.current_col,name:name||""})}};Cola.OutputStream.prototype.get=function(){returnthis.OUTPUT};Cola.OutputStream.prototype.toString=function(){returnthis.OUTPUT};Cola.OutputStream.prototype.current_width=function(){returnthis.current_col-this.indentation};Cola.OutputStream.prototype.should_break=function(){returnthis.options.width&&this.current_width()>=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){returnthis.options[opt]};Cola.OutputStream.prototype.push_node=function(node){this.stack.push(node)};Cola.OutputStream.prototype.pop_node=function(){returnthis.stack.pop()};Cola.OutputStream.prototype.parent=function(n){returnthis.stack[this.stack.length-2-(n||0)]};(function(){functionDEFPRINT(nodetype,generator){nodetype.DEFMETHOD("_codegen",generator)}Cola.AST_Node.DEFMETHOD("print",function(stream,force_parens){varself=this,generator=self._codegen;functiondoit(){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){vars=newCola.OutputStream(options);this.print(s);returns.get()});Cola.AST_Node.DEFMETHOD("add_comments",function(output){varc=output.option("comments"),self=this;if(c){varstart=self.start;if(start&&!start._comments_dumped){start._comments_dumped=true;varcomments=start.comments_before||[];if(selfinstanceofCola.AST_Exit&&self.value){self.value.walk(newCola.TreeWalker(function(node){if(node.start&&node.start.comments_before){comments=comments.concat(node.start.comments_before);node.start.comments_before=[]}if(nodeinstanceofCola.AST_Function||nodeinstanceof
statements.forEach(function(stat){if(prev){if(statinstanceofCola.AST_For){varopera={};try{prev.body.walk(newCola.TreeWalker(function(node){if(nodeinstanceofCola.AST_Binary&&node.operator=="in")throwopera}));if(stat.init&&!(stat.initinstanceofCola.AST_Definitions)){stat.init=cons_seq(stat.init)}elseif(!stat.init){stat.init=prev.body;ret.pop()}}catch(ex){if(ex!==opera)throwex}}elseif(statinstanceofCola.AST_If){stat.condition=cons_seq(stat.condition)}elseif(statinstanceofCola.AST_With){stat.expression=cons_seq(stat.expression)}elseif(statinstanceofCola.AST_Exit&&stat.value){stat.value=cons_seq(stat.value)}elseif(statinstanceofCola.AST_Exit){stat.value=cons_seq(make_node(Cola.AST_Undefined,stat))}elseif(statinstanceofCola.AST_Switch){stat.expression=cons_seq(stat.expression)}}ret.push(stat);prev=statinstanceofCola.AST_SimpleStatement?stat:null});returnret}functionjoin_consecutive_vars(statements,compressor){varprev=null;returnstatements.reduce(function(a,stat){if(statinstanceofCola.AST_Definitions&&prev&&prev.TYPE==stat.TYPE){prev.definitions=prev.definitions.concat(stat.definitions);CHANGED=true}elseif(statinstanceofCola.AST_For&&previnstanceofCola.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)}returna},[])}functionnegate_iifes(statements,compressor){statements.forEach(function(stat){if(statinstanceofCola.AST_SimpleStatement){stat.body=functiontransform(thing){returnthing.transform(newCola.TreeTransformer(function(node){if(nodeinstanceofCola.AST_Call&&node.expressioninstanceofCola.AST_Function){returnmake_node(Cola.AST_UnaryPrefix,node,{operator:"!",expression:node})}elseif(nodeinstanceofCola.AST_Call){node.expression=transform(node.expression)}elseif(nodeinstanceofCola.AST_Seq){node.car=transform(node.car)}elseif(nodeinstanceofCola.AST_Conditional){varexpr=transform(node.condition);if(expr!==node.condition){node.condition=expr;vartmp=node.consequent;node.consequent=node.alternative;node.alternative=tmp}}returnnode}))}(stat.body)}})}}functionextract_declarations_from_unreachable_code(compressor,stat,target){compressor.warn("Dropping unreachable code [{file}:{line},{col}]",stat.start);stat.walk(newCola.TreeWalker(function(node){if(nodeinstanceofCola.AST_Definitions){compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]",node.start);node.remove_initializers();target.push(node);returntrue}if(nodeinstanceofCola.AST_Defun){target.push(node);returntrue}if(nodeinstanceofCola.AST_Scope){returntrue}}))}(function(def){varunary_bool=["!","delete"];varbinary_bool=["in","instanceof","==","!=","===","!==","<","<=",">=",">"];def(Cola.AST_Node,function(){returnfalse});def(Cola.AST_UnaryPrefix,function(){returnCola.member(this.operator,unary_bool)});def(Cola.AST_Binary,function(){returnCola.member(this.operator,binary_bool)||(this.operator=="&&"||this.operator=="||")&&this.left.is_boolean()&&this.right.is_boolean()});def(Cola.AST_Conditional,function(){returnthis.consequent.is_boolean()&&this.alternative.is_boolean()});def(Cola.AST_Assign,function(){returnthis.operator=="="&&this.right.is_boolean()});def(Cola.AST_Seq,function(){returnthis.cdr.is_boolean()});def(Cola.AST_True,function(){returntrue});def(Cola.AST_False,function(){returntrue})})(function(node,func){node.DEFMETHOD("is_boolean",func)});(function(def){def(Cola.AST_Node,function(){returnfalse});def(Cola.AST_String,function(){returntrue});def(Cola.AST_UnaryPrefix,function(){returnthis.operator=="typeof"});def(Cola.AST_Binary,function(compressor){returnthis.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){returnthis.cdr.is_string(compressor)});def(Cola.AST_Conditional,function(compressor){returnth