Mercurial Hosting > luan
diff src/luan/interp/Closure.java @ 111:2428ecfed375
change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
git-svn-id: https://luan-java.googlecode.com/svn/trunk@112 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 23 May 2014 20:40:05 +0000 |
parents | 6db8f286fa6c |
children | d7be9b3abf1a |
line wrap: on
line diff
--- a/src/luan/interp/Closure.java Fri May 23 04:36:47 2014 +0000 +++ b/src/luan/interp/Closure.java Fri May 23 20:40:05 2014 +0000 @@ -1,5 +1,6 @@ package luan.interp; +import luan.Luan; import luan.LuanFunction; import luan.LuanState; import luan.LuanElement; @@ -37,11 +38,11 @@ return upValues; } - public Object[] call(LuanState luan,Object[] args) throws LuanException { + @Override public Object call(LuanState luan,Object[] args) throws LuanException { return call(this,(LuanStateImpl)luan,args); } - private static Object[] call(Closure closure,LuanStateImpl luan,Object[] args) throws LuanException { + private static Object call(Closure closure,LuanStateImpl luan,Object[] args) throws LuanException { while(true) { FnDef fnDef = closure.fnDef; Object[] varArgs = null; @@ -60,7 +61,7 @@ for( int i=0; i<n; i++ ) { stack[i] = args[i]; } - Object[] returnValues; + Object returnValues; Closure tailFn; try { fnDef.block.eval(luan); @@ -72,7 +73,7 @@ } if( closure == null ) return returnValues; - args = returnValues; + args = Luan.array(returnValues); } }