Mercurial Hosting > luan
comparison src/luan/modules/PackageLuan.java @ 1578:c922446f53aa
immutable threading
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 08 Feb 2021 14:16:19 -0700 |
parents | 8fbcc4747091 |
children | 2975c932864d |
comparison
equal
deleted
inserted
replaced
1577:60e5c324adf9 | 1578:c922446f53aa |
---|---|
3 import java.io.Reader; | 3 import java.io.Reader; |
4 import java.io.InputStreamReader; | 4 import java.io.InputStreamReader; |
5 import java.io.IOException; | 5 import java.io.IOException; |
6 import java.util.Arrays; | 6 import java.util.Arrays; |
7 import java.util.Collections; | 7 import java.util.Collections; |
8 import java.util.Map; | |
9 import java.util.HashMap; | |
8 import goodjava.io.IoUtils; | 10 import goodjava.io.IoUtils; |
9 import luan.Luan; | 11 import luan.Luan; |
10 import luan.LuanTable; | 12 import luan.LuanTable; |
11 import luan.LuanFunction; | 13 import luan.LuanFunction; |
12 import luan.LuanJavaFunction; | 14 import luan.LuanJavaFunction; |
13 import luan.LuanCloner; | |
14 import luan.LuanException; | 15 import luan.LuanException; |
15 | 16 |
16 | 17 |
17 public final class PackageLuan { | 18 public final class PackageLuan { |
18 | 19 |
27 luan.registry().put("Package.require",fn); | 28 luan.registry().put("Package.require",fn); |
28 } | 29 } |
29 return fn; | 30 return fn; |
30 } | 31 } |
31 | 32 |
32 public static LuanTable loaded(Luan luan) { | 33 public static Map loaded(Luan luan) { |
33 LuanTable tbl = (LuanTable)luan.registry().get("Package.loaded"); | 34 Map map = (Map)luan.registry().get("Package.loaded"); |
34 if( tbl == null ) { | 35 if( map == null ) { |
35 tbl = new LuanTable(); | 36 map = new HashMap(); |
36 luan.registry().put("Package.loaded",tbl); | 37 luan.registry().put("Package.loaded",map); |
37 } | 38 } |
38 return tbl; | 39 return map; |
39 } | 40 } |
40 | 41 |
41 public static Object require(Luan luan,String modName) throws LuanException { | 42 public static Object require(Luan luan,String modName) throws LuanException { |
42 if( "java".equals(modName) ) { | 43 if( "java".equals(modName) ) { |
43 JavaLuan.java(luan); | 44 JavaLuan.java(luan); |
48 throw new LuanException( "module '"+modName+"' not found" ); | 49 throw new LuanException( "module '"+modName+"' not found" ); |
49 return mod; | 50 return mod; |
50 } | 51 } |
51 | 52 |
52 public static Object load(Luan luan,String modName) throws LuanException { | 53 public static Object load(Luan luan,String modName) throws LuanException { |
53 LuanTable loaded = loaded(luan); | 54 Map loaded = loaded(luan); |
54 Object mod = loaded.rawGet(modName); | 55 Object mod = loaded.get(modName); |
55 if( mod == null ) { | 56 if( mod == null ) { |
56 if( modName.equals("luan:Boot.luan") ) { | 57 if( modName.equals("luan:Boot.luan") ) { |
57 String src; | 58 String src; |
58 try { | 59 try { |
59 Reader in = new InputStreamReader(ClassLoader.getSystemResourceAsStream("luan/modules/Boot.luan")); | 60 Reader in = new InputStreamReader(ClassLoader.getSystemResourceAsStream("luan/modules/Boot.luan")); |
80 LuanFunction loader = luan.load(src,modName,true); | 81 LuanFunction loader = luan.load(src,modName,true); |
81 mod = Luan.first( | 82 mod = Luan.first( |
82 loader.call(luan,modName) | 83 loader.call(luan,modName) |
83 ); | 84 ); |
84 if( mod == null ) { | 85 if( mod == null ) { |
85 mod = loaded.rawGet(modName); | 86 mod = loaded.get(modName); |
86 if( mod != null ) | 87 if( mod != null ) |
87 return mod; | 88 return mod; |
88 throw new LuanException( "module '"+modName+"' returned nil" ); | 89 throw new LuanException( "module '"+modName+"' returned nil" ); |
89 } | 90 } |
90 } | 91 } |
91 } | 92 } |
92 loaded.rawPut(modName,mod); | 93 loaded.put(modName,mod); |
93 } | 94 } |
94 return mod; | 95 return mod; |
95 } | 96 } |
96 | 97 |
97 static String read(Luan luan,String uri) { | 98 static String read(Luan luan,String uri) { |