diff src/luan/lib/BasicLib.java @ 40:e3624b7cd603

implement stack trace git-svn-id: https://luan-java.googlecode.com/svn/trunk@41 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 21 Dec 2012 10:45:54 +0000
parents e5bcb1eeafc1
children c53dc854e6cc
line wrap: on
line diff
--- a/src/luan/lib/BasicLib.java	Thu Dec 20 02:54:06 2012 +0000
+++ b/src/luan/lib/BasicLib.java	Fri Dec 21 10:45:54 2012 +0000
@@ -15,6 +15,8 @@
 import luan.LuaFunction;
 import luan.LuaJavaFunction;
 import luan.LuaException;
+import luan.LuaSource;
+import luan.LuaElement;
 import luan.interp.LuaCompiler;
 
 
@@ -26,13 +28,13 @@
 		add( global, "do_file", LuaState.class, String.class );
 		add( global, "get_metatable", LuaState.class, Object.class );
 		add( global, "ipairs", LuaTable.class );
-		add( global, "load", LuaState.class, String.class );
+		add( global, "load", LuaState.class, String.class, String.class );
 		add( global, "load_file", LuaState.class, String.class );
 		add( global, "pairs", LuaTable.class );
 		add( global, "print", LuaState.class, new Object[0].getClass() );
 		add( global, "raw_equal", Object.class, Object.class );
 		add( global, "raw_get", LuaTable.class, Object.class );
-		add( global, "raw_len", Object.class );
+		add( global, "raw_len", LuaState.class, Object.class );
 		add( global, "raw_set", LuaTable.class, Object.class, Object.class );
 		add( global, "set_metatable", LuaTable.class, LuaTable.class );
 		add( global, "to_number", Object.class, Integer.class );
@@ -69,7 +71,7 @@
 		for( int i=0; i<args.length; i++ ) {
 			if( i > 0 )
 				System.out.print('\t');
-			System.out.print( lua.toString(args[i]) );
+			System.out.print( lua.toString(LuaElement.JAVA,args[i]) );
 		}
 		System.out.println();
 	}
@@ -78,8 +80,8 @@
 		return Lua.type(obj);
 	}
 
-	public static LuaFunction load(LuaState lua,String ld) throws LuaException {
-		return LuaCompiler.compile(lua,ld);
+	public static LuaFunction load(LuaState lua,String text,String sourceName) throws LuaException {
+		return LuaCompiler.compile(lua,new LuaSource(sourceName,text));
 	}
 
 	public static String readAll(Reader in)
@@ -104,13 +106,18 @@
 	}
 
 
-	public static LuaFunction load_file(LuaState lua,String fileName) throws LuaException,IOException {
-		String src = fileName==null ? readAll(new InputStreamReader(System.in)) : read(new File(fileName));
-		return load(lua,src);
+	public static LuaFunction load_file(LuaState lua,String fileName) throws LuaException {
+		try {
+			String src = fileName==null ? readAll(new InputStreamReader(System.in)) : read(new File(fileName));
+			return load(lua,src,fileName);
+		} catch(IOException e) {
+			throw new LuaException(lua,LuaElement.JAVA,e);
+		}
 	}
 
-	public static Object[] do_file(LuaState lua,String fileName) throws LuaException,IOException {
-		return load_file(lua,fileName).call(lua);
+	public static Object[] do_file(LuaState lua,String fileName) throws LuaException {
+		LuaFunction fn = load_file(lua,fileName);
+		return lua.call(fn,LuaElement.JAVA,null);
 	}
 
 	private static class TableIter {
@@ -197,7 +204,7 @@
 		return table;
 	}
 
-	public static int raw_len(Object v) throws LuaException {
+	public static int raw_len(LuaState lua,Object v) throws LuaException {
 		if( v instanceof String ) {
 			String s = (String)v;
 			return s.length();
@@ -206,7 +213,7 @@
 			LuaTable t = (LuaTable)v;
 			return t.length();
 		}
-		throw new LuaException( "bad argument #1 to 'raw_len' (table or string expected)" );
+		throw new LuaException( lua, LuaElement.JAVA, "bad argument #1 to 'raw_len' (table or string expected)" );
 	}
 
 	public static LuaNumber to_number(Object e,Integer base) {
@@ -214,6 +221,6 @@
 	}
 
 	public static String to_string(LuaState lua,Object v) throws LuaException {
-		return lua.toString(v);
+		return lua.toString(LuaElement.JAVA,v);
 	}
 }