From 4a3239a7d1206d01ca1830f775ad90a46ffe3453 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Fri, 12 Jul 2024 21:06:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B=20Async?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SyntaxVisitors/Async/AsyncBuilder.cs | 14 ++++++++++++++ SyntaxVisitors/Async/AsyncVisitor.cs | 3 +++ SyntaxVisitors/Async/AwaitBuilder.cs | 19 +++++++++---------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/SyntaxVisitors/Async/AsyncBuilder.cs b/SyntaxVisitors/Async/AsyncBuilder.cs index 90178d4e7..94bf2ec36 100644 --- a/SyntaxVisitors/Async/AsyncBuilder.cs +++ b/SyntaxVisitors/Async/AsyncBuilder.cs @@ -157,7 +157,9 @@ namespace SyntaxVisitors.Async ph2.source_context = defs.source_context; cm2.members[2] = ph; + ph.Parent = cm2; cm2.members[3] = ph2; + ph2.Parent = cm2; var pd1 = Decls.list[1] as procedure_definition; pd1.proc_header.name.class_name = name; @@ -385,6 +387,11 @@ namespace SyntaxVisitors.Async if (defsCount > 0) { block.defs = temp_def; + if (temp_def != null) + foreach (var dl in temp_def.list) + { + dl.Parent = block.defs; + } } var stl = new statement_list((pd.proc_body as block).program_code, st, a, parsList, a2); @@ -408,6 +415,13 @@ namespace SyntaxVisitors.Async pd.proc_body = new block(stl); var tt = pd.proc_body as block; tt.defs = block.defs; + if (block.defs != null) + { + foreach (var item in block.defs.list) + { + item.Parent = tt.defs; + } + } diff --git a/SyntaxVisitors/Async/AsyncVisitor.cs b/SyntaxVisitors/Async/AsyncVisitor.cs index a59ca36d0..55485201e 100644 --- a/SyntaxVisitors/Async/AsyncVisitor.cs +++ b/SyntaxVisitors/Async/AsyncVisitor.cs @@ -85,6 +85,7 @@ namespace SyntaxVisitors await.aw.ex = mc; b.program_code.list.Add(await); + await.Parent = b.program_code; } } proc_def = pd; @@ -190,7 +191,9 @@ namespace SyntaxVisitors var pc = new procedure_call(new dot_node(new dot_node(new ident("@aw_main", d.source_context), new ident("GetAwaiter")), new ident("GetResult"), d.source_context), d.source_context); pm.program_block.program_code.list.Add(vst); + vst.Parent = pm.program_block.program_code; pm.program_block.program_code.list.Add(pc); + pc.Parent = pm.program_block.program_code; } } diff --git a/SyntaxVisitors/Async/AwaitBuilder.cs b/SyntaxVisitors/Async/AwaitBuilder.cs index 5cae9cf42..95cfe6c07 100644 --- a/SyntaxVisitors/Async/AwaitBuilder.cs +++ b/SyntaxVisitors/Async/AwaitBuilder.cs @@ -50,10 +50,6 @@ namespace SyntaxVisitors.Async { return "@aw@_" + NewAwaiterCounter++; } - public string NewTempTask() - { - return "@tt@_" + TempTaskCounter++; - } // для каждого await добавляем awaiter public void AddAwaiter(bool IsFirstTime, expression ex, int c) { @@ -64,7 +60,6 @@ namespace SyntaxVisitors.Async var tdef = tdecl.types_decl[0]; var cd = tdef.type_def as class_definition; var bd = cd.body; - var tn = NewTempTask(); var vds = new var_def_statement(new ident(a_name, bd.source_context), new named_type_reference(new ident("string", bd.source_context)), bd.source_context); var class_name = proc_def.proc_header.name.class_name; if (IsFirstTime) @@ -82,7 +77,7 @@ namespace SyntaxVisitors.Async else { var cm2 = bd.class_def_blocks[0]; - cm2.members.Add(vds); + cm2.Add(vds); } } // Меняем тип AsyncBuilder @@ -350,7 +345,7 @@ namespace SyntaxVisitors.Async if (pp.var_def.vars_type.ToString().Contains("Task")) { pp.var_def.inital_value = new default_operator(new named_type_reference - (new ident(pp.var_def.vars_type.ToString()))); + (pp.var_def.vars_type.ToString())); pp.var_def.vars_type = null; foreach (var item in pp.var_def.vars.list) { @@ -449,6 +444,7 @@ namespace SyntaxVisitors.Async new ident("SetResult", ts.source_context)), new expression_list(new ident("@aw_res", ts.source_context), ts.source_context), ts.source_context), ts.source_context); bl.program_code.list[2] = r_pc; + r_pc.Parent = bl.program_code; } ////// if (state == 1) @@ -576,6 +572,7 @@ namespace SyntaxVisitors.Async if (asstat.from.ToString().Contains("GetResult")) { asstat.from = mc2; + mc2.Parent = asstat; } @@ -648,6 +645,7 @@ namespace SyntaxVisitors.Async if (asstat.from.ToString().Contains("GetResult")) { asstat.from = mc2; + mc2.Parent = asstat; } } @@ -782,8 +780,9 @@ namespace SyntaxVisitors.Async foreach (var w in vt.var_def.vars.list) { vd.vars.Add(w, w.source_context); + } - cm.members.Add(vd); + cm.Add(vd); } foreach (var v in VarsHelper.VarsList) { @@ -797,10 +796,10 @@ namespace SyntaxVisitors.Async vv.source_context = v.source_context; vv.var_def = new var_def_statement(v.var_def.vars, new named_type_reference(new ident("string", v.source_context), v.source_context), v.source_context); - cm.members.Add(vv.var_def); + cm.Add(vv.var_def); continue; } - cm.members.Add(v.var_def); + cm.Add(v.var_def); } }