Exemple #1
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);
                }
            }
        }
Exemple #2
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);
                }
            }
        }
Exemple #3
0
        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);
            }
        }