comparison core/src/luan/impl/TableExpr.java @ 171:3dcb0f9bee82

add core component git-svn-id: https://luan-java.googlecode.com/svn/trunk@172 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 22 Jun 2014 05:41:22 +0000
parents src/luan/impl/TableExpr.java@4eaee12f6c65
children ec016471c6eb
comparison
equal deleted inserted replaced
170:7c792a328a83 171:3dcb0f9bee82
1 package luan.impl;
2
3 import luan.LuanException;
4 import luan.LuanTable;
5 import luan.LuanSource;
6
7
8 final class TableExpr extends CodeImpl implements Expr {
9
10 static class Field {
11 final Expr key;
12 final Expr value;
13
14 Field(Expr key,Expr value) {
15 this.key = key;
16 this.value = value;
17 }
18 }
19
20 private final Field[] fields;
21 private final Expressions expressions;
22
23 TableExpr(LuanSource.Element se,Field[] fields,Expressions expressions) {
24 super(se);
25 this.fields = fields;
26 this.expressions = expressions;
27 }
28
29 @Override public Object eval(LuanStateImpl luan) throws LuanException {
30 LuanTable table = new LuanTable();
31 for( Field field : fields ) {
32 table.put( field.key.eval(luan), field.value.eval(luan) );
33 }
34 Object obj = expressions.eval(luan);
35 if( obj instanceof Object[] ) {
36 Object[] a = (Object[])obj;
37 for( int i=0; i<a.length; i++ ) {
38 table.put( i+1, a[i] );
39 }
40 } else {
41 table.put( 1, obj );
42 }
43 return table;
44 }
45 }