public void TryUpdateStackFrameInfo() { if (needsStackFrameInfoUpdate || ctxt == null) { string file; ulong eip; CodeLocation loc; BacktraceHelper.GetCurrentStackFrameInfo (out file, out eip, out loc); currentStackFrameSource = file; currentInstruction = eip; currentSourceLocation = loc; if (needsStackFrameInfoUpdate = string.IsNullOrWhiteSpace(file)) return; needsStackFrameInfoUpdate |= loc.IsEmpty; var mod = GlobalParseCache.GetModule(file); if (ctxt == null) { var doc = Ide.IdeApp.Workbench.GetDocument(file); if (doc != null) ctxt = ResolutionContext.Create(MonoDevelop.D.Resolver.DResolverWrapper.CreateEditorData(doc), false); SymbolProvider = new DebugSymbolValueProvider(this, ctxt); if (doc == null) return; } if (SymbolProvider.ResolutionContext == null) SymbolProvider = new DebugSymbolValueProvider(this, ctxt); SymbolProvider.ResetCache(); if (mod == null) { if (ctxt.CurrentContext != null) ctxt.CurrentContext.Set(loc); } else { var bn = D_Parser.Resolver.TypeResolution.DResolver.SearchBlockAt (mod, loc); if (ctxt.CurrentContext == null) ctxt.Push(bn, loc); else ctxt.CurrentContext.Set(bn, loc); } } }
public void TryUpdateStackFrameInfo() { if (needsStackFrameInfoUpdate || ctxt == null) { string file; ulong eip; CodeLocation loc; BacktraceHelper.GetCurrentStackFrameInfo(out file, out eip, out loc); currentStackFrameSource = file; currentInstruction = eip; currentSourceLocation = loc; if (needsStackFrameInfoUpdate = string.IsNullOrWhiteSpace(file)) { return; } needsStackFrameInfoUpdate |= loc.IsEmpty; var mod = GlobalParseCache.GetModule(file); if (ctxt == null) { var doc = Ide.IdeApp.Workbench.GetDocument(file); if (doc != null) { ctxt = ResolutionContext.Create(MonoDevelop.D.Resolver.DResolverWrapper.CreateEditorData(doc), false); } SymbolProvider = new DebugSymbolValueProvider(this, ctxt); if (doc == null) { return; } } if (SymbolProvider.ResolutionContext == null) { SymbolProvider = new DebugSymbolValueProvider(this, ctxt); } SymbolProvider.ResetCache(); if (mod == null) { if (ctxt.CurrentContext != null) { ctxt.CurrentContext.Set(loc); } } else { var bn = D_Parser.Resolver.TypeResolution.DResolver.SearchBlockAt(mod, loc); if (ctxt.CurrentContext == null) { ctxt.Push(bn, loc); } else { ctxt.CurrentContext.Set(bn, loc); } } } }