From a9509573181429aebc83b78957fcc2257ba62531 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Thu, 12 Aug 2010 17:00:47 +0000 Subject: [PATCH] Improve bytecode generation. --- src/jse/org/luaj/vm2/luajc/UpvalInfo.java | 5 +++- test/junit/org/luaj/vm2/FragmentsTest.java | 30 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/jse/org/luaj/vm2/luajc/UpvalInfo.java b/src/jse/org/luaj/vm2/luajc/UpvalInfo.java index b9c33314..c73ec229 100644 --- a/src/jse/org/luaj/vm2/luajc/UpvalInfo.java +++ b/src/jse/org/luaj/vm2/luajc/UpvalInfo.java @@ -58,8 +58,11 @@ public class UpvalInfo { for ( int j=0, m=b.next!=null? b.next.length: 0; j=b.pc0; pc-- ) { diff --git a/test/junit/org/luaj/vm2/FragmentsTest.java b/test/junit/org/luaj/vm2/FragmentsTest.java index 9fc492ca..2e0b9e49 100644 --- a/test/junit/org/luaj/vm2/FragmentsTest.java +++ b/test/junit/org/luaj/vm2/FragmentsTest.java @@ -549,5 +549,35 @@ public class FragmentsTest extends TestSuite { " return env[k] or v\n" + "end\n"); } + + public void testPhiVarUpvalue() { + runFragment( LuaValue.valueOf(2), + "local a = 1\n"+ + "local function b()\n"+ + " a = a + 1\n"+ + " return function() end\n"+ + "end\n"+ + "for i in b() do\n"+ + " a = 3\n"+ + "end\n" + + "return a\n"); + } + + public void testUpvaluesInElseClauses() { + runFragment( LuaValue.valueOf(111), + "if a then\n" + + " foo(bar)\n" + + "elseif _G then\n" + + " local x = 111\n" + + " if d then\n" + + " foo(bar)\n" + + " else\n" + + " local y = function()\n" + + " return x\n" + + " end\n" + + " return y()\n" + + " end\n" + + "end\n"); + } } }