提交 dd5f9286 编写于 作者: C CyrusNajmabadi

Merge remote-tracking branch 'upstream/master' into patternMatchCheckAllParts

......@@ -2,6 +2,7 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--Generated file, do not directly edit. Run "RepoUtil change" to regenerate-->
<PropertyGroup>
<FakeSignVersion>0.9.2</FakeSignVersion>
<GitLinkVersion>3.0.0-unstable0085</GitLinkVersion>
<ManagedEsentVersion>1.9.4</ManagedEsentVersion>
<MicroBuildCoreVersion>0.2.0</MicroBuildCoreVersion>
......
......@@ -11,14 +11,14 @@
<_CopyReferences>false</_CopyReferences>
<_CopyProjectReferences>false</_CopyProjectReferences>
<CopyNuGetImplementations>false</CopyNuGetImplementations>
<OutDir>$(OutDir)Exes\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Exes\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'UnitTest'">
<PropertyGroup>
<_IsAnyUnitTest>true</_IsAnyUnitTest>
<CopyNuGetImplementations>true</CopyNuGetImplementations>
<OutDir>$(OutDir)UnitTests\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)UnitTests\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'UnitTestPortable' OR '$(RoslynProjectType)' == 'UnitTestDesktop'">
......@@ -39,21 +39,21 @@
<_IsAnyUnitTest>true</_IsAnyUnitTest>
<_IsAnyPortableUnitTest>true</_IsAnyPortableUnitTest>
<CopyNuGetImplementations>false</CopyNuGetImplementations>
<OutDir>$(OutDir)Dlls\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Dlls\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'CompilerGeneratorTool'">
<PropertyGroup>
<_CopyReferences>false</_CopyReferences>
<CopyNuGetImplementations>false</CopyNuGetImplementations>
<OutDir>$(OutDir)Exes\</OutDir>
<OutputPath>$(OutputPath)Exes\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'Vsix'">
<PropertyGroup>
<_CopyReferences>false</_CopyReferences>
<CopyNuGetImplementations>true</CopyNuGetImplementations>
<OutDir>$(OutDir)Vsix\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Vsix\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'DeploymentTest'">
......@@ -62,8 +62,8 @@
<PropertyGroup>
<AllowedReferenceRelatedFileExtensions>$(AllowedReferenceRelatedFileExtensions);.pdb</AllowedReferenceRelatedFileExtensions>
<CopyNuGetImplementations>true</CopyNuGetImplementations>
<OutDir Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable'">$(OutDir)CoreClrTest</OutDir>
<OutDir Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable'">$(OutDir)UnitTests\Portable\</OutDir>
<OutputPath Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable'">$(OutputPath)CoreClrTest</OutputPath>
<OutputPath Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable'">$(OutputPath)UnitTests\Portable\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == 'Custom'">
......@@ -74,19 +74,19 @@
<_CopyReferences>false</_CopyReferences>
<_CopyProjectReferences>false</_CopyProjectReferences>
<CopyNuGetImplementations>false</CopyNuGetImplementations>
<OutDir>$(OutDir)Dlls\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Dlls\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == '' AND '$(OutputType)' == 'Exe'">
<PropertyGroup>
<CopyNuGetImplementations>true</CopyNuGetImplementations>
<OutDir>$(OutDir)Exes\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Exes\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
<When Condition="'$(RoslynProjectType)' == '' AND '$(OutputType)' == 'WinExe'">
<PropertyGroup>
<CopyNuGetImplementations>true</CopyNuGetImplementations>
<OutDir>$(OutDir)Exes\$(MSBuildProjectName)\</OutDir>
<OutputPath>$(OutputPath)Exes\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
</When>
</Choose>
......@@ -114,7 +114,6 @@
</PropertyGroup>
<PropertyGroup>
<OutputPath>$(OutDir)</OutputPath>
<RoslynPublicKey>0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9</RoslynPublicKey>
<RoslynInternalKey>002400000480000094000000060200000024000052534131000400000100010055e0217eb635f69281051f9a823e0c7edd90f28063eb6c7a742a19b4f6139778ee0af438f47aed3b6e9f99838aa8dba689c7a71ddb860c96d923830b57bbd5cd6119406ddb9b002cf1c723bf272d6acbb7129e9d6dd5a5309c94e0ff4b2c884d45a55f475cd7dba59198086f61f5a8c8b5e601c0edbf269733f6f578fc8579c2</RoslynInternalKey>
......@@ -367,6 +366,7 @@
<PropertyGroup>
<PrepareResourcesDependsOn>DeployPortableOnDeveloperBuild;$(PrepareResourcesDependsOn)</PrepareResourcesDependsOn>
<PrepareForBuildDependsOn>RemoveDuplicateXUnitContent;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
<TargetFrameworkMonikerAssemblyAttributesPath>$(IntermediateOutputPath)$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)</TargetFrameworkMonikerAssemblyAttributesPath>
<PostCompileBinaryModificationSentinelFile>$(IntermediateOutputPath)$(TargetFileName).pcbm</PostCompileBinaryModificationSentinelFile>
<OptimizationDataFolderPath>$(NuGetPackageRoot)\RoslynDependencies.OptimizationData\2.0.0-rc-61101-16\content\OptimizationData</OptimizationDataFolderPath>
......@@ -464,10 +464,29 @@
Targets="GetTargetPath"
BuildInParallel="true">
<Output TaskParameter="TargetOutputs" ItemName="ReferenceCopyLocalPaths" />
<Output TaskParameter="TargetOutputs" ItemName="ReferenceCopyLocalPaths" />
</MSBuild>
</Target>
<!-- Returns the current build version. Used in .vsixmanifests to substitute our build version into them -->
<Target Name="GetBuildVersion" Outputs="$(VsixVersion)" />
<!--
In order to leverage LUT testing we need to have both of the follownig packages in
our build.
- xunit.runner.desktop
- xunit
Both of these include xunit.abstractions.dll in different forms: content and reference
respectively. This creates a double write violation in our build. The content item
is unnecessary for us since we reference the xunit package hence remove it here.
https://github.com/dotnet/roslyn/issues/18753
-->
<Target Name="RemoveDuplicateXUnitContent">
<ItemGroup>
<Content Remove="@(Content)" Condition="'%(Filename)%(Extension)' == 'xunit.abstractions.dll'" />
</ItemGroup>
</Target>
</Project>
......@@ -32,7 +32,5 @@
<Link>app.config</Link>
</None>
</ItemGroup>
</Target>
</Project>
\ No newline at end of file
</Project>
......@@ -27,7 +27,7 @@
<SignAssembly>true</SignAssembly>
<UseRoslynAnalyzers Condition="'$(UseRoslynAnalyzers)' == ''">true</UseRoslynAnalyzers>
<BaseOutputPath Condition="'$(BaseOutputPath)' == ''">$(RepoRoot)Binaries\</BaseOutputPath>
<OutDir>$(BaseOutputPath)$(Configuration)\</OutDir>
<OutputPath>$(BaseOutputPath)$(Configuration)\</OutputPath>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">$(RepoRoot)Binaries\Obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\$(MSBuildProjectName)\</IntermediateOutputPath>
......@@ -47,7 +47,7 @@
<MinimumVisualStudioVersion>$(VisualStudioVersion)</MinimumVisualStudioVersion>
<!-- Disable AppX packaging for the Roslyn source. Not setting this to false has the side effect
that any builds of portable projects end up in a sub folder of $(OutDir). Search for this flag in
that any builds of portable projects end up in a sub folder of $(OutputPath). Search for this flag in
Microsoft.Common.CurrentVersion.targets to see how it is consumed -->
<WindowsAppContainer>false</WindowsAppContainer>
......
......@@ -50,7 +50,8 @@
"GitLink",
"Microsoft.NETCore.Runtime.CoreCLR",
"Microsoft.VSSDK.BuildTools",
"NETStandard.Library"
"NETStandard.Library",
"FakeSign"
]
}
},
......
......@@ -9,43 +9,89 @@ $ErrorActionPreference="Stop"
# Handy function for executing a command in powershell and throwing if it
# fails.
#
# Use this when the full command is known at script authoring time and
# doesn't require any dynamic argument build up. Example:
#
# Exec-Block { & $msbuild Test.proj }
#
# Original sample came from: http://jameskovacs.com/2010/02/25/the-exec-problem/
function Exec([scriptblock]$cmd, [switch]$echo = $false) {
if ($echo) {
& $cmd
}
else {
$output = & $cmd
}
function Exec-Block([scriptblock]$cmd) {
& $cmd
# Need to check both of these cases for errors as they represent different items
# - $?: did the powershell script block throw an error
# - $lastexitcode: did a windows command executed by the script block end in error
if ((-not $?) -or ($lastexitcode -ne 0)) {
if (-not $echo) {
Write-Host $output
}
throw "Command failed to execute: $cmd"
}
}
function Exec-Echo([scriptblock]$cmd) {
Exec $cmd -echo:$true
# Handy function for executing a windows command which needs to go through
# windows command line parsing.
#
# Use this when the command arguments are stored in a variable. Particularly
# when the variable needs reparsing by the windows command line. Example:
#
# $args = "/p:ManualBuild=true Test.proj"
# Exec-Command $msbuild $args
#
function Exec-Command([string]$command, [string]$commandArgs) {
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = $command
$startInfo.Arguments = $commandArgs
$startInfo.RedirectStandardOutput = $true
$startInfo.UseShellExecute = $false
$startInfo.CreateNoWindow = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
$process.StartInfo.RedirectStandardOutput = $true;
$process.Start() | Out-Null
$finished = $false
try {
# The OutputDataReceived event doesn't fire as events are sent by the
# process in powershell. Possibly due to subtlties of how Powershell
# manages the thread pool that I'm not aware of. Using blocking
# reading here as an alternative which is fine since this blocks
# on completion already.
$out = $process.StandardOutput
while (-not $out.EndOfStream) {
$line = $out.ReadLine()
Write-Output $line
}
while (-not $process.WaitForExit(100)) {
# Non-blocking loop done to allow ctr-c interrupts
}
$finished = $true
if ($process.ExitCode -ne 0) {
throw "Command failed to execute: $command $commandArgs"
}
}
finally {
# If we didn't finish then an error occured or the user hit ctrl-c. Either
# way kill the process
if (-not $finished) {
$process.Kill()
}
}
}
# Handy function for executing Invoke-Expression and reliably throwing an
# error if the expression, or the command it invoked, fails
#
# Original sample came from: http://jameskovacs.com/2010/02/25/the-exec-problem/
function Exec-Expression([string]$expr) {
Exec { Invoke-Expression $expr } -echo:$true
# Handy function for executing a powershell script in a clean environment with
# arguments. Prefer this over & sourcing a script as it will both use a clean
# environment and do proper error checking
function Exec-Script([string]$script, [string]$scriptArgs = "") {
Exec-Command "powershell" "-noprofile -executionPolicy RemoteSigned -file `"$script`" $scriptArgs"
}
# Ensure that NuGet is installed and return the path to the
# executable to use.
function Ensure-NuGet() {
Exec { & (Join-Path $PSScriptRoot "download-nuget.ps1") }
Exec-Block { & (Join-Path $PSScriptRoot "download-nuget.ps1") } | Out-Host
$nuget = Join-Path $repoDir "NuGet.exe"
return $nuget
}
......@@ -56,7 +102,7 @@ function Ensure-BasicTool([string]$name, [string]$version) {
$p = Join-Path (Get-PackagesDir) "$($name).$($version)"
if (-not (Test-Path $p)) {
$nuget = Ensure-NuGet
Exec { & $nuget install $name -OutputDirectory (Get-PackagesDir) -Version $version }
Exec-Block { & $nuget install $name -OutputDirectory (Get-PackagesDir) -Version $version } | Out-Null
}
return $p
......@@ -206,14 +252,14 @@ function Get-VisualStudioDir() {
# Clear out the NuGet package cache
function Clear-PackageCache() {
$nuget = Ensure-NuGet
Exec { & $nuget locals all -clear }
Exec-Block { & $nuget locals all -clear } | Out-Host
}
# Restore a single project
function Restore-Project([string]$fileName, [string]$nuget, [string]$msbuildDir) {
$nugetConfig = Join-Path $repoDir "nuget.config"
$filePath = Join-Path $repoDir $fileName
Exec { & $nuget restore -verbosity quiet -configfile $nugetConfig -MSBuildPath $msbuildDir -Project2ProjectTimeOut 1200 $filePath }
Exec-Block { & $nuget restore -verbosity quiet -configfile $nugetConfig -MSBuildPath $msbuildDir -Project2ProjectTimeOut 1200 $filePath } | Out-Null
}
# Restore all of the projects that the repo consumes
......
......@@ -4,6 +4,7 @@ param (
[switch]$build = $false,
[switch]$restore = $false,
[switch]$test = $false,
[switch]$test64 = $false,
[switch]$clean = $false,
[switch]$clearPackageCache = $false,
[string]$project = "",
......@@ -17,7 +18,8 @@ function Print-Usage() {
Write-Host "Build.ps1"
Write-Host "`t-build Run a build operation (default false)"
Write-Host "`t-restore Run a restore operation (default false)"
Write-Host "`t-test Run tests (default false)"
Write-Host "`t-test Run unit tests (default false)"
Write-Host "`t-test64 Run unit tests in 64 bit mode"
Write-Host "`t-clean Do a clean build / restore (default false)"
Write-Host "`t-clearPackageCache Clear package cache before restoring"
Write-Host "`t-project <path> Project the build or restore should target"
......@@ -33,12 +35,16 @@ function Run-Build() {
$target = if ($project -ne "") { $project } else { Join-Path $repoDir "Roslyn.sln" }
$buildArgs = "$buildArgs $target"
Exec-Expression "& `"$msbuild`" $buildArgs"
Exec-Command $msbuild $buildArgs | Out-Host
}
function Run-Test() {
$proj = Join-Path $repoDir "BuildAndTest.proj"
Exec-Expression "& `"$msbuild`" /v:m /p:SkipCoreClr=true /t:Test $proj"
$args = "/v:m /p:SkipCoreClr=true /p:ManualTest=true /t:Test $proj"
if ($test64) {
$args += " /p:Test64=true"
}
Exec-Command $msbuild $args | Out-Host
}
try {
......@@ -68,7 +74,7 @@ try {
Run-Build
}
if ($test) {
if ($test -or $test64) {
Run-Test
}
}
......
......@@ -31,10 +31,12 @@ function Run-MSBuild() {
# that we do not reuse MSBuild nodes from other jobs/builds on the machine. Otherwise,
# we'll run into issues such as https://github.com/dotnet/roslyn/issues/6211.
# MSBuildAdditionalCommandLineArgs=
& $msbuild /warnaserror /nologo /m /nodeReuse:false /consoleloggerparameters:Verbosity=minimal /filelogger /fileloggerparameters:Verbosity=normal @args
if (-not $?) {
throw "Build failed"
$buildArgs = "/warnaserror /nologo /m /nodeReuse:false /consoleloggerparameters:Verbosity=minimal /filelogger /fileloggerparameters:Verbosity=normal"
foreach ($arg in $args) {
$buildArgs += " $arg"
}
Exec-Command $msbuild $buildArgs
}
# Kill any instances VBCSCompiler.exe to release locked files, ignoring stderr if process is not open
......@@ -87,14 +89,14 @@ try {
Redirect-Temp
if ($testBuildCorrectness) {
Exec-Echo { & ".\build\scripts\test-build-correctness.ps1" -config $buildConfiguration }
Exec-Block { & ".\build\scripts\test-build-correctness.ps1" -config $buildConfiguration } | Out-Host
exit 0
}
# Output the commit that we're building, for reference in Jenkins logs
if (-not $skipCommitPrinting) {
Write-Host "Building this commit:"
Exec { & git show --no-patch --pretty=raw HEAD }
Exec-Block { & git show --no-patch --pretty=raw HEAD } | Out-Host
}
# Build with the real assembly version, since that's what's contained in the bootstrap compiler redirects
......@@ -108,14 +110,14 @@ try {
Terminate-BuildProcesses
if ($testDeterminism) {
Exec { & ".\build\scripts\test-determinism.ps1" -buildDir $bootstrapDir }
Exec-Block { & ".\build\scripts\test-determinism.ps1" -buildDir $bootstrapDir } | Out-Host
Terminate-BuildProcesses
exit 0
}
if ($testPerfCorrectness) {
Run-MSBuild Roslyn.sln /p:Configuration=$buildConfiguration /p:DeployExtension=false
Exec { & ".\Binaries\$buildConfiguration\Exes\Perf.Runner\Roslyn.Test.Performance.Runner.exe" --ci-test }
Exec-Block { & ".\Binaries\$buildConfiguration\Exes\Perf.Runner\Roslyn.Test.Performance.Runner.exe" --ci-test } | Out-Host
exit 0
}
......@@ -140,7 +142,7 @@ try {
Create-Directory ".\Binaries\$buildConfiguration\tools\"
# Get the benchview tools - Place alongside Roslyn.Test.Performance.Runner.exe
Exec { & ".\build\scripts\install_benchview_tools.cmd" ".\Binaries\$buildConfiguration\tools\" }
Exec-Block { & ".\build\scripts\install_benchview_tools.cmd" ".\Binaries\$buildConfiguration\tools\" } | Out-Host
}
Terminate-BuildProcesses
......
......@@ -14,10 +14,7 @@ function Run-Tool($tool, $toolArgs) {
throw "$tool does not exist"
}
Exec-Expression "& `"$coreRun`" `"$tool`" $toolArgs"
if ((-not $?) -or ($lastexitcode -ne 0)) {
throw "Failed"
}
Exec-Command "$coreRun" "`"$tool`" $toolArgs" | Out-Host
}
function Run-LanguageCore($language, $languageSuffix, $languageDir, $syntaxTool, $errorFactsTool, $generatedDir, $generatedTestDir) {
......
......@@ -34,24 +34,24 @@ try {
}
Write-Host "Building Roslyn.sln with logging support"
Exec-Echo { & $msbuild /v:m /m /logger:StructuredLogger`,$structuredLoggerPath`;$logPath /nodeReuse:false /p:DeployExtension=false Roslyn.sln }
Exec-Command $msbuild "/v:m /m /logger:StructuredLogger,$structuredLoggerPath;$logPath /nodeReuse:false /p:DeployExtension=false Roslyn.sln"
Write-Host ""
# Verify the state of our various build artifacts
Write-Host "Running BuildBoss"
$buildBossPath = Join-Path $configDir "Exes\BuildBoss\BuildBoss.exe"
Exec-Echo { & $buildBossPath Roslyn.sln Compilers.sln src\Samples\Samples.sln CrossPlatform.sln "build\Targets" $logPath }
Exec-Command $buildBossPath "Roslyn.sln Compilers.sln src\Samples\Samples.sln CrossPlatform.sln build\Targets $logPath"
Write-Host ""
# Verify the state of our project.jsons
Write-Host "Running RepoUtil"
$repoUtilPath = Join-Path $configDir "Exes\RepoUtil\RepoUtil.exe"
Exec-Echo { & $repoUtilPath verify }
Exec-Command $repoUtilPath verify
Write-Host ""
# Verify the state of our generated syntax files
Write-Host "Checking generated compiler files"
Exec-Echo { & (Join-Path $PSScriptRoot "generate-compiler-code.ps1") -test }
Exec-Block { & (Join-Path $PSScriptRoot "generate-compiler-code.ps1") -test }
exit 0
}
......
......@@ -37,12 +37,10 @@ function Run-Build() {
# Clean out the previous run
Write-Host "Cleaning the Binaries"
Remove-Item -re -fo $debugDir
Remove-Item -re -fo $objDir
Exec {& $msbuild /nologo /v:m /nodeReuse:false /t:clean $sln }
Exec-Command $msbuild "/nologo /v:m /nodeReuse:false /t:clean $sln"
Write-Host "Building the Solution"
Exec { & $msbuild /nologo /v:m /nodeReuse:false /m /p:DebugDeterminism=true /p:BootstrapBuildPath=$script:buildDir '/p:Features="debug-determinism;pdb-path-determinism"' /p:UseRoslynAnalyzers=false $pathMapBuildOption $sln }
Exec-Command $msbuild "/nologo /v:m /nodeReuse:false /m /p:DebugDeterminism=true /p:BootstrapBuildPath=$script:buildDir /p:Features=`"debug-determinism;pdb-path-determinism`" /p:UseRoslynAnalyzers=false $pathMapBuildOption $sln"
}
finally {
Pop-Location
......
......@@ -13,7 +13,7 @@ efforts behind them.
| [Async Main](https://github.com/dotnet/csharplang/blob/master/proposals/async-main.md) | [async-main](https://github.com/dotnet/roslyn/tree/features/async-main) | Prototype | [tyoverby](https://github.com/tyoverby) | [vsadov](https://github.com/vsadov) | [stephentoub](https://github.com/stephentoub) |
| [Default Expressions](https://github.com/dotnet/csharplang/blob/master/proposals/target-typed-default.md) | master | Merged | [jcouv](https://github.com/jcouv) | [cston](https://github.com/cston) | [jcouv](https://github.com/jcouv) |
| [Ref Assemblies](https://github.com/dotnet/roslyn/blob/features/refout/docs/features/refout.md) | [refout](https://github.com/dotnet/roslyn/tree/features/refout) | Integration & validation | [jcouv](https://github.com/jcouv) | [gafter](https://github.com/gafter) | N/A |
| [Infer tuple names](https://github.com/dotnet/csharplang/blob/master/proposals/target-typed-default.md) | [tuple-names](https://github.com/dotnet/roslyn/tree/features/tuple-names) | Implementation | [jcouv](https://github.com/jcouv) | [gafter](https://github.com/gafter) | [jcouv](https://github.com/jcouv) |
| [Infer tuple names](https://github.com/dotnet/csharplang/blob/master/proposals/tuple-names.md) | [tuple-names](https://github.com/dotnet/roslyn/tree/features/tuple-names) | Implementation | [jcouv](https://github.com/jcouv) | [gafter](https://github.com/gafter) | [jcouv](https://github.com/jcouv) |
# C# 7.2
......
......@@ -88,26 +88,28 @@ to the invocation and removes the need for error prone if checking after every c
# DO NOT
& msbuild /v:m /m Roslyn.sln
# DO
Exec { & msbuild /v:m /m Roslyn.sln }
Exec-Block { & msbuild /v:m /m Roslyn.sln }
```
Note this will not work for the rare Windows commands which use 0 as an exit code on failure. For
example robocopy and corflags.
In some cases windows commands need to have their argument list built up dynamically. When that
happens do not use Invoke-Expression to execute the command, instead use Exec-Expression. The former
does not fail when the windows command fails and can lead to silent errors. The Exec-Expression
will throw if the underlying expression or windows command fails.
happens do not use Invoke-Expression to execute the command, instead use Exec-Command. The former
does not fail when the windows command fails, can invoke powershell argument parsing and doesn't
have a mechanism for echoing output to console. The Exec-Command uses Process directly and can support
the major functionality needed.
``` powershell
$command = "& msbuild /v:m Roslyn.sln"
$command = "C:\Program Files (x86)\Microsoft Visual Studio\Preview\Dogfood\MSBuild\15.0\Bin\MSBuild.exe"
$args = "/v:m Roslyn.sln"
if (...) {
$command += " /fl /flp:v=diag"
$args += " /fl /flp:v=diag"
}
# DO NOT
Invoke-Expression $command
Invoke-Expression "& $command $args"
# DO
Exec-Expression $command
Exec-Command $command $args
```
......@@ -89,7 +89,7 @@ public static DecisionTree Create(BoundExpression expression, TypeSymbol type, S
{
// Unless it is a constant, the decision tree acts on a copy of the input expression.
// We create a temp to represent that copy. Lowering will assign into this temp.
temp = new SynthesizedLocal(enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatchingTemp, expression.Syntax, false, RefKind.None);
temp = new SynthesizedLocal(enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatching, expression.Syntax, false, RefKind.None);
expression = new BoundLocal(expression.Syntax, temp, null, type);
}
......
......@@ -237,7 +237,7 @@ private DecisionTree AddByValue(DecisionTree.ByType byType, BoundConstantPattern
if (forType == null)
{
var type = value.Value.Type;
var localSymbol = new SynthesizedLocal(_enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatchingTemp, Syntax, false, RefKind.None);
var localSymbol = new SynthesizedLocal(_enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatching, Syntax, false, RefKind.None);
var narrowedExpression = new BoundLocal(Syntax, localSymbol, null, type);
forType = new DecisionTree.ByValue(narrowedExpression, value.Value.Type.TupleUnderlyingTypeOrSelf(), localSymbol);
byType.TypeAndDecision.Add(new KeyValuePair<TypeSymbol, DecisionTree>(value.Value.Type, forType));
......@@ -329,7 +329,7 @@ private DecisionTree AddByType(DecisionTree.ByType byType, TypeSymbol type, Deci
if (result == null)
{
var localSymbol = new SynthesizedLocal(_enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatchingTemp, Syntax, false, RefKind.None);
var localSymbol = new SynthesizedLocal(_enclosingSymbol as MethodSymbol, type, SynthesizedLocalKind.PatternMatching, Syntax, false, RefKind.None);
var expression = new BoundLocal(Syntax, localSymbol, null, type);
result = makeDecision(expression, type);
Debug.Assert(result.Temp == null);
......
......@@ -298,30 +298,15 @@ private BoundBlock VisitAwaitExpression(BoundAwaitExpression node, BoundExpressi
WellKnownMemberNames.GetResult,
resultsDiscarded: resultPlace == null);
var nullAwaiter = F.AssignmentExpression(F.Local(awaiterTemp), F.NullOrDefault(awaiterTemp.Type));
if (resultPlace != null && type.SpecialType != SpecialType.System_Void)
{
// $resultTemp = $awaiterTemp.GetResult();
// $awaiterTemp = null;
// $resultTemp
LocalSymbol resultTemp = F.SynthesizedLocal(type);
return F.Block(
ImmutableArray.Create(awaiterTemp, resultTemp),
awaitIfIncomplete,
F.Assignment(F.Local(resultTemp), getResultCall),
F.ExpressionStatement(nullAwaiter),
F.Assignment(resultPlace, F.Local(resultTemp)));
}
else
{
// $awaiterTemp.GetResult();
// $awaiterTemp = null;
return F.Block(
ImmutableArray.Create(awaiterTemp),
awaitIfIncomplete,
F.ExpressionStatement(getResultCall),
F.ExpressionStatement(nullAwaiter));
}
// [$resultPlace = ] $awaiterTemp.GetResult();
BoundStatement getResultStatement = resultPlace != null && type.SpecialType != SpecialType.System_Void ?
F.Assignment(resultPlace, getResultCall):
F.ExpressionStatement(getResultCall);
return F.Block(
ImmutableArray.Create(awaiterTemp),
awaitIfIncomplete,
getResultStatement);
}
private BoundExpression MakeCallMaybeDynamic(
......
......@@ -5428,7 +5428,7 @@ private void ParseTypeArgumentList(out SyntaxToken open, SeparatedSyntaxListBuil
// remaining types & commas
while (true)
{
if (this.CurrentToken.Kind == SyntaxKind.GreaterThanToken || this.IsPossibleTypeParameterConstraintClauseStart())
if (this.CurrentToken.Kind == SyntaxKind.GreaterThanToken)
{
break;
}
......@@ -5459,11 +5459,6 @@ private PostSkipAction SkipBadTypeArgumentListTokens(SeparatedSyntaxListBuilder<
// Parses the individual generic parameter/arguments in a name.
private TypeSyntax ParseTypeArgument()
{
if (this.IsPossibleTypeParameterConstraintClauseStart())
{
return this.AddError(this.CreateMissingIdentifierName(), ErrorCode.ERR_TypeExpected);
}
var attrs = _pool.Allocate<AttributeListSyntax>();
try
{
......
......@@ -599,7 +599,7 @@ public static async Task<int> F(int[] array)
v.VerifyIL("Test.<F>d__2.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext", @"
{
// Code size 300 (0x12c)
// Code size 290 (0x122)
.maxstack 5
.locals init (int V_0,
int V_1,
......@@ -671,7 +671,7 @@ .maxstack 5
IL_007f: ldloca.s V_5
IL_0081: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter<int>, Test.<F>d__2>(ref System.Runtime.CompilerServices.TaskAwaiter<int>, ref Test.<F>d__2)""
IL_0086: nop
IL_0087: leave IL_012b
IL_0087: leave IL_0121
>IL_008c: ldarg.0
IL_008d: ldfld ""System.Runtime.CompilerServices.TaskAwaiter<int> Test.<F>d__2.<>u__1""
IL_0092: stloc.s V_4
......@@ -683,64 +683,60 @@ .maxstack 5
IL_00a2: dup
IL_00a3: stloc.0
IL_00a4: stfld ""int Test.<F>d__2.<>1__state""
IL_00a9: ldloca.s V_4
IL_00ab: call ""int System.Runtime.CompilerServices.TaskAwaiter<int>.GetResult()""
IL_00b0: stloc.3
IL_00b1: ldloca.s V_4
IL_00b3: initobj ""System.Runtime.CompilerServices.TaskAwaiter<int>""
IL_00b9: ldarg.0
IL_00ba: ldloc.3
IL_00bb: stfld ""int Test.<F>d__2.<>s__3""
IL_00c0: ldarg.0
IL_00c1: ldarg.0
IL_00c2: ldfld ""int[] Test.<F>d__2.<>s__5""
IL_00c7: ldc.i4.3
IL_00c8: ldarg.0
IL_00c9: ldfld ""int Test.<F>d__2.<>s__2""
IL_00ce: ldarg.0
IL_00cf: ldfld ""int Test.<F>d__2.<>s__3""
IL_00d4: add
IL_00d5: dup
IL_00d6: stloc.3
IL_00d7: stelem.i4
IL_00d8: ldloc.3
IL_00d9: stfld ""int Test.<F>d__2.<>s__4""
IL_00de: ldarg.0
IL_00df: ldfld ""int Test.<F>d__2.<>s__1""
IL_00e4: ldarg.0
IL_00e5: ldfld ""int Test.<F>d__2.<>s__4""
IL_00ea: ldc.i4.4
IL_00eb: call ""int Test.H(int, int, int)""
IL_00f0: pop
IL_00f1: ldarg.0
IL_00f2: ldnull
IL_00f3: stfld ""int[] Test.<F>d__2.<>s__5""
-IL_00f8: ldc.i4.1
IL_00f9: stloc.1
IL_00fa: leave.s IL_0116
IL_00a9: ldarg.0
IL_00aa: ldloca.s V_4
IL_00ac: call ""int System.Runtime.CompilerServices.TaskAwaiter<int>.GetResult()""
IL_00b1: stfld ""int Test.<F>d__2.<>s__3""
IL_00b6: ldarg.0
IL_00b7: ldarg.0
IL_00b8: ldfld ""int[] Test.<F>d__2.<>s__5""
IL_00bd: ldc.i4.3
IL_00be: ldarg.0
IL_00bf: ldfld ""int Test.<F>d__2.<>s__2""
IL_00c4: ldarg.0
IL_00c5: ldfld ""int Test.<F>d__2.<>s__3""
IL_00ca: add
IL_00cb: dup
IL_00cc: stloc.3
IL_00cd: stelem.i4
IL_00ce: ldloc.3
IL_00cf: stfld ""int Test.<F>d__2.<>s__4""
IL_00d4: ldarg.0
IL_00d5: ldfld ""int Test.<F>d__2.<>s__1""
IL_00da: ldarg.0
IL_00db: ldfld ""int Test.<F>d__2.<>s__4""
IL_00e0: ldc.i4.4
IL_00e1: call ""int Test.H(int, int, int)""
IL_00e6: pop
IL_00e7: ldarg.0
IL_00e8: ldnull
IL_00e9: stfld ""int[] Test.<F>d__2.<>s__5""
-IL_00ee: ldc.i4.1
IL_00ef: stloc.1
IL_00f0: leave.s IL_010c
}
catch System.Exception
{
~IL_00fc: stloc.s V_6
IL_00fe: ldarg.0
IL_00ff: ldc.i4.s -2
IL_0101: stfld ""int Test.<F>d__2.<>1__state""
IL_0106: ldarg.0
IL_0107: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> Test.<F>d__2.<>t__builder""
IL_010c: ldloc.s V_6
IL_010e: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetException(System.Exception)""
IL_0113: nop
IL_0114: leave.s IL_012b
~IL_00f2: stloc.s V_6
IL_00f4: ldarg.0
IL_00f5: ldc.i4.s -2
IL_00f7: stfld ""int Test.<F>d__2.<>1__state""
IL_00fc: ldarg.0
IL_00fd: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> Test.<F>d__2.<>t__builder""
IL_0102: ldloc.s V_6
IL_0104: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetException(System.Exception)""
IL_0109: nop
IL_010a: leave.s IL_0121
}
-IL_0116: ldarg.0
IL_0117: ldc.i4.s -2
IL_0119: stfld ""int Test.<F>d__2.<>1__state""
~IL_011e: ldarg.0
IL_011f: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> Test.<F>d__2.<>t__builder""
IL_0124: ldloc.1
IL_0125: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetResult(int)""
IL_012a: nop
IL_012b: ret
-IL_010c: ldarg.0
IL_010d: ldc.i4.s -2
IL_010f: stfld ""int Test.<F>d__2.<>1__state""
~IL_0114: ldarg.0
IL_0115: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> Test.<F>d__2.<>t__builder""
IL_011a: ldloc.1
IL_011b: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetResult(int)""
IL_0120: nop
IL_0121: ret
}", sequencePoints: "Test+<F>d__2.MoveNext");
}
......
......@@ -2090,7 +2090,7 @@ public static async Task<T> Test<T>(T a)
verifier.VerifyDiagnostics();
verifier.VerifyIL("C.<Test>d__1<T>.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()", @"
{
// Code size 191 (0xbf)
// Code size 183 (0xb7)
.maxstack 3
.locals init (int V_0,
T V_1,
......@@ -2132,7 +2132,7 @@ .maxstack 3
IL_004e: ldloca.s V_2
IL_0050: ldarg.0
IL_0051: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, C.<Test>d__1<T>>(ref System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, ref C.<Test>d__1<T>)""
IL_0056: leave.s IL_00be
IL_0056: leave.s IL_00b6
IL_0058: ldarg.0
IL_0059: ldfld ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter C.<Test>d__1<T>.<>u__1""
IL_005e: stloc.2
......@@ -2146,34 +2146,32 @@ .maxstack 3
IL_006f: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0074: ldloca.s V_2
IL_0076: call ""void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult()""
IL_007b: ldloca.s V_2
IL_007d: initobj ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter""
IL_0083: ldarg.0
IL_0084: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0089: ldfld ""T System.ValueTuple<T, T>.Item1""
IL_008e: stloc.1
IL_008f: leave.s IL_00aa
IL_007b: ldarg.0
IL_007c: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0081: ldfld ""T System.ValueTuple<T, T>.Item1""
IL_0086: stloc.1
IL_0087: leave.s IL_00a2
}
catch System.Exception
{
IL_0091: stloc.s V_4
IL_0089: stloc.s V_4
IL_008b: ldarg.0
IL_008c: ldc.i4.s -2
IL_008e: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0093: ldarg.0
IL_0094: ldc.i4.s -2
IL_0096: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_009b: ldarg.0
IL_009c: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00a1: ldloc.s V_4
IL_00a3: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_00a8: leave.s IL_00be
IL_0094: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_0099: ldloc.s V_4
IL_009b: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_00a0: leave.s IL_00b6
}
IL_00a2: ldarg.0
IL_00a3: ldc.i4.s -2
IL_00a5: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00aa: ldarg.0
IL_00ab: ldc.i4.s -2
IL_00ad: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00b2: ldarg.0
IL_00b3: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00b8: ldloc.1
IL_00b9: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00be: ret
IL_00ab: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00b0: ldloc.1
IL_00b1: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00b6: ret
}
");
}
......@@ -2206,7 +2204,7 @@ public static async Task<string> Test<T>(T a)
verifier.VerifyDiagnostics();
verifier.VerifyIL("C.<Test>d__1<T>.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()", @"
{
// Code size 197 (0xc5)
// Code size 189 (0xbd)
.maxstack 3
.locals init (int V_0,
string V_1,
......@@ -2248,7 +2246,7 @@ .maxstack 3
IL_004e: ldloca.s V_2
IL_0050: ldarg.0
IL_0051: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, C.<Test>d__1<T>>(ref System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, ref C.<Test>d__1<T>)""
IL_0056: leave.s IL_00c4
IL_0056: leave.s IL_00bc
IL_0058: ldarg.0
IL_0059: ldfld ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter C.<Test>d__1<T>.<>u__1""
IL_005e: stloc.2
......@@ -2262,35 +2260,33 @@ .maxstack 3
IL_006f: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0074: ldloca.s V_2
IL_0076: call ""void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult()""
IL_007b: ldloca.s V_2
IL_007d: initobj ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter""
IL_0083: ldarg.0
IL_0084: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0089: constrained. ""System.ValueTuple<T, T>""
IL_008f: callvirt ""string object.ToString()""
IL_0094: stloc.1
IL_0095: leave.s IL_00b0
IL_007b: ldarg.0
IL_007c: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0081: constrained. ""System.ValueTuple<T, T>""
IL_0087: callvirt ""string object.ToString()""
IL_008c: stloc.1
IL_008d: leave.s IL_00a8
}
catch System.Exception
{
IL_0097: stloc.s V_4
IL_008f: stloc.s V_4
IL_0091: ldarg.0
IL_0092: ldc.i4.s -2
IL_0094: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0099: ldarg.0
IL_009a: ldc.i4.s -2
IL_009c: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00a1: ldarg.0
IL_00a2: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string> C.<Test>d__1<T>.<>t__builder""
IL_00a7: ldloc.s V_4
IL_00a9: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string>.SetException(System.Exception)""
IL_00ae: leave.s IL_00c4
IL_009a: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string> C.<Test>d__1<T>.<>t__builder""
IL_009f: ldloc.s V_4
IL_00a1: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string>.SetException(System.Exception)""
IL_00a6: leave.s IL_00bc
}
IL_00a8: ldarg.0
IL_00a9: ldc.i4.s -2
IL_00ab: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00b0: ldarg.0
IL_00b1: ldc.i4.s -2
IL_00b3: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00b8: ldarg.0
IL_00b9: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string> C.<Test>d__1<T>.<>t__builder""
IL_00be: ldloc.1
IL_00bf: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string>.SetResult(string)""
IL_00c4: ret
IL_00b1: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string> C.<Test>d__1<T>.<>t__builder""
IL_00b6: ldloc.1
IL_00b7: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<string>.SetResult(string)""
IL_00bc: ret
}
");
}
......@@ -2349,7 +2345,7 @@ public U Test<U>(U val)
verifier.VerifyDiagnostics();
verifier.VerifyIL("C.<Test>d__1<T>.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()", @"
{
// Code size 197 (0xc5)
// Code size 189 (0xbd)
.maxstack 3
.locals init (int V_0,
T V_1,
......@@ -2391,7 +2387,7 @@ .maxstack 3
IL_004e: ldloca.s V_2
IL_0050: ldarg.0
IL_0051: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, C.<Test>d__1<T>>(ref System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, ref C.<Test>d__1<T>)""
IL_0056: leave.s IL_00c4
IL_0056: leave.s IL_00bc
IL_0058: ldarg.0
IL_0059: ldfld ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter C.<Test>d__1<T>.<>u__1""
IL_005e: stloc.2
......@@ -2405,36 +2401,34 @@ .maxstack 3
IL_006f: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0074: ldloca.s V_2
IL_0076: call ""void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult()""
IL_007b: ldloca.s V_2
IL_007d: initobj ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter""
IL_0083: ldarg.0
IL_0084: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0089: ldarg.0
IL_008a: ldfld ""T C.<Test>d__1<T>.a""
IL_008f: call ""T System.ValueTuple<T, T>.Test<T>(T)""
IL_0094: stloc.1
IL_0095: leave.s IL_00b0
IL_007b: ldarg.0
IL_007c: ldflda ""(T f1, T f2) C.<Test>d__1<T>.<x>5__1""
IL_0081: ldarg.0
IL_0082: ldfld ""T C.<Test>d__1<T>.a""
IL_0087: call ""T System.ValueTuple<T, T>.Test<T>(T)""
IL_008c: stloc.1
IL_008d: leave.s IL_00a8
}
catch System.Exception
{
IL_0097: stloc.s V_4
IL_008f: stloc.s V_4
IL_0091: ldarg.0
IL_0092: ldc.i4.s -2
IL_0094: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0099: ldarg.0
IL_009a: ldc.i4.s -2
IL_009c: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00a1: ldarg.0
IL_00a2: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00a7: ldloc.s V_4
IL_00a9: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_00ae: leave.s IL_00c4
IL_009a: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_009f: ldloc.s V_4
IL_00a1: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_00a6: leave.s IL_00bc
}
IL_00a8: ldarg.0
IL_00a9: ldc.i4.s -2
IL_00ab: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00b0: ldarg.0
IL_00b1: ldc.i4.s -2
IL_00b3: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00b8: ldarg.0
IL_00b9: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00be: ldloc.1
IL_00bf: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00c4: ret
IL_00b1: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00b6: ldloc.1
IL_00b7: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00bc: ret
}
");
}
......@@ -2493,7 +2487,7 @@ public U Test<U>(U val)
verifier.VerifyDiagnostics();
verifier.VerifyIL("C.<Test>d__1<T>.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()", @"
{
// Code size 187 (0xbb)
// Code size 179 (0xb3)
.maxstack 3
.locals init (int V_0,
T V_1,
......@@ -2533,7 +2527,7 @@ .maxstack 3
IL_0044: ldloca.s V_2
IL_0046: ldarg.0
IL_0047: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, C.<Test>d__1<T>>(ref System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, ref C.<Test>d__1<T>)""
IL_004c: leave.s IL_00ba
IL_004c: leave.s IL_00b2
IL_004e: ldarg.0
IL_004f: ldfld ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter C.<Test>d__1<T>.<>u__1""
IL_0054: stloc.2
......@@ -2547,36 +2541,34 @@ .maxstack 3
IL_0065: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_006a: ldloca.s V_2
IL_006c: call ""void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult()""
IL_0071: ldloca.s V_2
IL_0073: initobj ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter""
IL_0079: ldarg.0
IL_007a: ldflda ""(int f1, int f2) C.<Test>d__1<T>.<x>5__1""
IL_007f: ldarg.0
IL_0080: ldfld ""T C.<Test>d__1<T>.a""
IL_0085: call ""T System.ValueTuple<int, int>.Test<T>(T)""
IL_008a: stloc.1
IL_008b: leave.s IL_00a6
IL_0071: ldarg.0
IL_0072: ldflda ""(int f1, int f2) C.<Test>d__1<T>.<x>5__1""
IL_0077: ldarg.0
IL_0078: ldfld ""T C.<Test>d__1<T>.a""
IL_007d: call ""T System.ValueTuple<int, int>.Test<T>(T)""
IL_0082: stloc.1
IL_0083: leave.s IL_009e
}
catch System.Exception
{
IL_008d: stloc.s V_4
IL_0085: stloc.s V_4
IL_0087: ldarg.0
IL_0088: ldc.i4.s -2
IL_008a: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_008f: ldarg.0
IL_0090: ldc.i4.s -2
IL_0092: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_0097: ldarg.0
IL_0098: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_009d: ldloc.s V_4
IL_009f: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_00a4: leave.s IL_00ba
IL_0090: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_0095: ldloc.s V_4
IL_0097: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetException(System.Exception)""
IL_009c: leave.s IL_00b2
}
IL_009e: ldarg.0
IL_009f: ldc.i4.s -2
IL_00a1: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00a6: ldarg.0
IL_00a7: ldc.i4.s -2
IL_00a9: stfld ""int C.<Test>d__1<T>.<>1__state""
IL_00ae: ldarg.0
IL_00af: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00b4: ldloc.1
IL_00b5: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00ba: ret
IL_00a7: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T> C.<Test>d__1<T>.<>t__builder""
IL_00ac: ldloc.1
IL_00ad: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<T>.SetResult(T)""
IL_00b2: ret
}
");
}
......@@ -19264,7 +19256,7 @@ static async Task<long> Test()
// NOTE: !!! There should be an IL local for " (byte x, int y) v2 " , it should not be captured
verifier.VerifyIL("C.<Test>d__1.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()", @"
{
// Code size 201 (0xc9)
// Code size 193 (0xc1)
.maxstack 3
.locals init (int V_0,
long V_1,
......@@ -19311,7 +19303,7 @@ .maxstack 3
IL_0058: ldloca.s V_3
IL_005a: ldarg.0
IL_005b: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, C.<Test>d__1>(ref System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter, ref C.<Test>d__1)""
IL_0060: leave.s IL_00c8
IL_0060: leave.s IL_00c0
IL_0062: ldarg.0
IL_0063: ldfld ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter C.<Test>d__1.<>u__1""
IL_0068: stloc.3
......@@ -19325,34 +19317,32 @@ .maxstack 3
IL_0079: stfld ""int C.<Test>d__1.<>1__state""
IL_007e: ldloca.s V_3
IL_0080: call ""void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.GetResult()""
IL_0085: ldloca.s V_3
IL_0087: initobj ""System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter""
IL_008d: ldarg.0
IL_008e: ldflda ""(long a, int b) C.<Test>d__1.<v1>5__1""
IL_0093: ldfld ""long System.ValueTuple<long, int>.Item1""
IL_0098: stloc.1
IL_0099: leave.s IL_00b4
IL_0085: ldarg.0
IL_0086: ldflda ""(long a, int b) C.<Test>d__1.<v1>5__1""
IL_008b: ldfld ""long System.ValueTuple<long, int>.Item1""
IL_0090: stloc.1
IL_0091: leave.s IL_00ac
}
catch System.Exception
{
IL_009b: stloc.s V_5
IL_0093: stloc.s V_5
IL_0095: ldarg.0
IL_0096: ldc.i4.s -2
IL_0098: stfld ""int C.<Test>d__1.<>1__state""
IL_009d: ldarg.0
IL_009e: ldc.i4.s -2
IL_00a0: stfld ""int C.<Test>d__1.<>1__state""
IL_00a5: ldarg.0
IL_00a6: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long> C.<Test>d__1.<>t__builder""
IL_00ab: ldloc.s V_5
IL_00ad: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long>.SetException(System.Exception)""
IL_00b2: leave.s IL_00c8
IL_009e: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long> C.<Test>d__1.<>t__builder""
IL_00a3: ldloc.s V_5
IL_00a5: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long>.SetException(System.Exception)""
IL_00aa: leave.s IL_00c0
}
IL_00ac: ldarg.0
IL_00ad: ldc.i4.s -2
IL_00af: stfld ""int C.<Test>d__1.<>1__state""
IL_00b4: ldarg.0
IL_00b5: ldc.i4.s -2
IL_00b7: stfld ""int C.<Test>d__1.<>1__state""
IL_00bc: ldarg.0
IL_00bd: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long> C.<Test>d__1.<>t__builder""
IL_00c2: ldloc.1
IL_00c3: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long>.SetResult(long)""
IL_00c8: ret
IL_00b5: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long> C.<Test>d__1.<>t__builder""
IL_00ba: ldloc.1
IL_00bb: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<long>.SetResult(long)""
IL_00c0: ret
}
");
}
......
......@@ -2969,7 +2969,7 @@ public async Task<int> F()
v0.VerifyIL("C.<F>d__0.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext", @"
{
// Code size 254 (0xfe)
// Code size 246 (0xf6)
.maxstack 3
.locals init (int V_0,
int V_1,
......@@ -3047,7 +3047,7 @@ .maxstack 3
IL_0094: ldloca.s V_3
IL_0096: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.AwaitUnsafeOnCompleted<System.Runtime.CompilerServices.TaskAwaiter<int>, C.<F>d__0>(ref System.Runtime.CompilerServices.TaskAwaiter<int>, ref C.<F>d__0)""
IL_009b: nop
IL_009c: leave.s IL_00fd
IL_009c: leave.s IL_00f5
>IL_009e: ldarg.0
IL_009f: ldfld ""System.Runtime.CompilerServices.TaskAwaiter<int> C.<F>d__0.<>u__1""
IL_00a4: stloc.2
......@@ -3062,34 +3062,32 @@ .maxstack 3
IL_00ba: ldloca.s V_2
IL_00bc: call ""int System.Runtime.CompilerServices.TaskAwaiter<int>.GetResult()""
IL_00c1: pop
IL_00c2: ldloca.s V_2
IL_00c4: initobj ""System.Runtime.CompilerServices.TaskAwaiter<int>""
-IL_00ca: ldc.i4.1
IL_00cb: stloc.1
IL_00cc: leave.s IL_00e8
-IL_00c2: ldc.i4.1
IL_00c3: stloc.1
IL_00c4: leave.s IL_00e0
}
catch System.Exception
{
~IL_00ce: stloc.s V_4
~IL_00c6: stloc.s V_4
IL_00c8: ldarg.0
IL_00c9: ldc.i4.s -2
IL_00cb: stfld ""int C.<F>d__0.<>1__state""
IL_00d0: ldarg.0
IL_00d1: ldc.i4.s -2
IL_00d3: stfld ""int C.<F>d__0.<>1__state""
IL_00d8: ldarg.0
IL_00d9: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> C.<F>d__0.<>t__builder""
IL_00de: ldloc.s V_4
IL_00e0: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetException(System.Exception)""
IL_00e5: nop
IL_00e6: leave.s IL_00fd
IL_00d1: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> C.<F>d__0.<>t__builder""
IL_00d6: ldloc.s V_4
IL_00d8: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetException(System.Exception)""
IL_00dd: nop
IL_00de: leave.s IL_00f5
}
-IL_00e8: ldarg.0
IL_00e9: ldc.i4.s -2
IL_00eb: stfld ""int C.<F>d__0.<>1__state""
~IL_00f0: ldarg.0
IL_00f1: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> C.<F>d__0.<>t__builder""
IL_00f6: ldloc.1
IL_00f7: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetResult(int)""
IL_00fc: nop
IL_00fd: ret
-IL_00e0: ldarg.0
IL_00e1: ldc.i4.s -2
IL_00e3: stfld ""int C.<F>d__0.<>1__state""
~IL_00e8: ldarg.0
IL_00e9: ldflda ""System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int> C.<F>d__0.<>t__builder""
IL_00ee: ldloc.1
IL_00ef: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetResult(int)""
IL_00f4: nop
IL_00f5: ret
}
", sequencePoints: "C+<F>d__0.MoveNext");
......
......@@ -1894,11 +1894,11 @@ class C
var calls = actualIL.Split(new[] { '\n', '\r' }, System.StringSplitOptions.RemoveEmptyEntries).Where(s => s.Contains("OnCompleted")).ToArray();
Assert.Equal(calls.Length, 6);
Assert.Equal(" IL_0056: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted<T1, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T1, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[0]);
Assert.Equal(" IL_00c1: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T2, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T2, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[1]);
Assert.Equal(" IL_012c: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T3, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T3, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[2]);
Assert.Equal(" IL_019a: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted<T4, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T4, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[3]);
Assert.Equal(" IL_020a: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T5, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T5, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[4]);
Assert.Equal(" IL_027a: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T6, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T6, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[5]);
Assert.Equal(" IL_00b9: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T2, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T2, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[1]);
Assert.Equal(" IL_011c: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T3, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T3, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[2]);
Assert.Equal(" IL_0182: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted<T4, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T4, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[3]);
Assert.Equal(" IL_01ea: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T5, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T5, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[4]);
Assert.Equal(" IL_0252: call \"void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted<T6, C.<F>d__0<T1, T2, T3, T4, T5, T6>>(ref T6, ref C.<F>d__0<T1, T2, T3, T4, T5, T6>)\"", calls[5]);
}
[Fact]
......
......@@ -204,4 +204,4 @@ internal static int BinarySearchUpperBound(this int[] array, int value)
return low;
}
}
}
}
\ No newline at end of file
......@@ -32,11 +32,6 @@ internal enum SynthesizedLocalKind
/// </summary>
FrameCache = -5,
/// <summary>
/// Temp created for pattern matching by type.
/// </summary>
PatternMatchingTemp = -4,
/// <summary>
/// Temp variable created by the optimizer.
/// </summary>
......@@ -53,7 +48,9 @@ internal enum SynthesizedLocalKind
EmitterTemp = -1,
/// <summary>
/// The variable is not synthesized (C#, VB).
/// The variable is not synthesized (C#, VB). Note that SynthesizedLocalKind values
/// greater than or equal to this are considered long-lived;
/// see <see cref="SynthesizedLocalKindExtensions.IsLongLived"/>.
/// </summary>
UserDefined = 0,
......@@ -206,6 +203,12 @@ internal enum SynthesizedLocalKind
/// </summary>
InstrumentationPayload = 34,
/// <summary>
/// Temp created for pattern matching by type. This holds the value of an input value provisionally
/// converted to the type against which it is being matched.
/// </summary>
PatternMatching = 35,
/// <summary>
/// All values have to be less than or equal to <see cref="MaxValidValueForLocalVariableSerializedToDebugInformation"/>
/// (<see cref="EditAndContinueMethodDebugInformation"/>)
......
......@@ -486,6 +486,9 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
? ImmutableArray.Create<MetadataReference>(NetStandard20.NetStandard, NetStandard20.MscorlibRef, NetStandard20.SystemRuntimeRef, NetStandard20.SystemDynamicRuntimeRef)
: ImmutableArray.Create(MscorlibRef);
// Careful! Make sure everything in s_desktopRefsToRemove is constructed with
// the same object identity, since MetadataReference uses reference equality.
// this may mean adding Interlocked calls in the construction of the reference.
private static readonly ImmutableArray<MetadataReference> s_desktopRefsToRemove = ImmutableArray.Create(SystemRef, SystemCoreRef);
public static CSharpCompilation CreateStandardCompilation(
......
......@@ -108,7 +108,6 @@
<Compile Include="EventHookup\IHACK_EventHookupDismissalOnBufferChangePreventerService.cs" />
<Compile Include="ExtractInterface\ExtractInterfaceCommandHandler.cs" />
<Compile Include="ExtractMethod\ExtractMethodCommandHandler.cs" />
<Compile Include="FindReferences\CSharpFindReferencesService.cs" />
<Compile Include="FindUsages\CSharpFindUsagesService.cs" />
<Compile Include="Formatting\CSharpEditorFormattingService.cs" />
<Compile Include="Formatting\Indentation\CSharpIndentationService.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Composition;
using Microsoft.CodeAnalysis.Editor.FindReferences;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Host.Mef;
namespace Microsoft.CodeAnalysis.Editor.CSharp.FindReferences
{
[ExportLanguageService(typeof(IFindReferencesService), LanguageNames.CSharp), Shared]
internal class CSharpFindReferencesService : AbstractFindReferencesService
{
[ImportingConstructor]
public CSharpFindReferencesService(
[ImportMany] IEnumerable<IDefinitionsAndReferencesPresenter> referencedSymbolsPresenters,
[ImportMany] IEnumerable<INavigableItemsPresenter> navigableItemsPresenters)
: base(referencedSymbolsPresenters, navigableItemsPresenters)
{
}
}
}
\ No newline at end of file
......@@ -10,10 +10,9 @@
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.Extensions;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
using Roslyn.Test.Utilities;
using Roslyn.Utilities;
using Xunit;
using Microsoft.CodeAnalysis.Editor.UnitTests.Utilities;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeRefactorings
{
......@@ -28,7 +27,7 @@ public async Task TestExceptionInComputePreview()
}
}
[Fact]
[WpfFact]
public void TestExceptionInDisplayText()
{
using (var workspace = CreateWorkspaceFromFile("class D {}", new TestParameters()))
......@@ -83,8 +82,8 @@ private async Task ActionSets(TestWorkspace workspace, CodeRefactoringProvider p
}
private static void RefactoringSetup(
TestWorkspace workspace, CodeRefactoringProvider provider, List<CodeAction> codeActions,
out EditorLayerExtensionManager.ExtensionManager extensionManager,
TestWorkspace workspace, CodeRefactoringProvider provider, List<CodeAction> codeActions,
out EditorLayerExtensionManager.ExtensionManager extensionManager,
out VisualStudio.Text.ITextBuffer textBuffer)
{
var document = GetDocument(workspace);
......@@ -96,4 +95,4 @@ private async Task ActionSets(TestWorkspace workspace, CodeRefactoringProvider p
textBuffer = document.GetTextAsync().Result.Container.GetTextBuffer();
}
}
}
}
\ No newline at end of file
......@@ -213,8 +213,6 @@
<Compile Include="Extensions\ITextSnapshotExtensionsTests.cs" />
<Compile Include="Extensions\ITextSnapshotLineExtensionsTests.cs" />
<Compile Include="Extensions\SetExtensionTests.cs" />
<Compile Include="FindReferences\FindReferencesCommandHandlerTests.cs" />
<Compile Include="FindReferences\MockDefinitionsAndReferencesPresenter.cs" />
<Compile Include="LineSeparators\AdornmentManagerTests.cs" />
<Compile Include="LinkedFiles\LinkedFileDiffMergingEditorTests.cs" />
<Compile Include="MetadataAsSource\AbstractMetadataAsSourceTests.cs" />
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册