public void LoadProto(int idx) { var proto = _stack.Closure.Proto.Protos[idx]; var closure = Closure.NewLuaClosure(proto); _stack.Push(closure); for (var i = 0; i < proto.Upvalues.Length; i++) { var uvInfo = proto.Upvalues[i]; int uvIdx = uvInfo.Idx; if (uvInfo.Instack == 1) { if (_stack.Openuvs == null) { _stack.Openuvs = new Dictionary <int, Upvalue>(); } if (_stack.Openuvs.ContainsKey(uvIdx)) { closure.Upvals[i] = _stack.Openuvs[uvIdx]; } else { closure.Upvals[i] = new Upvalue(_stack, uvIdx); _stack.Openuvs.Add(uvIdx, closure.Upvals[i]); } } else { closure.Upvals[i] = _stack.Closure.Upvals[uvIdx]; } } }
public int Load(ref byte[] chunk, string chunkName, string mode) { var proto = BinaryChunk.Undump(chunk); var c = Closure.NewLuaClosure(proto); _stack.Push(c); if (proto.Upvalues.Length > 0) { var env = Registry.Get(Constant.LUA_RIDX_GLOBALS); c.Upvals[0] = new Upvalue(env); } return(0); }