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

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

@ -130,6 +130,47 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]); 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]); 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 #endregion
} }
} }

Loading…
Cancel
Save