@@ -4136,7 +4136,7 @@ public void RangeExpression_Binary_WithALowerPrecedenceOperator()
41364136 public void RangeExpression_Binary_WithAHigherPrecedenceOperator ( )
41374137 {
41384138 UsingExpression ( "1+2..3-4" ) ;
4139- N ( SyntaxKind . RangeExpression ) ;
4139+ N ( SyntaxKind . SubtractExpression ) ;
41404140 {
41414141 N ( SyntaxKind . AddExpression ) ;
41424142 {
@@ -4145,23 +4145,301 @@ public void RangeExpression_Binary_WithAHigherPrecedenceOperator()
41454145 N ( SyntaxKind . NumericLiteralToken , "1" ) ;
41464146 }
41474147 N ( SyntaxKind . PlusToken ) ;
4148- N ( SyntaxKind . NumericLiteralExpression ) ;
4148+ N ( SyntaxKind . RangeExpression ) ;
41494149 {
4150- N ( SyntaxKind . NumericLiteralToken , "2" ) ;
4150+ N ( SyntaxKind . NumericLiteralExpression ) ;
4151+ {
4152+ N ( SyntaxKind . NumericLiteralToken , "2" ) ;
4153+ }
4154+ N ( SyntaxKind . DotDotToken ) ;
4155+ N ( SyntaxKind . NumericLiteralExpression ) ;
4156+ {
4157+ N ( SyntaxKind . NumericLiteralToken , "3" ) ;
4158+ }
41514159 }
41524160 }
4161+ N ( SyntaxKind . MinusToken ) ;
4162+ N ( SyntaxKind . NumericLiteralExpression ) ;
4163+ {
4164+ N ( SyntaxKind . NumericLiteralToken , "4" ) ;
4165+ }
4166+ }
4167+ EOF ( ) ;
4168+ }
4169+
4170+ [ Fact ]
4171+ public void RangeExpression_UnaryBadLeft ( )
4172+ {
4173+ UsingExpression ( "a*..b" ) ;
4174+ N ( SyntaxKind . MultiplyExpression ) ;
4175+ {
4176+ N ( SyntaxKind . IdentifierName ) ;
4177+ {
4178+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4179+ }
4180+ N ( SyntaxKind . AsteriskToken ) ;
4181+ N ( SyntaxKind . RangeExpression ) ;
4182+ {
4183+ N ( SyntaxKind . DotDotToken ) ;
4184+ N ( SyntaxKind . IdentifierName ) ;
4185+ {
4186+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4187+ }
4188+ }
4189+ }
4190+ EOF ( ) ;
4191+ }
4192+
4193+ [ Fact ]
4194+ public void RangeExpression_BinaryLeftPlus ( )
4195+ {
4196+ UsingExpression ( "a + b..c" ) ;
4197+ N ( SyntaxKind . AddExpression ) ;
4198+ {
4199+ N ( SyntaxKind . IdentifierName ) ;
4200+ {
4201+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4202+ }
4203+ N ( SyntaxKind . PlusToken ) ;
4204+ N ( SyntaxKind . RangeExpression ) ;
4205+ {
4206+ N ( SyntaxKind . IdentifierName ) ;
4207+ {
4208+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4209+ }
4210+ N ( SyntaxKind . DotDotToken ) ;
4211+ N ( SyntaxKind . IdentifierName ) ;
4212+ {
4213+ N ( SyntaxKind . IdentifierToken , "c" ) ;
4214+ }
4215+ }
4216+ }
4217+ EOF ( ) ;
4218+ }
4219+
4220+ [ Fact ]
4221+ public void RangeExpression_UnaryLeftPlus ( )
4222+ {
4223+ UsingExpression ( "a + b.." ) ;
4224+ N ( SyntaxKind . AddExpression ) ;
4225+ {
4226+ N ( SyntaxKind . IdentifierName ) ;
4227+ {
4228+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4229+ }
4230+ N ( SyntaxKind . PlusToken ) ;
4231+ N ( SyntaxKind . RangeExpression ) ;
4232+ {
4233+ N ( SyntaxKind . IdentifierName ) ;
4234+ {
4235+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4236+ }
4237+ N ( SyntaxKind . DotDotToken ) ;
4238+ }
4239+ }
4240+ EOF ( ) ;
4241+ }
4242+
4243+ [ Fact ]
4244+ public void RangeExpression_UnaryRightMult ( )
4245+ {
4246+ UsingExpression ( "a.. && b" ) ;
4247+ N ( SyntaxKind . LogicalAndExpression ) ;
4248+ {
4249+ N ( SyntaxKind . RangeExpression ) ;
4250+ {
4251+ N ( SyntaxKind . IdentifierName ) ;
4252+ {
4253+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4254+ }
4255+ N ( SyntaxKind . DotDotToken ) ;
4256+ }
4257+ N ( SyntaxKind . AmpersandAmpersandToken ) ;
4258+ N ( SyntaxKind . IdentifierName ) ;
4259+ {
4260+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4261+ }
4262+ }
4263+ EOF ( ) ;
4264+ }
4265+
4266+ [ Fact ]
4267+ public void RangeExpression_UnaryRightMult2 ( )
4268+ {
4269+ UsingExpression ( "..a && b" ) ;
4270+ N ( SyntaxKind . LogicalAndExpression ) ;
4271+ {
4272+ N ( SyntaxKind . RangeExpression ) ;
4273+ {
4274+ N ( SyntaxKind . DotDotToken ) ;
4275+ N ( SyntaxKind . IdentifierName ) ;
4276+ {
4277+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4278+ }
4279+ }
4280+ N ( SyntaxKind . AmpersandAmpersandToken ) ;
4281+ N ( SyntaxKind . IdentifierName ) ;
4282+ {
4283+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4284+ }
4285+ }
4286+ EOF ( ) ;
4287+ }
4288+
4289+ [ Fact ]
4290+ public void RangeExpression_Ambiguity1 ( )
4291+ {
4292+ UsingExpression ( ".. .." ) ;
4293+ N ( SyntaxKind . RangeExpression ) ;
4294+ {
41534295 N ( SyntaxKind . DotDotToken ) ;
4154- N ( SyntaxKind . SubtractExpression ) ;
4296+ N ( SyntaxKind . RangeExpression ) ;
41554297 {
4156- N ( SyntaxKind . NumericLiteralExpression ) ;
4298+ N ( SyntaxKind . DotDotToken ) ;
4299+ }
4300+ }
4301+ EOF ( ) ;
4302+ }
4303+
4304+ [ Fact ]
4305+ public void RangeExpression_Ambiguity2 ( )
4306+ {
4307+ UsingExpression ( ".. .. e" ) ;
4308+ N ( SyntaxKind . RangeExpression ) ;
4309+ {
4310+ N ( SyntaxKind . DotDotToken ) ;
4311+ N ( SyntaxKind . RangeExpression ) ;
4312+ {
4313+ N ( SyntaxKind . DotDotToken ) ;
4314+ N ( SyntaxKind . IdentifierName ) ;
41574315 {
4158- N ( SyntaxKind . NumericLiteralToken , "3 " ) ;
4316+ N ( SyntaxKind . IdentifierToken , "e " ) ;
41594317 }
4160- N ( SyntaxKind . MinusToken ) ;
4161- N ( SyntaxKind . NumericLiteralExpression ) ;
4318+ }
4319+ }
4320+ EOF ( ) ;
4321+ }
4322+
4323+ [ Fact ( Skip = "https://github.com/dotnet/roslyn/issues/36514" ) ]
4324+ public void RangeExpression_Ambiguity3 ( )
4325+ {
4326+ UsingExpression ( ".. e .." ) ;
4327+ N ( SyntaxKind . RangeExpression ) ;
4328+ {
4329+ N ( SyntaxKind . DotDotToken ) ;
4330+ N ( SyntaxKind . RangeExpression ) ;
4331+ {
4332+ N ( SyntaxKind . IdentifierName ) ;
4333+ {
4334+ N ( SyntaxKind . IdentifierToken , "e" ) ;
4335+ }
4336+ N ( SyntaxKind . DotDotToken ) ;
4337+ }
4338+ }
4339+ EOF ( ) ;
4340+ }
4341+
4342+ [ Fact ]
4343+ public void RangeExpression_Ambiguity4 ( )
4344+ {
4345+ UsingExpression ( "a .. .. b" ) ;
4346+ N ( SyntaxKind . RangeExpression ) ;
4347+ {
4348+ N ( SyntaxKind . IdentifierName ) ;
4349+ {
4350+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4351+ }
4352+ N ( SyntaxKind . DotDotToken ) ;
4353+ N ( SyntaxKind . RangeExpression ) ;
4354+ {
4355+ N ( SyntaxKind . DotDotToken ) ;
4356+ N ( SyntaxKind . IdentifierName ) ;
4357+ {
4358+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4359+ }
4360+ }
4361+ }
4362+ EOF ( ) ;
4363+ }
4364+
4365+ [ Fact ( Skip = "https://github.com/dotnet/roslyn/issues/36514" ) ]
4366+ public void RangeExpression_Ambiguity5 ( )
4367+ {
4368+ UsingExpression ( "a .. b .." ) ;
4369+ N ( SyntaxKind . RangeExpression ) ;
4370+ {
4371+ N ( SyntaxKind . IdentifierName ) ;
4372+ {
4373+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4374+ }
4375+ N ( SyntaxKind . DotDotToken ) ;
4376+ N ( SyntaxKind . RangeExpression ) ;
4377+ {
4378+ N ( SyntaxKind . IdentifierName ) ;
4379+ {
4380+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4381+ }
4382+ N ( SyntaxKind . DotDotToken ) ;
4383+ }
4384+ }
4385+ EOF ( ) ;
4386+ }
4387+
4388+ [ Fact ( Skip = "https://github.com/dotnet/roslyn/issues/36514" ) ]
4389+ public void RangeExpression_Ambiguity6 ( )
4390+ {
4391+ UsingExpression ( "a .. b .. c" ) ;
4392+ N ( SyntaxKind . RangeExpression ) ;
4393+ {
4394+ N ( SyntaxKind . IdentifierName ) ;
4395+ {
4396+ N ( SyntaxKind . IdentifierToken , "a" ) ;
4397+ }
4398+ N ( SyntaxKind . DotDotToken ) ;
4399+ N ( SyntaxKind . RangeExpression ) ;
4400+ {
4401+ N ( SyntaxKind . IdentifierName ) ;
4402+ {
4403+ N ( SyntaxKind . IdentifierToken , "b" ) ;
4404+ }
4405+ N ( SyntaxKind . DotDotToken ) ;
4406+ }
4407+ }
4408+ EOF ( ) ;
4409+ }
4410+
4411+ [ Fact , WorkItem ( 36122 , "https://github.com/dotnet/roslyn/issues/36122" ) ]
4412+ public void RangeExpression_NotCast ( )
4413+ {
4414+ UsingExpression ( "(Offset)..(Offset + Count)" ) ;
4415+ N ( SyntaxKind . RangeExpression ) ;
4416+ {
4417+ N ( SyntaxKind . ParenthesizedExpression ) ;
4418+ {
4419+ N ( SyntaxKind . OpenParenToken ) ;
4420+ N ( SyntaxKind . IdentifierName ) ;
4421+ {
4422+ N ( SyntaxKind . IdentifierToken , "Offset" ) ;
4423+ }
4424+ N ( SyntaxKind . CloseParenToken ) ;
4425+ }
4426+ N ( SyntaxKind . DotDotToken ) ;
4427+ N ( SyntaxKind . ParenthesizedExpression ) ;
4428+ {
4429+ N ( SyntaxKind . OpenParenToken ) ;
4430+ N ( SyntaxKind . AddExpression ) ;
41624431 {
4163- N ( SyntaxKind . NumericLiteralToken , "4" ) ;
4432+ N ( SyntaxKind . IdentifierName ) ;
4433+ {
4434+ N ( SyntaxKind . IdentifierToken , "Offset" ) ;
4435+ }
4436+ N ( SyntaxKind . PlusToken ) ;
4437+ N ( SyntaxKind . IdentifierName ) ;
4438+ {
4439+ N ( SyntaxKind . IdentifierToken , "Count" ) ;
4440+ }
41644441 }
4442+ N ( SyntaxKind . CloseParenToken ) ;
41654443 }
41664444 }
41674445 EOF ( ) ;
0 commit comments