public void SanityCheck(MjoScriptRepresentation representation)
        {
            Debug.Assert(Opcode != null);
            switch (representation)
            {
            case MjoScriptRepresentation.InstructionList:
                Debug.Assert(Block == null);
                Debug.Assert(JumpTarget == null);
                Debug.Assert(SwitchTargets == null);
                Debug.Assert(StackState == null);
                Debug.Assert(Offset != null);
                Debug.Assert(Size != null && Size != 0);
                Debug.Assert(IsJump ^ JumpOffset == null);
                Debug.Assert(IsSwitch ^ SwitchOffsets == null);
                break;

            case MjoScriptRepresentation.ControlFlowGraph:
                Debug.Assert(Offset == null);
                Debug.Assert(Size == null && Size != 0);
                Debug.Assert(JumpOffset == null);
                Debug.Assert(SwitchOffsets == null);
                Debug.Assert(Block != null);
                Debug.Assert(IsJump ^ JumpTarget == null);
                Debug.Assert(IsSwitch ^ SwitchTargets == null);
                break;
            }
        }
示例#2
0
        public void SanityCheck(MjoScriptRepresentation representation)
        {
            Debug.Assert(Opcode != null);
            switch (representation)
            {
            case MjoScriptRepresentation.InstructionList:
                Debug.Assert(Block == null);
                Debug.Assert(JumpTarget == null);
                Debug.Assert(SwitchTargets == null);
                Debug.Assert(BeforeValues == null);
                Debug.Assert(PoppedValues == null);
                Debug.Assert(PushedValues == null);
                Debug.Assert(Offset != null);
                Debug.Assert(Size != null && Size != 0);
                Debug.Assert(IsJump ^ JumpOffset == null);
                Debug.Assert(IsSwitch ^ SwitchOffsets == null);
                break;

            case MjoScriptRepresentation.ControlFlowGraph:
                Debug.Assert(Offset == null);
                Debug.Assert(Size == null && Size != 0);
                Debug.Assert(JumpOffset == null);
                Debug.Assert(SwitchOffsets == null);
                Debug.Assert(BeforeValues == null);
                Debug.Assert(PoppedValues == null);
                Debug.Assert(PushedValues == null);
                Debug.Assert(Block != null);
                Debug.Assert(IsJump ^ JumpTarget == null);
                Debug.Assert(IsSwitch ^ SwitchTargets == null);
                break;

            case MjoScriptRepresentation.SsaGraph:
                Debug.Assert(Offset == null);
                Debug.Assert(Size == null && Size != 0);
                Debug.Assert(JumpOffset == null);
                Debug.Assert(SwitchOffsets == null);
                Debug.Assert(BeforeValues != null);
                Debug.Assert(PoppedValues != null);
                Debug.Assert(PushedValues != null);
                Debug.Assert(PushedValues.All(val => val.Producer == this));
                Debug.Assert(Block != null);
                Debug.Assert(IsJump ^ JumpTarget == null);
                Debug.Assert(IsSwitch ^ SwitchTargets == null);
                break;
            }
        }
示例#3
0
        public void SanityCheck(MjoScriptRepresentation representation)
        {
            switch (representation)
            {
            case MjoScriptRepresentation.InstructionList:
                Debug.Fail("Blocks shouldn't exist in instruction list representation");
                break;

            case MjoScriptRepresentation.ControlFlowGraph:
                Debug.Assert(StartState == null);
                Debug.Assert(EndState == null);
                Debug.Assert(PhiNodes == null);
                break;

            case MjoScriptRepresentation.SsaGraph:
                Debug.Assert(StartState != null);
                Debug.Assert(EndState != null);
                Debug.Assert(PhiNodes != null);
                break;
            }
        }
示例#4
0
        public void SanityCheck(MjoScriptRepresentation representation)
        {
            switch (representation)
            {
            case MjoScriptRepresentation.InstructionList:
                Debug.Fail("Functions shouldn't exist in instruction list representation");
                break;

            case MjoScriptRepresentation.ControlFlowGraph:
                Debug.Assert(ParameterTypes != null);
                Debug.Assert(LocalTypes != null);
                break;

            case MjoScriptRepresentation.SsaGraph:
                Debug.Assert(ParameterTypes != null);
                Debug.Assert(LocalTypes != null);
                break;
            }

            foreach (var block in Blocks)
            {
                block.SanityCheck(representation);
            }
        }