Mercurial Hosting > luan
view src/luan/interp/ExpList.java @ 2:4da26b11d12a
start interp
git-svn-id: https://luan-java.googlecode.com/svn/trunk@3 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Wed, 14 Nov 2012 08:53:25 +0000 |
parents | |
children | 7a2cdbc5767f |
line wrap: on
line source
package luan.interp; import java.util.List; import java.util.ArrayList; import luan.LuaException; final class ExpList extends Values { private interface Adder { public void addTo(List<Object> list) throws LuaException; } private static class ExprAdder implements Adder { private final Expr expr; ExprAdder(Expr expr) { this.expr = expr; } public void addTo(List<Object> list) throws LuaException { list.add( expr.eval() ); } } private static class ValuesAdder implements Adder { private final Values values; ValuesAdder(Values values) { this.values = values; } public void addTo(List<Object> list) throws LuaException { for( Object val : values.eval() ) { list.add( val ); } } } static class Builder { private final List<Adder> adders = new ArrayList<Adder>(); void add(Expr expr) { adders.add( new ExprAdder(expr) ); } void add(Values values) { adders.add( new ValuesAdder(values) ); } ExpList build() { return new ExpList( adders.toArray(new Adder[0]) ); } } private final Adder[] adders; private ExpList(Adder[] adders) { this.adders = adders; } List eval() throws LuaException { List<Object> list = new ArrayList<Object>(); for( Adder adder : adders ) { adder.addTo(list); } return list; } }