public void ProcessInstructions(ClosureEntities closureEntities)
        {
            var instructions           = _method.GetInstructions().ToArray();
            var exceptionRanges        = ExceptionCatchClauseRanges.ComputeExceptionInstructionRanges(_method);
            var genericArguments       = _method.DeclaringType.GetGenericArguments();
            var methodGenericArguments = (_method.IsConstructor) ? new Type[0] : _method.GetGenericArguments();
            var finalGeneric           = new List <Type>();

            finalGeneric.AddRange(genericArguments);
            finalGeneric.AddRange(methodGenericArguments);


            var labelList        = ComputeLabels(_method);
            var evaluator        = new EvaluatorStack(finalGeneric.ToArray());
            var operationFactory = new MetaMidRepresentationOperationFactory(_methodInterpreter.MidRepresentation,
                                                                             evaluator);

            for (var index = 0; index < instructions.Length; index++)
            {
                var instruction = instructions[index];
                if (ExceptionCatchClauseRanges.IndexInRanges(instruction, exceptionRanges))
                {
                    continue;
                }
                EvaluateInstruction(instruction, operationFactory, labelList, closureEntities);
            }
            //   Ensure.IsTrue(evaluator.Count == 0, "Stack not empty!");
            var analyzeProperties = _methodInterpreter.AnalyzeProperties;

            analyzeProperties.Setup(_methodInterpreter.MidRepresentation.Vars.VirtRegs,
                                    _methodInterpreter.MidRepresentation.Vars.LocalVars);
        }
Exemple #2
0
 public MetaMidRepresentationOperationFactory(MetaMidRepresentation representation, EvaluatorStack evaluator)
 {
     _representation = representation;
     _evaluator      = evaluator;
 }