Example #1
0
        internal static Expression ToExpression(string templateName, JinjaEnvironment environment, ASTNode node, out NewASTCompiler compiler, CompiledScope rootScope)
        {
            compiler = new NewASTCompiler(environment, rootScope);
            compiler.PushScope(SCOPE_NAME_INTERNAL);
            var internalVariableAssignments = new Expression[]
            {
                CreateVariable(compiler, VARNAME_STRING_BUILDER, Expression.New(typeof(StringBuilder))),
                CreateVariable(compiler, VARNAME_STRING_SELF, Expression.New(typeof(CompiledSelf)))
            };

            compiler.PushScope(string.Format(CultureInfo.InvariantCulture, SCOPE_NAME_TEMPLATE, templateName));
            var compiledNodes = node.Transform(compiler);
            var contentBlock  = compiler.PopScope(string.Format(CultureInfo.InvariantCulture, SCOPE_NAME_TEMPLATE, templateName), compiledNodes);

            var toString        = ExpressionEx.Object.ToStringEx(compiler.StringBuilderVar);
            var internalContent = internalVariableAssignments
                                  .Concat(contentBlock)
                                  .Concat(toString);


            var internalBlock = compiler.PopScope(SCOPE_NAME_INTERNAL, internalContent);

            return(internalBlock);
Example #2
0
 static BinaryExpression CreateVariable(NewASTCompiler localCompiler, string name, Expression createExpression)
 {
     localCompiler.CurrentScope.DefineAndSetVariable(name, createExpression, out var assignExpression);
     return(assignExpression);
 }