Improve __concat

This commit is contained in:
James Roseborough
2010-08-23 15:26:21 +00:00
parent 00bf5ff4d8
commit ee62eefc38
5 changed files with 43 additions and 28 deletions

View File

@@ -63,8 +63,7 @@ public class LuaNumber extends LuaValue {
}
public LuaValue concat(LuaValue rhs) { return rhs.concatTo(this); }
public Buffer concat(Buffer rhs) { return rhs.prepend(this.strvalue()); }
public LuaValue concatTo(LuaValue lhs) { return lhs.concaterror(); }
public Buffer concat(Buffer rhs) { return concat(rhs.value()).buffer(); }
public LuaValue concatTo(LuaNumber lhs) { return strvalue().concatTo(lhs.strvalue()); }
public LuaValue concatTo(LuaString lhs) { return strvalue().concatTo(lhs); }

View File

@@ -157,7 +157,6 @@ public class LuaString extends LuaValue {
// concatenation
public LuaValue concat(LuaValue rhs) { return rhs.concatTo(this); }
public Buffer concat(Buffer rhs) { return rhs.prepend(this); }
public LuaValue concatTo(LuaValue lhs) { return lhs.concaterror(); }
public LuaValue concatTo(LuaNumber lhs) { return concatTo(lhs.strvalue()); }
public LuaValue concatTo(LuaString lhs) {
byte[] b = new byte[lhs.m_length+this.m_length];

View File

@@ -347,15 +347,14 @@ public class LuaValue extends Varargs {
// concatenation
public LuaValue concat(LuaValue rhs) { return rhs.concatTo(this); }
public LuaValue concatTo(LuaValue lhs) { return lhs.concatmt(this); }
public LuaValue concatTo(LuaNumber lhs) { return concaterror(); }
public LuaValue concatTo(LuaString lhs) { return concaterror(); }
public LuaValue concatTo(LuaNumber lhs) { return lhs.concatmt(this); }
public LuaValue concatTo(LuaString lhs) { return lhs.concatmt(this); }
public Buffer buffer() { return new Buffer(this); }
public Buffer concat(Buffer rhs) { return rhs.setvalue(concat(rhs.value())); }
public LuaValue concatmt(LuaValue rhs) {
LuaValue h=metatag(CONCAT);
LuaValue v=this;
if ( h.isnil() && (h=(v=rhs).metatag(CONCAT)).isnil())
return v.concaterror();
if ( h.isnil() && (h=rhs.metatag(CONCAT)).isnil())
return (isstring()? rhs: this).concaterror();
return h.call(this,rhs);
}