示例#1
0
 internal static NegateChecked NegateChecked(UnaryExpression expression)
 {
     return(new NegateChecked()
     {
         Operand = Serialize(expression.Operand),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#2
0
 public static ElementInit Serialize(E.ElementInit elementInit)
 {
     return(new ElementInit()
     {
         AddMethod = MethodRef.Serialize(elementInit.AddMethod),
         Arguments = elementInit.Arguments.Select(Node.Serialize).ToArray(),
     });
 }
示例#3
0
 internal static Increment Increment(UnaryExpression expression)
 {
     return(new Increment()
     {
         Operand = Serialize(expression.Operand),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#4
0
 internal static Subtract Subtract(BinaryExpression expression)
 {
     return(new Subtract()
     {
         Left = Serialize(expression.Left),
         Right = Serialize(expression.Right),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#5
0
 internal static Convert Convert(UnaryExpression expression)
 {
     return(new Convert()
     {
         Operand = Serialize(expression.Operand),
         Type = TypeRef.Serialize(expression.Type),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     });
 }
示例#6
0
 internal static MultiplyChecked MultiplyChecked(BinaryExpression expression)
 {
     return(new MultiplyChecked()
     {
         Left = Serialize(expression.Left),
         Right = Serialize(expression.Right),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#7
0
 internal static Rethrow Rethrow(UnaryExpression expression)
 {
     return(new Rethrow()
     {
         Operand = Serialize(expression.Operand),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
         Type = expression.Type.Null(t => TypeRef.Serialize(t)),
     }.If(n => n.Type == null, n => n.TypeHint = TypeRef.Serialize(expression.Type)));
 }
示例#8
0
文件: Call.cs 项目: erisonliang/yacq
 internal static Call Call(MethodCallExpression expression)
 {
     return(new Call()
     {
         Method = MethodRef.Serialize(expression.Method),
         Object = expression.Object.Null(e => Serialize(e)),
         Arguments = expression.Arguments.Select(Serialize).ToArray(),
         IsExtension = expression.Method.IsExtensionMethod(),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#9
0
 internal static OrAssign OrAssign(BinaryExpression expression)
 {
     return(new OrAssign()
     {
         Left = Serialize(expression.Left),
         Right = Serialize(expression.Right),
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
         Conversion = expression.Conversion.Null(e => Lambda(e)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#10
0
 internal static LessThanOrEqual LessThanOrEqual(BinaryExpression expression)
 {
     return(new LessThanOrEqual()
     {
         Left = Serialize(expression.Left),
         Right = Serialize(expression.Right),
         LiftToNull = expression.IsLiftedToNull,
         Method = expression.Method.Null(m => MethodRef.Serialize(m)),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#11
0
 internal static Switch Switch(SwitchExpression expression)
 {
     return(new Switch()
     {
         Type = expression.Type != expression.Cases[0].Body.Type
             ? TypeRef.Serialize(expression.Type)
             : null,
         SwitchValue = Serialize(expression.SwitchValue),
         Cases = expression.Cases.Select(SwitchCase.Serialize).ToArray(),
         DefaultBody = expression.DefaultBody.Null(e => Serialize(e)),
         Comparison = expression.Comparison.Null(m => MethodRef.Serialize(m)),
     }.If(n => n.Type == null, n => n.TypeHint = TypeRef.Serialize(expression.Type)));
 }
示例#12
0
 internal static New New(NewExpression expression)
 {
     return(new New()
     {
         Constructor = MethodRef.Serialize(expression.Constructor),
         Arguments = expression.Arguments.Select(Serialize).ToArray(),
         Members = expression.Members.If(
             ms => ms != null && ms.Any(),
             ms => ms.Select(MemberRef.Serialize).ToArray(),
             _ => null
             ),
     }.Apply(n => n.Type = TypeRef.Serialize(expression.Type)));
 }
示例#13
0
        /// <summary>
        /// Returns the member reference which refers specified member.
        /// </summary>
        /// <param name="member">The member to refer.</param>
        /// <returns>The member reference which refers specified member.</returns>
        public static MemberRef Serialize(MemberInfo member)
        {
            switch (member.MemberType)
            {
            case MemberTypes.Constructor:
            case MemberTypes.Method:
                return(MethodRef.Serialize((MethodBase)member));

            case MemberTypes.Event:
                return(EventRef.Serialize((EventInfo)member));

            case MemberTypes.Field:
                return(FieldRef.Serialize((FieldInfo)member));

            case MemberTypes.Property:
                return(PropertyRef.Serialize((PropertyInfo)member));

            default:
                throw new ArgumentOutOfRangeException("member.MemberType");
            }
        }