/// <summary> /// Create a context for evaluating expressions at a type scope. /// </summary> /// <param name="previous">Previous context, if any, for possible re-use.</param> /// <param name="metadataBlocks">Module metadata</param> /// <param name="moduleVersionId">Module containing type</param> /// <param name="typeToken">Type metadata token</param> /// <returns>Evaluation context</returns> /// <remarks> /// No locals since locals are associated with methods, not types. /// </remarks> internal static EvaluationContext CreateTypeContext( CSharpMetadataContext previous, ImmutableArray <MetadataBlock> metadataBlocks, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); // Re-use the previous compilation if possible. var compilation = metadataBlocks.HaveNotChanged(previous) ? previous.Compilation : metadataBlocks.ToCompilation(); MetadataDecoder metadataDecoder; var currentType = compilation.GetType(moduleVersionId, typeToken, out metadataDecoder); Debug.Assert((object)currentType != null); Debug.Assert(metadataDecoder != null); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return(new EvaluationContext( metadataBlocks, null, compilation, metadataDecoder, currentFrame, default(ImmutableArray <LocalSymbol>), ImmutableSortedSet <int> .Empty, default(MethodDebugInfo))); }
/// <summary> /// Create a context for evaluating expressions at a type scope. /// </summary> /// <param name="compilation">Compilation.</param> /// <param name="moduleVersionId">Module containing type</param> /// <param name="typeToken">Type metadata token</param> /// <returns>Evaluation context</returns> /// <remarks> /// No locals since locals are associated with methods, not types. /// </remarks> internal static EvaluationContext CreateTypeContext( CSharpCompilation compilation, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); var currentType = compilation.GetType(moduleVersionId, typeToken); RoslynDebug.Assert(currentType is object); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return(new EvaluationContext( null, compilation, currentFrame, currentSourceMethod: null, locals: default,
internal static EvaluationContext CreateTypeContext( CSharpCompilation compilation, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); var currentType = compilation.GetType(moduleVersionId, typeToken); Debug.Assert((object)currentType != null); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return(new EvaluationContext( null, compilation, currentFrame, default(ImmutableArray <LocalSymbol>), ImmutableSortedSet <int> .Empty, MethodDebugInfo <TypeSymbol, LocalSymbol> .None)); }
internal static EvaluationContext CreateTypeContext( CSharpCompilation compilation, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); MetadataDecoder metadataDecoder; var currentType = compilation.GetType(moduleVersionId, typeToken, out metadataDecoder); Debug.Assert((object)currentType != null); Debug.Assert(metadataDecoder != null); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return(new EvaluationContext( null, compilation, metadataDecoder, currentFrame, default(ImmutableArray <LocalSymbol>), InScopeHoistedLocals.Empty, default(MethodDebugInfo))); }
internal static EvaluationContext CreateTypeContext( CSharpCompilation compilation, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); MetadataDecoder metadataDecoder; var currentType = compilation.GetType(moduleVersionId, typeToken, out metadataDecoder); Debug.Assert((object)currentType != null); Debug.Assert(metadataDecoder != null); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return new EvaluationContext( null, compilation, metadataDecoder, currentFrame, default(ImmutableArray<LocalSymbol>), InScopeHoistedLocals.Empty, default(MethodDebugInfo)); }
/// <summary> /// Create a context for evaluating expressions at a type scope. /// </summary> /// <param name="previous">Previous context, if any, for possible re-use.</param> /// <param name="metadataBlocks">Module metadata</param> /// <param name="moduleVersionId">Module containing type</param> /// <param name="typeToken">Type metadata token</param> /// <returns>Evaluation context</returns> /// <remarks> /// No locals since locals are associated with methods, not types. /// </remarks> internal static EvaluationContext CreateTypeContext( CSharpMetadataContext previous, ImmutableArray<MetadataBlock> metadataBlocks, Guid moduleVersionId, int typeToken) { Debug.Assert(MetadataTokens.Handle(typeToken).Kind == HandleKind.TypeDefinition); // Re-use the previous compilation if possible. var compilation = metadataBlocks.HaveNotChanged(previous) ? previous.Compilation : metadataBlocks.ToCompilation(); MetadataDecoder metadataDecoder; var currentType = compilation.GetType(moduleVersionId, typeToken, out metadataDecoder); Debug.Assert((object)currentType != null); Debug.Assert(metadataDecoder != null); var currentFrame = new SynthesizedContextMethodSymbol(currentType); return new EvaluationContext( metadataBlocks, null, compilation, metadataDecoder, currentFrame, default(ImmutableArray<LocalSymbol>), ImmutableSortedSet<int>.Empty, default(ImmutableArray<ImmutableArray<string>>), default(ImmutableArray<string>)); }