Новые файлы 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;
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;
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}