示例#1
0
        private Expression HandleInclude(IncludeTemplateNode node)
        {
            var includeModel = ParseExpression(node.ModelExpression);
            var template     = this.includeParser(node.TemplateName, includeModel.Type);

            if (template == null)
            {
                throw new VeilCompilerException("Unable to load template '{0}'".FormatInvariant(node.TemplateName));
            }

            var storedModel = Expression.Variable(includeModel.Type);

            using (CreateLocalModelStack())
            {
                PushScope(storedModel);
                var body = HandleNode(template);
                PopScope();

                return(Expression.Block(
                           new[] { storedModel },
                           Expression.Assign(storedModel, includeModel),
                           body
                           ));
            }
        }
示例#2
0
        private void EmitInclude(IncludeTemplateNode node)
        {
            var template = includeParser(node.TemplateName, node.ModelExpression.ResultType);

            if (template == null)
            {
                throw new VeilCompilerException("Unable to load template '{0}'".FormatInvariant(node.TemplateName));
            }

            using (var model = emitter.DeclareLocal(node.ModelExpression.ResultType))
            {
                EvaluateExpression(node.ModelExpression);
                emitter.StoreLocal(model);

                using (CreateLocalScopeStack())
                {
                    AddModelScope(e => e.LoadLocal(model));

                    EmitNode(template);

                    RemoveModelScope();
                }
            }
        }