Comparison

util/serialization.lua @ 5021:85b2689dbcfe

Eliminate direct setfenv usage
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 08 Jun 2012 05:04:38 +0200
parent 3745:87f6eabd90c9
child 5776:bd0ff8ae98a8
comparison
equal deleted inserted replaced
5020:ef1eb65acbba 5021:85b2689dbcfe
14 local error = error; 14 local error = error;
15 local pairs = pairs; 15 local pairs = pairs;
16 local next = next; 16 local next = next;
17 17
18 local loadstring = loadstring; 18 local loadstring = loadstring;
19 local setfenv = setfenv;
20 local pcall = pcall; 19 local pcall = pcall;
21 20
22 local debug_traceback = debug.traceback; 21 local debug_traceback = debug.traceback;
23 local log = require "util.logger".init("serialization"); 22 local log = require "util.logger".init("serialization");
23 local envload = require"util.envload".envload;
24
24 module "serialization" 25 module "serialization"
25 26
26 local indent = function(i) 27 local indent = function(i)
27 return string_rep("\t", i); 28 return string_rep("\t", i);
28 end 29 end
82 end 83 end
83 84
84 function deserialize(str) 85 function deserialize(str)
85 if type(str) ~= "string" then return nil; end 86 if type(str) ~= "string" then return nil; end
86 str = "return "..str; 87 str = "return "..str;
87 local f, err = loadstring(str, "@data"); 88 local f, err = envload(str, "@data", {});
88 if not f then return nil, err; end 89 if not f then return nil, err; end
89 setfenv(f, {});
90 local success, ret = pcall(f); 90 local success, ret = pcall(f);
91 if not success then return nil, ret; end 91 if not success then return nil, ret; end
92 return ret; 92 return ret;
93 end 93 end
94 94