comparison src/luan/interp/ExpList.java @ 11:b7d7069fee58

add assignment statement and CmdLine git-svn-id: https://luan-java.googlecode.com/svn/trunk@12 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 22 Nov 2012 10:51:56 +0000
parents 7a2cdbc5767f
children 3b22ffbdb83a
comparison
equal deleted inserted replaced
10:8217d8485715 11:b7d7069fee58
5 import java.util.Collections; 5 import java.util.Collections;
6 import luan.LuaException; 6 import luan.LuaException;
7 import luan.LuaState; 7 import luan.LuaState;
8 8
9 9
10 final class ExpList extends Values { 10 final class ExpList implements Expressions {
11 11
12 private interface Adder { 12 private interface Adder {
13 public void addTo(LuaState lua,List<Object> list) throws LuaException; 13 public void addTo(LuaState lua,List<Object> list) throws LuaException;
14 } 14 }
15 15
24 list.add( expr.eval(lua) ); 24 list.add( expr.eval(lua) );
25 } 25 }
26 26
27 } 27 }
28 28
29 private static class ValuesAdder implements Adder { 29 private static class ExpressionsAdder implements Adder {
30 private final Values values; 30 private final Expressions expressions;
31 31
32 ValuesAdder(Values values) { 32 ExpressionsAdder(Expressions expressions) {
33 this.values = values; 33 this.expressions = expressions;
34 } 34 }
35 35
36 public void addTo(LuaState lua,List<Object> list) throws LuaException { 36 public void addTo(LuaState lua,List<Object> list) throws LuaException {
37 for( Object val : values.eval(lua) ) { 37 for( Object val : expressions.eval(lua) ) {
38 list.add( val ); 38 list.add( val );
39 } 39 }
40 } 40 }
41 41
42 } 42 }
46 46
47 void add(Expr expr) { 47 void add(Expr expr) {
48 adders.add( new ExprAdder(expr) ); 48 adders.add( new ExprAdder(expr) );
49 } 49 }
50 50
51 void add(Values values) { 51 void add(Expressions expressions) {
52 adders.add( new ValuesAdder(values) ); 52 adders.add( new ExpressionsAdder(expressions) );
53 } 53 }
54 54
55 Values build() { 55 Expressions build() {
56 if( adders.isEmpty() ) 56 if( adders.isEmpty() )
57 return emptyExpList; 57 return emptyExpList;
58 if( adders.size() == 1 ) { 58 if( adders.size() == 1 ) {
59 Adder adder = adders.get(0); 59 Adder adder = adders.get(0);
60 if( adder instanceof ValuesAdder ) { 60 if( adder instanceof ExpressionsAdder ) {
61 ValuesAdder va = (ValuesAdder)adder; 61 ExpressionsAdder ea = (ExpressionsAdder)adder;
62 return va.values; 62 return ea.expressions;
63 } 63 }
64 ExprAdder ea = (ExprAdder)adder; 64 ExprAdder ea = (ExprAdder)adder;
65 return new SingleExpList(ea.expr); 65 return new SingleExpList(ea.expr);
66 } 66 }
67 return new ExpList( adders.toArray(new Adder[0]) ); 67 return new ExpList( adders.toArray(new Adder[0]) );
68 } 68 }
69 } 69 }
70 70
71 private static final Values emptyExpList = new Values() { 71 static final Expressions emptyExpList = new Expressions() {
72 List eval(LuaState lua) { 72 @Override public List eval(LuaState lua) {
73 return Collections.emptyList(); 73 return Collections.emptyList();
74 } 74 }
75 }; 75 };
76 76
77 private static class SingleExpList extends Values { 77 static class SingleExpList implements Expressions {
78 private final Expr expr; 78 private final Expr expr;
79 79
80 SingleExpList(Expr expr) { 80 SingleExpList(Expr expr) {
81 this.expr = expr; 81 this.expr = expr;
82 } 82 }
83 83
84 List eval(LuaState lua) throws LuaException { 84 @Override public List eval(LuaState lua) throws LuaException {
85 return Collections.singletonList( expr.eval(lua) ); 85 return Collections.singletonList( expr.eval(lua) );
86 } 86 }
87 } 87 }
88 88
89 private final Adder[] adders; 89 private final Adder[] adders;
90 90
91 private ExpList(Adder[] adders) { 91 private ExpList(Adder[] adders) {
92 this.adders = adders; 92 this.adders = adders;
93 } 93 }
94 94
95 List eval(LuaState lua) throws LuaException { 95 @Override public List eval(LuaState lua) throws LuaException {
96 List<Object> list = new ArrayList<Object>(); 96 List<Object> list = new ArrayList<Object>();
97 for( Adder adder : adders ) { 97 for( Adder adder : adders ) {
98 adder.addTo(lua,list); 98 adder.addTo(lua,list);
99 } 99 }
100 return list; 100 return list;