public static ObjectPath GetPath(IDBacktraceSymbol s) { var l = new List <string>(); do { l.Insert(0, s.Name); }while (s.HasParent && (s = s.Parent) != null); return(new ObjectPath(l.ToArray())); }
public virtual ObjectValue CreateObjectValue(IDBacktraceSymbol s, EvaluationOptions evalOptions = null) { if (s == null) { return(null); } if (evalOptions == null) { evalOptions = EvaluationOptions.DefaultOptions; } TryUpdateStackFrameInfo(); return(CreateObjectValue(EvaluateSymbol(s), null, GetPath(s), evalOptions, s)); }
public AbstractType TryGetDType(IDBacktraceSymbol s) { if (!s.HasParent) { TryUpdateStackFrameInfo(); if (ctxt == null) { return(null); } return(AmbiguousType.Get(ExpressionTypeEvaluation.GetOverloads(new IdentifierExpression(s.Name), ctxt, null))); } return(null); }
/// <summary> /// In here, the main evaluation to primitives, strings, arrays, objects happens /// </summary> public ISymbolValue EvaluateSymbol(IDBacktraceSymbol s) { var t = s.DType ?? TryGetDType(s); if (t == null) { return(null); } try { return(t.Accept(new DebugSymbolTypeEvalVisitor(this, s))); } catch (NotImplementedException) { return(null); } }
ObjectValue CreateObjectValue(ISymbolValue v, IExpression originalExpression, ObjectPath pathOpt, EvaluationOptions evalOptions, IDBacktraceSymbol symbolOpt = null) { if (v != null) { try { return(v.Accept(new ObjectValueSynthVisitor(this) { evalOptions = evalOptions, OriginalExpression = originalExpression, Path = pathOpt })); } catch (NotImplementedException) { } } if (symbolOpt != null) { return(ObjectValue.CreatePrimitive(this, pathOpt, symbolOpt.TypeName, new Mono.Debugging.Backend.EvaluationResult(symbolOpt.Value), ObjectValueFlags.Variable)); } return(ObjectValue.CreateError(this, pathOpt, "", "Couldn't evaluate expression " + (originalExpression != null ? originalExpression.ToString() : ""), ObjectValueFlags.Error)); }
public AbstractType TryGetDType(IDBacktraceSymbol s) { return(null); }
public DebugSymbolTypeEvalVisitor(DLocalExamBacktrace b, IDBacktraceSymbol s) { this.Backtrace = b; this.Symbol = s; Is64Bit = (PointerSize = (uint)b.BacktraceHelper.PointerSize) == 8; }