示例#1
0
 public override MSAst TransformCore(ScriptGenerator generator)
 {
     return(generator.ConvertTo(
                _destinationType.Type,
                ConversionResultKind.ExplicitCast,
                _child.Transform(generator)));
 }
示例#2
0
        public override MSAst TransformCore(ScriptGenerator generator)
        {
            var scope = generator.PushNewScope();

            try
            {
                for (int i = 0; i < _scope.Parameters.Count; i++)
                {
                    _scope.Parameters[i].Transform(generator);
                }


                var transformedBody = _body.Transform(generator);

                if ((ReturnType != null) && (ReturnType != TypeManager.CoreTypes.Object) && (transformedBody.Type != ReturnType))
                {
                    transformedBody = MSAst.Convert(transformedBody, ReturnType);
                }

                var result = scope.FinishScope(transformedBody);

                return(result);
            }
            finally
            {
                generator.PopScope();
            }
        }
示例#3
0
        public MSAst::MemberBinding TransformMemberBinding(ScriptGenerator generator)
        {
            var memberInfo = (_target is PropertyExpression)
                                     ? (MemberInfo)((PropertyExpression)_target).PropertyInfo
                                     : ((FieldExpression)_target).FieldInfo;

            var collectionInitializer = _value as CollectionInitializerExpression;

            if (collectionInitializer != null)
            {
                var elementInitializers = collectionInitializer.Initializers
                                          .Cast <CollectionElementInitializer>()
                                          .Select(o => o.TransformInitializer(generator));

                return(MSAst::Expression.ListBind(
                           memberInfo,
                           elementInitializers));
            }

            return(MSAst::Expression.Bind(
                       memberInfo,
                       _value.Transform(generator)));
        }
示例#4
0
        public override MSAst TransformCore(ScriptGenerator generator)
        {
            var transformedOperator = _operand.Transform(generator);

            if (transformedOperator.Type == _targetType.Type)
            {
                return(transformedOperator);
            }

            if (Type == TypeManager.CoreTypes.String)
            {
                return(MSAst.Call(
                           transformedOperator,
                           CommonMembers.ObjectToString));
            }

            return(generator.ConvertTo(
                       Type,
                       IsImplicitConversionRequired
                    ? ConversionResultKind.ImplicitCast
                    : ConversionResultKind.ExplicitCast,
                       transformedOperator));
        }
示例#5
0
 public override System.Linq.Expressions.Expression TransformCore(ScriptGenerator generator)
 {
     return(_child.Transform(generator));
 }
示例#6
0
 public override MSAst.Expression TransformCore(ScriptGenerator generator)
 {
     return(MSAst.Expression.Quote(Expression.Transform(generator)));
 }
示例#7
0
 public MSAst.MemberAssignment MakeAssignment(ScriptGenerator generator)
 {
     return(MSAst.Expression.Bind(
                _member,
                _initializer.Transform(generator)));
 }