Browse Source

fixed NullReferenceException-bug in VBLexer; allow empty arguments (optional arguments) in VB argument list

newNRvisualizers
Siegfried Pammer 16 years ago
parent
commit
8c12f1cdad
  1. 2
      ICSharpCode.NRefactory.VB/Lexer/VBLexer.cs
  2. 16
      ICSharpCode.NRefactory.VB/Parser/Parser.cs
  3. 8
      ICSharpCode.NRefactory.VB/Parser/vb.atg

2
ICSharpCode.NRefactory.VB/Lexer/VBLexer.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.NRefactory.VB.Parser
public VBLexer(TextReader reader) public VBLexer(TextReader reader)
{ {
reader = new LATextReader(reader); this.reader = new LATextReader(reader);
ef = new ExpressionFinder(); ef = new ExpressionFinder();
} }

16
ICSharpCode.NRefactory.VB/Parser/Parser.cs

@ -2964,9 +2964,7 @@ partial class VBParser
List<Expression> parameters = null; List<Expression> parameters = null;
Expect(37); Expect(37);
Location start = t.Location; Location start = t.Location;
if (StartOf(24)) { ArgumentList(out parameters);
ArgumentList(out parameters);
}
Expect(38); Expect(38);
pexpr = new InvocationExpression(pexpr, parameters); pexpr = new InvocationExpression(pexpr, parameters);
@ -3356,11 +3354,15 @@ partial class VBParser
arguments = new List<Expression>(); arguments = new List<Expression>();
Expression expr = null; Expression expr = null;
Argument(out expr); if (StartOf(24)) {
Argument(out expr);
}
while (la.kind == 22) { while (la.kind == 22) {
Get(); Get();
arguments.Add(expr ?? Expression.Null); expr = null; arguments.Add(expr ?? Expression.Null); expr = null;
Argument(out expr); if (StartOf(24)) {
Argument(out expr);
}
if (expr == null) expr = Expression.Null; if (expr == null) expr = Expression.Null;
} }
if (expr != null) arguments.Add(expr); if (expr != null) arguments.Add(expr);
@ -4450,9 +4452,7 @@ partial class VBParser
string name = t.val; string name = t.val;
if (la.kind == 37) { if (la.kind == 37) {
Get(); Get();
if (StartOf(24)) { ArgumentList(out arguments);
ArgumentList(out arguments);
}
Expect(38); Expect(38);
} }
statement = new RaiseEventStatement(name, arguments); statement = new RaiseEventStatement(name, arguments);

8
ICSharpCode.NRefactory.VB/Parser/vb.atg

@ -1928,7 +1928,7 @@ InvocationExpression<ref Expression pexpr>
(. List<Expression> parameters = null; .) (. List<Expression> parameters = null; .)
= =
"(" (. Location start = t.Location; .) "(" (. Location start = t.Location; .)
[ ArgumentList<out parameters> ] ArgumentList<out parameters>
")" ")"
(. (.
pexpr = new InvocationExpression(pexpr, parameters); pexpr = new InvocationExpression(pexpr, parameters);
@ -2620,9 +2620,9 @@ ArgumentList<.out List<Expression> arguments.>
arguments = new List<Expression>(); arguments = new List<Expression>();
Expression expr = null; Expression expr = null;
.) = .) =
Argument<out expr> [ Argument<out expr> ]
{ "," (. arguments.Add(expr ?? Expression.Null); expr = null; .) { "," (. arguments.Add(expr ?? Expression.Null); expr = null; .)
Argument<out expr> [ Argument<out expr> ]
(. if (expr == null) expr = Expression.Null; .) (. if (expr == null) expr = Expression.Null; .)
} }
(. if (expr != null) arguments.Add(expr); .) (. if (expr != null) arguments.Add(expr); .)
@ -3135,7 +3135,7 @@ RaiseEventStatement<out Statement statement>
(. List<Expression> arguments = null; .) (. List<Expression> arguments = null; .)
= =
"RaiseEvent" Identifier (. string name = t.val; .) "RaiseEvent" Identifier (. string name = t.val; .)
[ "(" [ ArgumentList<out arguments> ] ")" ] [ "(" ArgumentList<out arguments> ")" ]
(. statement = new RaiseEventStatement(name, arguments); .) (. statement = new RaiseEventStatement(name, arguments); .)
. .

Loading…
Cancel
Save