Mercurial Hosting > luan
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() {