示例#1
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(DeclaringType);
     trapFile.Write('.');
     trapFile.Write(Name);
     trapFile.Write(";cil-field");
 }
示例#2
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(method);
     trapFile.Write('_');
     trapFile.Write(index);
     trapFile.Write(";cil-local");
 }
示例#3
0
        private static void BuildOrWriteId(this ISymbol?symbol, Context cx, EscapingTextWriter trapFile, ISymbol symbolBeingDefined, bool constructUnderlyingTupleType)
        {
            if (symbol is null)
            {
                cx.ModelError(symbolBeingDefined, "Missing symbol. Couldn't build some part of the ID.");
                return;
            }

            // We need to keep track of the symbol being defined in order to avoid cyclic labels.
            // For example, in
            //
            // ```csharp
            // class C<T> : IEnumerable<T> { }
            // ```
            //
            // when we generate the label for ``C`1``, the base class `IEnumerable<T>` has `T` as a type
            // argument, which will be qualified with `__self__` instead of the label we are defining.
            // In effect, the label will (simplified) look like
            //
            // ```
            // #123 = @"C`1 : IEnumerable<__self___T>"
            // ```
            if (SymbolEqualityComparer.Default.Equals(symbol, symbolBeingDefined))
            {
                trapFile.Write("__self__");
            }
            else if (symbol is ITypeSymbol type && type.IdDependsOn(cx, symbolBeingDefined))
            {
                type.BuildTypeId(cx, trapFile, symbolBeingDefined, constructUnderlyingTupleType);
            }
示例#4
0
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     unmodifiedType.WriteId(trapFile, gc);
     trapFile.Write(isRequired ? " modreq(" : " modopt(");
     modifier.WriteId(trapFile, gc);
     trapFile.Write(")");
 }
示例#5
0
        protected static void AddParametersToId(Context cx, EscapingTextWriter trapFile, IMethodSymbol method)
        {
            trapFile.Write('(');
            var index = 0;

            var @params = method.Parameters;

            foreach (var param in @params)
            {
                trapFile.WriteSeparator(",", ref index);
                param.Type.BuildOrWriteId(cx, trapFile, method);
                trapFile.Write(" ");
                trapFile.Write(param.Name);
                switch (param.RefKind)
                {
                case RefKind.Out:
                    trapFile.Write(" out");
                    break;

                case RefKind.Ref:
                    trapFile.Write(" ref");
                    break;
                }
            }

            if (method.IsVararg)
            {
                trapFile.WriteSeparator(",", ref index);
                trapFile.Write("__arglist");
            }

            trapFile.Write(')');
        }
示例#6
0
 public static void AddExplicitInterfaceQualifierToId(Context cx, EscapingTextWriter trapFile, IEnumerable <ISymbol> explicitInterfaceImplementations)
 {
     if (explicitInterfaceImplementations.Any())
     {
         trapFile.AppendList(",", explicitInterfaceImplementations.Select(impl => cx.CreateEntity(impl.ContainingType)));
     }
 }
示例#7
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     parent.WriteId(trapFile);
     trapFile.Write('.');
     trapFile.Write(Context.ShortName(ed.Name));
     trapFile.Write(";cil-event");
 }
示例#8
0
        private static void WritePostfix(Method m, EscapingTextWriter trapFile)
        {
            switch (m.Symbol.MethodKind)
            {
            case MethodKind.PropertyGet:
                trapFile.Write(";getter");
                break;

            case MethodKind.PropertySet:
                trapFile.Write(";setter");
                break;

            case MethodKind.EventAdd:
                trapFile.Write(";adder");
                break;

            case MethodKind.EventRaise:
                trapFile.Write(";raiser");
                break;

            case MethodKind.EventRemove:
                trapFile.Write(";remover");
                break;

            default:
                trapFile.Write(";method");
                break;
            }
        }
示例#9
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);
        }
示例#10
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(parameterizable);
     trapFile.Write('_');
     trapFile.Write(index);
     trapFile.Write(";cil-parameter");
 }
示例#11
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.Write(FullName);
     trapFile.Write("#file:///");
     trapFile.Write(Context.AssemblyPath.Replace("\\", "/"));
     trapFile.Write(";assembly");
 }
