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 )); } }
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(); } } }