diff --git a/core/src/main/java/org/luaj/vm2/compiler/LexState.class b/core/src/main/java/org/luaj/vm2/compiler/LexState.class index d6516150..7a7ac674 100644 Binary files a/core/src/main/java/org/luaj/vm2/compiler/LexState.class and b/core/src/main/java/org/luaj/vm2/compiler/LexState.class differ diff --git a/core/src/main/java/org/luaj/vm2/compiler/LexState.java b/core/src/main/java/org/luaj/vm2/compiler/LexState.java index abee782c..06fb2aa1 100644 --- a/core/src/main/java/org/luaj/vm2/compiler/LexState.java +++ b/core/src/main/java/org/luaj/vm2/compiler/LexState.java @@ -1393,7 +1393,7 @@ public class LexState extends Constants { return; } default: { - this.syntaxerror("unexpected symbol " + t.token + " (" + ((char) t.token) + ")"); + this.syntaxerror("unexpected symbol near " + txtToken(t.token)); return; } } diff --git a/jse/src/test/java/org/luaj/vm2/FragmentsTest.java b/jse/src/test/java/org/luaj/vm2/FragmentsTest.java index 00362cb6..c730a143 100644 --- a/jse/src/test/java/org/luaj/vm2/FragmentsTest.java +++ b/jse/src/test/java/org/luaj/vm2/FragmentsTest.java @@ -189,6 +189,26 @@ public class FragmentsTest extends TestSuite { assertEquals("interrupted", thrown.get().getMessage()); } + public void testBareExpressionReportsReadableToken() { + Globals globals = JsePlatform.debugGlobals(); + try { + globals.load("1 + 1", "expr.lua"); + fail("expected syntax error"); + } catch (LuaError e) { + assertTrue(e.getMessage().contains("unexpected symbol near 1")); + } + } + + public void testUnfinishedTableReportsEof() { + Globals globals = JsePlatform.debugGlobals(); + try { + globals.load("mytab = {", "table.lua"); + fail("expected syntax error"); + } catch (LuaError e) { + assertTrue(e.getMessage().contains("near ")); + } + } + public void testLongIntegerLiteralPrecision() { runFragment( LuaValue.varargsOf(new LuaValue[] {