public override void Compile(CompileContext context) { List <Process> processes = this.Processes; for (int i = 0; i < processes.Count; i++) { Process p = (Process)processes[i]; if (context.Options.Optimize && !p.IsUsed) { continue; } if (p is ProcessConstant && !p.HasRestrictionsOrPreProcess) { //Don't need to create a special proc just for wrapping this ProcessConstant pc = (ProcessConstant)p; EmitRunProcess(context, context.GetType(pc.Name), true, p.LexicalInfo, true); } else { string innerTypeName = "NonDeterministic" + (i + 1); TypeInfo newType = p.CompileNewProcessStart(context, innerTypeName); p.Compile(context); p.CompileNewProcessEnd(context); EmitRunProcess(context, newType, true, p.LexicalInfo, true); } } }
public override void Compile(CompileContext context) { List <Process> processes = this.Processes; for (int i = 0; i < processes.Count; i++) { Process p = processes[i]; string innerTypeName = "Parallel" + (i + 1); if (context.Options.Optimize && !p.IsUsed) { continue; } TypeInfo newProcType = null; if (p.HasRestrictionsOrPreProcess || !(p is ProcessConstant)) { newProcType = p.CompileNewProcessStart(context, innerTypeName); } p.Compile(context); if (newProcType != null) { p.CompileNewProcessEnd(context); EmitRunProcess(context, newProcType, false, p.LexicalInfo, true); } } }
public override void Compile(CompileContext context) { Action.Compile(context); if (context.Options.Optimize && !this.Process.IsUsed) { return; //Will never reach this process, so just don't compile it... } TypeInfo inner = null; if (Process.HasRestrictionsOrPreProcess) { inner = Process.CompileNewProcessStart(context, "Inner"); } this.Process.Compile(context); if (inner != null) { this.Process.CompileNewProcessEnd(context); EmitRunProcess(context, inner, true, null, true); } }