Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
38322d48
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
38322d48
编写于
5月 04, 2017
作者:
S
Shyam N
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix VB partial method instrumentation.
上级
1ee15f02
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
187 addition
and
9 deletion
+187
-9
src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb
src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb
+12
-7
src/Compilers/VisualBasic/Test/Emit/Emit/DynamicAnalysis/DynamicInstrumentationTests.vb
.../Emit/Emit/DynamicAnalysis/DynamicInstrumentationTests.vb
+175
-2
未找到文件。
src/Compilers/VisualBasic/Portable/CodeGen/EmitExpression.vb
浏览文件 @
38322d48
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports
System
Imports
System.Collections.Generic
Imports
System.Collections.Immutable
Imports
System.Diagnostics
Imports
System.Linq
Imports
System.Reflection.Metadata
Imports
Microsoft.CodeAnalysis.CodeGen
Imports
Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports
TypeKind
=
Microsoft
.
CodeAnalysis
.
TypeKind
Namespace
Microsoft.CodeAnalysis.VisualBasic.CodeGen
Friend
Partial
Class
CodeGenerator
Partial
Friend
Class
CodeGenerator
Private
_recursionDepth
As
Integer
Private
Class
EmitCancelledException
...
...
@@ -2205,7 +2200,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeGen
Debug
.
Assert
(
node
.
Method
.
IsDefinition
)
Debug
.
Assert
(
node
.
Type
.
SpecialType
=
SpecialType
.
System_Int32
)
_builder
.
EmitOpCode
(
ILOpCode
.
Ldtoken
)
EmitSymbolToken
(
node
.
Method
,
node
.
Syntax
,
encodeAsRawDefinitionToken
:
=
True
)
' For partial methods, we emit pseudo token based on the symbol for the partial
' definition part as opposed to the symbol for the partial implementation part.
' We will need to resolve the symbol associated with each pseudo token in order
' to compute the real method definition tokens later. For partial methods, this
' resolution can only succeed if the associated symbol is the symbol for the
' partial definition and not the symbol for the partial implementation (see
' MethodSymbol.ResolvedMethodImpl()).
Dim
symbol
=
If
(
node
.
Method
.
PartialDefinitionPart
,
node
.
Method
)
EmitSymbolToken
(
symbol
,
node
.
Syntax
,
encodeAsRawDefinitionToken
:
=
True
)
End
Sub
Private
Sub
EmitMaximumMethodDefIndexExpression
(
node
As
BoundMaximumMethodDefIndex
)
...
...
src/Compilers/VisualBasic/Test/Emit/Emit/DynamicAnalysis/DynamicInstrumentationTests.vb
浏览文件 @
38322d48
...
...
@@ -7,8 +7,6 @@ Imports Microsoft.CodeAnalysis.Test.Utilities
Imports
Microsoft.CodeAnalysis.Test.Utilities.VBInstrumentationChecker
Imports
Microsoft.CodeAnalysis.VisualBasic
Imports
Microsoft.CodeAnalysis.VisualBasic.UnitTests
Imports
Roslyn.Test.Utilities
Imports
Xunit
Namespace
Microsoft.CodeAnalysis.VisualBasic.DynamicAnalysis.UnitTests
...
...
@@ -2368,6 +2366,173 @@ End Class
AssertInstrumented
(
verifier
,
"D.M"
)
End
Sub
<
Fact
>
Public
Sub
TestPartialMethodsWithImplementation
()
Dim
testSource
=
<
file
name
=
"c.vb"
>
<
!
[
CDATA
[
Imports
System
Partial
Class
Class1
Private
Partial
Sub
Method1
(
x
as
Integer
)
End
Sub
Public
Sub
Method2
(
x
as
Integer
)
Console
.
WriteLine
(
"Method2: x = {0}"
,
x
)
Method1
(
x
)
End
Sub
End
Class
Partial
Class
Class1
Private
Sub
Method1
(
x
as
Integer
)
Console
.
WriteLine
(
"Method1: x = {0}"
,
x
)
If
x
>
0
Console
.
WriteLine
(
"Method1: x > 0"
)
Method1
(
0
)
ElseIf
x
<
0
Console
.
WriteLine
(
"Method1: x < 0"
)
End
If
End
Sub
End
Class
Module
Program
Public
Sub
Main
()
Test
()
Microsoft
.
CodeAnalysis
.
Runtime
.
Instrumentation
.
FlushPayload
()
End
Sub
Sub
Test
()
Console
.
WriteLine
(
"Test"
)
Dim
c
=
new
Class1
()
c
.
Method2
(
1
)
End
Sub
End
Module
]]
>
</
file
>
Dim
source
=
<
compilation
>
<
%
=
testSource
%
>
<
%
=
InstrumentationHelperSource
%
>
</
compilation
>
Dim
checker
=
New
VBInstrumentationChecker
()
checker
.
Method
(
1
,
1
,
"New"
,
expectBodySpan
:
=
False
)
checker
.
Method
(
2
,
1
,
"Private Sub Method1(x as Integer)"
).
True
(
"Console.WriteLine(
""
Method1: x = {0}
""
, x)"
).
True
(
"Console.WriteLine(
""
Method1: x > 0
""
)"
).
True
(
"Method1(0)"
).
False
(
"Console.WriteLine(
""
Method1: x < 0
""
)"
).
True
(
"x < 0"
).
True
(
"x > 0"
)
checker
.
Method
(
3
,
1
,
"Public Sub Method2(x as Integer)"
).
True
(
"Console.WriteLine(
""
Method2: x = {0}
""
, x)"
).
True
(
"Method1(x)"
)
checker
.
Method
(
4
,
1
,
"Public Sub Main()"
).
True
(
"Test()"
).
True
(
"Microsoft.CodeAnalysis.Runtime.Instrumentation.FlushPayload()"
)
checker
.
Method
(
5
,
1
,
"Sub Test()"
).
True
(
"Console.WriteLine(
""
Test
""
)"
).
True
(
"new Class1()"
).
True
(
"c.Method2(1)"
)
checker
.
Method
(
8
,
1
).
True
().
False
().
True
().
True
().
True
().
True
().
True
().
True
().
True
().
True
().
True
()
Dim
expectedOutput
=
"Test
Method2: x = 1
Method1: x = 1
Method1: x > 0
Method1: x = 0
"
+
XCDataToString
(
checker
.
ExpectedOutput
)
Dim
verifier
=
CompileAndVerify
(
source
,
expectedOutput
,
options
:
=
TestOptions
.
ReleaseExe
)
checker
.
CompleteCheck
(
verifier
.
Compilation
,
testSource
)
verifier
.
VerifyDiagnostics
()
verifier
=
CompileAndVerify
(
source
,
expectedOutput
,
options
:
=
TestOptions
.
DebugExe
)
checker
.
CompleteCheck
(
verifier
.
Compilation
,
testSource
)
verifier
.
VerifyDiagnostics
()
End
Sub
<
Fact
>
Public
Sub
TestPartialMethodsWithoutImplementation
()
Dim
testSource
=
<
file
name
=
"c.vb"
>
<
!
[
CDATA
[
Imports
System
Partial
Class
Class1
Private
Partial
Sub
Method1
(
x
as
Integer
)
End
Sub
Public
Sub
Method2
(
x
as
Integer
)
Console
.
WriteLine
(
"Method2: x = {0}"
,
x
)
Method1
(
x
)
End
Sub
End
Class
Module
Program
Public
Sub
Main
()
Test
()
Microsoft
.
CodeAnalysis
.
Runtime
.
Instrumentation
.
FlushPayload
()
End
Sub
Sub
Test
()
Console
.
WriteLine
(
"Test"
)
Dim
c
=
new
Class1
()
c
.
Method2
(
1
)
End
Sub
End
Module
]]
>
</
file
>
Dim
source
=
<
compilation
>
<
%
=
testSource
%
>
<
%
=
InstrumentationHelperSource
%
>
</
compilation
>
Dim
checker
=
New
VBInstrumentationChecker
()
checker
.
Method
(
1
,
1
,
"New"
,
expectBodySpan
:
=
False
)
checker
.
Method
(
2
,
1
,
"Public Sub Method2(x as Integer)"
).
True
(
"Console.WriteLine(
""
Method2: x = {0}
""
, x)"
)
checker
.
Method
(
3
,
1
,
"Public Sub Main()"
).
True
(
"Test()"
).
True
(
"Microsoft.CodeAnalysis.Runtime.Instrumentation.FlushPayload()"
)
checker
.
Method
(
4
,
1
,
"Sub Test()"
).
True
(
"Console.WriteLine(
""
Test
""
)"
).
True
(
"new Class1()"
).
True
(
"c.Method2(1)"
)
checker
.
Method
(
7
,
1
).
True
().
False
().
True
().
True
().
True
().
True
().
True
().
True
().
True
().
True
().
True
()
Dim
expectedOutput
=
"Test
Method2: x = 1
"
+
XCDataToString
(
checker
.
ExpectedOutput
)
Dim
verifier
=
CompileAndVerify
(
source
,
expectedOutput
,
options
:
=
TestOptions
.
ReleaseExe
)
checker
.
CompleteCheck
(
verifier
.
Compilation
,
testSource
)
verifier
.
VerifyDiagnostics
()
verifier
=
CompileAndVerify
(
source
,
expectedOutput
,
options
:
=
TestOptions
.
DebugExe
)
checker
.
CompleteCheck
(
verifier
.
Compilation
,
testSource
)
verifier
.
VerifyDiagnostics
()
End
Sub
Private
Shared
Sub
AssertNotInstrumented
(
verifier
As
CompilationVerifier
,
qualifiedMethodName
As
String
)
AssertInstrumented
(
verifier
,
qualifiedMethodName
,
expected
:
=
False
)
End
Sub
...
...
@@ -2394,6 +2559,14 @@ End Class
emitOptions
:
=
EmitOptions
.
Default
.
WithInstrumentationKinds
(
ImmutableArray
.
Create
(
InstrumentationKind
.
TestCoverage
)))
End
Function
Private
Overloads
Function
CompileAndVerify
(
source
As
XElement
,
Optional
expectedOutput
As
String
=
Nothing
,
Optional
options
As
VisualBasicCompilationOptions
=
Nothing
)
As
CompilationVerifier
Return
CompileAndVerify
(
source
,
LatestVbReferences
,
expectedOutput
,
options
:
=
If
(
options
,
TestOptions
.
ReleaseExe
).
WithDeterministic
(
True
),
emitOptions
:
=
EmitOptions
.
Default
.
WithInstrumentationKinds
(
ImmutableArray
.
Create
(
InstrumentationKind
.
TestCoverage
)))
End
Function
Private
Overloads
Function
CompileAndVerify
(
source
As
String
,
Optional
expectedOutput
As
String
=
Nothing
,
Optional
options
As
VisualBasicCompilationOptions
=
Nothing
)
As
CompilationVerifier
Return
CompileAndVerify
(
source
,
LatestVbReferences
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录