Mercurial Hosting > luan
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; |