public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(DeclaringType); trapFile.Write('.'); trapFile.Write(Name); trapFile.Write(";cil-field"); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(method); trapFile.Write('_'); trapFile.Write(index); trapFile.Write(";cil-local"); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.Write(FullName); trapFile.Write("#file:///"); trapFile.Write(Context.AssemblyPath.Replace("\\", "/")); trapFile.Write(";assembly"); }
public override void WriteId(EscapingTextWriter trapFile) { parent.WriteId(trapFile); trapFile.Write('.'); trapFile.Write(Context.ShortName(ed.Name)); trapFile.Write(";cil-event"); }
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); }
public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) { unmodifiedType.WriteId(trapFile, gc); trapFile.Write(isRequired ? " modreq(" : " modopt("); modifier.WriteId(trapFile, gc); trapFile.Write(")"); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(parameterizable); trapFile.Write('_'); trapFile.Write(index); trapFile.Write(";cil-parameter"); }
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(")"); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(Context.CreateLocation(ReportingLocation)); trapFile.Write(Symbol.IsActive); trapFile.Write(','); trapFile.Write(Symbol.BranchTaken); trapFile.Write(";trivia"); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(ContainingType !); trapFile.Write('.'); Method.AddExplicitInterfaceQualifierToId(Context, trapFile, Symbol.ExplicitInterfaceImplementations); trapFile.Write(Symbol.Name); trapFile.Write(";event"); }
public override void WriteId(EscapingTextWriter trapFile, bool inContext) { if (!(inContext && method == gc)) { trapFile.WriteSubId(method); } trapFile.Write("!"); trapFile.Write(index); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(Type); trapFile.Write(" "); trapFile.WriteSubId(ContainingType !); trapFile.Write('.'); trapFile.Write(Symbol.Name); trapFile.Write(";field"); }
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"); }
public void WriteId(EscapingTextWriter trapFile, IGenericContext outerGc) { if (!ReferenceEquals(innerGc, outerGc) && innerGc is Method method) { trapFile.WriteSubId(method); } trapFile.Write("M!"); trapFile.Write(index); }
public override void WriteId(EscapingTextWriter trapFile) { if (!Symbol.IsGlobalNamespace) { trapFile.WriteSubId(Create(Context, Symbol.ContainingNamespace)); trapFile.Write('.'); trapFile.Write(Symbol.Name); } trapFile.Write(";namespace"); }
public override void WriteId(EscapingTextWriter trapFile) { if (ParentNamespace is not null && !ParentNamespace.IsGlobalNamespace) { ParentNamespace.WriteId(trapFile); trapFile.Write('.'); } trapFile.Write(Name); trapFile.Write(";namespace"); }
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(']'); }
public override void WriteId(EscapingTextWriter trapFile) { trapFile.Write(assembly.ToString()); if (!(assemblyPath is null)) { trapFile.Write("#file:///"); trapFile.Write(assemblyPath.Replace("\\", "/")); } trapFile.Write(";assembly"); }
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(']'); }
public void WriteId(EscapingTextWriter trapFile) { trapFile.Write(Annotation); trapFile.Write('('); foreach (var s in NullableParameters) { s.WriteId(trapFile); } trapFile.Write(')'); }
public override void WriteId(EscapingTextWriter trapFile) { if (ReportingLocation?.IsInSource == true) { trapFile.WriteSubId(Location); trapFile.Write(";attribute"); } else { trapFile.Write('*'); } }
public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) { genericType.WriteId(trapFile, gc); trapFile.Write('<'); var index = 0; foreach (var arg in typeArguments) { trapFile.WriteSeparator(",", ref index); arg.WriteId(trapFile, gc); } trapFile.Write('>'); }
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('>'); }
/// <summary> /// Constructs a unique string for this type symbol. /// /// The supplied action <paramref name="subTermAction"/> is applied to the /// syntactic sub terms of this type (if any). /// </summary> /// <param name="cx">The extraction context.</param> /// <param name="trapFile">The trap builder used to store the result.</param> /// <param name="symbolBeingDefined">The outer symbol being defined (to avoid recursive ids).</param> /// <param name="constructUnderlyingTupleType">Whether to build a type ID for the underlying `System.ValueTuple` struct in the case of tuple types.</param> public static void BuildTypeId(this ITypeSymbol type, Context cx, EscapingTextWriter trapFile, ISymbol symbolBeingDefined, bool constructUnderlyingTupleType) { using (cx.StackGuard) { switch (type.TypeKind) { case TypeKind.Array: var array = (IArrayTypeSymbol)type; array.ElementType.BuildOrWriteId(cx, trapFile, symbolBeingDefined, constructUnderlyingTupleType: false); array.BuildArraySuffix(trapFile); return; case TypeKind.Class: case TypeKind.Interface: case TypeKind.Struct: case TypeKind.Enum: case TypeKind.Delegate: case TypeKind.Error: var named = (INamedTypeSymbol)type; named.BuildNamedTypeId(cx, trapFile, symbolBeingDefined, constructUnderlyingTupleType); return; case TypeKind.Pointer: var ptr = (IPointerTypeSymbol)type; ptr.PointedAtType.BuildOrWriteId(cx, trapFile, symbolBeingDefined, constructUnderlyingTupleType: false); trapFile.Write('*'); return; case TypeKind.TypeParameter: var tp = (ITypeParameterSymbol)type; tp.ContainingSymbol.BuildOrWriteId(cx, trapFile, symbolBeingDefined, constructUnderlyingTupleType: false); trapFile.Write('_'); trapFile.Write(tp.Name); return; case TypeKind.Dynamic: trapFile.Write("dynamic"); return; case TypeKind.FunctionPointer: var funptr = (IFunctionPointerTypeSymbol)type; funptr.BuildFunctionPointerTypeId(cx, trapFile, symbolBeingDefined); return; default: throw new InternalError(type, $"Unhandled type kind '{type.TypeKind}'"); } } }
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); }
public override void WriteId(EscapingTextWriter trapFile) { file.WriteId(trapFile); trapFile.Write(','); trapFile.Write(location.StartLine); trapFile.Write(','); trapFile.Write(location.StartColumn); trapFile.Write(','); trapFile.Write(location.EndLine); trapFile.Write(','); trapFile.Write(location.EndColumn); trapFile.Write(";sourcelocation"); }
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"); }
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"); }
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(')'); }
public void WriteId(EscapingTextWriter trapFile, bool inContext) { if (type.IsPrimitiveType) { Type.WritePrimitiveTypeId(trapFile, type.Name); return; } var ct = type.ContainingType; if (ct is not null) { ct.WriteId(trapFile, inContext); trapFile.Write('.'); } else { type.WriteAssemblyPrefix(trapFile); var ns = type.ContainingNamespace !; if (!ns.IsGlobalNamespace) { ns.WriteId(trapFile); trapFile.Write('.'); } } trapFile.Write(type.Name); var thisTypeArguments = type.ThisTypeArguments; if (thisTypeArguments is not null && thisTypeArguments.Any()) { trapFile.Write('<'); var index = 0; foreach (var t in thisTypeArguments) { trapFile.WriteSeparator(",", ref index); t.WriteId(trapFile); } trapFile.Write('>'); }