public void Add(ISledLuaVarBaseType luaVar) { if (luaVar == null) { return; } m_dictCustomWatches[luaVar] = WatchedVariableService.ReceivingWatchedCustomVariables; if (luaVar.DomNode.Is <SledLuaVarGlobalType>()) { Globals.Add(luaVar.DomNode.As <SledLuaVarGlobalType>()); } else if (luaVar.DomNode.Is <SledLuaVarLocalType>()) { Locals.Add(luaVar.DomNode.As <SledLuaVarLocalType>()); } else if (luaVar.DomNode.Is <SledLuaVarUpvalueType>()) { Upvalues.Add(luaVar.DomNode.As <SledLuaVarUpvalueType>()); } else if (luaVar.DomNode.Is <SledLuaVarEnvType>()) { EnvVars.Add(luaVar.DomNode.As <SledLuaVarEnvType>()); } }
public int InternUpvalue(string upvalueName) { if (upvalueName == null || upvalueName.Length < 1) { throw new Exception("upvalue名称不能为空"); } if (InNotAffectMode) { return(0); } for (var i = 0; i < Upvalues.Count; i++) { var upvalueItem = Upvalues[i]; if (upvalueItem.Name == upvalueName) { return(i); } } var upvalue = new UvmUpvaldesc(); upvalue.Name = upvalueName; // 从上级proto中查找是否存在对应的localvars,判断instack的值 if (Parent != null) { var locvar = Parent.FindLocvar(upvalueName); if (locvar != null) { upvalue.Instack = true; upvalue.Name = upvalueName; upvalue.Idx = locvar.SlotIndex; } } else { upvalue.Instack = false; upvalue.Name = upvalueName; } if (!upvalue.Instack) { // 在上层proto的upvalues中找,没有找到就返回上层的 count(upvalues),因为上层proto需要增加新upvalue if (Parent == null) { upvalue.Idx = Upvalues.Count; upvalue.Instack = true; } else { var parentUpvalueIndex = Parent.InternUpvalue(upvalueName); upvalue.Idx = parentUpvalueIndex; upvalue.Instack = false; } } Upvalues.Add(upvalue); return(Upvalues.Count - 1); }