comparison src/luan/lib/PackageLib.java @ 77:4bf3d0c0b6b9

make LuanState cloneable git-svn-id: https://luan-java.googlecode.com/svn/trunk@78 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 15 Feb 2013 09:55:17 +0000
parents aa7538ae5fb6
children cca4f8522893
comparison
equal deleted inserted replaced
76:97b03fc807ad 77:4bf3d0c0b6b9
17 17
18 public static final String NAME = "package"; 18 public static final String NAME = "package";
19 19
20 public static final LuanFunction LOADER = new LuanFunction() { 20 public static final LuanFunction LOADER = new LuanFunction() {
21 public Object[] call(LuanState luan,Object[] args) throws LuanException { 21 public Object[] call(LuanState luan,Object[] args) throws LuanException {
22 LuanTable global = luan.global; 22 LuanTable global = luan.global();
23 LuanTable module = new LuanTable(); 23 LuanTable module = new LuanTable();
24 module.put("loaded",luan.loaded); 24 module.put("loaded",luan.loaded());
25 module.put("preload",luan.preload); 25 module.put("preload",luan.preload());
26 // module.put("path","?.lua"); 26 // module.put("path","?.lua");
27 try { 27 try {
28 add( global, "require", LuanState.class, String.class ); 28 add( global, "require", LuanState.class, String.class );
29 add( module, "module", LuanState.class, String.class ); 29 add( module, "module", LuanState.class, String.class );
30 add( module, "search_path", String.class, String.class ); 30 add( module, "search_path", String.class, String.class );
41 } 41 }
42 42
43 public static void require(LuanState luan,String modName) throws LuanException { 43 public static void require(LuanState luan,String modName) throws LuanException {
44 Object mod = module(luan,modName); 44 Object mod = module(luan,modName);
45 if( mod instanceof LuanTable ) 45 if( mod instanceof LuanTable )
46 luan.global.put(modName,mod); 46 luan.global().put(modName,mod);
47 } 47 }
48 48
49 public static Object module(LuanState luan,String modName) throws LuanException { 49 public static Object module(LuanState luan,String modName) throws LuanException {
50 Object mod = luan.loaded.get(modName); 50 Object mod = luan.loaded().get(modName);
51 if( mod == null ) { 51 if( mod == null ) {
52 LuanTable searchers = (LuanTable)luan.get("package.searchers"); 52 LuanTable searchers = (LuanTable)luan.get("package.searchers");
53 for( Object s : searchers.asList() ) { 53 for( Object s : searchers.asList() ) {
54 LuanFunction searcher = (LuanFunction)s; 54 LuanFunction searcher = (LuanFunction)s;
55 Object[] a = luan.call(searcher,LuanElement.JAVA,"searcher",modName); 55 Object[] a = luan.call(searcher,LuanElement.JAVA,"searcher",modName);
57 LuanFunction loader = (LuanFunction)a[0]; 57 LuanFunction loader = (LuanFunction)a[0];
58 Object extra = a.length >= 2 ? a[1] : null; 58 Object extra = a.length >= 2 ? a[1] : null;
59 mod = Luan.first(luan.call(loader,LuanElement.JAVA,"loader",modName,extra)); 59 mod = Luan.first(luan.call(loader,LuanElement.JAVA,"loader",modName,extra));
60 if( mod == null ) 60 if( mod == null )
61 mod = true; 61 mod = true;
62 luan.loaded.put(modName,mod); 62 luan.loaded().put(modName,mod);
63 } 63 }
64 } 64 }
65 if( mod == null ) 65 if( mod == null )
66 throw new LuanException( luan, LuanElement.JAVA, "module '"+modName+"' not found" ); 66 throw new LuanException( luan, LuanElement.JAVA, "module '"+modName+"' not found" );
67 } 67 }
98 }; 98 };
99 99
100 public static final LuanFunction preloadSearcher = new LuanFunction() { 100 public static final LuanFunction preloadSearcher = new LuanFunction() {
101 public Object[] call(LuanState luan,Object[] args) throws LuanException { 101 public Object[] call(LuanState luan,Object[] args) throws LuanException {
102 String modName = (String)args[0]; 102 String modName = (String)args[0];
103 return new Object[]{luan.preload.get(modName)}; 103 return new Object[]{luan.preload().get(modName)};
104 } 104 }
105 }; 105 };
106 106
107 107
108 108