annotate core/src/luan/LuanMeta.java @ 408:1b38de2b1845

merge LuanTableImpl into LuanTable
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 29 Apr 2015 13:15:17 -0600
parents 3e68917a0dc6
children 8937263f59f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
405
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.util.Map;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 public abstract class LuanMeta /*implements Iterable<Map.Entry<Object,Object>>*/ {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 public abstract Object __index(LuanState luan,LuanTable tbl,Object key) throws LuanException;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 // public abstract LuanFunction __pairs(LuanState luan,LuanTable tbl) throws LuanException;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 public boolean canNewindex() {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 return false;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 public void __newindex(LuanState luan,LuanTable tbl,Object key,Object value) throws LuanException {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 throw new UnsupportedOperationException();
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 public LuanTable newMetatable() {
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 405
diff changeset
21 LuanTable mt = new LuanTable();
405
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 /*
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 try {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 mt.put( "__index", new LuanJavaFunction(
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 LuanMeta.class.getMethod( "__index", LuanState.class, LuanTable.class, Object.class ), this
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 ) );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 if( canNewindex() ) {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 mt.put( "__newindex", new LuanJavaFunction(
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 LuanMeta.class.getMethod( "__newindex", LuanState.class, LuanTable.class, Object.class, Object.class ), mt
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 ) );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 } catch(NoSuchMethodException e) {
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 throw new RuntimeException(e);
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 */
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 mt.put( "__index", this );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 // mt.put( "__pairs", this );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 if( canNewindex() )
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 mt.put( "__newindex", this );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 return mt;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 public LuanTable newTable() {
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 405
diff changeset
44 LuanTable tbl = new LuanTable();
405
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 tbl.setMetatable( newMetatable() );
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 return tbl;
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 }
3e68917a0dc6 add LuanMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 }