Mercurial Hosting > luan
diff core/src/luan/LuanTableImpl.java @ 355:1bce334a816b
AbstractLuanTable now implements LuanRepr
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 14 Apr 2015 09:33:34 -0600 |
parents | 9fb523472035 |
children | 1a464e090538 |
line wrap: on
line diff
--- a/core/src/luan/LuanTableImpl.java Tue Apr 14 05:44:06 2015 -0600 +++ b/core/src/luan/LuanTableImpl.java Tue Apr 14 09:33:34 2015 -0600 @@ -14,7 +14,7 @@ import java.util.regex.Pattern; -class LuanTableImpl extends AbstractLuanTable implements LuanTable, DeepCloneable<LuanTableImpl>, LuanRepr { +class LuanTableImpl extends AbstractLuanTable implements LuanTable, DeepCloneable<LuanTableImpl> { private Map<Object,Object> map = null; private List<Object> list = null; private LuanTable metatable = null; @@ -90,7 +90,7 @@ @Override public Map<Object,Object> asMap() { if( list == null || list.isEmpty() ) - return map!=null ? map : Collections.emptyMap(); + return map(); Map<Object,Object> rtn = map!=null ? newMap(map) : newMap(); for( ListIterator iter = list.listIterator(); iter.hasNext(); ) { int i = iter.nextIndex(); @@ -99,6 +99,10 @@ return rtn; } + @Override protected Map<Object,Object> map() { + return map!=null ? map : Collections.emptyMap(); + } + public boolean isSet() { if( list != null ) { for( Object obj : list ) { @@ -129,65 +133,6 @@ return "table"; } - @Override public String repr() { - return repr( Collections.newSetFromMap(new IdentityHashMap<LuanTableImpl,Boolean>()) ); - } - - private String repr(Set<LuanTableImpl> set) { - if( !set.add(this) ) { - return "\"<circular reference>\""; - } - StringBuilder sb = new StringBuilder(); - sb.append('{'); - boolean isFirst = true; - if( list != null ) { - for( int i=0; i<list.size(); i++ ) { - Object obj = list.get(i); - if( isFirst ) { - isFirst = false; - } else { - sb.append(", "); - } - sb.append(repr(set,obj)); - } - } - if( map != null ) { - for( Map.Entry<Object,Object> entry : map.entrySet() ) { - if( isFirst ) { - isFirst = false; - } else { - sb.append(", "); - } - sb.append(reprKey(set,entry.getKey())).append('=').append(repr(set,entry.getValue())); - } - } - sb.append('}'); - return sb.toString(); - } - - private static final Pattern namePtn = Pattern.compile("[a-zA-Z_][a-zA-Z_0-9]*"); - - private String reprKey(Set<LuanTableImpl> set,Object obj) { - if( obj instanceof String ) { - String s = (String)obj; - if( namePtn.matcher(s).matches() ) - return s; - } - return "[" + repr(set,obj) + "]"; - } - - String repr(Set<LuanTableImpl> set,Object obj) { - if( obj instanceof LuanTableImpl ) { - LuanTableImpl t = (LuanTableImpl)obj; - return t.repr(set); - } else { - String s = Luan.repr(obj); - if( s == null ) - s = "<couldn't repr: " + Luan.stringEncode(Luan.toString(obj)) + ">"; - return s; - } - } - @Override public Object get(Object key) { if( list != null ) { Integer iT = Luan.asInteger(key);