示例#1
0
            public override string VisualizeSymbol(uint token)
            {
                Cci.IReference reference = decoder.GetSymbolForILToken(MetadataTokens.Handle((int)token));
                ISymbol        symbol    = reference as ISymbol;

                return(string.Format("\"{0}\"", symbol == null ? (object)reference : symbol.ToDisplayString(SymbolDisplayFormat.ILVisualizationFormat)));
            }
示例#2
0
        public static void VisitReference(Cci.IReference reference, EmitContext context)
        {
            var typeReference = reference as Cci.ITypeReference;

            if (typeReference != null)
            {
                VisitTypeReference(typeReference, context);
                return;
            }

            var methodReference = reference as Cci.IMethodReference;

            if (methodReference != null)
            {
                VisitMethodReference(methodReference, context);
                return;
            }

            var fieldReference = reference as Cci.IFieldReference;

            if (fieldReference != null)
            {
                VisitFieldReference(fieldReference, context);
                return;
            }
        }
示例#3
0
        public uint GetFakeSymbolTokenForIL(Cci.IReference symbol, SyntaxNode syntaxNode, DiagnosticBag diagnostics)
        {
            uint token = _referencesInILMap.GetOrAddTokenFor(symbol, out bool added);

            if (added)
            {
                ReferenceDependencyWalker.VisitReference(symbol, new EmitContext(this, syntaxNode, diagnostics));
            }
            return(token);
        }
示例#4
0
        internal void EmitToken(Cci.IReference value, SyntaxNode syntaxNode, DiagnosticBag diagnostics, bool encodeAsRawToken = false)
        {
            uint token = module?.GetFakeSymbolTokenForIL(value, syntaxNode, diagnostics) ?? 0xFFFF;

            // Setting the high bit indicates that the token value is to be interpreted literally rather than as a handle.
            if (encodeAsRawToken)
            {
                token |= Cci.MetadataWriter.LiteralMethodDefinitionToken;
            }
            this.GetCurrentWriter().WriteUInt32(token);
        }
示例#5
0
        public uint GetFakeSymbolTokenForIL(Cci.IReference symbol, SyntaxNode syntaxNode, DiagnosticBag diagnostics)
        {
            bool added;
            uint token = _referencesInILMap.GetOrAddTokenFor(symbol, out added);

            if (added)
            {
                ReferenceDependencyWalker.VisitReference(symbol, new EmitContext(this, syntaxNode, diagnostics, metadataOnly: false, includePrivateMembers: true));
            }
            return(token);
        }
示例#6
0
 public override string VisualizeSymbol(uint token, OperandType operandType)
 {
     Cci.IReference reference = _decoder.GetSymbolForILToken(MetadataTokens.EntityHandle((int)token));
     return(string.Format("\"{0}\"", (reference is ISymbol symbol) ? symbol.ToDisplayString(SymbolDisplayFormat.ILVisualizationFormat) : (object)reference));
 }