Expression ILiteralEncodingStrategy.LargeInteger(EncoderVisitor visitor, BigInteger value) { Expression bytes = Expression.NewArrayInit(typeof(byte), value.ToByteArray().Select(b => Expression.Constant(b, typeof(byte)))); Expression initializer = Expression.Convert(Expression.New(NativeLiteralEncodingStrategy.BigIntegerCtor, bytes), typeof(object)); return(PreboxedConstants.GetConstant(value) ?? this.DefineLiteral(visitor, "BigInteger", string.Format("{0}", value, CultureInfo.InvariantCulture), initializer)); }
Expression ILiteralEncodingStrategy.ScaledDecimal(EncoderVisitor visitor, BigDecimal value) { // The numerator of the BigDecimal Expression bytes = Expression.NewArrayInit(typeof(byte), value.Numerator.ToByteArray().Select(b => Expression.Constant(b, typeof(byte)))); Expression numerator = Expression.New(NativeLiteralEncodingStrategy.BigIntegerCtor, bytes); // The scale Expression scale = Expression.Constant(value.Scale, typeof(int)); // Constructing a new BigDecimal Expression initializer = Expression.Convert(Expression.New(NativeLiteralEncodingStrategy.BigDecimalCtor, numerator, scale), typeof(object)); return(PreboxedConstants.GetConstant(value) ?? this.DefineLiteral(visitor, "BigDecimal", string.Format("{0}", value, CultureInfo.InvariantCulture), initializer)); }
Expression ILiteralEncodingStrategy.SmallInteger(EncoderVisitor visitor, int value) { Expression initializer = Expression.Convert(Expression.Constant(value, typeof(int)), typeof(object)); return(PreboxedConstants.GetConstant(value) ?? this.DefineLiteral(visitor, "Int", string.Format("{0}", value, CultureInfo.InvariantCulture), initializer)); }
Expression ILiteralEncodingStrategy.Character(EncoderVisitor visitor, char value) { Expression initializer = Expression.Convert(Expression.Constant(value, typeof(char)), typeof(object)); return(PreboxedConstants.GetConstant(value) ?? this.DefineLiteral(visitor, "Char", string.Format("0x{0:X4}", (int)value, CultureInfo.InvariantCulture), initializer)); }
Expression ILiteralEncodingStrategy.SmallInteger(EncoderVisitor visitor, int value) { return(Expression.Constant(PreboxedConstants.GetValue(value) ?? value, typeof(object))); }
Expression ILiteralEncodingStrategy.ScaledDecimal(EncoderVisitor visitor, BigDecimal value) { return(Expression.Constant(PreboxedConstants.GetValue(value) ?? value, typeof(object))); }
Expression ILiteralEncodingStrategy.FloatD(EncoderVisitor visitor, double value) { return(Expression.Constant(PreboxedConstants.GetValue(value) ?? value, typeof(object))); }