示例#1
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(parameterizable);
     trapFile.Write('_');
     trapFile.Write(index);
     trapFile.Write(";cil-parameter");
 }
示例#2
0
        public override void WriteId(EscapingTextWriter trapFile)
        {
            string  kind;
            IEntity containingEntity;

            switch (Symbol.TypeParameterKind)
            {
            case TypeParameterKind.Method:
                kind             = "methodtypeparameter";
                containingEntity = Method.Create(Context, (IMethodSymbol)Symbol.ContainingSymbol);
                break;

            case TypeParameterKind.Type:
                kind             = "typeparameter";
                containingEntity = Create(Context, Symbol.ContainingType);
                break;

            default:
                throw new InternalError(Symbol, $"Unhandled type parameter kind {Symbol.TypeParameterKind}");
            }
            trapFile.WriteSubId(containingEntity);
            trapFile.Write('_');
            trapFile.Write(Symbol.Ordinal);
            trapFile.Write(';');
            trapFile.Write(kind);
        }
示例#3
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(method);
     trapFile.Write('_');
     trapFile.Write(index);
     trapFile.Write(";cil-local");
 }
示例#4
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(DeclaringType);
     trapFile.Write('.');
     trapFile.Write(Name);
     trapFile.Write(";cil-field");
 }
示例#5
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Context.CreateLocation(ReportingLocation));
     trapFile.Write(Symbol.IsActive);
     trapFile.Write(',');
     trapFile.Write(Symbol.BranchTaken);
     trapFile.Write(";trivia");
 }
示例#6
0
        /// <summary>
        ///  Factored out to share logic between `Method` and `UserOperator`.
        /// </summary>
        private static void BuildMethodId(Method m, EscapingTextWriter trapFile)
        {
            if (!SymbolEqualityComparer.Default.Equals(m.Symbol, m.Symbol.OriginalDefinition))
            {
                if (!SymbolEqualityComparer.Default.Equals(m.Symbol, m.ConstructedFromSymbol))
                {
                    trapFile.WriteSubId(Create(m.Context, m.ConstructedFromSymbol));
                    trapFile.Write('<');
                    // Encode the nullability of the type arguments in the label.
                    // Type arguments with different nullability can result in
                    // a constructed method with different nullability of its parameters and return type,
                    // so we need to create a distinct database entity for it.
                    trapFile.BuildList(",", m.Symbol.GetAnnotatedTypeArguments(), ta => { ta.Symbol.BuildOrWriteId(m.Context, trapFile, m.Symbol); trapFile.Write((int)ta.Nullability); });
                    trapFile.Write('>');
                }
                else
                {
                    trapFile.WriteSubId(m.ContainingType !);
                    trapFile.Write(".");
                    trapFile.WriteSubId(m.OriginalDefinition);
                }

                WritePostfix(m, trapFile);
                return;
            }

            m.Symbol.ReturnType.BuildOrWriteId(m.Context, trapFile, m.Symbol);
            trapFile.Write(" ");

            trapFile.WriteSubId(m.ContainingType !);

            AddExplicitInterfaceQualifierToId(m.Context, trapFile, m.Symbol.ExplicitInterfaceImplementations);

            trapFile.Write(".");
            trapFile.Write(m.Symbol.Name);

            if (m.Symbol.IsGenericMethod)
            {
                trapFile.Write('`');
                trapFile.Write(m.Symbol.TypeParameters.Length);
            }

            AddParametersToId(m.Context, trapFile, m.Symbol);
            WritePostfix(m, trapFile);
        }
示例#7
0
 public override void WriteId(EscapingTextWriter trapFile, bool inContext)
 {
     if (!(inContext && method == gc))
     {
         trapFile.WriteSubId(method);
     }
     trapFile.Write("!");
     trapFile.Write(index);
 }
示例#8
0
 public void WriteId(EscapingTextWriter trapFile, IGenericContext outerGc)
 {
     if (!ReferenceEquals(innerGc, outerGc) && innerGc is Method method)
     {
         trapFile.WriteSubId(method);
     }
     trapFile.Write("M!");
     trapFile.Write(index);
 }
