Skip to content

Commit 7a99161

Browse files
committed
замена default на узел ошибки
1 parent 9ae791c commit 7a99161

1 file changed

Lines changed: 22 additions & 25 deletions

File tree

src/OneScript.Language/SyntaxAnalysis/DefaultBslParser.cs

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)