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

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

@ -80,6 +80,24 @@ 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]);
} }
// 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] [Test]
public void VBNetElseIfStatementTest() public void VBNetElseIfStatementTest()
{ {

Loading…
Cancel
Save