コード例 #1
0
        public static ObjectValue[] GetAllChildrenSync(this ObjectValue val, EvaluationOptions ops = null)
        {
            var children = new List <ObjectValue> ();
            var values   = ops == null?val.GetAllChildren() : val.GetAllChildren(ops);

            for (int i = 0; i < values.Length; i++)
            {
                var value = values[i].Sync();

                if (value.IsEvaluatingGroup)
                {
                    if (ops != null)
                    {
                        children.AddRange(value.GetAllChildrenSync(ops));
                    }
                    else
                    {
                        children.AddRange(value.GetAllChildrenSync());
                    }
                }
                else
                {
                    children.Add(value);
                }
            }
            return(children.ToArray());
        }
コード例 #2
0
        protected override bool OnTestExpandRow(TreeIter iter, TreePath path)
        {
            if (!allowExpanding)
            {
                return(true);
            }
            bool expanded = (bool)store.GetValue(iter, ExpandedCol);

            if (!expanded)
            {
                store.SetValue(iter, ExpandedCol, true);
                TreeIter it;
                store.IterChildren(out it, iter);
                store.Remove(ref it);
                ObjectValue val = (ObjectValue)store.GetValue(iter, ObjectCol);
                foreach (ObjectValue cval in val.GetAllChildren())
                {
                    AppendValue(iter, null, cval);
                }
                return(base.OnTestExpandRow(iter, path));
            }
            else
            {
                return(false);
            }
        }
コード例 #3
0
ファイル: DebugTests.cs プロジェクト: mhutch/debugger-libs
        public static ObjectValue[] GetAllChildrenSync(this ObjectValue val)
        {
            var children = val.GetAllChildren();

            foreach (var child in children)
            {
                child.Sync();
            }
            return(children);
        }
コード例 #4
0
 static Task <ObjectValue[]> GetChildrenAsync(ObjectValue value, CancellationToken cancellationToken)
 {
     return(Task.Run(() => {
         try {
             return value.GetAllChildren();
         } catch (Exception ex) {
             // Note: this should only happen if someone breaks ObjectValue.GetAllChildren()
             LoggingService.LogError("Failed to get ObjectValue children.", ex);
             return new ObjectValue[0];
         }
     }, cancellationToken));
 }
コード例 #5
0
ファイル: ImmediatePad.cs プロジェクト: wellmonge/monodevelop
        void PrintValue(ObjectValue val)
        {
            string result = val.Value;

            if (string.IsNullOrEmpty(result) || val.IsError || val.IsUnknown || val.IsNotSupported)
            {
                view.WriteOutput(GetErrorText(val));
                FinishPrinting();
            }
            else
            {
                var ops      = GetEvaluationOptions();
                var children = val.GetAllChildren(ops);
                var hasMore  = false;

                view.WriteOutput(result);

                if (children.Length > 0 && string.Equals(children[0].Name, "[0..99]"))
                {
                    // Big Arrays Hack
                    children = children[0].GetAllChildren();
                    hasMore  = true;
                }

                var evaluating = new Dictionary <ObjectValue, bool> ();
                foreach (var child in children)
                {
                    if (child.IsEvaluating)
                    {
                        evaluating.Add(child, false);
                    }
                    else
                    {
                        PrintChildValue(child);
                    }
                }

                if (evaluating.Count > 0)
                {
                    foreach (var eval in evaluating)
                    {
                        WaitChildForCompleted(eval.Key, evaluating, hasMore);
                    }
                }
                else
                {
                    FinishPrinting(hasMore);
                }
            }
        }
コード例 #6
0
ファイル: MonoProperty.cs プロジェクト: vasek-cz/vs-mono
        public int EnumChildren(enum_DEBUGPROP_INFO_FLAGS fields, uint radix, ref Guid guidFilter, enum_DBG_ATTRIB_FLAGS attributeFilter, string filter, uint timeout, out IEnumDebugPropertyInfo2 enumerator)
        {
            enumerator = null;

            if (value.HasChildren)
            {
                var children   = value.GetAllChildren();
                var properties = new DEBUG_PROPERTY_INFO[children.Length];
                for (var i = 0; i < children.Length; i++)
                {
                    var child = children[i];
                    properties[i] = new MonoProperty(expression, child, this).ConstructDebugPropertyInfo(fields);
                }
                enumerator = new MonoPropertyEnumerator(properties);
                return(VSConstants.S_OK);
            }

            return(VSConstants.S_FALSE);
        }
