Exemple #1
0
        public int ParseText(string pszCode, enum_PARSEFLAGS dwFlags, uint nRadix, out IDebugExpression2 ppExpr,
                             out string pbstrError, out uint pichError)
        {
            pbstrError = "";
            pichError  = 0;
            ppExpr     = null;
            string lookup = pszCode;

            Debug.WriteLine($"ParseText(pszCode={pszCode}, dwFlags={dwFlags}, nRadix={nRadix})");
            try
            {
                //##############
                // Step01: local
                //##############

                var local = ThreadContext.Method.GetLocals().Where(x => x.Name == pszCode).FirstOrDefault();
                if (local != null)
                {
                    //Debug.WriteLine($"=> ParseText.LocalVariable: pszCode={pszCode}, Name={local?.Name}, Type={local?.Type?.FullName}");
                    ppExpr = new AD7Expression(new MonoProperty(ThreadContext, local));
                    return(VSConstants.S_OK);
                }

                //##############################
                // Step02: fields and properties
                //##############################

                var declaringType = ThreadContext.Method?.DeclaringType;
                if (declaringType != null)
                {
                    var field = declaringType.GetFields().Where(x => x.Name == pszCode).FirstOrDefault();

                    if (field != null)
                    {
                        //Debug.WriteLine($"=> ParseText.Field: pszCode={pszCode}, Name={field?.Name}, Type={field?.FieldType?.FullName}");
                        ppExpr = new AD7Expression(new MonoProperty(ThreadContext, field));
                        return(VSConstants.S_OK);
                    }

                    var property = declaringType.GetProperties().Where(x => x.Name == pszCode).FirstOrDefault();

                    if (property != null)
                    {
                        //Debug.WriteLine($"=> ParseText.Property: pszCode={pszCode}, Name={property?.Name}, Type={property?.PropertyType?.FullName}");
                        ppExpr = new AD7Expression(new MonoProperty(ThreadContext, property));
                        return(VSConstants.S_OK);
                    }
                }
            }
            catch (Exception ex)
            {
                pbstrError = "Error: " + ex.Message;
                pichError  = (uint)pbstrError.Length;
                return(VSConstants.S_FALSE);
            }

            pbstrError = "Unsupported Expression";
            pichError  = (uint)pbstrError.Length;
            return(VSConstants.S_FALSE);
        }
        public int ParseText(string pszCode, enum_PARSEFLAGS dwFlags, uint nRadix, out IDebugExpression2 ppExpr,
                             out string pbstrError, out uint pichError)
        {
            pbstrError = "";
            pichError  = 0;
            ppExpr     = null;
            string lookup = pszCode;


            LocalVariable result = ThreadContext.GetVisibleVariableByName(lookup);

            if (result != null)
            {
                ppExpr = new AD7Expression(new MonoProperty(ThreadContext, result));
                return(VSConstants.S_OK);
            }

            pbstrError = "Unsupported Expression";
            pichError  = (uint)pbstrError.Length;
            return(VSConstants.S_FALSE);
        }