//When an enum is first defined. public override object VisitStat_enumDef([NotNull] algoParser.Stat_enumDefContext context) { //Check if the variable already exists at local scope. if (Scopes.VariableExistsLowest(context.IDENTIFIER().GetText())) { Error.Fatal(context, "A variable with the name '" + context.IDENTIFIER().GetText() + "'already exists, cannot create a duplicate."); return(null); } //Create an object for the enum. AlgoObject enumObj = new AlgoObject(); //For each enum member, create a child in the object with an integer value. BigInteger enumIndex = 0; if (context.abstract_params() != null) { foreach (var id in context.abstract_params().IDENTIFIER()) { //Does a member with this name already exist? if (enumObj.ObjectScopes.VariableExists(id.GetText())) { Error.Fatal(context, "An enum member with the name '" + id.GetText() + "' already exists."); return(null); } //Add member. enumObj.ObjectScopes.AddVariable(id.GetText(), new AlgoValue() { Type = AlgoValueType.Integer, Value = enumIndex }); enumIndex++; } } //Create an enum variable with this name. Scopes.AddVariable(context.IDENTIFIER().GetText(), new AlgoValue() { Type = AlgoValueType.Object, Value = enumObj }); return(null); }
/// <summary> /// Visit a parse tree produced by <see cref="algoParser.stat_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 VisitStat_enumDef([NotNull] algoParser.Stat_enumDefContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="algoParser.stat_enumDef"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitStat_enumDef([NotNull] algoParser.Stat_enumDefContext context) { }