public static MetaObject TryBind(RubyContext /*!*/ context, InvokeMemberBinder /*!*/ binder, MetaObject /*!*/ target, MetaObject /*!*/[] /*!*/ args)
        {
            Assert.NotNull(context, target);

            var metaBuilder = new MetaObjectBuilder();

            RubyCallAction.Bind(metaBuilder, binder.Name,
                                new CallArguments(
                                    new MetaObject(Ast.Constant(context), Restrictions.Empty, context),
                                    target,
                                    args,
                                    RubyCallSignature.Simple(binder.Arguments.Count)
                                    )
                                );

            // TODO: we should return null if we fail, we need to throw exception for now:
            return(metaBuilder.CreateMetaObject(binder, MetaObject.EmptyMetaObjects));
        }
        public static MetaObject TryBind(RubyContext /*!*/ context, CreateInstanceBinder /*!*/ binder, MetaObject /*!*/ target, MetaObject /*!*/[] /*!*/ args)
        {
            Assert.NotNull(context, binder, target, args);

            var metaBuilder = new MetaObjectBuilder();

            RubyCallAction.Bind(metaBuilder, "new",
                                new CallArguments(
                                    new MetaObject(Ast.Constant(context), Restrictions.Empty, context),
                                    target,
                                    args,
                                    RubyCallSignature.Simple(args.Length)
                                    )
                                );

            // TODO: we should return null if we fail, we need to throw exception due to version update optimization:
            return(metaBuilder.CreateMetaObject(binder, MetaObject.EmptyMetaObjects));
        }