Esempio n. 1
0
        bool GoTo(DotNetMethodBodyReference bodyRef, ReadOnlyCollection <object> options)
        {
            bool newTab = options.Any(a => StringComparer.Ordinal.Equals(PredefinedReferenceNavigatorOptions.NewTab, a));
            var  module = GetModule(bodyRef.Module, options);

            if (module == null)
            {
                return(false);
            }

            var method = module.ResolveToken(bodyRef.Token) as MethodDef;

            if (method == null)
            {
                return(false);
            }

            uint offset = bodyRef.Offset;

            if (offset == DotNetMethodBodyReference.PROLOG)
            {
                offset = PROLOG;
            }
            else if (offset == DotNetMethodBodyReference.EPILOG)
            {
                offset = EPILOG;
            }

            var tab = documentTabService.GetOrCreateActiveTab();

            GoToLocation(tab, method, new ModuleTokenId(bodyRef.Module, bodyRef.Token), offset);
            return(true);
        }
Esempio n. 2
0
        public override void Convert(ref object reference)
        {
            switch (reference)
            {
            case DbgDotNetNativeCodeLocationImpl nativeLoc:
                switch (nativeLoc.ILOffsetMapping)
                {
                case DbgILOffsetMapping.Exact:
                case DbgILOffsetMapping.Approximate:
                    reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, nativeLoc.Offset);
                    break;

                case DbgILOffsetMapping.Prolog:
                    reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, DotNetMethodBodyReference.PROLOG);
                    break;

                case DbgILOffsetMapping.Epilog:
                    reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, DotNetMethodBodyReference.EPILOG);
                    break;

                case DbgILOffsetMapping.Unknown:
                case DbgILOffsetMapping.NoInfo:
                case DbgILOffsetMapping.UnmappedAddress:
                default:
                    // The IL offset isn't known so use a method reference
                    reference = new DotNetTokenReference(nativeLoc.Module, nativeLoc.Token);
                    break;
                }
                break;
            }
        }
Esempio n. 3
0
 public override void Convert(ref object reference)
 {
     switch (reference)
     {
     case DbgDotNetCodeLocation loc:
         reference = new DotNetMethodBodyReference(loc.Module, loc.Token, loc.Offset);
         break;
     }
 }
        public override void Convert(ref object?reference)
        {
            switch (reference)
            {
            case DotNetMethodBodyBookmarkLocation bodyLoc:
                reference = new DotNetMethodBodyReference(bodyLoc.Module, bodyLoc.Token, bodyLoc.Offset);
                break;

            case DotNetTokenBookmarkLocation tokenLoc:
                reference = new DotNetTokenReference(tokenLoc.Module, tokenLoc.Token);
                break;
            }
        }
Esempio n. 5
0
        public override void Convert(ref object reference)
        {
            switch (reference)
            {
            case DbgDotNetCodeLocationImpl locImpl:
                if ((locImpl.Options & DbgDotNetCodeLocationOptions.InvalidOffset) != 0)
                {
                    reference = new DotNetTokenReference(locImpl.Module, locImpl.Token);
                }
                else
                {
                    reference = new DotNetMethodBodyReference(locImpl.Module, locImpl.Token, locImpl.Offset);
                }
                break;

            case DbgDotNetCodeLocation loc:
                reference = new DotNetMethodBodyReference(loc.Module, loc.Token, loc.Offset);
                break;
            }
        }