Mercurial Hosting > luan
comparison src/luan/interp/LuanCompiler.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 | 3c404a296995 |
children | f0a4abe58593 |
comparison
equal
deleted
inserted
replaced
110:7afa6df829f3 | 111:2428ecfed375 |
---|---|
23 } | 23 } |
24 try { | 24 try { |
25 FnDef fnDef = parser.RequiredModule(); | 25 FnDef fnDef = parser.RequiredModule(); |
26 final Closure c = new Closure((LuanStateImpl)luan,fnDef); | 26 final Closure c = new Closure((LuanStateImpl)luan,fnDef); |
27 return new LuanFunction() { | 27 return new LuanFunction() { |
28 public Object[] call(LuanState luan,Object[] args) throws LuanException { | 28 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
29 Object[] rtn = c.call(luan,args); | 29 Object rtn = c.call(luan,args); |
30 return rtn.length==0 ? new Object[]{c.upValues()[0].get()} : rtn; | 30 if( rtn instanceof Object[] && ((Object[])rtn).length==0 ) |
31 rtn = c.upValues()[0].get(); | |
32 return rtn; | |
31 } | 33 } |
32 }; | 34 }; |
33 } catch(ParseException e) { | 35 } catch(ParseException e) { |
34 //e.printStackTrace(); | 36 //e.printStackTrace(); |
35 LuanElement le = new LuanSource.CompilerElement(src); | 37 LuanElement le = new LuanSource.CompilerElement(src); |