/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/DeclarationTests.vb
857 строк
35 KB
Cyrus Najmabadi
Organize VB imports
27 июн 2025, 21:53
27 июн 2025, 21:53
e9c47fd
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System.Collections.Immutable Imports Microsoft.CodeAnalysis.CodeGen Imports Microsoft.CodeAnalysis.ExpressionEvaluator Imports Microsoft.CodeAnalysis.ExpressionEvaluator.UnitTests Imports Microsoft.CodeAnalysis.VisualBasic.UnitTests Imports Microsoft.VisualStudio.Debugger.Evaluation Imports Microsoft.VisualStudio.Debugger.Evaluation.ClrCompilation Imports Roslyn.Test.Utilities Imports Xunit Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests Public Class DeclarationTests Inherits ExpressionCompilerTestBase <Fact> Public Sub Declarations() Const source = "Class C Private Shared F As Object Shared Sub M(Of T)(x As Object) Dim y As Object If x Is Nothing Then Dim z As Object End If End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim resultProperties As ResultProperties = Nothing Dim errorMessage As String = Nothing Dim missingAssemblyIdentities As ImmutableArray(Of AssemblyIdentity) = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "z = $3", DkmEvaluationFlags.None, ImmutableArray.Create(ObjectIdAlias(3, GetType(Integer))), DebuggerDiagnosticFormatter.Instance, resultProperties, errorMessage, missingAssemblyIdentities, EnsureEnglishUICulture.PreferredOrNull, testData) Assert.Empty(missingAssemblyIdentities) Assert.Null(errorMessage) Assert.Equal(resultProperties.Flags, DkmClrCompilationResultFlags.PotentialSideEffect Or DkmClrCompilationResultFlags.ReadOnlyResult) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 62 (0x3e) .maxstack 4 .locals init (Object V_0, //y Boolean V_1, Object V_2, System.Guid V_3) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""z"" IL_000f: ldloca.s V_3 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.3 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""z"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""$3"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: unbox.any ""Integer"" IL_0037: box ""Integer"" IL_003c: stind.ref IL_003d: ret }") End Sub) End Sub <Fact> Public Sub References() Const source = "Class C Delegate Sub D() Friend F As Object Private Shared G As Object Shared Sub M(Of T)(x As Object) Dim y As Object End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim aliases = ImmutableArray.Create( VariableAlias("x", GetType(String)), VariableAlias("y", GetType(Integer)), VariableAlias("t", GetType(Object)), VariableAlias("d", "C"), VariableAlias("f", GetType(Integer))) Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "If(If(If(If(If(x, y), T), F), DirectCast(D, C).F), C.G)", DkmEvaluationFlags.TreatAsExpression, aliases, errorMessage, testData) Assert.Equal(testData.Methods.Count, 1) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 78 (0x4e) .maxstack 2 .locals init (Object V_0) //y IL_0000: ldarg.0 IL_0001: dup IL_0002: brtrue.s IL_0006 IL_0004: pop IL_0005: ldloc.0 IL_0006: dup IL_0007: brtrue.s IL_0014 IL_0009: pop IL_000a: ldstr ""t"" IL_000f: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0014: dup IL_0015: brtrue.s IL_002c IL_0017: pop IL_0018: ldstr ""f"" IL_001d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0022: unbox.any ""Integer"" IL_0027: box ""Integer"" IL_002c: dup IL_002d: brtrue.s IL_0044 IL_002f: pop IL_0030: ldstr ""d"" IL_0035: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_003a: castclass ""C"" IL_003f: ldfld ""C.F As Object"" IL_0044: dup IL_0045: brtrue.s IL_004d IL_0047: pop IL_0048: ldsfld ""C.G As Object"" IL_004d: ret } ") End Sub) End Sub <Fact> Public Sub BindingError_Initializer() Const source = "Class C Shared Sub M() End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "x = F()", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Equal(errorMessage, "error BC30451: 'F' is not declared. It may be inaccessible due to its protection level.") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1098750")> Public Sub ReferenceInSameDeclaration() Const source = "Module M Function F(s As String) As String Return s End Function Sub M(o As Object) End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "s = F(s)", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 62 (0x3e) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""s"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""s"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""s"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: call ""Function Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Object) As String"" IL_0037: call ""Function M.F(String) As String"" IL_003c: stind.ref IL_003d: ret }") testData = New CompilationTestData() context.CompileExpression( "M(If(t, t))", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 65 (0x41) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""t"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""t"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0028: dup IL_0029: brtrue.s IL_0036 IL_002b: pop IL_002c: ldstr ""t"" IL_0031: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0036: call ""Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"" IL_003b: call ""Sub M.M(Object)"" IL_0040: ret }") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1100849")> Public Sub PassByRef() Const source = "Module M Function F(Of T)(ByRef t1 As T) As T t1 = Nothing Return t1 End Function Sub M() End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "F(o)", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 47 (0x2f) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""o"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""o"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: call ""Function M.F(Of Object)(ByRef Object) As Object"" IL_002d: pop IL_002e: ret }") End Sub) End Sub <Fact> Public Sub Keyword() Const source = "Class C Shared Sub M() End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "[Me] = [Class]", DkmEvaluationFlags.None, ImmutableArray.Create(VariableAlias("class")), errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 57 (0x39) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""Me"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""Me"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""class"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: call ""Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"" IL_0037: stind.ref IL_0038: ret }") End Sub) End Sub <Fact> Public Sub Generic() Const source = "Class C Shared Sub M(Of T)(x As T) End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "y = x", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 48 (0x30) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""y"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""y"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldarg.0 IL_0029: box ""T"" IL_002e: stind.ref IL_002f: ret }") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1101237")> Public Sub TypeChar() Const source = "Module M Sub M() End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing Dim testData As CompilationTestData ' Object testData = New CompilationTestData() context.CompileExpression( "x = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 48 (0x30) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldc.i4.3 IL_0029: box ""Integer"" IL_002e: stind.ref IL_002f: ret }") ' Integer testData = New CompilationTestData() context.CompileExpression( "x% = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 43 (0x2b) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Integer"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Integer)(String) As Integer"" IL_0028: ldc.i4.3 IL_0029: stind.i4 IL_002a: ret }") ' Long testData = New CompilationTestData() context.CompileExpression( "x& = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 44 (0x2c) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Long"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Long)(String) As Long"" IL_0028: ldc.i4.3 IL_0029: conv.i8 IL_002a: stind.i8 IL_002b: ret }") ' Single testData = New CompilationTestData() context.CompileExpression( "x! = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 47 (0x2f) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Single"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Single)(String) As Single"" IL_0028: ldc.r4 3 IL_002d: stind.r4 IL_002e: ret }") ' Double testData = New CompilationTestData() context.CompileExpression( "x# = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 51 (0x33) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Double"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Double)(String) As Double"" IL_0028: ldc.r8 3 IL_0031: stind.r8 IL_0032: ret }") ' String testData = New CompilationTestData() context.CompileExpression( "x$ = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 48 (0x30) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""String"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of String)(String) As String"" IL_0028: ldc.i4.3 IL_0029: call ""Function Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Integer) As String"" IL_002e: stind.ref IL_002f: ret }") ' Decimal testData = New CompilationTestData() context.CompileExpression( "x@ = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 53 (0x35) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Decimal"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Decimal)(String) As Decimal"" IL_0028: ldc.i4.3 IL_0029: conv.i8 IL_002a: newobj ""Sub Decimal..ctor(Long)"" IL_002f: stobj ""Decimal"" IL_0034: ret }") End Sub) End Sub ''' <summary> ''' Should not allow names with '$' prefix. ''' </summary> <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1106819")> Public Sub NoPrefix() Const source = "Module M Sub M() End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing ' $1 Dim testData = New CompilationTestData() Dim result = context.CompileExpression( "$1 = 1", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Equal(errorMessage, "error BC30037: Character is not valid.") ' $exception testData = New CompilationTestData() result = context.CompileExpression( "$1 = 2", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Equal(errorMessage, "error BC30037: Character is not valid.") ' $ReturnValue testData = New CompilationTestData() result = context.CompileExpression( "$ReturnValue = 3", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Equal(errorMessage, "error BC30037: Character is not valid.") ' $x testData = New CompilationTestData() result = context.CompileExpression( "$x = 4", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Equal(errorMessage, "error BC30037: Character is not valid.") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1101243")> Public Sub [ReDim]() Const source = "Module M Sub M() End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "ReDim a(3)", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 48 (0x30) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""a"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""a"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldc.i4.4 IL_0029: newarr ""Object"" IL_002e: stind.ref IL_002f: ret }") testData = New CompilationTestData() context.CompileExpression( "ReDim Preserve a(3)", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 68 (0x44) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""a"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""a"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""a"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: castclass ""System.Array"" IL_0037: ldc.i4.4 IL_0038: newarr ""Object"" IL_003d: call ""Function Microsoft.VisualBasic.CompilerServices.Utils.CopyArray(System.Array, System.Array) As System.Array"" IL_0042: stind.ref IL_0043: ret }") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1101318")> Public Sub CompoundAssignment() Const source = "Module M Sub M() End Sub End Module" Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(MakeSources(source, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()), options:=TestOptions.DebugDll) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "M.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() context.CompileExpression( "x += 1", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 63 (0x3f) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""x"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: ldc.i4.1 IL_0033: box ""Integer"" IL_0038: call ""Function Microsoft.VisualBasic.CompilerServices.Operators.AddObject(Object, Object) As Object"" IL_003d: stind.ref IL_003e: ret }") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1115044")> Public Sub CaseSensitivity() Const source = "Class C Shared Sub M() End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() Dim result = context.CompileExpression( "X", DkmEvaluationFlags.TreatAsExpression, ImmutableArray.Create(VariableAlias("x", GetType(String))), errorMessage, testData) Assert.Null(errorMessage) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 16 (0x10) .maxstack 1 IL_0000: ldstr ""x"" IL_0005: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_000a: castclass ""String"" IL_000f: ret } ") End Sub) End Sub <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1115044")> Public Sub CaseSensitivity_ImplicitDeclaration() Const source = "Class C Shared Sub M() End Sub End Class" Dim comp = CreateCompilationWithMscorlib40({source}, options:=TestOptions.DebugDll, assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName()) WithRuntimeInstance(comp, Sub(runtime) Dim context = CreateMethodContext(runtime, "C.M") Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() Dim result = context.CompileExpression( "x = X", DkmEvaluationFlags.None, NoAliases, errorMessage, testData) Assert.Null(errorMessage) ' Use before initialization is allowed in the EE. ' Note that all x's are lowercase (i.e. normalized). testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 57 (0x39) .maxstack 4 .locals init (System.Guid V_0) IL_0000: ldtoken ""Object"" IL_0005: call ""Function System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) As System.Type"" IL_000a: ldstr ""x"" IL_000f: ldloca.s V_0 IL_0011: initobj ""System.Guid"" IL_0017: ldloc.0 IL_0018: ldnull IL_0019: call ""Sub Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.CreateVariable(System.Type, String, System.Guid, Byte())"" IL_001e: ldstr ""x"" IL_0023: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetVariableAddress(Of Object)(String) As Object"" IL_0028: ldstr ""x"" IL_002d: call ""Function Microsoft.VisualStudio.Debugger.Clr.IntrinsicMethods.GetObjectByAlias(String) As Object"" IL_0032: call ""Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"" IL_0037: stind.ref IL_0038: ret } ") End Sub) End Sub End Class End Namespace