Ejemplo n.º 1
0
        public override object VisitEnd(MFSHParser.EndContext context)
        {
            const String fcn = "VisitEnd";

            this.TraceMsg(context, fcn);

            ParseBlock s = this.PopState();

            switch (s)
            {
            case UseBlock useBlock:
                this.Usings.Remove(useBlock.Use);
                this.Current.Items.AddRange(useBlock.Items);
                break;

            case MacroBlock macroBlock:

                if (this.mfsh.MacroMgr.TryAddItem(macroBlock.Item.Name, macroBlock.Item) == false)
                {
                    this.Error(fcn,
                               context.Start.Line.ToString(),
                               $"Error adding macro '{macroBlock.Item.Name}'. Does macro already exist?");
                }
                break;

            case ConditionalBlock conditionalBlock:
                this.Current.Items.Add(conditionalBlock.Conditional);
                break;

            default:
                this.Error(fcn,
                           context.Start.Line.ToString(),
                           $"Unexpected '#end'");
                throw new Exception($"Unexpected '#end'");
            }
            return(null);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="MFSHParser.end"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitEnd([NotNull] MFSHParser.EndContext context)
 {
     return(VisitChildren(context));
 }