mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Revert "Make switch statement report correct error position when it fails to evaluate the condition" (#7182)
The fix causes a problem in debugging. When stepping over the scripts in debugging mode, the debugger will stop at the switch statement condition expression twice at the very beginning -- one for evaluating the condition, and one for iterating the condition.
This commit is contained in:
@@ -4189,7 +4189,10 @@ namespace System.Management.Automation.Language
|
||||
// $foreach/$switch = GetEnumerator $enumerable
|
||||
var enumerable = NewTemp(typeof(object), "enumerable");
|
||||
temps.Add(enumerable);
|
||||
exprs.Add(UpdatePosition(stmt.Condition));
|
||||
if (generatingForeach)
|
||||
{
|
||||
exprs.Add(UpdatePosition(stmt.Condition));
|
||||
}
|
||||
exprs.Add(
|
||||
Expression.Assign(enumerable,
|
||||
GetRangeEnumerator(stmt.Condition.GetPureExpression())
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
|
||||
Describe "Error position Tests" -Tags "CI" {
|
||||
It "switch condition evaluation failure should report correct error position" {
|
||||
$testFile = Join-Path $TestDrive "SwitchError1.ps1"
|
||||
Set-Content -Path $testFile -Encoding Ascii -Value @'
|
||||
$test = 1
|
||||
switch ($null[0]) {
|
||||
"a" {};
|
||||
}
|
||||
'@
|
||||
try { & $testFile } catch { $errorRecord = $_ }
|
||||
$errorRecord | Should -Not -BeNullOrEmpty
|
||||
$errorRecord.ScriptStackTrace | Should -Match "SwitchError1.ps1: line 2"
|
||||
}
|
||||
|
||||
It "switch condition MoveNext failure should report correct error position" {
|
||||
$code = @'
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
namespace SwitchTest
|
||||
{
|
||||
public class Test
|
||||
{
|
||||
public static IEnumerable<string> GetName()
|
||||
{
|
||||
yield return "Hello world";
|
||||
throw new ArgumentException();
|
||||
}
|
||||
}
|
||||
}
|
||||
'@
|
||||
$testFile = Join-Path $TestDrive "SwitchError2.ps1"
|
||||
Set-Content -Path $testFile -Encoding Ascii -Value @'
|
||||
$test = 1
|
||||
$enumerable = [SwitchTest.Test]::GetName()
|
||||
switch ($enumerable) {
|
||||
"hello world" { $test = 1; $_ }
|
||||
"Yay" { $test = 2; $_ }
|
||||
}
|
||||
'@
|
||||
if (-not ("SwitchTest.Test" -as [type])) {
|
||||
Add-Type -TypeDefinition $code
|
||||
}
|
||||
|
||||
try { & $testFile > $null } catch { $errorRecord = $_ }
|
||||
$errorRecord | Should -Not -BeNullOrEmpty
|
||||
$errorRecord.ScriptStackTrace | Should -Match "SwitchError2.ps1: line 3"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user