public YieldData(YieldStateMachineVersion stateMachineVersion, HashSet <InstructionBlock> yieldReturns, HashSet <InstructionBlock> yieldBreaks, YieldFieldsInformation fieldsInfo, List <YieldExceptionHandlerInfo> exceptionHandlers) { StateMachineVersion = stateMachineVersion; YieldReturns = yieldReturns; YieldBreaks = yieldBreaks; FieldsInfo = fieldsInfo; ExceptionHandlers = exceptionHandlers.ToArray(); FieldAssignmentData = new Dictionary <FieldDefinition, AssignmentType>(); }
public YieldData(YieldStateMachineVersion stateMachineVersion, HashSet<InstructionBlock> yieldReturns, HashSet<InstructionBlock> yieldBreaks, YieldFieldsInformation fieldsInfo, List<YieldExceptionHandlerInfo> exceptionHandlers) { StateMachineVersion = stateMachineVersion; YieldReturns = yieldReturns; YieldBreaks = yieldBreaks; FieldsInfo = fieldsInfo; ExceptionHandlers = exceptionHandlers.ToArray(); FieldAssignmentData = new Dictionary<FieldDefinition, AssignmentType>(); }
protected override bool ProcessCFG() { StateMachineDisposeAnalyzer disposeAnalyzer = new StateMachineDisposeAnalyzer(moveNextMethodContext.Method); StateControllerRemover controllerRemover; YieldStateMachineVersion machineVersion = disposeAnalyzer.ProcessDisposeMethod(); if (machineVersion == YieldStateMachineVersion.V1) { controllerRemover = new StateControllerRemover(moveNextMethodContext); } else if (machineVersion == YieldStateMachineVersion.V2) { controllerRemover = new DisposingStateControllerRemover(moveNextMethodContext, disposeAnalyzer.StateField, disposeAnalyzer.DisposingField); StateMachineDoFinallyCheckRemover doFinallyCheckRemover = new StateMachineDoFinallyCheckRemover(moveNextMethodContext); if (!doFinallyCheckRemover.MarkFinallyConditionsForRemoval()) { return false; } toBeRemoved.UnionWith(doFinallyCheckRemover.BlocksMarkedForRemoval); } else { return false; } if (!controllerRemover.RemoveStateMachineController()) { return false; } toBeRemoved.UnionWith(controllerRemover.BlocksMarkedForRemoval); SwitchData switchData = controllerRemover.SwitchData; YieldStateMachineControlFlowRebuilder controlFlowRebuilder = new YieldStateMachineControlFlowRebuilder(moveNextMethodContext, switchData, controllerRemover.StateField); if (!controlFlowRebuilder.ProcessEndBlocks()) { return false; } toBeRemoved.UnionWith(controlFlowRebuilder.BlocksMarkedForRemoval); StateMachineCFGCleaner cfgCleaner = new StateMachineCFGCleaner(theCFG, switchData, switchData.OrderedCasesArray[0]); if (!cfgCleaner.CleanUpTheCFG(toBeRemoved)) { return false; } YieldFieldsInformation fieldsInfo = new YieldFieldsInformation(controllerRemover.StateField, controlFlowRebuilder.CurrentItemField, controlFlowRebuilder.ReturnFlagVariable); this.moveNextMethodContext.YieldData = new YieldData(machineVersion, controlFlowRebuilder.YieldReturnBlocks, controlFlowRebuilder.YieldBreakBlocks, fieldsInfo, disposeAnalyzer.YieldsExceptionData); return true; }
public YieldData(YieldStateMachineVersion stateMachineVersion, HashSet <InstructionBlock> yieldReturns, HashSet <InstructionBlock> yieldBreaks, YieldFieldsInformation fieldsInfo, List <YieldExceptionHandlerInfo> exceptionHandlers) { base(); this.set_StateMachineVersion(stateMachineVersion); this.set_YieldReturns(yieldReturns); this.set_YieldBreaks(yieldBreaks); this.set_FieldsInfo(fieldsInfo); this.set_ExceptionHandlers(exceptionHandlers.ToArray()); this.set_FieldAssignmentData(new Dictionary <FieldDefinition, AssignmentType>()); return; }