Improve multiple returns
When aspecting a multiple return method. we have multiple exit method called. We could improve it by calling aspect exit method only once time.
Remarks:
This seems to be only in release mode. There is no performance impact (only library size impact)
Current result:
// AssemblyToProcess.SimpleClass
[SimpleAspect]
public int TestWithMultipleResults()
{
MethodBase methodFromHandle = MethodBase.GetMethodFromHandle(methodof(SimpleClass.TestWithMultipleResults()).MethodHandle, typeof(SimpleClass).TypeHandle);
SimpleAspectAttribute simpleAspectAttribute = (SimpleAspectAttribute)Activator.CreateInstance(typeof(SimpleAspectAttribute));
simpleAspectAttribute.Init(this, methodFromHandle, null, null);
int num;
try
{
simpleAspectAttribute.OnEntry();
if (this.TestValue == 1)
{
num = 0;
simpleAspectAttribute.OnExit(num);
}
else if (this.TestValue > 2)
{
num = 1;
simpleAspectAttribute.OnExit(num);
}
else
{
num = 3;
simpleAspectAttribute.OnExit(num);
}
}
catch (Exception exception)
{
simpleAspectAttribute.OnException(exception);
throw;
}
return num;
}
Expected result:
// AssemblyToProcess.SimpleClass
[SimpleAspect]
public int TestWithMultipleResults()
{
MethodBase methodFromHandle = MethodBase.GetMethodFromHandle(methodof(SimpleClass.TestWithMultipleResults()).MethodHandle, typeof(SimpleClass).TypeHandle);
SimpleAspectAttribute simpleAspectAttribute = (SimpleAspectAttribute)Activator.CreateInstance(typeof(SimpleAspectAttribute));
simpleAspectAttribute.Init(this, methodFromHandle, null, null);
int num;
try
{
simpleAspectAttribute.OnEntry();
if (this.TestValue == 1)
{
num = 0;
}
else if (this.TestValue > 2)
{
num = 1;
}
else
{
num = 3;
}
}
catch (Exception exception)
{
simpleAspectAttribute.OnException(exception);
throw;
}
simpleAspectAttribute.OnExit(num);
return num;
}
Edited by Kevin BEAUGRAND