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();