comparison core/src/luan/modules/JavaLuan.java @ 404:d55e873e1f0d

metatables now only apply to tables
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 29 Apr 2015 07:04:40 -0600
parents 62b457c50594
children b31d614343e8
comparison
equal deleted inserted replaced
403:637f7ad85654 404:d55e873e1f0d
141 } catch(IllegalAccessException e) { 141 } catch(IllegalAccessException e) {
142 throw new RuntimeException(e); 142 throw new RuntimeException(e);
143 } 143 }
144 } 144 }
145 145
146 public static void __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException { 146 public static boolean __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException {
147 checkJava(luan); 147 if( !luan.currentEnvironment().hasJava() )
148 return false;
148 if( obj instanceof Static ) { 149 if( obj instanceof Static ) {
149 if( key instanceof String ) { 150 if( key instanceof String ) {
150 String name = (String)key; 151 String name = (String)key;
151 Static st = (Static)obj; 152 Static st = (Static)obj;
152 Class cls = st.cls; 153 Class cls = st.cls;
153 List<Member> members = getStaticMembers(cls,name); 154 List<Member> members = getStaticMembers(cls,name);
154 if( !members.isEmpty() ) { 155 if( !members.isEmpty() ) {
155 if( members.size() != 1 ) 156 if( members.size() != 1 )
156 throw new RuntimeException("not field '"+name+"' of "+obj); 157 throw new RuntimeException("not field '"+name+"' of "+obj);
157 setMember(obj,members,value); 158 setMember(obj,members,value);
158 return; 159 return true;
159 } 160 }
160 } 161 }
161 throw luan.exception("invalid member '"+key+"' for: "+obj); 162 throw luan.exception("invalid member '"+key+"' for: "+obj);
162 } 163 }
163 Class cls = obj.getClass(); 164 Class cls = obj.getClass();
164 if( cls.isArray() ) { 165 if( cls.isArray() ) {
165 Integer i = Luan.asInteger(key); 166 Integer i = Luan.asInteger(key);
166 if( i != null ) { 167 if( i != null ) {
167 Array.set(obj,i,value); 168 Array.set(obj,i,value);
168 return; 169 return true;
169 } 170 }
170 throw luan.exception("invalid member '"+key+"' for java array: "+obj); 171 throw luan.exception("invalid member '"+key+"' for java array: "+obj);
171 } 172 }
172 if( key instanceof String ) { 173 if( key instanceof String ) {
173 String name = (String)key; 174 String name = (String)key;
174 List<Member> members = getMembers(cls,name); 175 List<Member> members = getMembers(cls,name);
175 if( !members.isEmpty() ) { 176 if( !members.isEmpty() ) {
176 if( members.size() != 1 ) 177 if( members.size() != 1 )
177 throw new RuntimeException("not field '"+name+"' of "+obj); 178 throw new RuntimeException("not field '"+name+"' of "+obj);
178 setMember(obj,members,value); 179 setMember(obj,members,value);
179 return; 180 return true;
180 } 181 }
181 } 182 }
182 throw luan.exception("invalid member '"+key+"' for java object: "+obj); 183 throw luan.exception("invalid member '"+key+"' for java object: "+obj);
183 } 184 }
184 185