diff --git a/CSharp/CSharpExpressionCompiler/CSharpExpressionCompiler.vsdconfigxml b/CSharp/CSharpExpressionCompiler/CSharpExpressionCompiler.vsdconfigxml index 303a27d..5d5dbe6 100644 --- a/CSharp/CSharpExpressionCompiler/CSharpExpressionCompiler.vsdconfigxml +++ b/CSharp/CSharpExpressionCompiler/CSharpExpressionCompiler.vsdconfigxml @@ -23,6 +23,7 @@ + diff --git a/CSharp/CSharpExpressionCompiler/Symbols/EELocalSymbol.cs b/CSharp/CSharpExpressionCompiler/Symbols/EELocalSymbol.cs index aea16ae..3089423 100644 --- a/CSharp/CSharpExpressionCompiler/Symbols/EELocalSymbol.cs +++ b/CSharp/CSharpExpressionCompiler/Symbols/EELocalSymbol.cs @@ -22,7 +22,6 @@ internal sealed class EELocalSymbol : EELocalSymbolBase private readonly bool _isCompilerGenerated; private readonly ImmutableArray _locations; private readonly string _nameOpt; - private readonly int _ordinal; // index in locals of containing block private readonly bool _isPinned; private readonly RefKind _refKind; private readonly bool _canScheduleToStack; @@ -62,7 +61,7 @@ public EELocalSymbol( _method = method; _locations = locations; _nameOpt = nameOpt; - _ordinal = ordinal; + Ordinal = ordinal; _declarationKind = declarationKind; _type = type; _refKind = refKind; @@ -74,11 +73,11 @@ public EELocalSymbol( internal override EELocalSymbolBase ToOtherMethod(MethodSymbol method, TypeMap typeMap) { var type = typeMap.SubstituteType(_type); - return new EELocalSymbol(method, _locations, _nameOpt, _ordinal, _declarationKind, type, _refKind, _isPinned, _isCompilerGenerated, _canScheduleToStack); + return new EELocalSymbol(method, _locations, _nameOpt, Ordinal, _declarationKind, type, _refKind, _isPinned, _isCompilerGenerated, _canScheduleToStack); } internal override LocalAndMethodKind LocalAndMethodKind => LocalAndMethodKind.Local; - internal override int Index => _ordinal; + internal override int Index => Ordinal; internal override LocalDeclarationKind DeclarationKind { @@ -90,10 +89,7 @@ internal override bool CanScheduleToStack get { return _canScheduleToStack; } } - internal int Ordinal - { - get { return _ordinal; } - } + internal int Ordinal { get; } public override string Name { diff --git a/CSharp/CSharpExpressionCompiler/Symbols/EEMethodSymbol.cs b/CSharp/CSharpExpressionCompiler/Symbols/EEMethodSymbol.cs index ecf8c44..86ac369 100644 --- a/CSharp/CSharpExpressionCompiler/Symbols/EEMethodSymbol.cs +++ b/CSharp/CSharpExpressionCompiler/Symbols/EEMethodSymbol.cs @@ -226,7 +226,7 @@ internal override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChang return false; } - internal override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false) + internal override bool IsMetadataVirtual(IsMetadataVirtualOption option = IsMetadataVirtualOption.None) { return false; } @@ -770,5 +770,7 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil builderArgument = null; return false; } + + internal override int? TryGetOverloadResolutionPriority() => null; } } diff --git a/CSharp/CSharpExpressionCompiler/Symbols/EENamedTypeSymbol.cs b/CSharp/CSharpExpressionCompiler/Symbols/EENamedTypeSymbol.cs index 48e4b54..c0a5873 100644 --- a/CSharp/CSharpExpressionCompiler/Symbols/EENamedTypeSymbol.cs +++ b/CSharp/CSharpExpressionCompiler/Symbols/EENamedTypeSymbol.cs @@ -23,7 +23,6 @@ internal sealed class EENamedTypeSymbol : NamedTypeSymbol private readonly NamedTypeSymbol _baseType; private readonly string _name; private readonly ImmutableArray _typeParameters; - private readonly ImmutableArray _methods; internal EENamedTypeSymbol( CompilerKind compiler, @@ -54,7 +53,7 @@ internal EENamedTypeSymbol( this.SourceTypeParameters = sourceTypeParameters; _typeParameters = getTypeParameters(currentFrame.ContainingType, this); VerifyTypeParameters(this, _typeParameters); - _methods = getMethods(currentFrame, this); + Methods = getMethods(currentFrame, this); } internal EENamedTypeSymbol( @@ -94,16 +93,13 @@ internal EENamedTypeSymbol( this.SubstitutedSourceType = typeMap.SubstituteNamedType(sourceType); TypeParameterChecker.Check(this.SubstitutedSourceType, _typeParameters); - _methods = getMethods(currentFrame, this); + Methods = getMethods(currentFrame, this); } protected override NamedTypeSymbol WithTupleDataCore(TupleExtraData newData) => throw ExceptionUtilities.Unreachable(); - internal ImmutableArray Methods - { - get { return _methods; } - } + internal ImmutableArray Methods { get; } internal override IEnumerable GetFieldsToEmit() { @@ -112,7 +108,7 @@ internal override IEnumerable GetFieldsToEmit() internal override IEnumerable GetMethodsToEmit() { - return _methods; + return Methods; } internal override ImmutableArray GetInterfacesToEmit() @@ -174,7 +170,7 @@ public override IEnumerable MemberNames public override ImmutableArray GetMembers() { - return _methods.Cast(); + return Methods.Cast(); } public override ImmutableArray GetMembers(string name) diff --git a/CSharp/CSharpExpressionCompiler/Symbols/PlaceholderMethodSymbol.cs b/CSharp/CSharpExpressionCompiler/Symbols/PlaceholderMethodSymbol.cs index 22705f3..5c7990c 100644 --- a/CSharp/CSharpExpressionCompiler/Symbols/PlaceholderMethodSymbol.cs +++ b/CSharp/CSharpExpressionCompiler/Symbols/PlaceholderMethodSymbol.cs @@ -265,7 +265,7 @@ internal override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChang return false; } - internal override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false) + internal override bool IsMetadataVirtual(IsMetadataVirtualOption option = IsMetadataVirtualOption.None) { return false; } @@ -284,6 +284,8 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil builderArgument = null; return false; } + + internal override int? TryGetOverloadResolutionPriority() => null; } internal partial class PlaceholderMethodSymbol : diff --git a/CSharp/CSharpExpressionCompiler/Symbols/SynthesizedContextMethodSymbol.cs b/CSharp/CSharpExpressionCompiler/Symbols/SynthesizedContextMethodSymbol.cs index caa1c51..14cfe90 100644 --- a/CSharp/CSharpExpressionCompiler/Symbols/SynthesizedContextMethodSymbol.cs +++ b/CSharp/CSharpExpressionCompiler/Symbols/SynthesizedContextMethodSymbol.cs @@ -214,7 +214,7 @@ internal override bool IsMetadataNewSlot(bool ignoreInterfaceImplementationChang throw ExceptionUtilities.Unreachable(); } - internal override bool IsMetadataVirtual(bool ignoreInterfaceImplementationChanges = false) + internal override bool IsMetadataVirtual(IsMetadataVirtualOption option = IsMetadataVirtualOption.None) { throw ExceptionUtilities.Unreachable(); } diff --git a/Core/ExpressionCompiler/ExpressionCompiler.cs b/Core/ExpressionCompiler/ExpressionCompiler.cs index a8da0ec..8eed070 100644 --- a/Core/ExpressionCompiler/ExpressionCompiler.cs +++ b/Core/ExpressionCompiler/ExpressionCompiler.cs @@ -8,7 +8,6 @@ using System.Diagnostics; using System.IO; using System.Threading; -using Microsoft.CodeAnalysis.Collections; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.VisualStudio.Debugger; using Microsoft.VisualStudio.Debugger.CallStack; @@ -23,6 +22,7 @@ namespace Microsoft.CodeAnalysis.ExpressionEvaluator public abstract class ExpressionCompiler : IDkmClrExpressionCompiler, IDkmClrExpressionCompilerCallback, + IDkmMetaDataPointerInvalidatedNotification, IDkmModuleModifiedNotification, IDkmModuleInstanceUnloadNotification, IDkmLanguageFrameDecoder, @@ -247,6 +247,11 @@ internal static bool ShouldTryAgainWithMoreMetadataBlocks(DkmUtilities.GetMetada return false; } + void IDkmMetaDataPointerInvalidatedNotification.OnMetaDataPointerInvalidated(DkmClrModuleInstance moduleInstance) + { + RemoveDataItemIfNecessary(moduleInstance); + } + void IDkmModuleModifiedNotification.OnModuleModified(DkmModuleInstance moduleInstance) { RemoveDataItemIfNecessary(moduleInstance); diff --git a/Core/ExpressionCompiler/ExpressionEvaluatorFatalError.cs b/Core/ExpressionCompiler/ExpressionEvaluatorFatalError.cs index 394b6aa..ede4341 100644 --- a/Core/ExpressionCompiler/ExpressionEvaluatorFatalError.cs +++ b/Core/ExpressionCompiler/ExpressionEvaluatorFatalError.cs @@ -76,6 +76,7 @@ internal static bool CrashIfFailFastEnabled(Exception exception) { switch (dkmException.Code) { + case DkmExceptionCode.E_METADATA_UPDATE_DEADLOCK: // Metadata was updated while EE had component lock case DkmExceptionCode.E_PROCESS_DESTROYED: case DkmExceptionCode.E_XAPI_REMOTE_CLOSED: case DkmExceptionCode.E_XAPI_REMOTE_DISCONNECTED: diff --git a/VisualBasic/BasicExpressionCompiler/BasicExpressionCompiler.vsdconfigxml b/VisualBasic/BasicExpressionCompiler/BasicExpressionCompiler.vsdconfigxml index 6d8ace1..823a20f 100644 --- a/VisualBasic/BasicExpressionCompiler/BasicExpressionCompiler.vsdconfigxml +++ b/VisualBasic/BasicExpressionCompiler/BasicExpressionCompiler.vsdconfigxml @@ -25,6 +25,7 @@ +