diff --git a/README.html b/README.html
index 7ec0d26d..5b15dbd9 100644
--- a/README.html
+++ b/README.html
@@ -844,6 +844,9 @@ Files are no longer hosted at LuaForge.
Add artifacts to Maven central repository.
Limit pluggable scripting to use compatible bindings and contexts, implement redirection.
+| 3.0-beta1 |
+- Fix bug that didn't read package.path from environment.
+
|
diff --git a/src/core/org/luaj/vm2/lib/OsLib.java b/src/core/org/luaj/vm2/lib/OsLib.java
index 287e9676..529cf55f 100644
--- a/src/core/org/luaj/vm2/lib/OsLib.java
+++ b/src/core/org/luaj/vm2/lib/OsLib.java
@@ -120,7 +120,7 @@ public class OsLib extends OneArgFunction {
for (int i = 0; i < NAMES.length; ++i)
os.set(NAMES[i], new OsLibFunc(i, NAMES[i]));
env.set("os", os);
- globals.package_.loaded.set("os", os);
+ env.get("package").get("loaded").set("os", os);
return os;
}
diff --git a/src/core/org/luaj/vm2/lib/PackageLib.java b/src/core/org/luaj/vm2/lib/PackageLib.java
index 4e50ac94..937aa135 100644
--- a/src/core/org/luaj/vm2/lib/PackageLib.java
+++ b/src/core/org/luaj/vm2/lib/PackageLib.java
@@ -71,26 +71,18 @@ public class PackageLib extends OneArgFunction {
DEFAULT_LUA_PATH = "?.lua";
}
+ private static final LuaString _LOADED = valueOf("loaded");
+ private static final LuaString _LOADLIB = valueOf("loadlib");
+ private static final LuaString _PRELOAD = valueOf("preload");
+ private static final LuaString _PATH = valueOf("path");
+ private static final LuaString _SEARCHPATH = valueOf("searchpath");
+ private static final LuaString _SEARCHERS = valueOf("searchers");
+
/** The globals that were used to load this library. */
Globals globals;
- /** The table used by require to check for loaded modules, and exposed initially as package.loaded. */
- public LuaTable loaded;
-
- /** The table used by the {@link preload_loader}, and exposed initially as package.preload. */
- public LuaTable preload;
-
- /** The value in use as the package path, and set as the initial value of package.path. */
- public LuaString path;
-
- /** The loadlib function used by the package library. */
- public loadlib loadlib;
-
- /** The searchpath function used by the package library. */
- public searchpath searchpath;
-
- /** The initial searchers list, and the list exposed initially as package.searchers */
- public LuaTable searchers;
+ /** The table for this package. */
+ LuaTable package_;
/** Loader that loads from {@link preload} table if found there */
public preload_searcher preload_searcher;
@@ -109,19 +101,19 @@ public class PackageLib extends OneArgFunction {
public LuaValue call(LuaValue env) {
globals = env.checkglobals();
- env.set("require", new require());
- LuaTable package_ = new LuaTable();
- package_.set("loaded", loaded = new LuaTable());
- package_.set("preload", preload = new LuaTable());
- package_.set("path", path = LuaValue.valueOf(DEFAULT_LUA_PATH));
- package_.set("loadlib", loadlib = new loadlib());
- package_.set("searchpath", searchpath = new searchpath());
- searchers = new LuaTable();
+ globals.set("require", new require());
+ package_ = new LuaTable();
+ package_.set(_LOADED, new LuaTable());
+ package_.set(_PRELOAD, new LuaTable());
+ package_.set(_PATH, LuaValue.valueOf(DEFAULT_LUA_PATH));
+ package_.set(_LOADLIB, new loadlib());
+ package_.set(_SEARCHPATH, new searchpath());
+ LuaTable searchers = new LuaTable();
searchers.set(1, preload_searcher = new preload_searcher());
searchers.set(2, lua_searcher = new lua_searcher());
searchers.set(3, java_searcher = new java_searcher());
- package_.set("searchers", searchers);
- loaded.set("package", package_);
+ package_.set(_SEARCHERS, searchers);
+ package_.get(_LOADED).set("package", package_);
env.set("package", package_);
globals.package_ = this;
return env;
@@ -129,14 +121,14 @@ public class PackageLib extends OneArgFunction {
/** Allow packages to mark themselves as loaded */
public void setIsLoaded(String name, LuaTable value) {
- loaded.set(name, value);
+ package_.get(_LOADED).set(name, value);
}
/** Set the lua path used by this library instance to a new value.
* Merely sets the value of {@link path} to be used in subsequent searches. */
public void setLuaPath( String newLuaPath ) {
- path = LuaValue.valueOf(newLuaPath);
+ package_.set(_PATH, LuaValue.valueOf(newLuaPath));
}
public String tojstring() {
@@ -175,6 +167,7 @@ public class PackageLib extends OneArgFunction {
public class require extends OneArgFunction {
public LuaValue call( LuaValue arg ) {
LuaString name = arg.checkstring();
+ LuaValue loaded = package_.get(_LOADED);
LuaValue result = loaded.get(name);
if ( result.toboolean() ) {
if ( result == _SENTINEL )
@@ -183,7 +176,7 @@ public class PackageLib extends OneArgFunction {
}
/* else must load it; iterate over available loaders */
- LuaTable tbl = PackageLib.this.searchers.checktable();
+ LuaTable tbl = package_.get(_SEARCHERS).checktable();
StringBuffer sb = new StringBuffer();
Varargs loader = null;
for ( int i=1; true; i++ ) {
@@ -205,7 +198,7 @@ public class PackageLib extends OneArgFunction {
result = loader.arg1().call(name, loader.arg(2));
if ( ! result.isnil() )
loaded.set( name, result );
- else if ( (result = PackageLib.this.loaded.get(name)) == _SENTINEL )
+ else if ( (result = loaded.get(name)) == _SENTINEL )
loaded.set( name, result = LuaValue.TRUE );
return result;
}
@@ -221,7 +214,7 @@ public class PackageLib extends OneArgFunction {
public class preload_searcher extends VarArgFunction {
public Varargs invoke(Varargs args) {
LuaString name = args.checkstring(1);
- LuaValue val = preload.get(name);
+ LuaValue val = package_.get(_PRELOAD).get(name);
return val.isnil()?
valueOf("\n\tno field package.preload['"+name+"']"):
val;
@@ -234,11 +227,12 @@ public class PackageLib extends OneArgFunction {
InputStream is = null;
// get package path
+ LuaValue path = package_.get(_PATH);
if ( ! path.isstring() )
return valueOf("package.path is not a string");
- // get the searchpath function.
- Varargs v = searchpath.invoke(varargsOf(name, path));
+ // get the searchpath function.
+ Varargs v = package_.get(_SEARCHPATH).invoke(varargsOf(name, path));
// Did we get a result?
if (!v.isstring(1))
diff --git a/src/core/org/luaj/vm2/lib/TableLib.java b/src/core/org/luaj/vm2/lib/TableLib.java
index a68090f2..eeec59b5 100644
--- a/src/core/org/luaj/vm2/lib/TableLib.java
+++ b/src/core/org/luaj/vm2/lib/TableLib.java
@@ -67,6 +67,7 @@ public class TableLib extends OneArgFunction {
table.set("sort", new sort());
table.set("unpack", new unpack());
env.set("table", table);
+ env.get("package").get("loaded").set("table", table);
return NIL;
}
diff --git a/version.properties b/version.properties
index 7b9d346f..ea995733 100644
--- a/version.properties
+++ b/version.properties
@@ -1 +1 @@
-version: 3.0-alpha3
\ No newline at end of file
+version: 3.0-beta1
\ No newline at end of file