IKVM.Internal.CodeEmitter.RemoveRedundantMemoryBarriers C# (CSharp) Method

RemoveRedundantMemoryBarriers() private method

private RemoveRedundantMemoryBarriers ( ) : void
return void
        private void RemoveRedundantMemoryBarriers()
        {
            int lastMemoryBarrier = -1;
            for (int i = 0; i < code.Count; i++)
            {
                switch (code[i].pseudo)
                {
                    case CodeType.MemoryBarrier:
                        if (lastMemoryBarrier != -1)
                        {
                            code.RemoveAt(lastMemoryBarrier);
                            i--;
                        }
                        lastMemoryBarrier = i;
                        break;
                    case CodeType.OpCode:
                        if (code[i].opcode == OpCodes.Volatile)
                        {
                            if (code[i + 1].opcode != OpCodes.Stfld && code[i + 1].opcode != OpCodes.Stsfld)
                            {
                                lastMemoryBarrier = -1;
                            }
                        }
                        else if (code[i].opcode.FlowControl != FlowControl.Next)
                        {
                            lastMemoryBarrier = -1;
                        }
                        break;
                }
            }
        }