Skip to content

Commit 15d7d8e

Browse files
committed
fix #1552. Слово Ждать вне асинхронного метода не должно иметь специального значения
1 parent 3d4fb17 commit 15d7d8e

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

src/OneScript.Language/SyntaxAnalysis/DefaultBslParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,9 +1654,9 @@ private void AddError(CodeError err, bool doFastForward = true)
16541654
throw new InternalParseException(err);
16551655
}
16561656

1657-
private static bool IsUserSymbol(in Lexem lex)
1657+
private bool IsUserSymbol(in Lexem lex)
16581658
{
1659-
return LanguageDef.IsUserSymbol(in lex);
1659+
return LanguageDef.IsUserSymbol(in lex) || (!_isInAsyncMethod && lex.Token == Token.Await);
16601660
}
16611661

16621662
private void PushStructureToken(params Token[] tok)

src/Tests/OneScript.Language.Tests/ParserTests.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,38 @@ public void AwaitIsNotKeywordInNonAsyncContext_Variable()
12821282
.NextChildIs(NodeKind.Identifier);
12831283
}
12841284

1285+
[Fact]
1286+
public void AwaitIsNotKeywordInNonAsyncContext_VariableFor()
1287+
{
1288+
var code =
1289+
@"Процедура Проц1()
1290+
А = Ждать;
1291+
КонецПроцедуры";
1292+
1293+
var validator = ParseModuleAndGetValidator(code)
1294+
.DownTo(NodeKind.Assignment);
1295+
1296+
validator
1297+
.NextChildIs(NodeKind.Identifier)
1298+
.NextChildIs(NodeKind.Identifier);
1299+
}
1300+
1301+
[Fact]
1302+
public void AwaitIsNotKeywordInNonAsyncContext_VariableForEach()
1303+
{
1304+
var code =
1305+
@"Процедура Проц1()
1306+
А = Ждать;
1307+
КонецПроцедуры";
1308+
1309+
var validator = ParseModuleAndGetValidator(code)
1310+
.DownTo(NodeKind.Assignment);
1311+
1312+
validator
1313+
.NextChildIs(NodeKind.Identifier)
1314+
.NextChildIs(NodeKind.Identifier);
1315+
}
1316+
12851317
[Fact]
12861318
public void AwaitIsNotKeywordInNonAsyncContext_Method()
12871319
{
@@ -1330,6 +1362,30 @@ public void AwaitIsNotKeywordInNonAsyncContext_MemberMethodName()
13301362
.NextChildIs(NodeKind.MethodCall);
13311363
}
13321364

1365+
[Fact]
1366+
public void AwaitIsNotKeywordInNonAsyncContext_MethodName()
1367+
{
1368+
var code =
1369+
@"Процедура Ждать()
1370+
А = 1;
1371+
КонецПроцедуры";
1372+
1373+
var validator = ParseModuleAndGetValidator(code);
1374+
validator.DownOneLevel().Is(NodeKind.Method);
1375+
}
1376+
1377+
[Fact]
1378+
public void AwaitIsNotKeywordInNonAsyncContext_ModuleVariable()
1379+
{
1380+
var code = @"Перем Ждать;";
1381+
1382+
var validator = ParseModuleAndGetValidator(code);
1383+
validator
1384+
.DownTo(NodeKind.VariableDefinition)
1385+
.CurrentNode.RealNode.As<VariableDefinitionNode>()
1386+
.Name.Should().Be("Ждать");
1387+
}
1388+
13331389
[Fact]
13341390
public void Await_In_NonAsync_Expression_Fails()
13351391
{

0 commit comments

Comments
 (0)