Exemplo n.º 1
0
        public MethodBody Execute()
        {
            MethodBody bytecodeBody = new MethodBody(MethodBodyKind.Bytecode);

            bytecodeBody.Parameters.AddRange(_tacBody.Parameters);
            bytecodeBody.LocalVariables.AddRange(_tacBody.LocalVariables);
            //bytecodeBody.ExceptionInformation.AddRange(_tacBody.ExceptionInformation);
            bytecodeBody.MaxStack = 0;

            if (_tacBody.Instructions.Count > 0)
            {
                InstructionConverter instructionConverter = new InstructionConverter();
                ControlFlowAnalysis  cfanalysis           = new ControlFlowAnalysis(_tacBody);
                // exceptions disabled for now
                ControlFlowGraph cfg = cfanalysis.GenerateNormalControlFlow();

                //FillExceptionHandlersStart();
                foreach (CFGNode node in cfg.ForwardOrder)
                {
                    ProcessBasicBlock(bytecodeBody, node, instructionConverter);
                }

                bytecodeBody.Instructions.AddRange(instructionConverter.Result);
            }

            return(bytecodeBody);
        }
Exemplo n.º 2
0
        private void ProcessBasicBlock(MethodBody body, CFGNode node, InstructionConverter translator)
        {
            if (node.Instructions.Count == 0)
            {
                return;
            }

            IInstruction firstInstruction = node.Instructions.First();

            //ProcessExceptionHandling(body, firstInstruction);

            translator.Visit(node);
        }