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 {