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 @@
+