Fix require sentinel logic

This commit is contained in:
James Roseborough
2008-05-24 00:43:39 +00:00
parent bb3465c375
commit 02f8452515

View File

@@ -286,7 +286,7 @@ public class PackageLib extends LFunction {
vm.pushlvalue( loaded ); vm.pushlvalue( loaded );
return; return;
} }
vm.settop(0); vm.resettop();
/* else must load it; iterate over available loaders */ /* else must load it; iterate over available loaders */
LValue val = pckg.luaGetTable(vm, pckg, _LOADERS); LValue val = pckg.luaGetTable(vm, pckg, _LOADERS);
@@ -315,12 +315,11 @@ public class PackageLib extends LFunction {
vm.call( 1, 1 ); /* run loaded module */ vm.call( 1, 1 ); /* run loaded module */
if ( ! vm.isnil(-1) ) /* non-nil return? */ if ( ! vm.isnil(-1) ) /* non-nil return? */
LOADED.luaSetTable(vm, LOADED, name, vm.topointer(-1) ); /* _LOADED[name] = returned value */ LOADED.luaSetTable(vm, LOADED, name, vm.topointer(-1) ); /* _LOADED[name] = returned value */
LOADED.luaGetTable(vm, LOADED, name); if ( LOADED.luaGetTable(vm, LOADED, name) == _SENTINEL ) { /* module did not set a value? */
if ( vm.topointer(-1) == _SENTINEL ) { /* module did not set a value? */
LOADED.luaSetTable(vm, LOADED, name, LBoolean.TRUE ); /* _LOADED[name] = true */ LOADED.luaSetTable(vm, LOADED, name, LBoolean.TRUE ); /* _LOADED[name] = true */
vm.pushboolean(true); vm.pushboolean(true);
} }
vm.insert(1); vm.replace(1);
vm.settop(1); vm.settop(1);
} }