Commit f16398f8 authored by Vinicius Jarina's avatar Vinicius Jarina
Browse files

Use `fakenil` from...

Use `fakenil` from https://github.com/NLua/NLua/issues/328#issuecomment-691483915 to avoid cache miss
parent f3367518
...@@ -50,22 +50,32 @@ namespace NLua ...@@ -50,22 +50,32 @@ namespace NLua
/* /*
* __index metafunction for CLR objects. Implemented in Lua. * __index metafunction for CLR objects. Implemented in Lua.
*/ */
public const string LuaIndexFunction = @"local function a(b,c)local d=getmetatable(b)local e=d.cache[c]if e~=nil then return e else local f,g=get_object_member(b,c)if g then d.cache[c]=f end;return f end end;return a"; public const string LuaIndexFunction = @"local a={}local function b(c,d)local e=getmetatable(c)local f=e.cache[d]if f~=nil then if f==a then return nil end;return f else local g,h=get_object_member(c,d)if h then if g==nil then e.cache[d]=a else e.cache[d]=g end end;return g end end;return b";
//@"local function index(obj,name) //@"local fakenil = {}
// local meta = getmetatable(obj) // local function index(obj, name)
// local cached = meta.cache[name] // local meta = getmetatable(obj)
// if cached ~= nil then // local cached = meta.cache[name]
// return cached
// else // if cached ~= nil then
// local value,isFunc = get_object_member(obj,name) // if cached == fakenil then
// return nil
// if isFunc then // end
// meta.cache[name]=value // return cached
// end
// return value // else
// end // local value, isCached = get_object_member(obj, name)
//end // if isCached then
//return index"; // if value == nil then
// meta.cache[name] = fakenil
// else
// meta.cache[name] = value
// end
// end
// return value
// end
// end
// return index";
public MetaFunctions(ObjectTranslator translator) public MetaFunctions(ObjectTranslator translator)
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment