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