Mercurial Hosting > luan
changeset 224:05eb2837ddbf
change LuanTable.put() to not return old value
git-svn-id: https://luan-java.googlecode.com/svn/trunk@225 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Mon, 21 Jul 2014 09:27:06 +0000 |
parents | a9fe265dbac3 |
children | 7c768f63bbb3 |
files | core/src/luan/AbstractLuanTable.java core/src/luan/LuanState.java core/src/luan/LuanTable.java core/src/luan/LuanTableImpl.java core/src/luan/impl/SetTableEntry.java web/src/luan/modules/web/HttpLuan.java |
diffstat | 6 files changed, 26 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/core/src/luan/AbstractLuanTable.java Mon Jul 21 06:38:01 2014 +0000 +++ b/core/src/luan/AbstractLuanTable.java Mon Jul 21 09:27:06 2014 +0000 @@ -30,7 +30,7 @@ return type() + ": " + Integer.toHexString(hashCode()); } - @Override public Object put(Object key,Object val) { + @Override public void put(Object key,Object val) { throw new UnsupportedOperationException("can't put into a "+type()); }
--- a/core/src/luan/LuanState.java Mon Jul 21 06:38:01 2014 +0000 +++ b/core/src/luan/LuanState.java Mon Jul 21 09:27:06 2014 +0000 @@ -99,6 +99,11 @@ return t==null ? null : t.get(op); } + public final Object getHandler(String op,LuanTable table) { + LuanTable t = table.getMetatable(); + return t==null ? null : t.get(op); + } + private static LuanTableImpl newMetatable() { LuanTableImpl metatable = new LuanTableImpl(); try {
--- a/core/src/luan/LuanTable.java Mon Jul 21 06:38:01 2014 +0000 +++ b/core/src/luan/LuanTable.java Mon Jul 21 09:27:06 2014 +0000 @@ -9,7 +9,7 @@ public List<Object> asList(); public Map<Object,Object> asMap(); public Object get(Object key); - public Object put(Object key,Object val); + public void put(Object key,Object val); public void insert(int pos,Object value); public void add(Object value); public Object remove(int pos);
--- a/core/src/luan/LuanTableImpl.java Mon Jul 21 06:38:01 2014 +0000 +++ b/core/src/luan/LuanTableImpl.java Mon Jul 21 09:27:06 2014 +0000 @@ -208,7 +208,7 @@ return map.get(key); } - @Override public Object put(Object key,Object val) { + @Override public void put(Object key,Object val) { Integer iT = Luan.asInteger(key); if( iT != null ) { int i = iT - 1; @@ -218,14 +218,13 @@ list.add(val); mapToList(); } - return null; + return; } else if( i>=0 && i<list.size() ) { - Object old = list.get(i); list.set(i,val); if( val == null ) { listToMap(i); } - return old; + return; } } } @@ -237,9 +236,9 @@ key = Double.valueOf(n.doubleValue()); } if( val == null ) { - return map.remove(key); + map.remove(key); } else { - return map.put(key,val); + map.put(key,val); } }
--- a/core/src/luan/impl/SetTableEntry.java Mon Jul 21 06:38:01 2014 +0000 +++ b/core/src/luan/impl/SetTableEntry.java Mon Jul 21 09:27:06 2014 +0000 @@ -25,20 +25,17 @@ Object h; if( t instanceof LuanTable ) { LuanTable table = (LuanTable)t; - Object old; - try { - old = table.put(key,value); - } catch(IllegalArgumentException e) { - throw luan.bit(se).exception(e); - } catch(UnsupportedOperationException e) { - throw luan.bit(se).exception(e); + h = luan.getHandler("__newindex",table); + if( h==null || table.get(key)!=null ) { + try { + table.put(key,value); + } catch(IllegalArgumentException e) { + throw luan.bit(se).exception(e); + } catch(UnsupportedOperationException e) { + throw luan.bit(se).exception(e); + } + return; } - if( old != null ) - return; - h = luan.getHandler("__newindex",t); - if( h==null ) - return; - table.put(key,old); } else { h = luan.getHandler("__newindex",t); if( h==null )
--- a/web/src/luan/modules/web/HttpLuan.java Mon Jul 21 06:38:01 2014 +0000 +++ b/web/src/luan/modules/web/HttpLuan.java Mon Jul 21 09:27:06 2014 +0000 @@ -182,18 +182,18 @@ return response.getHeaderNames().iterator(); } - @Override public Object put(Object key,Object val) { + @Override public void put(Object key,Object val) { if( !(key instanceof String) ) throw new IllegalArgumentException("key must be string for headers table"); String name = (String)key; if( val instanceof String ) { response.setHeader(name,(String)val); - return null; + return; } Integer i = Luan.asInteger(val); if( i != null ) { response.setIntHeader(name,i); - return null; + return; } throw new IllegalArgumentException("value must be string or integer for headers table"); } @@ -239,12 +239,11 @@ return new EnumerationIterator(request.getSession().getAttributeNames()); } - @Override public Object put(Object key,Object val) { + @Override public void put(Object key,Object val) { if( !(key instanceof String) ) throw new IllegalArgumentException("key must be string for session attributes table"); String name = (String)key; request.getSession().setAttribute(name,val); - return null; } @Override protected String type() {