From 7e2c2db59c0107877e7bd7cd4e9b0ed2604bdc1d Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Tue, 24 Aug 2010 19:05:04 +0000 Subject: [PATCH] Improve concat operation. --- src/core/org/luaj/vm2/Buffer.java | 12 +++++++----- src/core/org/luaj/vm2/LuaValue.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core/org/luaj/vm2/Buffer.java b/src/core/org/luaj/vm2/Buffer.java index 319449b5..58650783 100644 --- a/src/core/org/luaj/vm2/Buffer.java +++ b/src/core/org/luaj/vm2/Buffer.java @@ -109,11 +109,11 @@ public final class Buffer { } public Buffer concatTo(LuaString lhs) { - return value!=null? setvalue(lhs.concat(value)): prepend(lhs); + return value!=null&&!value.isstring()? setvalue(lhs.concat(value)): prepend(lhs); } public Buffer concatTo(LuaNumber lhs) { - return value!=null? setvalue(lhs.concat(value)): prepend(lhs.strvalue()); + return value!=null&&!value.isstring()? setvalue(lhs.concat(value)): prepend(lhs.strvalue()); } public Buffer prepend(LuaString s) { @@ -125,17 +125,19 @@ public final class Buffer { value = null; return this; } - + public final void makeroom( int nbefore, int nafter ) { if ( value != null ) { LuaString s = value.strvalue(); value = null; - bytes = new byte[nbefore+s.m_length+nafter]; length = s.m_length; offset = nbefore; + bytes = new byte[nbefore+length+nafter]; System.arraycopy(s.m_bytes, s.m_offset, bytes, offset, length); } else if ( offset+length+nafter > bytes.length || offset