Mercurial Hosting > luan
diff src/luan/modules/PackageLuan.java @ 1280:781ec0a92bb5
add Boot.luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 20 Dec 2018 13:38:16 -0700 |
parents | 9fa8b8389578 |
children | 503bde9a7c80 |
line wrap: on
line diff
--- a/src/luan/modules/PackageLuan.java Tue Dec 18 12:54:55 2018 -0700 +++ b/src/luan/modules/PackageLuan.java Thu Dec 20 13:38:16 2018 -0700 @@ -1,5 +1,7 @@ package luan.modules; +import java.io.Reader; +import java.io.InputStreamReader; import java.io.IOException; import java.util.Arrays; import java.util.Collections; @@ -43,7 +45,22 @@ LuanTable loaded = loaded(luan); Object mod = loaded.rawGet(modName); if( mod == null ) { - if( modName.startsWith("java:") ) { + if( modName.equals("luan:Boot.luan") ) { + String src; + try { + Reader in = new InputStreamReader(ClassLoader.getSystemResourceAsStream("luan/modules/Boot.luan")); + src = Utils.readAll(in); + in.close(); + } catch(IOException e) { + throw new RuntimeException(e); + } + LuanFunction loader = Luan.load(src,modName); + mod = Luan.first( + loader.call(luan,new Object[]{modName}) + ); + if( mod == null ) + throw new RuntimeException(); + } else if( modName.startsWith("java:") ) { mod = JavaLuan.load(luan,modName.substring(5)); if( mod == null ) mod = Boolean.FALSE; @@ -70,25 +87,9 @@ } static String read(LuanState luan,String uri) throws LuanException { - LuanTable t = IoLuan.uri(luan,uri,null); - if( t == null ) - return null; -/* - LuanFunction existsFn = (LuanFunction)t.get(luan,"exists"); - boolean exists = (Boolean)Luan.first(existsFn.call(luan)); - if( !exists ) - return null; - LuanFunction reader = (LuanFunction)t.get(luan,"read_text"); - return (String)Luan.first(reader.call(luan)); -*/ - IoLuan.LuanIn in = (IoLuan.LuanIn)t.rawGet("java"); - try { - if( !in.exists(luan) ) - return null; - return in.read_text(luan); - } catch(IOException e) { - throw new LuanException(e); - } + LuanTable boot = (LuanTable)PackageLuan.require(luan,"luan:Boot.luan"); + LuanFunction read = (LuanFunction)boot.get("read"); + return (String)Luan.first(read.call(luan,new Object[]{uri})); } public static void enableLoad(LuanState luan,String... mods) throws LuanException {