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); }
public MetaMidRepresentationOperationFactory(MetaMidRepresentation representation, EvaluatorStack evaluator) { _representation = representation; _evaluator = evaluator; }