Example #1
0
        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>());
            }
        }
Example #2
0
 public void Clear()
 {
     Globals.Clear();
     Locals.Clear();
     Upvalues.Clear();
     EnvVars.Clear();
     m_dictCustomWatches.Clear();
 }
Example #3
0
        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);
        }
Example #4
0
 public void Setup(SledLuaVariableFilterState varFilterGlobals,
                   SledLuaVariableFilterState varFilterLocals,
                   SledLuaVariableFilterState varFilterUpvalues,
                   SledLuaVariableFilterState varFilterEnvVars)
 {
     Globals.Setup(varFilterGlobals);
     Locals.Setup(varFilterLocals);
     Upvalues.Setup(varFilterUpvalues);
     EnvVars.Setup(varFilterEnvVars);
 }
Example #5
0
        public override void StripDebug(bool Recursive)
        {
            Name = string.Empty;
            Locals.Clear();
            Upvalues.Clear();
            Lines.Clear();
            LineBegin = 0;
            LineEnd   = 0;

            if (Recursive)
            {
                for (int Idx = 0; Idx < Protos.Count; Idx++)
                {
                    Protos[Idx].StripDebug(true);
                }
            }
        }
Example #6
0
        public int IndexOfUpval(string name)
        {
            if (Upvalues.ContainsKey(name))
            {
                return(Upvalues[name].Index);
            }

            if (_parent != null)
            {
                if (_parent._locNames.TryGetValue(name, out var locVar))
                {
                    var idx = Upvalues.Count;
                    Upvalues[name] = new UpvalInfo
                    {
                        LocVarSlot = locVar.Slot,
                        UpvalIndex = -1,
                        Index      = idx
                    };
                    locVar.Captured = true;
                    return(idx);
                }

                var uvIdx = _parent.IndexOfUpval(name);
                if (uvIdx >= 0)
                {
                    var idx = Upvalues.Count;
                    Upvalues[name] = new UpvalInfo
                    {
                        LocVarSlot = -1,
                        UpvalIndex = uvIdx,
                        Index      = idx
                    };
                    return(idx);
                }
            }

            return(-1);
        }