Browse Source

Fixed SD2-1363: Exception is thrown using incorrect VB syntax.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2603 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
4b8d80a68b
  1. 522
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  2. 34
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  3. 41
      src/Libraries/NRefactory/Test/Parser/Statements/IfElseStatementTests.cs

522
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

34
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -2413,8 +2413,6 @@ EmbeddedStatement<out Statement statement> @@ -2413,8 +2413,6 @@ EmbeddedStatement<out Statement statement>
| /* 10.8.1 */
"If" (. Location ifStartLocation = t.Location; .) Expr<out expr> [ "Then" ]
(
IF (IsEndStmtAhead()) "End" (. statement = new IfElseStatement(expr, new EndStatement()); statement.StartLocation = ifStartLocation; statement.EndLocation = t.Location; .)
|
/* multiline if statement */
EndOfStmt Block<out embeddedStatement>
(.
@ -2449,24 +2447,17 @@ EmbeddedStatement<out Statement statement> @@ -2449,24 +2447,17 @@ EmbeddedStatement<out Statement statement>
ifStatement.EndLocation = t.Location;
statement = ifStatement;
.)
| /* singleline if statement */
EmbeddedStatement<out embeddedStatement>
| /* singleline if statement */
(.
IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
IfElseStatement ifStatement = new IfElseStatement(expr);
ifStatement.StartLocation = ifStartLocation;
.)
{ ":" EmbeddedStatement<out embeddedStatement> (. ifStatement.TrueStatement.Add(embeddedStatement); .) }
SingleLineStatementList<ifStatement.TrueStatement>
[
"Else" [ EmbeddedStatement<out embeddedStatement> ]
(.
ifStatement.FalseStatement.Add(embeddedStatement);
.)
{
":" EmbeddedStatement<out embeddedStatement>
(. ifStatement.FalseStatement.Add(embeddedStatement); .)
}
"Else"
[ SingleLineStatementList<ifStatement.FalseStatement> ]
]
(. ifStatement.EndLocation = ifStartLocation; statement = ifStatement; .)
(. ifStatement.EndLocation = t.Location; statement = ifStatement; .)
)
| /* 10.8.2 */
"Select" [ "Case" ] Expr<out expr> EndOfStmt
@ -2534,6 +2525,19 @@ EmbeddedStatement<out Statement statement> @@ -2534,6 +2525,19 @@ EmbeddedStatement<out Statement statement>
"End" "Using"
.
SingleLineStatementList<List<Statement> list>
(. Statement embeddedStatement = null; .)
=
( "End" (. embeddedStatement = new EndStatement(); .)
| EmbeddedStatement<out embeddedStatement> )
(. if (embeddedStatement != null) list.Add(embeddedStatement); .)
{ ":" { ":" }
( "End" (. embeddedStatement = new EndStatement(); .)
| EmbeddedStatement<out embeddedStatement> )
(. if (embeddedStatement != null) list.Add(embeddedStatement); .)
}
.
/* 10.9.2 */
LoopControlVariable<out TypeReference type, out string name>
(.ArrayList arrayModifiers = null;

41
src/Libraries/NRefactory/Test/Parser/Statements/IfElseStatementTests.cs

@ -130,6 +130,47 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -130,6 +130,47 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
Assert.IsTrue(ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0] is StopStatement, "Statement was: " + ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0]);
}
[Test]
public void VBNetMultiStatementIfStatementTest()
{
IfElseStatement ifElseStatement = ParseUtilVBNet.ParseStatement<IfElseStatement>("If True THEN Stop : b");
Assert.IsFalse(ifElseStatement.Condition.IsNull);
Assert.AreEqual(2, ifElseStatement.TrueStatement.Count, "true count");
Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
Assert.IsTrue(ifElseStatement.TrueStatement[0] is StopStatement);
Assert.IsTrue(ifElseStatement.TrueStatement[1] is ExpressionStatement);
}
[Test]
public void VBNetMultiStatementIfStatementWithEndStatementTest()
{
IfElseStatement ifElseStatement = ParseUtilVBNet.ParseStatement<IfElseStatement>("If True THEN Stop : End : b");
Assert.IsFalse(ifElseStatement.Condition.IsNull);
Assert.AreEqual(3, ifElseStatement.TrueStatement.Count, "true count");
Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
Assert.IsTrue(ifElseStatement.TrueStatement[0] is StopStatement);
Assert.IsTrue(ifElseStatement.TrueStatement[1] is EndStatement);
Assert.IsTrue(ifElseStatement.TrueStatement[2] is ExpressionStatement);
}
[Test]
public void VBNetIfWithEmptyElseTest()
{
IfElseStatement ifElseStatement = ParseUtilVBNet.ParseStatement<IfElseStatement>("If True THEN a Else");
Assert.IsFalse(ifElseStatement.Condition.IsNull);
Assert.AreEqual(1, ifElseStatement.TrueStatement.Count, "true count");
Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
}
[Test]
public void VBNetIfWithMultipleColons()
{
IfElseStatement ifElseStatement = ParseUtilVBNet.ParseStatement<IfElseStatement>("If True THEN a : : b");
Assert.IsFalse(ifElseStatement.Condition.IsNull);
Assert.AreEqual(2, ifElseStatement.TrueStatement.Count, "true count");
Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
}
#endregion
}
}

Loading…
Cancel
Save