Example #1
0
        internal static CompiledTemplate LoadTemplate(JinjaEnvironment environment, string templateText, IDictionary <string, object?> variableTemplate, string templateName, string?templatePath)
        {
            var rootScope = CompiledScope.CreateRootScope("GLOBALS", variableTemplate);
            var expr      = ToExpression(templateName, environment, templateText, rootScope);

            return(new CompiledTemplate(environment, ExpressionData.CreateCompiled(expr, rootScope), templateName, templatePath));
        }
Example #2
0
        internal Expression ToExpression(string expressionText, CompiledScope scope)
        {
            var tokens      = Lexer.Tokenize(expressionText).ToArray();
            var astNode     = Parser.Parse(tokens);
            var transformer = new ExpressionTreeTransformer(LanguageDefinition, scope);

            return(astNode.Transform(transformer));
        }
Example #3
0
        internal object?Evaluate(string expressionText, IDictionary <string, object?> variables)
        {
            variables = variables ?? throw new ArgumentNullException(nameof(variables));
            var rootScope = CompiledScope.CreateRootScope("root", variables);
            var data      = Dynamic(expressionText, rootScope);

            return(data.Evaluate(variables));
        }
Example #4
0
 internal CompiledTemplate GetTemplate <T>(string templateText, CompiledScope scope, string templateName, string?templatePath)
 {
     Settings.IsReadOnly = true;
     if (Settings.DynamicTemplates)
     {
         throw new NotImplementedException();
     }
     return(CompiledTemplate.LoadTemplate(this, templateText, scope, templateName, templatePath));
 }
Example #5
0
        internal static CompiledTemplate FromBlockNode(string templateName, JinjaEnvironment environment, BlockNode blockNode, IDictionary <string, object?> variableTemplate)
        {
            var rootScope = CompiledScope.CreateRootScope("GLOBALS", variableTemplate);

#if DEBUG
            var expr = NewASTCompiler.ToExpression(templateName, environment, blockNode, out var newcompiler, rootScope);
            return(new CompiledTemplate(environment, ExpressionData.CreateCompiled(expr, rootScope), blockNode.Name, null));
#else
            throw new NotImplementedException();
#endif
        }
Example #6
0
        internal static ExpressionData CreateDynamic(Expression expression, CompiledScope scope)
        {
            var parameterExpressions = scope.Variables.ToArray();
            var parameterInfo        = parameterExpressions.Select(param => new ParameterInfo(param.Name, param.Type)).ToArray();
            var parameterTypes       = parameterExpressions.Select(param => param.Type).ToArray();

            var funcType = GetDelegateType(expression.Type, parameterTypes, out var genericTypes);

            var lambda        = GetLambdaMethod(funcType).Invoke(null, new object[] { expression, parameterExpressions });
            var compileMethod = lambda.GetType().GetMethod("Compile", Type.EmptyTypes);
            var compiled      = compileMethod.Invoke(lambda, Array.Empty <object>());

            if (!(compiled is Delegate compiledDelegate))
            {
                throw new NotImplementedException();
            }
            return(new ExpressionData(expression.Type, parameterInfo, expression, compiledDelegate, true));
        }
Example #7
0
        private CompiledScope ReadNetExtType()
        {
            int      pos = br.ReadInt32();
            string   s   = pcu_file.ref_assemblies[pos];
            Assembly a   = (Assembly)assemblies[s];

            if (a == null)
            {
                string tmp            = s.Substring(0, s.IndexOf(','));
                string name_with_path = Compiler.GetReferenceFileName(tmp + ".dll");
                //a = Assembly.LoadFrom(name_with_path);
                a = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(name_with_path);
                PascalABCCompiler.NetHelper.NetHelper.init_namespaces(a);
                assemblies[s] = a;
            }
            //Type t = NetHelper.NetHelper.FindTypeByHandle(a,br.ReadInt32());//íàõîäèì åãî ïî òîêåíó
            Type          t  = FindTypeByHandle(br.ReadInt32());
            CompiledScope cs = TypeTable.get_compiled_type(new SymInfo(t.Name, SymbolKind.Class, t.FullName), t);

            return(cs);
        }
Example #8
0
        internal Expression GetTemplateExpression(string templateName, CompiledScope scope)
        {
            var templateInfo = GetTemplateInfo(templateName);

            return(CompiledTemplate.ToExpression(templateName, this, templateInfo.Source, scope));
        }
Example #9
0
        //internal static Template LoadTemplate(JinjaEnvironment environment, string templateText, IDictionary<string, object?> variableTemplate, string? templateName, string? templatePath)
        //{
        //    var expr = ToExpression(environment, templateText, variableTemplate, out var compiler);
        //    return new Template(environment, compiler.Compile(expr), templateName, templatePath);
        //}
        internal static CompiledTemplate LoadTemplate(JinjaEnvironment environment, string templateText, CompiledScope scope, string templateName, string?templatePath)
        {
            var expr = ToExpression(templateName, environment, templateText, scope);

            return(new CompiledTemplate(environment, ExpressionData.CreateCompiled(expr, scope), templateName, templatePath));
        }
Example #10
0
        //internal static Expression ToExpression(JinjaEnvironment environment, string templateText, IDictionary<string, object?> variableTemplate, out ASTCompiler compiler)
        //{
        //    var lexer = new Lexer(environment);
        //    var tokens = lexer.Tokenize(templateText).ToArray();
        //    var parsed = Parser.Parse(tokens).ToArray();
        //    var environmentTrimmed = EnvironmentTrimming.EnvironmentTrim(parsed, environment.Settings).ToArray();
        //    var templateNode = ASTGenerator.ParseTemplate(environmentTrimmed);
        //    var commentsRemoved = templateNode.Transform(CommentRemoverTransformer.Instance);
        //    var controlledWhiteSpace = WhiteSpaceController.ControlWhiteSpace(commentsRemoved);
        //    var containerAssembled = controlledWhiteSpace.Transform(TemplateContainerAssembler.Instance);

        //    var finished = NewASTCompiler.ToExpression(environment, containerAssembled, variableTemplate, out var newcompiler);
        //    throw new NotImplementedException();
        //}
        internal static Expression ToExpression(string templateName, JinjaEnvironment environment, string templateText, CompiledScope rootScope)
        {
            var containerAssembled = ASTNode.GetTemplateNode(environment, templateText);

#if DEBUG
            var finished = NewASTCompiler.ToExpression(templateName, environment, containerAssembled, out var newcompiler, rootScope);
            return(finished);
#else
            throw new NotImplementedException();
#endif
        }
Example #11
0
 internal static ExpressionData CreateCompiled(Expression expression, CompiledScope scope)
 {
     return(CreateDynamic(expression, scope));
 }
Example #12
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);
 internal ExpressionTreeTransformer(ILanguageDefinition languageDefinition, CompiledScope scope)
 {
     LanguageDefinition  = languageDefinition;
     OperatorTransformer = new ExpressionTreeOperatorTransformer(this, languageDefinition);
     Scopes.Push(scope);
 }
Example #14
0
        internal ExpressionData Dynamic(string expressionText, CompiledScope scope)
        {
            var expression = ToExpression(expressionText, scope);

            return(ExpressionData.CreateDynamic(expression, scope));
        }