public Tret UpdateBindingAndInvoke(CodeContext context, T0 arg0)
        {
            StandardRule <BigDynamicSiteTarget <T0, Tret> > rule = _rules.GetRule(context, arg0);

            if (rule != null)
            {
                // site is truly polymorphic, build the polymorphic method
                _target = _rules.GetOrMakeTarget(context);
                return(_target(this, context, arg0));
            }

            return((Tret)context.LanguageContext.Binder.UpdateSiteAndExecute <BigDynamicSiteTarget <T0, Tret> >(context, Action, Tuple.GetTupleValues(arg0), this, ref _target, ref _rules));
        }
        public Tret UpdateBindingAndInvoke(T0 arg0)
        {
            StandardRule <FastDynamicSiteTarget <T0, Tret> > rule = _rules.GetRule(Context, arg0);

            if (rule != null)
            {
                // site is truly polymorphic, build the polymorphic method
                _target = _rules.GetOrMakeTarget(Context);
                return(_target(this, arg0));
            }


            return((Tret)Context.LanguageContext.Binder.UpdateSiteAndExecute <FastDynamicSiteTarget <T0, Tret> >(Context, Action, new object[] { arg0 }, this, ref _target, ref _rules));
        }