示例#12
0
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     FunctionPointerType.WriteName(
         trapFile.Write,
         t => t.WriteId(trapFile, gc),
         signature
         );
 }
示例#13
0
 public override void WriteId(EscapingTextWriter trapFile, bool inContext)
 {
     Unmodified.WriteId(trapFile, inContext);
     trapFile.Write(IsRequired ? " modreq" : " modopt");
     trapFile.Write("(");
     Modifier.WriteId(trapFile, inContext);
     trapFile.Write(")");
 }
示例#14
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");
 }
示例#15
0
 public override void WriteId(EscapingTextWriter trapFile, bool inContext)
 {
     WriteName(
         trapFile.Write,
         t => t.WriteId(trapFile, inContext),
         signature
         );
 }
示例#16
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(ContainingType !);
     trapFile.Write('.');
     Method.AddExplicitInterfaceQualifierToId(Context, trapFile, Symbol.ExplicitInterfaceImplementations);
     trapFile.Write(Symbol.Name);
     trapFile.Write(";event");
 }
示例#17
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);
 }
示例#18
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");
 }
示例#19
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.WriteSubId(Type);
     trapFile.Write(" ");
     trapFile.WriteSubId(ContainingType !);
     trapFile.Write('.');
     trapFile.Write(Symbol.Name);
     trapFile.Write(";field");
 }
示例#20
0
 public override void WriteId(EscapingTextWriter trapFile, bool inContext)
 {
     if (!(inContext && method == gc))
     {
         trapFile.WriteSubId(method);
     }
     trapFile.Write("!");
     trapFile.Write(index);
 }
示例#21
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");
 }
示例#22
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     if (ParentNamespace is not null && !ParentNamespace.IsGlobalNamespace)
     {
         ParentNamespace.WriteId(trapFile);
         trapFile.Write('.');
     }
     trapFile.Write(Name);
     trapFile.Write(";namespace");
 }
示例#23
0
 public void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.Write(Annotation);
     trapFile.Write('(');
     foreach (var s in NullableParameters)
     {
         s.WriteId(trapFile);
     }
     trapFile.Write(')');
 }
示例#24
0
        /// <summary>
        /// Returns the friendly qualified name of types, such as
        /// ``"System.Collection.Generic.List`1"`` or
        /// ``"System.Collection.Generic.List<System.Int32>"``.
        ///
        /// Note that method/type generic type parameters never show up in the returned name.
        /// </summary>
        public string GetQualifiedName()
        {
            using var writer = new EscapingTextWriter();
            WriteId(writer, false);
            var name = writer.ToString();

            return(name.Substring(name.IndexOf(AssemblyTypeNameSeparator) + 2).
                   Replace(";namespace", "").
                   Replace(";cil-type", ""));
        }
示例#25
0
 public override void WriteId(EscapingTextWriter trapFile, bool inContext)
 {
     elementType.WriteId(trapFile, inContext);
     trapFile.Write('[');
     for (var i = 1; i < rank; ++i)
     {
         trapFile.Write(',');
     }
     trapFile.Write(']');
 }
示例#26
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     trapFile.Write(assembly.ToString());
     if (!(assemblyPath is null))
     {
         trapFile.Write("#file:///");
         trapFile.Write(assemblyPath.Replace("\\", "/"));
     }
     trapFile.Write(";assembly");
 }
示例#27
0
 public void WriteId(EscapingTextWriter trapFile, IGenericContext gc)
 {
     elementType.WriteId(trapFile, gc);
     trapFile.Write('[');
     for (var i = 1; i < shape.Rank; ++i)
     {
         trapFile.Write(',');
     }
     trapFile.Write(']');
 }
示例#28
0
 public sealed override void WriteQuotedId(EscapingTextWriter trapFile)
 {
     if (ReportingLocation?.IsInSource == true)
     {
         base.WriteQuotedId(trapFile);
     }
     else
     {
         trapFile.Write('*');
     }
 }
示例#29
0
 public override void WriteId(EscapingTextWriter trapFile)
 {
     if (ReportingLocation?.IsInSource == true)
     {
         trapFile.WriteSubId(Location);
         trapFile.Write(";attribute");
     }
     else
     {
         trapFile.Write('*');
     }
 }
示例#30
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('>');
        }