8 lines
220 KiB
JavaScript
8 lines
220 KiB
JavaScript
|
|
!this.Cola&&(this.Cola={});Cola.getSource=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send();return xhr.responseText};Cola.translate=function(source,opts){var stream=new Cola.OutputStream,ast;try{ast=Cola.parse(source).toJavaScript(opts);ast.print(stream);return stream.toString()}catch(e){throw e}};Cola.eval=function(source,opts){return eval(Cola.translate(source,opts))};Cola.bootstrap=function(){var source="";Array.prototype.forEach.call(document.querySelectorAll('script[type="text/colascript"][src]'),function(script){source+=Cola.getSource(script.src)});Cola.eval(source,{main_event:"ColaScriptMain"});var event=document.createEvent("HTMLEvents");event.initEvent("ColaScriptMain",true,true);event.eventName="ColaScriptMain";window.dispatchEvent(event)};"use strict";Cola.array_to_hash=function(a){var ret=Object.create(null);for(var i=0;i<a.length;++i)ret[a[i]]=true;return ret};Cola.slice=function(a,start){return Array.prototype.slice.call(a,start||0)};Cola.characters=function(str){return str.split("")};Cola.member=function(name,array){for(var i=array.length;--i>=0;)if(array[i]==name)return true;return false};Cola.find_if=function(func,array){for(var i=0,n=array.length;i<n;++i){if(func(array[i]))return array[i]}};Cola.repeat_string=function(str,i){if(i<=0)return"";if(i==1)return str;var d=Cola.repeat_string(str,i>>1);d+=d;if(i&1)d+=str;return d};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){throw new Cola.DefaultsError(msg,defs)};Cola.defaults=function(args,defs,croak){if(args===true)args={};var ret=args||{};if(croak)for(var i in ret)if(ret.hasOwnProperty(i)&&!defs.hasOwnProperty(i))Cola.DefaultsError.croak("`"+i+"` is not a supported option",defs);for(var i in defs)if(defs.hasOwnProperty(i)){ret[i]=args&&args.hasOwnProperty(i)?args[i]:defs[i]}return ret};Cola.merge=function(obj,ext){for(var i in ext)if(ext.hasOwnProperty(i)){obj[i]=ext[i]}return obj};Cola.noop=function(){};Cola.MAP=function(){function MAP(a,f,backwards){var ret=[],top=[],i;function doit(){var val=f(a[i],i);var is_last=val instanceof Last;if(is_last)val=val.v;if(val instanceof Continue)return false;if(val instanceof AtTop){val=val.v;if(val instanceof Splice){top.push.apply(top,backwards?val.v.slice().reverse():val.v)}else{top.push(val)}}else if(val!==skip){if(val instanceof Splice){ret.push.apply(ret,backwards?val.v.slice().reverse():val.v)}else{ret.push(val)}}return is_last}if(a instanceof Array){if(backwards){for(i=a.length;--i>=0;)if(doit())break;ret.reverse();top.reverse()}else{for(i=0;i<a.length;++i)if(doit())break}}else{for(i in a)if(a.hasOwnProperty(i))if(doit())break}return top.concat(ret)}MAP.at_top=function(val){return new AtTop(val)};MAP.splice=function(val){return new Splice(val)};MAP.last=function(val){return new Last(val)};MAP.continue=function(){return new Continue};var skip=MAP.skip={};function AtTop(val){this.v=val}function Splice(val){this.v=val}function Last(val){this.v=val}function Continue(){}return MAP}();Cola.push_uniq=function(array,el){if(array.indexOf(el)<0)array.push(el)};Cola.string_template=function(text,props){return text.replace(/\{(.+?)\}/g,function(str,p){return props[p]})};Cola.remove=function(array,el){for(var i=array.length;--i>=0;){if(array[i]===el)array.splice(i,1)}};Cola.mergeSort=function(array,cmp){if(array.length<2)return array.slice();function merge(a,b){var r=[],ai=0,bi=0,i=0;while(ai<a.length&&bi<b.length){cmp(a[ai],b[bi])<=0?r[i++]=a[ai++]:r[i++]=b[bi++]}if(ai<a.length)r.push.apply(r,a.slice(ai));if(bi<b.length)r.push.apply(r,b.slice(bi));return r}function _ms(a){if(a.length<=1)return a;var m=Math.floor(a.length/2),left=a.slice(0,m),right=a.slice(m);left=_ms(left);right=_ms(right);return merge(left,right)}return _ms(array)};Cola.set_difference=function(a,b){return a.filter(function(el){return b.indexOf(el)<0})};Cola.set_intersection=function(a,b){return a.filter(function(el){return b
|
|||
|
|
}if(!(p instanceof Cola.AST_Binary&&(p.operator=="&&"||p.operator=="||")))return false;self=p}},loopcontrol_target:function(label){var stack=this.stack;if(label)for(var i=stack.length;--i>=0;){var x=stack[i];if(x instanceof Cola.AST_LabeledStatement&&x.label.name==label.name){return x.body}}else for(var i=stack.length;--i>=0;){var x=stack[i];if(x instanceof Cola.AST_Switch||x instanceof Cola.AST_IterationStatement)return x}}};"use strict";!this.Cola&&(this.Cola={});Cola.KEYWORDS="break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with";Cola.cKEYWORDS=Cola.KEYWORDS.replace(" void","")+" when clone isset is isnt class singleton injector";Cola.KEYWORDS_ATOM="false null true";Cola.cKEYWORDS_ATOM=Cola.KEYWORDS_ATOM+" on yes off no";Cola.RESERVED_WORDS="abstract boolean byte char double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized this throws transient volatile yield";Cola.cRESERVED_WORDS=Cola.RESERVED_WORDS.replace(" class","")+" "+Cola.cKEYWORDS_ATOM+" "+Cola.cKEYWORDS;Cola.RESERVED_WORDS+=" "+Cola.KEYWORDS_ATOM+" "+Cola.KEYWORDS;Cola.KEYWORDS_BEFORE_EXPRESSION="return new delete throw else case";Cola.cKEYWORDS_BEFORE_EXPRESSION=Cola.KEYWORDS_BEFORE_EXPRESSION+=" when";Cola.KEYWORDS=Cola.makePredicate(Cola.KEYWORDS);Cola.cKEYWORDS=Cola.makePredicate(Cola.cKEYWORDS);Cola.RESERVED_WORDS=Cola.makePredicate(Cola.RESERVED_WORDS);Cola.cRESERVED_WORDS=Cola.makePredicate(Cola.cRESERVED_WORDS);Cola.KEYWORDS_ATOM=Cola.makePredicate(Cola.KEYWORDS_ATOM);Cola.cKEYWORDS_ATOM=Cola.makePredicate(Cola.cKEYWORDS_ATOM);Cola.KEYWORDS_BEFORE_EXPRESSION=Cola.makePredicate(Cola.KEYWORDS_BEFORE_EXPRESSION);Cola.cKEYWORDS_BEFORE_EXPRESSION=Cola.makePredicate(Cola.cKEYWORDS_BEFORE_EXPRESSION);Cola.OPERATOR_CHARS=Cola.makePredicate(Cola.characters("+-*&%=<>!?|~^"));Cola.RE_HEX_NUMBER=/^0x[0-9a-f]+$/i;Cola.RE_OCT_NUMBER=/^0[0-7]+$/;Cola.RE_DEC_NUMBER=/^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;Cola.OPERATORS=["in","instanceof","typeof","new","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||","clone","isset","is","isnt","**","%%","?=","??"];Cola.cOPERATORS=Cola.makePredicate(Cola.OPERATORS);Cola.OPERATORS=Cola.OPERATORS.slice(0,Cola.OPERATORS.length-8);Cola.OPERATORS.push("void");Cola.OPERATORS=Cola.makePredicate(Cola.OPERATORS);Cola.COMPARISON=Cola.makePredicate("< > <= >= == === != !==");Cola.WHITESPACE_CHARS=Cola.makePredicate(Cola.characters(" \n\r \f "));Cola.PUNC_BEFORE_EXPRESSION=Cola.makePredicate(Cola.characters("[{(,.;:"));Cola.PUNC_CHARS=Cola.makePredicate(Cola.characters("[]{}(),;:"));Cola.REGEXP_MODIFIERS=Cola.makePredicate(Cola.characters("gmsiy"));Cola.UNICODE={letter:new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C
|
|||
|
|
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(),thi
|
|||
|
|
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){o
|
|||
|
|
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<a.length;++i){if(a[i].length<len){best=a[i];len=best.length}}return best}function make_num(num){var str=num.toString(10),a=[str.replace(/^0\./,".").replace("e+","e")],m;if(Math.floor(num)===num){if(num>=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.pr
|
|||
|
|
continue}break}defs=make_node(Cola.AST_Var,self,{definitions:defs});hoisted.push(defs)}}self.body=dirs.concat(hoisted,self.body)}return self});OPT(Cola.AST_SimpleStatement,function(self,compressor){if(compressor.option("side_effects")){if(!self.body.has_side_effects(compressor)){compressor.warn("Dropping side-effect-free statement [{file}:{line},{col}]",self.start);return make_node(Cola.AST_EmptyStatement,self)}}return self});OPT(Cola.AST_DWLoop,function(self,compressor){var cond=self.condition.evaluate(compressor);self.condition=cond[0];if(!compressor.option("loops"))return self;if(cond.length>1){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=t
|
|||
|
|
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
|
|||
|
|
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);
|