diff src/luan/lib/BasicLib.java @ 36:2a35154aec14

implement more basic lib functions git-svn-id: https://luan-java.googlecode.com/svn/trunk@37 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 18 Dec 2012 09:53:42 +0000
parents e51906de0f11
children 8a57ebfdfd78
line wrap: on
line diff
--- a/src/luan/lib/BasicLib.java	Tue Dec 18 07:05:58 2012 +0000
+++ b/src/luan/lib/BasicLib.java	Tue Dec 18 09:53:42 2012 +0000
@@ -3,6 +3,7 @@
 import java.io.File;
 import java.io.Reader;
 import java.io.FileReader;
+import java.io.InputStreamReader;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.Iterator;
@@ -27,8 +28,14 @@
 		add( t, "load", LuaState.class, String.class );
 		add( t, "loadfile", LuaState.class, String.class );
 		add( t, "pairs", LuaTable.class );
-		add( t, "print", new Object[0].getClass() );
+		add( t, "print", LuaState.class, new Object[0].getClass() );
+		add( t, "rawequal", Object.class, Object.class );
+		add( t, "rawget", LuaTable.class, Object.class );
+		add( t, "rawlen", Object.class );
+		add( t, "rawset", LuaTable.class, Object.class, Object.class );
 		add( t, "setmetatable", LuaTable.class, LuaTable.class );
+		add( t, "tonumber", Object.class, Integer.class );
+		add( t, "tostring", LuaState.class, Object.class );
 		add( t, "type", Object.class );
 		t.put( "_VERSION", Lua.version );
 	}
@@ -41,11 +48,11 @@
 		}
 	}
 
-	public static void print(Object... args) {
+	public static void print(LuaState lua,Object... args) throws LuaException {
 		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(args[i]) );
 		}
 		System.out.println();
 	}
@@ -81,7 +88,12 @@
 
 
 	public static LuaFunction loadfile(LuaState lua,String fileName) throws LuaException,IOException {
-		return load(lua,read(new File(fileName)));
+		String src = fileName==null ? readAll(new InputStreamReader(System.in)) : read(new File(fileName));
+		return load(lua,src);
+	}
+
+	public static Object[] dofile(LuaState lua,String fileName) throws LuaException,IOException {
+		return loadfile(lua,fileName).call(lua);
 	}
 
 	private static class TableIter {
@@ -144,4 +156,37 @@
 		table.setMetatable(metatable);
 		return table;
 	}
+
+	public static boolean rawequal(Object v1,Object v2) {
+		return v1 == v2 || v1 != null && v1.equals(v2);
+	}
+
+	public static Object rawget(LuaTable table,Object index) {
+		return table.get(index);
+	}
+
+	public static LuaTable rawset(LuaTable table,Object index,Object value) {
+		table.put(index,value);
+		return table;
+	}
+
+	public static int rawlen(Object v) throws LuaException {
+		if( v instanceof String ) {
+			String s = (String)v;
+			return s.length();
+		}
+		if( v instanceof LuaTable ) {
+			LuaTable t = (LuaTable)v;
+			return t.length();
+		}
+		throw new LuaException( "bad argument #1 to 'rawlen' (table or string expected)" );
+	}
+
+	public static LuaNumber tonumber(Object e,Integer base) {
+		return Lua.toNumber(e,base);
+	}
+
+	public static String tostring(LuaState lua,Object v) throws LuaException {
+		return lua.toString(v);
+	}
 }