Browse Source

Fixed bug in SnippetParser causing lexer to fail with an exception on valid code

pull/16/merge
Siegfried Pammer 14 years ago
parent
commit
02cb7bad97
  1. 4
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg
  2. 3
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.cs
  3. 1
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs
  4. 3
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs
  5. 8
      src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs

4
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg

@ -525,7 +525,9 @@ Parameter = @@ -525,7 +525,9 @@ Parameter =
(. PopContext(); .)
.
StatementTerminatorAndBlock =
StatementTerminatorAndBlock
(.NamedState:startOfBlock.)
=
(. PushContext(Context.Body, la, t); .)
StatementTerminator
{ EXPECTEDCONFLICT("End")

3
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.cs

@ -59,6 +59,9 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -59,6 +59,9 @@ namespace ICSharpCode.NRefactory.Parser.VB
case SnippetType.Expression:
currentState = startOfExpression;
break;
case SnippetType.Statements:
currentState = startOfBlock;
break;
}
Advance();

1
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs

@ -10,6 +10,7 @@ namespace ICSharpCode.NRefactory.Parser.VB { @@ -10,6 +10,7 @@ namespace ICSharpCode.NRefactory.Parser.VB {
partial class ExpressionFinder {
const int startOfExpression = 55;
const int startOfBlock = 259;
const int endOfStatementTerminatorAndBlock = 263;
static BitArray GetExpectedSet(int state)
{

3
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs

@ -109,6 +109,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -109,6 +109,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
public override BlockStatement ParseBlock()
{
lexer.SetInitialContext(SnippetType.Statements);
lexer.NextToken();
compilationUnit = new CompilationUnit();
@ -129,7 +130,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -129,7 +130,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
public override List<INode> ParseTypeMembers()
{
lexer.NextToken();
lexer.NextToken();
TypeDeclaration newType = new TypeDeclaration(Modifiers.None, null);
BlockStart(newType);
ClassBody(newType);

8
src/Libraries/NRefactory/Test/Parser/SnippetParserTests.cs

@ -18,5 +18,13 @@ namespace ICSharpCode.NRefactory.Tests @@ -18,5 +18,13 @@ namespace ICSharpCode.NRefactory.Tests
INode node = parser.Parse("i == 5");
Assert.IsTrue(parser.Errors.Count > 0);
}
[Test]
public void SimpleXmlDocument()
{
SnippetParser parser = new SnippetParser(SupportedLanguage.VBNet);
INode node = parser.Parse("Dim doc = <test><%= test %></test>");
Assert.IsTrue(parser.Errors.Count == 0);
}
}
}

Loading…
Cancel
Save