diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-01-10 18:31:54 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-01-10 18:31:54 -0800 |
commit | f4e239ed21d9f6ea79693f003f2d595143937108 (patch) | |
tree | 46d76486555b1396c724b3d73e89a6766357ddc8 | |
parent | 41e3ba8e82863a75d3b81fdad9ebef319a4ac652 (diff) |
fix fix_closure bug
-rw-r--r-- | tests/runner.py | 1 | ||||
-rw-r--r-- | tests/test-fix-closure.js | 2 | ||||
-rwxr-xr-x | tools/fix_closure.py | 7 |
3 files changed, 8 insertions, 2 deletions
diff --git a/tests/runner.py b/tests/runner.py index 6d2ad423..86162476 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -5474,6 +5474,7 @@ f.close() Popen(['python', path_from_root('tools', 'fix_closure.py'), input, 'out.js']).communicate(input) output = open('out.js').read() assert '0,uninline_Q_269,0' in output + assert 'function(a,c)' not in output # should be uninlined, so it gets a name assert run_js(input) == run_js('out.js') def test_js_optimizer(self): diff --git a/tests/test-fix-closure.js b/tests/test-fix-closure.js index 331a06c0..b11ccbae 100644 --- a/tests/test-fix-closure.js +++ b/tests/test-fix-closure.js @@ -32,5 +32,5 @@ function ya(a,b){var d=D[X>>2],c=Va(a,b),e=r.T();var i=O(c,"i8",na),c=1*c.length (function(a,b,d){if(!Ta){Ta=l;Ra();a||(a=function(){if(!a.j||!a.j.length){var b;"undefined"!=typeof window&&"function"==typeof window.prompt?b=window.prompt("Input: "):"function"==typeof readline&&(b=readline());b||(b="");a.j=S(b+"\n",l)}return a.j.shift()});b||(b=function(a){a===m||10===a?(b.v(b.buffer.join("")),b.buffer=[]):b.buffer.push(String.fromCharCode(a))});b.v||(b.v=print);b.buffer||(b.buffer=[]);d||(d=b);Sa("tmp",l);var c=Sa("dev",n),e=$(c,"stdin",a),i=$(c,"stdout",m,b),d=$(c,"stderr",m, d);$(c,"tty",a,b);Y[1]={path:"/dev/stdin",object:e,position:0,r:l,h:n,q:n,error:n,n:n,A:[]};Y[2]={path:"/dev/stdout",object:i,position:0,r:n,h:l,q:n,error:n,n:n,A:[]};Y[3]={path:"/dev/stderr",object:d,position:0,r:n,h:l,q:n,error:n,n:n,A:[]};Ka=O([1],"void*",N);X=O([2],"void*",N);La=O([3],"void*",N);Y[Ka]=Y[1];Y[X]=Y[2];Y[La]=Y[3];O([O([0,0,0,0,Ka,0,0,0,X,0,0,0,La,0,0,0],"void*",N)],"void*",N)}})(); ia.push({I:function(){Ta&&(0<Y[2].object.d.buffer.length&&Y[2].object.d(10),0<Y[3].object.d.buffer.length&&Y[3].object.d(10))}});W(0);var Wa=O([0],"i8",N);Module.G=function(a){function b(){for(var a=0;3>a;a++)c.push(0)}var d=a.length+1,c=[O(S("/bin/this.program"),"i8",N)];b();for(var e=0;e<d-1;e+=1)c.push(O(S(a[e]),"i8",N)),b();c.push(0);c=O(c,"i32",N);return va()};var wa,xa,za,Aa,Ba,Ca,Da;wa=O([2],["i32 ()*",0,0,0,0],N);xa=O([4],["i32 ()*",0,0,0,0],N); -za=O([42,37,100,44,37,100,44,37,100,44,37,100,44,37,100,44,37,100,42,10,0],"i8",N);Aa=O([42,37,100,44,37,100,0],"i8",N);Ba=O([44,37,100,44,37,100,42,10,0],"i8",N);Ca=O([42,104,101,108,108,111,33,42,0],"i8",N);Da=O([42,103,111,111,100,98,121,101,33,42,0],"i8",N);Q=[0,0,function(){return 26},0,function(){return 90},0,function(){return 0},0,function(a){var b=D[X>>2],a=Ua(b,a,sa(a));if(0>a)b=a;else{var d=U(10);B[Wa]=d;-1==Ua(b,Wa,1)?(b in Y&&(Y[b].error=l),b=-1):b=d;b=0>b?-1:a+1}return b},0]; +za=O([42,37,100,44,37,100,44,37,100,44,37,100,44,37,100,44,37,100,42,10,0],"i8",N);Aa=O([42,37,100,44,37,100,0],"i8",N);Ba=O([44,37,100,44,37,100,42,10,0],"i8",N);Ca=O([42,104,101,108,108,111,33,42,0],"i8",N);Da=O([42,103,111,111,100,98,121,101,33,42,0],"i8",N);Q=[0,0,function(){return 26},0,function(){return 90},0,function(){return 0},0,function(a){var b=D[X>>2],a=Ua(b,a,sa(a));if(0>a)b=a;else{var d=U(10);B[Wa]=d;-1==Ua(b,Wa,1)?(b in Y&&(Y[b].error=l),b=-1):b=d;b=0>b?-1:a+1}return b},0,function(a,c){},0]; Module.FUNCTION_TABLE=Q;function Xa(a){var a=a||Module.arguments,b=m;if(Module._main)for(b=Module.G(a);0<ia.length;){var a=ia.pop(),d=a.I;"number"===typeof d&&(d=Q[d]);d(a.D===k?m:a.D)}return b}Module.run=Xa;try{Na=n}catch(Ya){}Module.noInitialRun||Xa(); diff --git a/tools/fix_closure.py b/tools/fix_closure.py index c1d16cb7..086dddfa 100755 --- a/tools/fix_closure.py +++ b/tools/fix_closure.py @@ -22,6 +22,7 @@ class ObjectParser: ''' assert line[s-1] == ',' # we are a new element, after a comma curly = 0 + paren = 0 string = 0 is_func = 0 i = s @@ -35,7 +36,11 @@ class ObjectParser: curly += 1 elif c == '}': curly -= 1 - elif not curly: + elif c == '(': + paren += 1 + elif c == ')': + paren -= 1 + elif not curly and not paren: if c in [',', ']']: return (i, is_func and line[s:i].startswith('function(')) else: |