public override ASTNode VisitEnumdef([NotNull] llangParser.EnumdefContext context) { string name = context.Iden().GetText(); var items = new Dictionary <string, long>(); long curval = 0; if (context.enumDeclList() != null) { var ctx = context.enumDeclList().GetChild <llangParser.EnumDeclItemContext>(0); for (int i = 1; ctx != null; i++) { VarDeclNode v = (VarDeclNode)Visit(ctx); if (v.rhs != null) { curval = v.rhs.IntValue + 1; } else { v.rhs = new IntExprNode(curval++, v.sourceLoc); } items.Add(v.name, v.rhs.IntValue); ctx = context.enumDeclList().GetChild <llangParser.EnumDeclItemContext>(i); } } return(new EnumDefNode(name, TypeSymbol.ENUM_SYMBOL(name, items), MakeSourceLoc(context))); }
/// <summary> /// Exit a parse tree produced by <see cref="llangParser.enumdef"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitEnumdef([NotNull] llangParser.EnumdefContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="llangParser.enumdef"/>. /// <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 VisitEnumdef([NotNull] llangParser.EnumdefContext context) { return(VisitChildren(context)); }