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);
 		}
 	}