diff --git a/src/core/org/luaj/vm2/LuaClosure.java b/src/core/org/luaj/vm2/LuaClosure.java index 7e8d2692..79178dfa 100644 --- a/src/core/org/luaj/vm2/LuaClosure.java +++ b/src/core/org/luaj/vm2/LuaClosure.java @@ -101,6 +101,10 @@ public class LuaClosure extends LuaFunction { } public final Varargs invoke(Varargs varargs) { + return oninvoke( varargs ).eval(); + } + + final Varargs oninvoke(Varargs varargs) { LuaValue[] stack = new LuaValue[p.maxstacksize]; System.arraycopy(NILS, 0, stack, 0, p.maxstacksize); for ( int i=0; i ERR - throw new LuaError( arg1.isnil()? null: arg1.toString() ); + throw new LuaError( arg1.isnil()? null: arg1.toString(), arg2.optint(1) ); case 2: // "rawequal", // (v1, v2) -> boolean return valueOf(arg1 == arg2); case 3: { // "setfenv", // (f, table) -> void @@ -347,7 +346,7 @@ public class BaseLib extends OneArgFunction implements ResourceFinder { return NONE; } - private Varargs loadFile(String filename) throws IOException { + public static Varargs loadFile(String filename) throws IOException { InputStream is = FINDER.findResource(filename); if ( is == null ) return varargsOf(NIL, valueOf("not found: "+filename)); diff --git a/src/core/org/luaj/vm2/lib/PackageLib.java b/src/core/org/luaj/vm2/lib/PackageLib.java index c06389e7..5cfe9d11 100644 --- a/src/core/org/luaj/vm2/lib/PackageLib.java +++ b/src/core/org/luaj/vm2/lib/PackageLib.java @@ -21,6 +21,7 @@ ******************************************************************************/ package org.luaj.vm2.lib; +import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; @@ -306,11 +307,6 @@ public class PackageLib extends OneArgFunction { String name = args.checkString(1); InputStream is = null; - // try to use loadfile for the file - LuaValue loadfile = env.get(_LOADFILE); - if ( ! loadfile.isfunction() ) - return valueOf("loadfile is not a function" ); - // get package path LuaValue pp = PACKAGE.get(_PATH); @@ -340,7 +336,13 @@ public class PackageLib extends OneArgFunction { } // try loading the file - Varargs v = loadfile.invoke(valueOf(filename)); + Varargs v; + try { + v = BaseLib.loadFile(filename); + } catch ( IOException ioe ) { + v = varargsOf(NIL, valueOf(ioe.getMessage())); + + } if ( v.arg1().isfunction() ) return v.arg1();