Mercurial Hosting > luan
diff src/luan/LuanState.java @ 73:f86e4f77ef32
add package module
git-svn-id: https://luan-java.googlecode.com/svn/trunk@74 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 12 Feb 2013 09:46:45 +0000 |
parents | f7e17cfb35f9 |
children | f003338d503b |
line wrap: on
line diff
--- a/src/luan/LuanState.java Tue Feb 12 05:44:15 2013 +0000 +++ b/src/luan/LuanState.java Tue Feb 12 09:46:45 2013 +0000 @@ -6,6 +6,7 @@ import java.util.ArrayList; import luan.interp.LuanCompiler; import luan.lib.BasicLib; +import luan.lib.PackageLib; import luan.lib.JavaLib; import luan.lib.MathLib; import luan.lib.StringLib; @@ -15,15 +16,44 @@ public abstract class LuanState { + public final LuanTable global = new LuanTable(); + public final LuanTable loaded = new LuanTable(); + public final LuanTable preload = new LuanTable(); + + public InputStream in = System.in; + public PrintStream out = System.out; + public PrintStream err = System.err; + + private final List<MetatableGetter> mtGetters = new ArrayList<MetatableGetter>(); + final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); + + + public Object load(LuanFunction loader,String modName) throws LuanException { + return load(loader,modName,null); + } + + public Object load(LuanFunction loader,String modName,Object extra) throws LuanException { + Object mod = Luan.first(call(loader,LuanElement.JAVA,"loader",modName,extra)); + if( mod == null ) + mod = true; + loaded.put(modName,mod); + return mod; + } + public static LuanState newStandard() { - LuanState luan = LuanCompiler.newLuanState(); - BasicLib.register(luan); - JavaLib.register(luan); - MathLib.register(luan); - StringLib.register(luan); - TableLib.register(luan); - HtmlLib.register(luan); - return luan; + try { + LuanState luan = LuanCompiler.newLuanState(); + luan.load(BasicLib.LOADER,BasicLib.NAME); + luan.load(PackageLib.LOADER,PackageLib.NAME); + luan.load(JavaLib.LOADER,JavaLib.NAME); + luan.load(MathLib.LOADER,MathLib.NAME); + luan.load(StringLib.LOADER,StringLib.NAME); + luan.load(TableLib.LOADER,TableLib.NAME); + luan.load(HtmlLib.LOADER,HtmlLib.NAME); + return luan; + } catch(LuanException e) { + throw new RuntimeException(e); + } } public Object[] eval(String cmd,String sourceName) throws LuanException { @@ -32,19 +62,6 @@ } - - private final LuanTable global = new LuanTable(); - private final List<MetatableGetter> mtGetters = new ArrayList<MetatableGetter>(); - final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>(); - - public InputStream in = System.in; - public PrintStream out = System.out; - public PrintStream err = System.err; - - public final LuanTable global() { - return global; - } - public final LuanTable getMetatable(Object obj) { if( obj instanceof LuanTable ) { LuanTable table = (LuanTable)obj;