public void LoadProto(int idx) { var proto = stack.closure.proto.Protos[idx]; var closure = Closure.newLuaClosure(proto); stack.push(closure); for (int 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 = binchunk.BinaryChunk.Undump(chunk); var c = Closure.newLuaClosure(proto); stack.push(c); return(0); }
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(Consts.LUA_RIDX_GLOBALS); c.upvals[0] = new Upvalue(env); } return(0); }
public void LoadProto(int idx) { var subProto = stack.closure.proto.Protos[idx]; var closure = Closure.newLuaClosure(subProto); stack.push(closure); for (var i = 0; i < subProto.Upvalues.Length; i++) { var uvInfo = subProto.Upvalues[i]; var uvIdx = (int)uvInfo.Idx; if (uvInfo.Instack == 1) { if (stack.openuvs == null) { stack.openuvs = new Dictionary <int, Upvalue>(); } if (stack.openuvs.ContainsKey(uvIdx)) { var openuv = stack.openuvs[uvIdx]; closure.upvals[i] = openuv; } else { closure.upvals[i] = new Upvalue { val = stack.slots[uvIdx] }; stack.openuvs[uvIdx] = closure.upvals[i]; } } else { closure.upvals[i] = stack.closure.upvals[uvIdx]; } } }