async fix

This commit is contained in:
Aleksandr Kalinin 2024-06-04 19:34:39 +03:00
parent 155d0a01ba
commit 7287a68805
3 changed files with 31 additions and 9 deletions

View file

@ -278,15 +278,21 @@ namespace SyntaxVisitors.Async
{
var fh = item.proc_header as function_header;
s = fh.return_type.ToString();
// AddError нужно вместо SyntaxVisitorError
if (s.StartsWith("Void") || s.StartsWith("Task"))
if (s.Contains("."))
{
//BuilderType = "Async" + s + "MethodBuilder";
}
else
throw new SyntaxVisitorError("Возвращаемым типом асинхронного метода должен быть void, Task, Task<T> или аналогичный тип, IAsyncEnumerable<T> или IAsyncEnumerator<T>",
item.proc_header.source_context);
s = s.Substring(s.LastIndexOf('.') + 1);
}
// AddError нужно вместо SyntaxVisitorError
//if (s.StartsWith("Void") || s.StartsWith("Task"))
//{
// //BuilderType = "Async" + s + "MethodBuilder";
//}
//else
if (!s.Contains("Task"))
throw new SyntaxVisitorError("Возвращаемым типом асинхронного метода должен быть void, Task, Task<T> или аналогичный тип, IAsyncEnumerable<T> или IAsyncEnumerator<T>",
item.proc_header.source_context);
}
if (s == "Void" || s == "Task")
{

View file

@ -52,6 +52,14 @@ namespace SyntaxVisitors
{
if (pd.proc_header.IsAsync)
{
MainVisitor.flag = false;
MainVisitor.Accept(pd);
if (!MainVisitor.flag)
{
pd.proc_header.IsAsync = false;
IsAsync = false;
return;
}
IsAsync = true;
proc_def = pd;
proc_def_List.Add(pd);
@ -188,7 +196,11 @@ namespace SyntaxVisitors
{
var fh = p.proc_header as function_header;
var s = fh.return_type.ToString();
if (s.StartsWith("Task<"))
if (s.Contains("."))
{
s = s.Substring(s.LastIndexOf('.') + 1);
}
if (s.StartsWith("Task"))
{
BuilderType = "AsyncTaskMethodBuilder" + s.Substring(4);
}

View file

@ -17,6 +17,10 @@ namespace SyntaxVisitors.Async
{
New.ProcessNode(st);
}
public static void Accept(procedure_definition pd)
{
New.ProcessNode(pd);
}
public override void visit(await_node_statement ans)
{
flag = true;