/// <summary>
 /// Fill a new method
 /// </summary>
 /// <param name="comp">compilation</param>
 /// <param name="subProc">sub process object</param>
 /// <param name="converter">language converter</param>
 /// <param name="f">new function</param>
 /// <param name="file">writing in</param>
 public static void FillNewMethod(ICompilateurInstance comp, IProcess subProc, ICodeConverter converter, IFunction f, FinalFile file)
 {
     // la fonction est implémentée
     converter.PushFunction(converter.CurrentFunction);
     f.PropagateControlFlow(converter.CurrentFunction);
     converter.SetCurrentFunction(f);
     subProc.FunctionName = converter.ProcessAsFunction;
     converter.CurrentFunction.ForwardControlFlowSub();
     comp.Convert(converter, subProc, file);
     converter.CurrentFunction.BackwardControlFlowSub();
     converter.SetCurrentFunction(converter.PopFunction());
 }
        public void Convert(ICodeConverter converter, IProcess proc, FinalFile file)
        {
            Process  jobProc = new Process();
            Function f       = new Function();

            f.IsJob = true;
            f.Name  = this.jobName;
            // la première fonction commence à xxx_1
            f.InstanceNumber = converter.ImplementedFunctions.FindAll(new Predicate <IFunction>(delegate(IFunction func)
            {
                return(func.IsJob && func.StrictName == this.jobName);
            })).Count + 1;
            jobProc.Name         = ":" + f.Name;
            jobProc.FunctionName = f.Name;
            this.cachedComp.PushProcess(jobProc);
            converter.ImplementedFunctions.Add(f);
            converter.PushFunction(converter.CurrentFunction);
            converter.SetCurrentFunction(f);
        }