示例#9
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Type);
     trapFile.Write(" ");
     trapFile.WriteSubId(ContainingType !);
     trapFile.Write('.');
     trapFile.Write(Symbol.Name);
     trapFile.Write(";field");
 }
示例#10
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(ContainingType !);
     trapFile.Write('.');
     trapFile.Write(Symbol.MetadataName);
     trapFile.Write('(');
     trapFile.BuildList(",", Symbol.Parameters, p => trapFile.WriteSubId(Type.Create(Context, p.Type)));
     trapFile.Write(");indexer");
 }
示例#11
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     if (!Symbol.IsGlobalNamespace)
     {
         trapFile.WriteSubId(Create(Context, Symbol.ContainingNamespace));
         trapFile.Write('.');
         trapFile.Write(Symbol.Name);
     }
     trapFile.Write(";namespace");
 }
示例#12
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Type);
     trapFile.Write(" ");
     trapFile.WriteSubId(ContainingType !);
     trapFile.Write('.');
     Method.AddExplicitInterfaceQualifierToId(Context, trapFile, Symbol.ExplicitInterfaceImplementations);
     trapFile.Write(Symbol.Name);
     trapFile.Write(";property");
 }
示例#13
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     if (ReportingLocation?.IsInSource == true)
     {
         trapFile.WriteSubId(Location);
         trapFile.Write(";attribute");
     }
     else
     {
         trapFile.Write('*');
     }
 }
示例#14
0
        public override void WriteId(EscapingTextWriter trapFile)
        {
            unboundMethod.WriteId(trapFile);
            trapFile.Write('<');
            var index = 0;

            foreach (var param in typeParams)
            {
                trapFile.WriteSeparator(",", ref index);
                trapFile.WriteSubId(param);
            }
            trapFile.Write('>');
        }
示例#15
0
        public override void WriteId(EscapingTextWriter trapFile)
        {
            if (Parent is null)
            {
                Parent = Method.Create(Context, Symbol.ContainingSymbol as IMethodSymbol);
            }

            if (Parent is null)
            {
                throw new InternalError(Symbol, "Couldn't get parent of symbol.");
            }

            trapFile.WriteSubId(Parent);
            trapFile.Write('_');
            trapFile.Write(Ordinal);
            trapFile.Write(";parameter");
        }
示例#16
0
        public override void WriteId(EscapingTextWriter trapFile)
        {
            trapFile.WriteSubId(type);
            trapFile.Write('.');
            trapFile.Write(Context.GetString(pd.Name));
            trapFile.Write("(");
            var index     = 0;
            var signature = pd.DecodeSignature(new SignatureDecoder(), gc);

            foreach (var param in signature.ParameterTypes)
            {
                trapFile.WriteSeparator(",", ref index);
                param.WriteId(trapFile, gc);
            }
            trapFile.Write(")");
            trapFile.Write(";cil-property");
        }
示例#17
0
        public override void WriteId(EscapingTextWriter trapFile)
        {
            if (!SymbolEqualityComparer.Default.Equals(Symbol, Symbol.OriginalDefinition))
            {
                trapFile.WriteSubId(ContainingType !);
                trapFile.Write(".");
                trapFile.WriteSubId(OriginalDefinition);
                trapFile.Write(";constructor");
                return;
            }

            if (Symbol.IsStatic)
            {
                trapFile.Write("static");
            }
            trapFile.WriteSubId(ContainingType !);

            AddParametersToId(Context, trapFile, Symbol);
            trapFile.Write(";constructor");
        }
示例#18
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Context.CreateLocation(ReportingLocation));
     trapFile.Write(";namespacedeclaration");
 }
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(parent);
     trapFile.Write(";typeparameterconstraints");
 }
示例#20
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(ElementType);
     Symbol.BuildArraySuffix(trapFile);
     trapFile.Write(";type");
 }
示例#21
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Context.CreateLocation(Symbol.Location));
     trapFile.Write(";commentblock");
 }
示例#22
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(PointedAtType);
     trapFile.Write("*;type");
 }
示例#23
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.Write("loc,");
     trapFile.WriteSubId(generatedFile);
     trapFile.Write(",0,0,0,0");
 }