public Object EvaluatePostOrPrefix(ref Object v){
int i; uint ui; long l; ulong ul; double d;
IConvertible ic = Convert.GetIConvertible(v);
switch (Convert.GetTypeCode(v, ic)){
case TypeCode.Empty: v = Double.NaN; return v;
case TypeCode.DBNull: v = 0; return this.DoOp(0);
case TypeCode.Boolean:
case TypeCode.SByte:
case TypeCode.Byte:
case TypeCode.Int16:
case TypeCode.UInt16:
case TypeCode.Int32: v = i = ic.ToInt32(null); return this.DoOp(i);
case TypeCode.Char: i = ic.ToInt32(null); return ((IConvertible)this.DoOp(i)).ToChar(null);
case TypeCode.UInt32: v = ui = ic.ToUInt32(null); return this.DoOp(ui);
case TypeCode.Int64: v = l = ic.ToInt64(null); return this.DoOp(l);
case TypeCode.UInt64: v = ul = ic.ToUInt64(null); return this.DoOp(ul);
case TypeCode.Single:
case TypeCode.Double: v = d = ic.ToDouble(null); return this.DoOp(d);
}
MethodInfo oper = this.GetOperator(v.GetType());
if (oper != null)
return oper.Invoke(null, (BindingFlags)0, JSBinder.ob, new Object[]{v}, null);
else{
v = d = Convert.ToNumber(v, ic);
return this.DoOp(d);
}
}