Skip to content

Commit cfd4060

Browse files
committed
Fix bang notation in the SLL mode for the most common case
1 parent 13de1a8 commit cfd4060

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

Rubberduck.Parsing/Grammar/VBAParser.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ subscript : (expression whiteSpace TO whiteSpace)? expression;
579579

580580
unrestrictedIdentifier : identifier | statementKeyword | markerKeyword;
581581
legalLabelIdentifier : { !(new[]{DOEVENTS,END,CLOSE,ELSE,LOOP,NEXT,RANDOMIZE,REM,RESUME,RETURN,STOP,WEND}).Contains(_input.La(1))}? identifier | markerKeyword;
582-
identifier : typedIdentifier | untypedIdentifier;
582+
identifier : {_input.La(3) != IDENTIFIER}? typedIdentifier | untypedIdentifier;
583583
untypedIdentifier : identifierValue;
584584
typedIdentifier : untypedIdentifier typeHint;
585585
identifierValue : IDENTIFIER | keyword | foreignName;

RubberduckTests/Grammar/VBAParserTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2953,6 +2953,21 @@ End Sub
29532953
var parseResult = Parse(code);
29542954
}
29552955

2956+
[Category("Parser")]
2957+
[Test]
2958+
public void ParserDoesNotFailOnBangOperator()
2959+
{
2960+
const string code = @"
2961+
Sub Test()
2962+
Dim dict As Scripting.Dictionary
2963+
2964+
Dim x
2965+
x = dict!a
2966+
End Sub
2967+
";
2968+
var parseResult = Parse(code);
2969+
}
2970+
29562971
[Category("Parser")]
29572972
[Test]
29582973
public void ParserDoesNotFailOnLineContinuedBangOperator1()

0 commit comments

Comments
 (0)