diff src/luan/lib/PickleServer.java @ 147:cc3a0578edac

fix Io.reverse_pickle git-svn-id: https://luan-java.googlecode.com/svn/trunk@148 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 15 Jun 2014 15:41:36 +0000
parents 0517a4a7fcc5
children
line wrap: on
line diff
--- a/src/luan/lib/PickleServer.java	Sun Jun 15 13:35:33 2014 +0000
+++ b/src/luan/lib/PickleServer.java	Sun Jun 15 15:41:36 2014 +0000
@@ -38,6 +38,7 @@
 					list.add( con.pickle(obj) );
 				}
 			} catch(LuanException e) {
+//				System.out.println(e);
 //e.printStackTrace();
 				list.add( "return false, " );
 				list.add( con.pickle(e.getMessage()) );
@@ -54,14 +55,14 @@
 	public void run() {
 		LuanTable ioModule = con.ioModule;
 		Object old_reverse_pickle = ioModule.get("reverse_pickle");
-		Object old_close_pickle = ioModule.get("unreverse_pickle");
+		Object old_unreverse_pickle = ioModule.get("_unreverse_pickle");
 		try {
 			try {
 				ioModule.put("reverse_pickle", new LuanJavaFunction(
-					PickleServer.class.getMethod( "reverse_pickle" ), this
+					PickleServer.class.getMethod( "reverse_pickle", LuanFunction.class ), this
 				) );
-				ioModule.put("unreverse_pickle", new LuanJavaFunction(
-					PickleServer.class.getMethod( "unreverse_pickle" ), this
+				ioModule.put("_unreverse_pickle", new LuanJavaFunction(
+					PickleServer.class.getMethod( "_unreverse_pickle" ), this
 				) );
 			} catch(NoSuchMethodException e) {
 				throw new RuntimeException(e);
@@ -85,20 +86,29 @@
 			}
 		} finally {
 			ioModule.put("reverse_pickle",old_reverse_pickle);
-			ioModule.put("unreverse_pickle",old_close_pickle);
+			ioModule.put("_unreverse_pickle",old_unreverse_pickle);
 		}
 	}
 
-	public LuanTable reverse_pickle() throws IOException {
+	public void reverse_pickle(LuanFunction fn) throws IOException, LuanException {
 		try {
 			con.write( "return Io._reversed_pickle()\n" );
 		} catch(LuanException e) {
 			throw new RuntimeException(e);
 		}
-		return new PickleClient(con).table();
+		PickleClient pc = new PickleClient(con);
+		try {
+			con.luan.call(fn,new Object[]{pc.table()});
+		} finally {
+			try {
+				pc.call( "Io._unreverse_pickle()\n" );
+			} catch(LuanException e) {
+				throw new RuntimeException(e);
+			}
+		}
 	}
 
-	public void unreverse_pickle() {
+	public void _unreverse_pickle() {
 		isRunning = false;
 	}