protected override Expression VisitHelperExpression(HelperExpression hex)
        {
            var engine        = CompilationContext.Engine;
            var configuration = engine.Configuration;

            if (configuration.Helpers.TryGetValue(hex.HelperName, out HandlebarsHelperV2 helper))
            {
                var arguments = new Expression[]
                {
                    Expression.Constant(engine, typeof(IHandlebarsEngine)),
                    Expression.Property(
                        CompilationContext.BindingContext,
#if netstandard
                        typeof(BindingContext).GetRuntimeProperty("TextWriter")),
#else
                        typeof(BindingContext).GetProperty("TextWriter")),
#endif
                    Expression.Property(
                        CompilationContext.BindingContext,
#if netstandard
                        typeof(BindingContext).GetRuntimeProperty("Value")),
#else
                        typeof(BindingContext).GetProperty("Value")),
#endif
                    Expression.NewArrayInit(typeof(object), hex.Arguments.Select(Visit))
                };
                if (helper.Target != null)
                {
                    return(Expression.Call(
                               Expression.Constant(helper.Target),
#if netstandard
                               helper.GetMethodInfo(),
#else
                               helper.Method,
#endif
                               arguments));
                }
                else
                {
                    return(Expression.Call(
#if netstandard
                               helper.GetMethodInfo(),
#else
                               helper.Method,
#endif
                               arguments));
                }
            }
            return(Expression.Call(
                       Expression.Constant(this),
#if netstandard
                       new Action <BindingContext, string, IEnumerable <object> >(LateBindHelperExpression).GetMethodInfo(),
#else
                       new Action <BindingContext, string, IEnumerable <object> >(LateBindHelperExpression).Method,
#endif
                       CompilationContext.BindingContext,
                       Expression.Constant(hex.HelperName),
                       Expression.NewArrayInit(typeof(object), hex.Arguments)));
        }
        protected override System.Linq.Expressions.Expression VisitHelperExpression(HelperExpression hex)
        {
            if (CompilationContext.Configuration.Helpers.ContainsKey(hex.HelperName))
            {
                var helper    = CompilationContext.Configuration.Helpers[hex.HelperName];
                var arguments = new System.Linq.Expressions.Expression[]
                {
                    System.Linq.Expressions.Expression.Property(
                        CompilationContext.BindingContext,
#if netstandard
                        typeof(BindingContext).GetRuntimeProperty("TextWriter")),
#else
                        typeof(BindingContext).GetProperty("TextWriter")),
#endif
                    System.Linq.Expressions.Expression.Property(
                        CompilationContext.BindingContext,
#if netstandard
                        typeof(BindingContext).GetRuntimeProperty("Value")),
#else
                        typeof(BindingContext).GetProperty("Value")),
#endif
                    System.Linq.Expressions.Expression.NewArrayInit(typeof(object), hex.Arguments.Select(a => Visit(a)))
                };
                if (helper.Target != null)
                {
                    return(System.Linq.Expressions.Expression.Call(
                               System.Linq.Expressions.Expression.Constant(helper.Target),
#if netstandard
                               helper.GetMethodInfo(),
#else
                               helper.Method,
#endif
                               arguments));
                }
                else
                {
                    return(System.Linq.Expressions.Expression.Call(
#if netstandard
                               helper.GetMethodInfo(),
#else
                               helper.Method,
#endif
                               arguments));
                }
            }
            else
            {
                return(System.Linq.Expressions.Expression.Call(
                           System.Linq.Expressions.Expression.Constant(this),
#if netstandard
                           new Action <BindingContext, string, IEnumerable <object> >(LateBindHelperExpression).GetMethodInfo(),
#else
                           new Action <BindingContext, string, IEnumerable <object> >(LateBindHelperExpression).Method,
#endif
                           CompilationContext.BindingContext,
                           System.Linq.Expressions.Expression.Constant(hex.HelperName),
                           System.Linq.Expressions.Expression.NewArrayInit(typeof(object), hex.Arguments)));
            }
        }
        private static bool IsBlockHelperOrInversion(HelperExpression helperExpression)
        {
            if (helperExpression == null)
            {
                return(false);
            }

            return(helperExpression.HelperName.StartsWith("#") || (helperExpression.HelperName == "else"));
        }
Exemple #4
0
 protected virtual Expression VisitHelperExpression(HelperExpression hex)
 {
     return(hex);
 }
Exemple #5
0
 protected override System.Linq.Expressions.Expression VisitHelperExpression(HelperExpression hex)
 {
     return(HandlebarsExpression.Helper(
                hex.HelperName,
                hex.Arguments.Select(Visit)));
 }
 public BlockHelperAccumulatorContext(Expression startingNode)
 {
     startingNode  = UnwrapStatement(startingNode);
     _startingNode = (HelperExpression)startingNode;
 }
 public IteratorBlockAccumulatorContext(Expression startingNode)
 {
     _startingNode = (HelperExpression)UnwrapStatement(startingNode);
 }
Exemple #8
0
 protected virtual System.Linq.Expressions.Expression VisitHelperExpression(HelperExpression hex)
 {
     return(hex);
 }
Exemple #9
0
 public IteratorBlockAccumulatorContext(Expression startingNode)
     : base(startingNode)
 {
     startingNode  = UnwrapStatement(startingNode);
     _startingNode = (HelperExpression)startingNode;
 }