コード例 #7
0
        public int EnumChildren(uint dwFields, uint dwRadix, ref Guid guidFilter, ulong dwAttribFilter, string pszNameFilter, uint dwTimeout, out IEnumDebugPropertyInfo2 ppEnum)
        {
            ppEnum = null;

            ObjectValue[] children = _value.GetAllChildren();

            if (!_value.HasChildren && children.Length > 0)
            {
                return(S_FALSE);
            }

            DEBUG_PROPERTY_INFO[] props = new DEBUG_PROPERTY_INFO[children.Length];

            for (var i = 0; i < children.Length; i++)
            {
                MonoProperty monoProp = new MonoProperty(this, children[i], _expression);

                props[i] = monoProp.CreatePropertyInfo(dwFields);
            }

            ppEnum = new MonoPropertyEnumerator(props);

            return(S_OK);
        }
コード例 #8
0
        private Variable CreateVariable(ObjectValue v)
        {
            var pname = String.Format("{0} {1}", v.TypeName, v.Name);

            return(new Variable(pname, v.DisplayValue, v.HasChildren ? _variableHandles.Create(v.GetAllChildren()) : 0));
        }
コード例 #9
0
        private Variable CreateVariable(ObjectValue v)
        {
            var dv = v.DisplayValue;

            if (dv.Length > 1 && dv [0] == '{' && dv [dv.Length - 1] == '}')
            {
                dv = dv.Substring(1, dv.Length - 2);
            }
            return(new Variable(v.Name, dv, v.TypeName, v.HasChildren ? _variableHandles.Create(v.GetAllChildren()) : 0));
        }
コード例 #10
0
ファイル: GdbBacktrace.cs プロジェクト: zanjs/AvalonStudio
        public CompletionData GetExpressionCompletionData(int frameIndex, string exp)
        {
            SelectFrame(frameIndex);

            bool pointer = exp.EndsWith("->");
            int  i;

            if (pointer || exp.EndsWith("."))
            {
                exp = exp.Substring(0, exp.Length - (pointer ? 2 : 1));
                i   = 0;
                while (i < exp.Length)
                {
                    ObjectValue val = CreateVarObject(exp);
                    if (!val.IsUnknown && !val.IsError)
                    {
                        CompletionData data = new CompletionData();
                        foreach (ObjectValue cv in val.GetAllChildren())
                        {
                            data.Items.Add(new CompletionItem(cv.Name, cv.Flags));
                        }
                        data.ExpressionLength = 0;
                        return(data);
                    }
                    i++;
                }
                return(null);
            }

            i = exp.Length - 1;
            bool lastWastLetter = false;

            while (i >= 0)
            {
                char c = exp[i--];
                if (!char.IsLetterOrDigit(c) && c != '_')
                {
                    break;
                }
                lastWastLetter = !char.IsDigit(c);
            }

            if (lastWastLetter)
            {
                string partialWord = exp.Substring(i + 1);

                CompletionData cdata = new CompletionData();
                cdata.ExpressionLength = partialWord.Length;

                // Local variables
                GdbCommandResult res = session.RunCommand("-stack-list-locals", "0");
                foreach (ResultData data in res.GetObject("locals"))
                {
                    string name = data.GetValue("name");
                    if (name.StartsWith(partialWord))
                    {
                        cdata.Items.Add(new CompletionItem(name, ObjectValueFlags.Variable));
                    }
                }

                // Parameters
                res = session.RunCommand("-stack-list-arguments", "0", frameIndex.ToString(), frameIndex.ToString());
                foreach (ResultData data in res.GetObject("stack-args").GetObject(0).GetObject("frame").GetObject("args"))
                {
                    string name = data.GetValue("name");
                    if (name.StartsWith(partialWord))
                    {
                        cdata.Items.Add(new CompletionItem(name, ObjectValueFlags.Parameter));
                    }
                }

                if (cdata.Items.Count > 0)
                {
                    return(cdata);
                }
            }
            return(null);
        }
コード例 #11
0
 private Variable CreateVariable(ObjectValue v)
 {
     return(new Variable(v.Name, v.DisplayValue, v.TypeName, v.HasChildren ? _variableHandles.Create(v.GetAllChildren()) : 0));
 }