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); }