From 406068190be0e2a8ef3d6e01c8d16b3b27a0d5b8 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 19 Sep 2012 14:00:26 +0000 Subject: [PATCH] Improve string compatibility with lua 5.2. --- src/core/org/luaj/vm2/lib/BaseLib.java | 3 +-- src/core/org/luaj/vm2/lib/StringLib.java | 21 +++++++++++++-------- test/lua/luaj3.0-tests.zip | Bin 298975 -> 299058 bytes test/lua/stringlib.lua | 13 +++++++++---- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/core/org/luaj/vm2/lib/BaseLib.java b/src/core/org/luaj/vm2/lib/BaseLib.java index 5f2e123e..d77ea2d0 100644 --- a/src/core/org/luaj/vm2/lib/BaseLib.java +++ b/src/core/org/luaj/vm2/lib/BaseLib.java @@ -230,8 +230,7 @@ public class BaseLib extends OneArgFunction implements ResourceFinder { for ( int i=1, n=args.narg(); i<=n; i++ ) { if ( i>1 ) globals.STDOUT.write( '\t' ); LuaString s = tostring.call( args.arg(i) ).strvalue(); - int z = s.indexOf((byte)0, 0); - globals.STDOUT.write( s.m_bytes, s.m_offset, z>=0? z: s.m_length ); + globals.STDOUT.write( s.m_bytes, s.m_offset, s.m_length ); } globals.STDOUT.println(); return NONE; diff --git a/src/core/org/luaj/vm2/lib/StringLib.java b/src/core/org/luaj/vm2/lib/StringLib.java index 5eb9fb7d..a5a7b324 100644 --- a/src/core/org/luaj/vm2/lib/StringLib.java +++ b/src/core/org/luaj/vm2/lib/StringLib.java @@ -303,15 +303,20 @@ public class StringLib extends OneArgFunction { buf.append( (byte)'\\' ); buf.append( (byte)c ); break; - case '\r': - buf.append( "\\r" ); - break; - case '\0': - buf.append( "\\000" ); - break; default: - buf.append( (byte) c ); - break; + if (c <= 0x1F || c == 0x7F) { + buf.append( (byte) '\\' ); + if (i+1 == n || s.luaByte(i+1) < '0' || s.luaByte(i+1) > '9') { + buf.append(Integer.toString(c)); + } else { + buf.append( (byte) '0' ); + buf.append( (byte) (char) ('0' + c / 10) ); + buf.append( (byte) (char) ('0' + c % 10) ); + } + } else { + buf.append((byte) c); + } + break; } } buf.append( (byte) '"' ); diff --git a/test/lua/luaj3.0-tests.zip b/test/lua/luaj3.0-tests.zip index 62b42bc9dfdaf81e2991c8cee35eff80ee2d159b..740fcbb77c0337ae7108e76b82c3988e46a025ec 100644 GIT binary patch delta 11835 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'..x end),'bar')('bat') ) -- floating point formats (not supported yet)