Browse Source

SD2-1201: IfElseStatement does not have Location and Parent set

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2068 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 19 years ago
parent
commit
73f0c70429
  1. 435
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  2. 20
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  3. 18
      src/Libraries/NRefactory/Test/Parser/Statements/IfElseStatementTests.cs

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

File diff suppressed because it is too large Load Diff

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

@ -2414,25 +2414,31 @@ EmbeddedStatement<out Statement statement> @@ -2414,25 +2414,31 @@ EmbeddedStatement<out Statement statement>
| /* 10.11 */
"Stop" (. statement = new StopStatement(); .)
| /* 10.8.1 */
"If" Expr<out expr> [ "Then" ]
"If" (. Location ifStartLocation = t.Location; .) Expr<out expr> [ "Then" ]
(
IF (IsEndStmtAhead()) "End" (. statement = new IfElseStatement(expr, new EndStatement()); .)
IF (IsEndStmtAhead()) "End" (. statement = new IfElseStatement(expr, new EndStatement()); statement.StartLocation = ifStartLocation; statement.EndLocation = t.Location; .)
|
/* multiline if statement */
EndOfStmt Block<out embeddedStatement>
(.
IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
ifStatement.StartLocation = ifStartLocation;
Location elseIfStart;
.)
{
(
IF(IsElseIf()) "Else" "If"
| "ElseIf"
IF(IsElseIf()) "Else" (. elseIfStart = t.Location; .) "If"
| "ElseIf" (. elseIfStart = t.Location; .)
)
(. Expression condition = null; Statement block = null; .)
Expr<out condition> [ "Then"] EndOfStmt
Block<out block>
(.
ifStatement.ElseIfSections.Add(new ElseIfSection(condition, block));
ElseIfSection elseIfSection = new ElseIfSection(condition, block);
elseIfSection.StartLocation = elseIfStart;
elseIfSection.EndLocation = t.Location;
elseIfSection.Parent = ifStatement;
ifStatement.ElseIfSections.Add(elseIfSection);
.)
}
[
@ -2443,12 +2449,14 @@ EmbeddedStatement<out Statement statement> @@ -2443,12 +2449,14 @@ EmbeddedStatement<out Statement statement>
.)
] "End" "If"
(.
ifStatement.EndLocation = t.Location;
statement = ifStatement;
.)
| /* singleline if statement */
EmbeddedStatement<out embeddedStatement>
(.
IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement);
ifStatement.StartLocation = ifStartLocation;
.)
{ ":" EmbeddedStatement<out embeddedStatement> (. ifStatement.TrueStatement.Add(embeddedStatement); .) }
[
@ -2461,7 +2469,7 @@ EmbeddedStatement<out Statement statement> @@ -2461,7 +2469,7 @@ EmbeddedStatement<out Statement statement>
(. ifStatement.FalseStatement.Add(embeddedStatement); .)
}
]
(. statement = ifStatement; .)
(. ifStatement.EndLocation = ifStartLocation; statement = ifStatement; .)
)
| /* 10.8.2 */
"Select" [ "Case" ] Expr<out expr> EndOfStmt

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

@ -80,6 +80,24 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -80,6 +80,24 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
}
// test for SD2-1201
[Test]
public void VBNetIfStatementLocationTest()
{
IfElseStatement ifElseStatement = ParseUtilVBNet.ParseStatement<IfElseStatement>("If True THEN\n" +
"DoIt()\n" +
"ElseIf False Then\n" +
"DoIt()\n" +
"End If");
Assert.AreEqual(3, (ifElseStatement.StartLocation).Y);
Assert.AreEqual(7, (ifElseStatement.EndLocation).Y);
Assert.AreEqual(5, (ifElseStatement.ElseIfSections[0].StartLocation).Y);
Assert.AreEqual(6, (ifElseStatement.ElseIfSections[0].EndLocation).Y);
Assert.IsNotNull(ifElseStatement.ElseIfSections[0].Parent);
}
[Test]
public void VBNetElseIfStatementTest()
{

Loading…
Cancel
Save