public override object Math2Value(CLS_Content env, char code, object left, CLS_Content.Value right, out CLType returntype)
{
returntype = null;
if (left is DeleEvent)
{
DeleEvent info = left as DeleEvent;
Delegate calldele = null;
//!--exist bug.
/*if (right.value is DeleFunction) calldele = CreateDelegate(env.environment, right.value as DeleFunction);
else if (right.value is DeleLambda) calldele = CreateDelegate(env.environment, right.value as DeleLambda);
else if (right.value is Delegate) calldele = right.value as Delegate;*/
object rightValue = right.value;
if (rightValue is DeleFunction)
{
if (code == '+')
{
calldele = CreateDelegate(env.environment, rightValue as DeleFunction);
}
else if (code == '-')
{
calldele = CreateDelegate(env.environment, rightValue as DeleFunction);
}
}
else if (rightValue is DeleLambda)
{
if (code == '+')
{
calldele = CreateDelegate(env.environment, rightValue as DeleLambda);
}
else if (code == '-')
{
calldele = CreateDelegate(env.environment, rightValue as DeleLambda);
}
}
else if (rightValue is Delegate)
{
calldele = rightValue as Delegate;
}
if (code == '+')
{
info._event.AddEventHandler(info.source, calldele);
//if (!(rightValue is Delegate)) {
// Dele_Map_Delegate.Map(rightValue as IDeleBase, calldele);
//}
return info;
}
else if (code == '-')
{
info._event.RemoveEventHandler(info.source, calldele);
//if (!(rightValue is Delegate)) {
// Dele_Map_Delegate.Destroy(rightValue as IDeleBase);
//}
return info;
}
}
else if (left is Delegate || left == null)
{
Delegate info = left as Delegate;
Delegate calldele = null;
if (right.value is DeleFunction)
calldele = CreateDelegate(env.environment, right.value as DeleFunction);
else if (right.value is DeleLambda)
calldele = CreateDelegate(env.environment, right.value as DeleLambda);
else if (right.value is Delegate)
calldele = right.value as Delegate;
if (code == '+')
{
return Delegate.Combine(info, calldele); ;
}
else if (code == '-')
{
return Delegate.Remove(info, calldele);
}
}
return new NotSupportedException();
}