object GetValue(IType expectedType, Expression expression)
{
switch (expression.NodeType)
{
case NodeType.NullLiteralExpression:
return null;
case NodeType.StringLiteralExpression:
return ((StringLiteralExpression)expression).Value;
case NodeType.CharLiteralExpression:
return ((CharLiteralExpression)expression).Value[0];
case NodeType.BoolLiteralExpression:
return ((BoolLiteralExpression)expression).Value;
case NodeType.IntegerLiteralExpression:
var ile = (IntegerLiteralExpression)expression;
return ConvertValue(expectedType,
ile.IsLong? ile.Value: (int)ile.Value);
case NodeType.DoubleLiteralExpression:
return ConvertValue(expectedType,
((DoubleLiteralExpression)expression).Value);
case NodeType.TypeofExpression:
return GetSystemType(((TypeofExpression)expression).Type);
case NodeType.CastExpression:
return GetValue(expectedType, ((CastExpression)expression).Target);
default:
return GetComplexExpressionValue(expectedType, expression);
}
}