util/serialization.lua

changeset 3736
73399dd525e8
parent 2923
b7049746bd29
child 3745
87f6eabd90c9
--- a/util/serialization.lua	Sun Dec 12 06:25:54 2010 +0500
+++ b/util/serialization.lua	Sun Dec 12 06:29:19 2010 +0500
@@ -15,6 +15,10 @@
 local pairs = pairs;
 local next = next;
 
+local loadstring = loadstring;
+local setfenv = setfenv;
+local pcall = pcall;
+
 local debug_traceback = debug.traceback;
 local log = require "util.logger".init("serialization");
 module "serialization"
@@ -72,7 +76,14 @@
 end
 
 function deserialize(str)
-	error("Not implemented");
+	if type(str) ~= "string" then return nil; end
+	str = "return "..str;
+	local f, err = loadstring(str, "@data");
+	if not f then return nil, err; end
+	setfenv(f, {});
+	local success, ret = pcall(f);
+	if not success then return nil, ret; end
+	return ret;
 end
 
 return _M;

mercurial