Mercurial Hosting > luan
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 |