comparison 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
comparison
equal deleted inserted replaced
72:cd9dbd7477ca 73:f86e4f77ef32
4 import java.io.PrintStream; 4 import java.io.PrintStream;
5 import java.util.List; 5 import java.util.List;
6 import java.util.ArrayList; 6 import java.util.ArrayList;
7 import luan.interp.LuanCompiler; 7 import luan.interp.LuanCompiler;
8 import luan.lib.BasicLib; 8 import luan.lib.BasicLib;
9 import luan.lib.PackageLib;
9 import luan.lib.JavaLib; 10 import luan.lib.JavaLib;
10 import luan.lib.MathLib; 11 import luan.lib.MathLib;
11 import luan.lib.StringLib; 12 import luan.lib.StringLib;
12 import luan.lib.TableLib; 13 import luan.lib.TableLib;
13 import luan.lib.HtmlLib; 14 import luan.lib.HtmlLib;
14 15
15 16
16 public abstract class LuanState { 17 public abstract class LuanState {
17 18
19 public final LuanTable global = new LuanTable();
20 public final LuanTable loaded = new LuanTable();
21 public final LuanTable preload = new LuanTable();
22
23 public InputStream in = System.in;
24 public PrintStream out = System.out;
25 public PrintStream err = System.err;
26
27 private final List<MetatableGetter> mtGetters = new ArrayList<MetatableGetter>();
28 final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>();
29
30
31 public Object load(LuanFunction loader,String modName) throws LuanException {
32 return load(loader,modName,null);
33 }
34
35 public Object load(LuanFunction loader,String modName,Object extra) throws LuanException {
36 Object mod = Luan.first(call(loader,LuanElement.JAVA,"loader",modName,extra));
37 if( mod == null )
38 mod = true;
39 loaded.put(modName,mod);
40 return mod;
41 }
42
18 public static LuanState newStandard() { 43 public static LuanState newStandard() {
19 LuanState luan = LuanCompiler.newLuanState(); 44 try {
20 BasicLib.register(luan); 45 LuanState luan = LuanCompiler.newLuanState();
21 JavaLib.register(luan); 46 luan.load(BasicLib.LOADER,BasicLib.NAME);
22 MathLib.register(luan); 47 luan.load(PackageLib.LOADER,PackageLib.NAME);
23 StringLib.register(luan); 48 luan.load(JavaLib.LOADER,JavaLib.NAME);
24 TableLib.register(luan); 49 luan.load(MathLib.LOADER,MathLib.NAME);
25 HtmlLib.register(luan); 50 luan.load(StringLib.LOADER,StringLib.NAME);
26 return luan; 51 luan.load(TableLib.LOADER,TableLib.NAME);
52 luan.load(HtmlLib.LOADER,HtmlLib.NAME);
53 return luan;
54 } catch(LuanException e) {
55 throw new RuntimeException(e);
56 }
27 } 57 }
28 58
29 public Object[] eval(String cmd,String sourceName) throws LuanException { 59 public Object[] eval(String cmd,String sourceName) throws LuanException {
30 LuanFunction fn = BasicLib.load(this,cmd,sourceName); 60 LuanFunction fn = BasicLib.load(this,cmd,sourceName);
31 return call(fn,null,null); 61 return call(fn,null,null);
32 } 62 }
33 63
34
35
36 private final LuanTable global = new LuanTable();
37 private final List<MetatableGetter> mtGetters = new ArrayList<MetatableGetter>();
38 final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>();
39
40 public InputStream in = System.in;
41 public PrintStream out = System.out;
42 public PrintStream err = System.err;
43
44 public final LuanTable global() {
45 return global;
46 }
47 64
48 public final LuanTable getMetatable(Object obj) { 65 public final LuanTable getMetatable(Object obj) {
49 if( obj instanceof LuanTable ) { 66 if( obj instanceof LuanTable ) {
50 LuanTable table = (LuanTable)obj; 67 LuanTable table = (LuanTable)obj;
51 return table.getMetatable(); 68 return table.getMetatable();