protected override bool ExpandExtension(ref MethodInvocationExpression extension, MacroStatement macro, MacroStatement parent, ref Statement expansion) { if (macro.Body != null) { PromoteExtensions(macro, parent); var builder = new HashConfigurationBuilder(); if (builder.BuildConfig(macro.Body, Errors) && builder.HasConfiguration) { extension.Arguments.Add(builder.HashConfiguration); return(true); } } return(false); }
private bool ProcessAttributes(MacroStatement macro) { HashConfigurationBuilder builder = new HashConfigurationBuilder(); if (!builder.BuildAttributes(macro.Block, Errors)) { return(false); } if (builder.HasConfiguration) { MethodInvocationExpression extension = new MethodInvocationExpression( AstUtil.CreateReferenceExpression(typeof(ConfigurationExtension).FullName) ); extension.Arguments.Add(builder.HashConfiguration); RegisterExtension(macro, extension); } return(true); }
private bool BuildConfigurationChild(MethodInvocationExpression child) { Block configBlock; List <Expression> attributes = new List <Expression>(); ConfigurationNodeVisitor nodeVisitor = new ConfigurationNodeVisitor(); if (!nodeVisitor.GetNode(child, _compileErrors)) { return(false); } if (!MacroHelper.IsNewBlock(child, out configBlock)) { attributes.AddRange(child.Arguments); return(BuildConfigurationChild(nodeVisitor.Node, null, attributes)); } else { if (configBlock.HasStatements) { HashConfigurationBuilder nested = new HashConfigurationBuilder(); if (nested.BuildConfig(configBlock, _compileErrors) && nested.HasConfiguration) { _configuration.Items.Add(new ExpressionPair(nodeVisitor.Node, nested.HashConfiguration)); return(true); } } else { return(BuildConfigurationChild(nodeVisitor.Node, null, null)); } } return(false); }
private bool BuildConfigurationChild(MethodInvocationExpression child) { Block configBlock; var attributes = new List<Expression>(); var nodeVisitor = new ConfigurationNodeVisitor(); if (nodeVisitor.GetNode(child, _compileErrors) == false) return false; if (MacroHelper.IsNewBlock(child, out configBlock) == false) { attributes.AddRange(child.Arguments); return BuildConfigurationChild(nodeVisitor.Node, null, attributes); } else { if (configBlock.IsEmpty == false) { var nested = new HashConfigurationBuilder(); if (nested.BuildConfig(configBlock, _compileErrors) && nested.HasConfiguration) { _configuration.Items.Add(new ExpressionPair(nodeVisitor.Node, nested.HashConfiguration)); return true; } } else { return BuildConfigurationChild(nodeVisitor.Node, null, null); } } return false; }