Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET
Roslyn
提交
6dd74528
R
Roslyn
项目概览
dotNET
/
Roslyn
通知
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,发现更多精彩内容 >>
提交
6dd74528
编写于
5月 30, 2017
作者:
T
Ty Overby
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
optimize is_null on nullable<t>
上级
ad41667d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
84 addition
and
0 deletion
+84
-0
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Patterns.cs
...Portable/Lowering/LocalRewriter/LocalRewriter_Patterns.cs
+4
-0
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenOperators.cs
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenOperators.cs
+80
-0
未找到文件。
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Patterns.cs
浏览文件 @
6dd74528
...
...
@@ -152,6 +152,10 @@ private BoundExpression CompareWithConstant(BoundExpression input, BoundExpressi
return
_factory
.
ObjectEqual
(
_factory
.
Convert
(
systemObject
,
input
),
boundConstant
);
}
}
else
if
(
input
.
Type
.
IsNullableType
()
&&
boundConstant
is
BoundDefaultExpression
boundDefault
&&
boundDefault
.
NullableNeverHasValue
())
{
return
_factory
.
Not
(
MakeNullableHasValue
(
_factory
.
Syntax
,
input
));
}
else
{
return
_factory
.
StaticCall
(
...
...
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenOperators.cs
浏览文件 @
6dd74528
...
...
@@ -158,6 +158,86 @@ .locals init (bool V_0)
}"
);
}
[
Fact
]
public
void
TestIsNullPatternNullable
()
{
var
source
=
@"
using System;
class C
{
public static void M(Nullable<int> obj)
{
Console.Write(obj is null);
if (obj is null) {
Console.Write("" Branch taken"");
} else {
Console.Write("" Branch not taken"");
}
}
public static void Main()
{
M(5);
Console.Write(""-"");
M(null);
}
}
"
;
// Release
var
compilation
=
CompileAndVerify
(
source
,
expectedOutput
:
"False Branch not taken-True Branch taken"
,
options
:
TestOptions
.
ReleaseExe
);
compilation
.
VerifyIL
(
"C.M"
,
@"{
// Code size 46 (0x2e)
.maxstack 2
IL_0000: ldarga.s V_0
IL_0002: call ""bool int?.HasValue.get""
IL_0007: ldc.i4.0
IL_0008: ceq
IL_000a: call ""void System.Console.Write(bool)""
IL_000f: ldarga.s V_0
IL_0011: call ""bool int?.HasValue.get""
IL_0016: brtrue.s IL_0023
IL_0018: ldstr "" Branch taken""
IL_001d: call ""void System.Console.Write(string)""
IL_0022: ret
IL_0023: ldstr "" Branch not taken""
IL_0028: call ""void System.Console.Write(string)""
IL_002d: ret
}"
);
// Debug
compilation
=
CompileAndVerify
(
source
,
expectedOutput
:
"False Branch not taken-True Branch taken"
,
options
:
TestOptions
.
DebugExe
);
compilation
.
VerifyIL
(
"C.M"
,
@"{
// Code size 60 (0x3c)
.maxstack 2
.locals init (bool V_0)
IL_0000: nop
IL_0001: ldarga.s V_0
IL_0003: call ""bool int?.HasValue.get""
IL_0008: ldc.i4.0
IL_0009: ceq
IL_000b: call ""void System.Console.Write(bool)""
IL_0010: nop
IL_0011: ldarga.s V_0
IL_0013: call ""bool int?.HasValue.get""
IL_0018: ldc.i4.0
IL_0019: ceq
IL_001b: stloc.0
IL_001c: ldloc.0
IL_001d: brfalse.s IL_002e
IL_001f: nop
IL_0020: ldstr "" Branch taken""
IL_0025: call ""void System.Console.Write(string)""
IL_002a: nop
IL_002b: nop
IL_002c: br.s IL_003b
IL_002e: nop
IL_002f: ldstr "" Branch not taken""
IL_0034: call ""void System.Console.Write(string)""
IL_0039: nop
IL_003a: nop
IL_003b: ret
}"
);
}
[
Fact
]
public
void
TestIsNullPatternObjectLiteral
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录