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;