Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
25b9ba1b
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,发现更多精彩内容 >>
提交
25b9ba1b
编写于
8月 10, 2016
作者:
N
Neal Gafter
提交者:
GitHub
8月 10, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13047 from gafter/master-12573
For new switch semantics, we rely on subsumption checking to
上级
0c824b98
afdb96a4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
67 addition
and
7 deletion
+67
-7
src/Compilers/CSharp/Portable/Binder/SwitchBinder_BindPatternSwitch.cs
.../CSharp/Portable/Binder/SwitchBinder_BindPatternSwitch.cs
+5
-2
src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
...lers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
+57
-0
src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
+5
-5
未找到文件。
src/Compilers/CSharp/Portable/Binder/SwitchBinder_BindPatternSwitch.cs
浏览文件 @
25b9ba1b
...
...
@@ -127,7 +127,10 @@ private ImmutableArray<BoundPatternSwitchSection> BindPatternSwitchSections(Boun
node
,
boundSwitchExpression
,
boundSwitchExpression
.
Type
,
caseLabelSyntax
.
Value
,
node
.
HasErrors
,
diagnostics
,
out
wasExpression
,
wasSwitchCase
:
true
);
bool
hasErrors
=
pattern
.
HasErrors
;
var
constantValue
=
pattern
.
ConstantValue
;
if
(!
hasErrors
&&
(
object
)
constantValue
!=
null
&&
this
.
FindMatchingSwitchCaseLabel
(
constantValue
,
caseLabelSyntax
)
!=
label
)
if
(!
hasErrors
&&
(
object
)
constantValue
!=
null
&&
pattern
.
Value
.
Type
==
SwitchGoverningType
&&
this
.
FindMatchingSwitchCaseLabel
(
constantValue
,
caseLabelSyntax
)
!=
label
)
{
diagnostics
.
Add
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
node
.
Location
,
pattern
.
ConstantValue
.
GetValueToDisplay
()
??
label
.
Name
);
hasErrors
=
true
;
...
...
@@ -142,7 +145,7 @@ private ImmutableArray<BoundPatternSwitchSection> BindPatternSwitchSections(Boun
bool
hasErrors
=
pattern
.
HasErrors
;
if
(
defaultLabel
!=
null
)
{
diagnostics
.
Add
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
node
.
Location
,
"default"
);
diagnostics
.
Add
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
node
.
Location
,
label
.
Name
);
hasErrors
=
true
;
}
...
...
src/Compilers/CSharp/Test/Semantic/Semantics/PatternSwitchTests.cs
浏览文件 @
25b9ba1b
...
...
@@ -1163,5 +1163,62 @@ public static double MakeNaN(int x)
var
comp
=
CompileAndVerify
(
compilation
,
expectedOutput
:
expectedOutput
);
}
[
Fact
,
WorkItem
(
12573
,
"https://github.com/dotnet/roslyn/issues/12573"
)]
public
void
EnumAndUnderlyingType
()
{
var
source
=
@"using System;
class Program
{
public static void Main(string[] args)
{
M(0);
M(0L);
M((byte)0);
M(EnumA.ValueA);
M(2);
}
public static void M(object value)
{
switch (value)
{
case 0:
Console.WriteLine(""0"");
break;
case 0L:
Console.WriteLine(""0L"");
break;
case (byte)0:
Console.WriteLine(""(byte)0"");
break;
case EnumA.ValueA:
Console.WriteLine(""EnumA.ValueA"");
break;
default:
Console.WriteLine(""Default"");
break;
}
}
}
public enum EnumA
{
ValueA,
ValueB,
ValueC
}
"
;
var
compilation
=
CreateCompilationWithMscorlib45
(
source
,
options
:
TestOptions
.
DebugExe
);
compilation
.
VerifyDiagnostics
();
var
expectedOutput
=
@"0
0L
(byte)0
EnumA.ValueA
Default"
;
var
comp
=
CompileAndVerify
(
compilation
,
expectedOutput
:
expectedOutput
);
}
}
}
src/Compilers/CSharp/Test/Semantic/Semantics/SwitchTests.cs
浏览文件 @
25b9ba1b
...
...
@@ -359,14 +359,14 @@ public static void Main()
}
}"
;
CreateCompilationWithMscorlib
(
text
,
parseOptions
:
TestOptions
.
Regular6
).
VerifyDiagnostics
(
// (15,13): error CS0152: The switch statement contains multiple cases with the label value 'default'
// (15,13): error CS0152: The switch statement contains multiple cases with the label value 'default
:
'
// default: //CS0152
Diagnostic
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
"default:"
).
WithArguments
(
"default:"
).
WithLocation
(
15
,
13
)
);
CreateCompilationWithMscorlib
(
text
,
parseOptions
:
TestOptions
.
Regular6WithV7SwitchBinder
).
VerifyDiagnostics
(
// (15,13): error CS0152: The switch statement contains multiple cases with the label value 'default'
// (15,13): error CS0152: The switch statement contains multiple cases with the label value 'default
:
'
// default: //CS0152
Diagnostic
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
"default:"
).
WithArguments
(
"default"
).
WithLocation
(
15
,
13
)
Diagnostic
(
ErrorCode
.
ERR_DuplicateCaseLabel
,
"default:"
).
WithArguments
(
"default
:
"
).
WithLocation
(
15
,
13
)
);
CreateCompilationWithMscorlib
(
text
).
VerifyDiagnostics
(
// (15,13): error CS0152: The switch statement contains multiple cases with the label value 'default:'
...
...
@@ -1135,9 +1135,9 @@ static object F(int i)
// (9,17): error CS7036: There is no argument given that corresponds to the required formal parameter 'o' of 'C.M(object)'
// M();
Diagnostic
(
ErrorCode
.
ERR_NoCorrespondingArgument
,
"M"
).
WithArguments
(
"o"
,
"C.M(object)"
).
WithLocation
(
9
,
17
),
// (12,13): error CS
0152: The switch statement contains multiple cases with the label value '0'
// (12,13): error CS
8120: The switch case has already been handled by a previous case.
// case 0:
Diagnostic
(
ErrorCode
.
ERR_
DuplicateCaseLabel
,
"case 0:"
).
WithArguments
(
"0
"
).
WithLocation
(
12
,
13
)
Diagnostic
(
ErrorCode
.
ERR_
PatternIsSubsumed
,
"case 0:
"
).
WithLocation
(
12
,
13
)
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录