@@ -747,8 +747,7 @@ private BslSyntaxNode BuildExpressionAwaitOperator(Lexem lexem)
747747 }
748748 else
749749 {
750- AddError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
751- return new ErrorTerminalNode ( _lastExtractedLexem ) ;
750+ return CreateError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
752751 }
753752 }
754753
@@ -1051,8 +1050,6 @@ private void BuildEventHandlerOperation(Token token)
10511050 NextLexem ( ) ;
10521051
10531052 var source = BuildExpressionUpTo ( node , Token . Comma ) ;
1054- if ( source == null )
1055- return ;
10561053
10571054 if ( ( source . Kind != NodeKind . DereferenceOperation || ! _lastDereferenceIsWritable )
10581055 && source . Kind != NodeKind . IndexAccess )
@@ -1212,8 +1209,7 @@ private BslSyntaxNode BuildExpression(NonTerminalNode parent, Token stopToken)
12121209 {
12131210 if ( _lastExtractedLexem . Token == stopToken )
12141211 {
1215- AddError ( LocalizedErrors . ExpressionExpected ( ) ) ;
1216- return default ;
1212+ return CreateError ( LocalizedErrors . ExpressionExpected ( ) ) ;
12171213 }
12181214
12191215 var op = BuildExpression ( 0 ) ;
@@ -1267,8 +1263,7 @@ private BslSyntaxNode BuildPrimaryExpression()
12671263
12681264 if ( LanguageDef . GetUnaryPriority ( _lastExtractedLexem . Token ) <= prio )
12691265 {
1270- AddError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
1271- return default ;
1266+ return CreateError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
12721267 }
12731268
12741269 var arg = BuildExpression ( prio ) ;
@@ -1287,14 +1282,12 @@ private BslSyntaxNode BuildExpressionUpTo(NonTerminalNode parent, Token stopToke
12871282 {
12881283 if ( _lastExtractedLexem . Token == Token . EndOfText )
12891284 {
1290- AddError ( LocalizedErrors . UnexpectedEof ( ) ) ;
1285+ return CreateError ( LocalizedErrors . UnexpectedEof ( ) ) ;
12911286 }
12921287 else
12931288 {
1294- AddError ( LocalizedErrors . TokenExpected ( stopToken ) , false ) ;
1289+ return CreateError ( LocalizedErrors . TokenExpected ( stopToken ) , false ) ;
12951290 }
1296-
1297- node = default ;
12981291 }
12991292
13001293 return node ;
@@ -1333,9 +1326,9 @@ private BslSyntaxNode TerminalNode()
13331326 BslSyntaxNode node = SelectTerminalNode ( _lastExtractedLexem , true ) ;
13341327 if ( node == default )
13351328 {
1336- AddError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
1329+ return CreateError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
13371330 }
1338-
1331+
13391332 return node ;
13401333 }
13411334
@@ -1351,7 +1344,7 @@ private BslSyntaxNode SelectTerminalNode(in Lexem currentLexem, bool supportAwai
13511344 {
13521345 node = BuildGlobalCall ( currentLexem ) ;
13531346 }
1354- else if ( currentLexem . Token == Token . NewObject )
1347+ else if ( currentLexem . Token == Token . NewObject )
13551348 {
13561349 node = BuildNewObjectCreation ( ) ;
13571350 }
@@ -1367,15 +1360,15 @@ private BslSyntaxNode SelectTerminalNode(in Lexem currentLexem, bool supportAwai
13671360 {
13681361 node = BuildExpressionAwaitOperator ( currentLexem ) ;
13691362 }
1370-
1363+
13711364 return node ;
13721365 }
13731366
13741367 private BslSyntaxNode BuildQuestionOperator ( )
13751368 {
13761369 var node = new NonTerminalNode ( NodeKind . TernaryOperator , _lastExtractedLexem ) ;
13771370 if ( ! NextExpected ( Token . OpenPar ) )
1378- AddError ( LocalizedErrors . TokenExpected ( Token . OpenPar ) ) ;
1371+ return CreateError ( LocalizedErrors . TokenExpected ( Token . OpenPar ) ) ;
13791372
13801373 NextLexem ( ) ;
13811374
@@ -1386,7 +1379,7 @@ private BslSyntaxNode BuildQuestionOperator()
13861379 BuildExpressionUpTo ( node , Token . ClosePar ) ;
13871380 } ) )
13881381 {
1389- return default ;
1382+ return CreateError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
13901383 }
13911384
13921385 return BuildDereference ( node ) ;
@@ -1402,8 +1395,7 @@ private BslSyntaxNode BuildDereference(BslSyntaxNode target)
14021395 NextLexem ( ) ;
14031396 if ( ! LanguageDef . IsValidPropertyName ( _lastExtractedLexem ) )
14041397 {
1405- AddError ( LocalizedErrors . IdentifierExpected ( ) ) ;
1406- return default ;
1398+ return CreateError ( LocalizedErrors . IdentifierExpected ( ) ) ;
14071399 }
14081400
14091401 var identifier = _lastExtractedLexem ;
@@ -1434,10 +1426,9 @@ private BslSyntaxNode BuildIndexerAccess(BslSyntaxNode target)
14341426 node . AddChild ( target ) ;
14351427 NextLexem ( ) ;
14361428 var expression = BuildExpression ( node , Token . CloseBracket ) ;
1437- if ( expression == default )
1429+ if ( expression . Kind == NodeKind . Unknown )
14381430 {
1439- AddError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
1440- return default ;
1431+ return CreateError ( LocalizedErrors . ExpressionSyntax ( ) ) ;
14411432 }
14421433 NextLexem ( ) ;
14431434 _lastDereferenceIsWritable = true ;
@@ -1462,8 +1453,7 @@ private BslSyntaxNode BuildNewObjectCreation()
14621453 }
14631454 else
14641455 {
1465- AddError ( LocalizedErrors . IdentifierExpected ( ) ) ;
1466- node = default ;
1456+ return CreateError ( LocalizedErrors . IdentifierExpected ( ) ) ;
14671457 }
14681458
14691459 return BuildDereference ( node ) ;
@@ -1554,6 +1544,13 @@ private void AddError(CodeError err, bool doFastForward = true)
15541544 throw new InternalParseException ( err ) ;
15551545 }
15561546
1547+ private ErrorTerminalNode CreateError ( CodeError error , bool doFastForward = true )
1548+ {
1549+ var lexem = _lastExtractedLexem ;
1550+ AddError ( error , doFastForward ) ;
1551+ return new ErrorTerminalNode ( lexem ) ;
1552+ }
1553+
15571554 private bool IsUserSymbol ( in Lexem lex )
15581555 {
15591556 return LanguageDef . IsUserSymbol ( in lex ) || ( ! _isInAsyncMethod && lex . Token == Token . Await ) ;
0 commit comments