public InstructionBlockChain CallOnExceptionInMoveNext(IPersistable executionArgs, VariableDefinition exceptionLocal) { var onExceptionMethodRef = _referenceFinder.GetMethodReference(Info.AspectAttribute.AttributeType, md => md.Name == "OnException"); var setMethod = _referenceFinder.GetMethodReference(executionArgs.PersistedType, md => md.Name == "set_Exception"); var setExceptionOnArgsBlock = _creator.CallVoidMethod(setMethod, GetMoveNextExecutionArgs(executionArgs), new VariablePersistable(exceptionLocal)); var sm = StateMachineFromMoveNext; var smPersistable = new ThisLoadable(sm); var aspectPersistable = new FieldPersistable(smPersistable, _aspectField.AsDefinedOn(sm)); var callOnExceptionBlock = _creator.CallVoidMethod(onExceptionMethodRef, aspectPersistable, GetMoveNextExecutionArgs(executionArgs)); var callAspectOnExceptionBlockChain = new InstructionBlockChain(); callAspectOnExceptionBlockChain.Add(setExceptionOnArgsBlock); callAspectOnExceptionBlockChain.Add(callOnExceptionBlock); return(callAspectOnExceptionBlockChain); }
public InstructionBlockChain LoadTagInMoveNext(IPersistable executionArgs) { var setMethod = _referenceFinder.GetMethodReference(executionArgs.PersistedType, md => md.Name == "set_MethodExecutionTag"); var sm = StateMachineFromMoveNext; return(_creator.CallVoidMethod(setMethod, GetMoveNextExecutionArgs(executionArgs), new FieldPersistable(new ThisLoadable(sm), _tagField.AsDefinedOn(sm)))); }