示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
                }
            }
        }