Новые файлы Async

This commit is contained in:
Mikhalkovich Stanislav 2024-07-12 21:06:00 +03:00
parent a193b9c3ed
commit 4a3239a7d1
3 changed files with 26 additions and 10 deletions

View file

@ -157,7 +157,9 @@ namespace SyntaxVisitors.Async
ph2.source_context = defs.source_context; ph2.source_context = defs.source_context;
cm2.members[2] = ph; cm2.members[2] = ph;
ph.Parent = cm2;
cm2.members[3] = ph2; cm2.members[3] = ph2;
ph2.Parent = cm2;
var pd1 = Decls.list[1] as procedure_definition; var pd1 = Decls.list[1] as procedure_definition;
pd1.proc_header.name.class_name = name; pd1.proc_header.name.class_name = name;
@ -385,6 +387,11 @@ namespace SyntaxVisitors.Async
if (defsCount > 0) if (defsCount > 0)
{ {
block.defs = temp_def; 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); 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); pd.proc_body = new block(stl);
var tt = pd.proc_body as block; var tt = pd.proc_body as block;
tt.defs = block.defs; tt.defs = block.defs;
if (block.defs != null)
{
foreach (var item in block.defs.list)
{
item.Parent = tt.defs;
}
}

View file

@ -85,6 +85,7 @@ namespace SyntaxVisitors
await.aw.ex = mc; await.aw.ex = mc;
b.program_code.list.Add(await); b.program_code.list.Add(await);
await.Parent = b.program_code;
} }
} }
proc_def = pd; 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), 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); new ident("GetAwaiter")), new ident("GetResult"), d.source_context), d.source_context);
pm.program_block.program_code.list.Add(vst); pm.program_block.program_code.list.Add(vst);
vst.Parent = pm.program_block.program_code;
pm.program_block.program_code.list.Add(pc); pm.program_block.program_code.list.Add(pc);
pc.Parent = pm.program_block.program_code;
} }
} }

View file

@ -50,10 +50,6 @@ namespace SyntaxVisitors.Async
{ {
return "@aw@_" + NewAwaiterCounter++; return "@aw@_" + NewAwaiterCounter++;
} }
public string NewTempTask()
{
return "@tt@_" + TempTaskCounter++;
}
// для каждого await добавляем awaiter // для каждого await добавляем awaiter
public void AddAwaiter(bool IsFirstTime, expression ex, int c) public void AddAwaiter(bool IsFirstTime, expression ex, int c)
{ {
@ -64,7 +60,6 @@ namespace SyntaxVisitors.Async
var tdef = tdecl.types_decl[0]; var tdef = tdecl.types_decl[0];
var cd = tdef.type_def as class_definition; var cd = tdef.type_def as class_definition;
var bd = cd.body; 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 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; var class_name = proc_def.proc_header.name.class_name;
if (IsFirstTime) if (IsFirstTime)
@ -82,7 +77,7 @@ namespace SyntaxVisitors.Async
else else
{ {
var cm2 = bd.class_def_blocks[0]; var cm2 = bd.class_def_blocks[0];
cm2.members.Add(vds); cm2.Add(vds);
} }
} }
// Меняем тип AsyncBuilder // Меняем тип AsyncBuilder
@ -350,7 +345,7 @@ namespace SyntaxVisitors.Async
if (pp.var_def.vars_type.ToString().Contains("Task")) if (pp.var_def.vars_type.ToString().Contains("Task"))
{ {
pp.var_def.inital_value = new default_operator(new named_type_reference 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; pp.var_def.vars_type = null;
foreach (var item in pp.var_def.vars.list) foreach (var item in pp.var_def.vars.list)
{ {
@ -449,6 +444,7 @@ namespace SyntaxVisitors.Async
new ident("SetResult", ts.source_context)), 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); 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; bl.program_code.list[2] = r_pc;
r_pc.Parent = bl.program_code;
} }
////// if (state == 1) ////// if (state == 1)
@ -576,6 +572,7 @@ namespace SyntaxVisitors.Async
if (asstat.from.ToString().Contains("GetResult")) if (asstat.from.ToString().Contains("GetResult"))
{ {
asstat.from = mc2; asstat.from = mc2;
mc2.Parent = asstat;
} }
@ -648,6 +645,7 @@ namespace SyntaxVisitors.Async
if (asstat.from.ToString().Contains("GetResult")) if (asstat.from.ToString().Contains("GetResult"))
{ {
asstat.from = mc2; asstat.from = mc2;
mc2.Parent = asstat;
} }
} }
@ -782,8 +780,9 @@ namespace SyntaxVisitors.Async
foreach (var w in vt.var_def.vars.list) foreach (var w in vt.var_def.vars.list)
{ {
vd.vars.Add(w, w.source_context); vd.vars.Add(w, w.source_context);
} }
cm.members.Add(vd); cm.Add(vd);
} }
foreach (var v in VarsHelper.VarsList) foreach (var v in VarsHelper.VarsList)
{ {
@ -797,10 +796,10 @@ namespace SyntaxVisitors.Async
vv.source_context = v.source_context; vv.source_context = v.source_context;
vv.var_def = new var_def_statement(v.var_def.vars, 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); 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; continue;
} }
cm.members.Add(v.var_def); cm.Add(v.var_def);
} }
} }