Beispiel #1
0
        internal static MSA.Expression /*!*/ YieldExpression(
            RubyContext /*!*/ context,
            ICollection <MSA.Expression> /*!*/ arguments,
            MSA.Expression splattedArgument,
            MSA.Expression rhsArgument,
            MSA.Expression blockArgument,
            MSA.Expression /*!*/ bfcVariable,
            MSA.Expression /*!*/ selfArgument)
        {
            Assert.NotNull(arguments, bfcVariable, selfArgument);

            bool hasArgumentArray;
            var  opMethod = Methods.Yield(arguments.Count, splattedArgument != null, rhsArgument != null, out hasArgumentArray);

            var args = new AstExpressions();

            foreach (var arg in arguments)
            {
                args.Add(AstUtils.Box(arg));
            }

            if (hasArgumentArray)
            {
                args = new AstExpressions {
                    Ast.NewArrayInit(typeof(object), args)
                };
            }

            if (splattedArgument != null)
            {
                args.Add(AstUtils.LightDynamic(ExplicitSplatAction.Make(context), typeof(IList), splattedArgument));
            }

            if (rhsArgument != null)
            {
                args.Add(AstUtils.Box(rhsArgument));
            }

            args.Add(blockArgument != null ? AstUtils.Convert(blockArgument, typeof(Proc)) : AstFactory.NullOfProc);

            args.Add(AstUtils.Box(selfArgument));
            args.Add(bfcVariable);

            return(Ast.Call(opMethod, args));
        }
 internal override MSA.Expression /*!*/ TransformRead(AstGenerator /*!*/ gen)
 {
     return(AstUtils.LightDynamic(ExplicitSplatAction.Make(gen.Context), typeof(IList), _argument.TransformRead(gen)));
 }