IKVM.Internal.JsrInliner.JsrMethodAnalyzer.InstructionState.MergeSubroutineHelper C# (CSharp) Method

MergeSubroutineHelper() private method

private MergeSubroutineHelper ( InstructionState s2 ) : void
s2 InstructionState
return void
                private void MergeSubroutineHelper(InstructionState s2)
                {
                    if (subroutines == null || s2.subroutines == null)
                    {
                        if (subroutines != null)
                        {
                            subroutines = null;
                            changed = true;
                        }
                    }
                    else
                    {
                        SubroutinesCopyOnWrite();
                        List<Subroutine> ss1 = subroutines;
                        subroutines = new List<Subroutine>();
                        foreach (Subroutine ss2 in s2.subroutines)
                        {
                            foreach (Subroutine ss in ss1)
                            {
                                if (ss.SubroutineIndex == ss2.SubroutineIndex)
                                {
                                    subroutines.Add(ss);
                                    for (int i = 0; i < ss.LocalsModified.Length; i++)
                                    {
                                        if (ss2.LocalsModified[i] && !ss.LocalsModified[i])
                                        {
                                            ss.LocalsModified[i] = true;
                                            changed = true;
                                        }
                                    }
                                }
                            }
                        }
                        if (ss1.Count != subroutines.Count)
                        {
                            changed = true;
                        }
                    }

                    if (s2.callsites > callsites)
                    {
                        //Console.WriteLine("s2.callsites = {0}, callsites = {1}", s2.callsites, callsites);
                        callsites = s2.callsites;
                        changed = true;
                    }
                }