Mercurial Hosting > luan
changeset 1542:d4407e8de707
disallow duplicates in table constructor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 20 Sep 2020 15:53:58 -0600 |
parents | dc23c96f5021 |
children | 1db694d98003 |
files | src/luan/LuanTable.java src/luan/impl/LuanImpl.java src/luan/impl/LuanParser.java |
diffstat | 3 files changed, 16 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/LuanTable.java Sun Sep 13 15:50:52 2020 -0600 +++ b/src/luan/LuanTable.java Sun Sep 20 15:53:58 2020 -0600 @@ -202,13 +202,13 @@ throw new LuanException("invalid type "+Luan.type(h)+" for metamethod __new_index"); } - public void rawPut(Object key,Object val) throws LuanException { + public Object rawPut(Object key,Object val) throws LuanException { if( security != null ) Luan.checkSecurity(luan,"table",security,"put",key,val); - rawPut2(key,val); + return rawPut2(key,val); } - private void rawPut2(Object key,Object val) { + private Object rawPut2(Object key,Object val) { check(); Integer iT = Luan.asInteger(key); if( iT != null ) { @@ -219,13 +219,13 @@ list.add(val); mapToList(); } - return; + return null; } else if( i>=0 && i<list.size() ) { - list.set(i,val); + Object rtn = list.set(i,val); if( val == null ) { listToMap(i); } - return; + return rtn; } } } @@ -235,11 +235,13 @@ } if( val == null ) { if( map!=null ) - map.remove(key); + return map.remove(key); + else + return null; } else { if( map==null ) map = newMap(); - map.put(key,val); + return map.put(key,val); } }
--- a/src/luan/impl/LuanImpl.java Sun Sep 13 15:50:52 2020 -0600 +++ b/src/luan/impl/LuanImpl.java Sun Sep 20 15:53:58 2020 -0600 @@ -236,11 +236,14 @@ TableField tblFld = (TableField)fld; Object key = tblFld.key; Object value = tblFld.value; - if( key != null && value != null ) - table.rawPut(key,value); + if( key != null && value != null ) { + if( table.rawPut(key,value) != null ) + throw new LuanException("duplicate key in table constructor: "+key); + } } else { i++; - table.rawPut(i,fld); + if( table.rawPut(i,fld) != null ) + throw new LuanException("duplicate key in table constructor: "+i); } } return table;
--- a/src/luan/impl/LuanParser.java Sun Sep 13 15:50:52 2020 -0600 +++ b/src/luan/impl/LuanParser.java Sun Sep 20 15:53:58 2020 -0600 @@ -1157,14 +1157,6 @@ tblExp.add( "LuanImpl.table(luan," ); Expr lastExp = tblExp; List<Expr> builder = new ArrayList<Expr>(); -/* - Spaces(); - Field(builder); - while( FieldSep() ) { - Spaces(); - Field(builder); - } -*/ do { Spaces(); lastExp.addNewLines(); Expr exp = Field();