diff --git a/SyntaxVisitors/Async/AsyncBuilder.cs b/SyntaxVisitors/Async/AsyncBuilder.cs index aa2f648a0..663e66a31 100644 --- a/SyntaxVisitors/Async/AsyncBuilder.cs +++ b/SyntaxVisitors/Async/AsyncBuilder.cs @@ -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 или аналогичный тип, IAsyncEnumerable или IAsyncEnumerator", - 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 или аналогичный тип, IAsyncEnumerable или IAsyncEnumerator", + item.proc_header.source_context); } if (s == "Void" || s == "Task") { diff --git a/SyntaxVisitors/Async/AsyncVisitor.cs b/SyntaxVisitors/Async/AsyncVisitor.cs index 2df229908..206bdfbc5 100644 --- a/SyntaxVisitors/Async/AsyncVisitor.cs +++ b/SyntaxVisitors/Async/AsyncVisitor.cs @@ -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); } diff --git a/SyntaxVisitors/Async/MainVisitor.cs b/SyntaxVisitors/Async/MainVisitor.cs index 51acfe8e6..01230e1f2 100644 --- a/SyntaxVisitors/Async/MainVisitor.cs +++ b/SyntaxVisitors/Async/MainVisitor.cs @@ -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;