diff src/luan/interp/ExpList.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 dbf459397217
children 14281d5bd36f
line wrap: on
line diff
--- a/src/luan/interp/ExpList.java	Fri May 23 04:36:47 2014 +0000
+++ b/src/luan/interp/ExpList.java	Fri May 23 20:40:05 2014 +0000
@@ -39,8 +39,13 @@
 		}
 
 		public void addTo(LuanStateImpl luan,List<Object> list) throws LuanException {
-			for( Object val : expressions.eval(luan) ) {
-				list.add( val );
+			Object obj = expressions.eval(luan);
+			if( obj instanceof Object[] ) {
+				for( Object val : (Object[])obj ) {
+					list.add( val );
+				}
+			} else {
+				list.add(obj);
 			}
 		}
 
@@ -115,8 +120,8 @@
 			this.expr = expr;
 		}
 
-		@Override public Object[] eval(LuanStateImpl luan) throws LuanException {
-			return new Object[]{expr.eval(luan)};
+		@Override public Object eval(LuanStateImpl luan) throws LuanException {
+			return expr.eval(luan);
 		}
 
 		@Override public LuanSource.Element se() {
@@ -130,12 +135,19 @@
 		this.adders = adders;
 	}
 
-	@Override public Object[] eval(LuanStateImpl luan) throws LuanException {
+	@Override public Object eval(LuanStateImpl luan) throws LuanException {
 		List<Object> list = new ArrayList<Object>();
 		for( Adder adder : adders ) {
 			adder.addTo(luan,list);
 		}
-		return list.toArray();
+		switch( list.size() ) {
+		case 0:
+			return EMPTY;
+		case 1:
+			return list.get(0);
+		default:
+			return list.toArray();
+		}
 	}
 
 	@Override public LuanSource.Element se() {