diff --git a/src/System.Management.Automation/engine/parser/Parser.cs b/src/System.Management.Automation/engine/parser/Parser.cs index 65a45bcf68..1310b24952 100644 --- a/src/System.Management.Automation/engine/parser/Parser.cs +++ b/src/System.Management.Automation/engine/parser/Parser.cs @@ -4311,23 +4311,33 @@ namespace System.Management.Automation.Language IScriptExtent endExtent = enumeratorName.Extent; ExpressionAst initialValueAst = null; - var assignToken = PeekToken(); var missingInitializer = false; - if (assignToken.Kind == TokenKind.Equals) + var oldTokenizerMode = _tokenizer.Mode; + Token assignToken = null; + try { - SkipToken(); - initialValueAst = ExpressionRule(); - if (initialValueAst == null) + SetTokenizerMode(TokenizerMode.Expression); + assignToken = PeekToken(); + if (assignToken.Kind == TokenKind.Equals) { - ReportError(After(assignToken), () => ParserStrings.ExpectedValueExpression, assignToken.Kind.Text()); - endExtent = assignToken.Extent; - missingInitializer = true; - } - else - { - endExtent = initialValueAst.Extent; + SkipToken(); + initialValueAst = ExpressionRule(); + if (initialValueAst == null) + { + ReportError(After(assignToken), () => ParserStrings.ExpectedValueExpression, assignToken.Kind.Text()); + endExtent = assignToken.Extent; + missingInitializer = true; + } + else + { + endExtent = initialValueAst.Extent; + } } } + finally + { + SetTokenizerMode(oldTokenizerMode); + } Token terminatorToken = PeekToken(); if (terminatorToken.Kind != TokenKind.NewLine && terminatorToken.Kind != TokenKind.Semi && terminatorToken.Kind != TokenKind.RCurly) diff --git a/test/powershell/Language/Classes/scripting.enums.tests.ps1 b/test/powershell/Language/Classes/scripting.enums.tests.ps1 index fbca0604c0..f13b31be47 100644 --- a/test/powershell/Language/Classes/scripting.enums.tests.ps1 +++ b/test/powershell/Language/Classes/scripting.enums.tests.ps1 @@ -3,7 +3,6 @@ # Describe 'enums' -Tags "CI" { - Context 'basic enums' { enum E1 { @@ -62,9 +61,10 @@ Describe 'enums' -Tags "CI" { e0 = [E6]::e0 + 2 } + # Don't add space after 'e0 ='! Fix #2543 enum E6 { - e0 = 38 + e0 =38 } It 'E4 has correct value' { [E4]::e0 | Should Be ([E4]42) }