public override object VisitDesignator([NotNull] SLangGrammarParser.DesignatorContext context) { // first step -- find in context or in imported modules SlangType resultType; ExpressionValueType valueType = ExpressionValueType.Variable; var item = FindItemByName(context.Id().GetText()); bool fromCurrentModule = true; if (item != null) { if (item is ModuleNameTable module && module.ModuleData.Name != moduleItem.ModuleData.Name) { fromCurrentModule = false; } else if (item is VariableNameTableItem var) { if (var.IsConstant) // константа { valueType = ExpressionValueType.Value; } } }
/// <summary> /// Exit a parse tree produced by <see cref="SLangGrammarParser.designator"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitDesignator([NotNull] SLangGrammarParser.DesignatorContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="SLangGrammarParser.designator"/>. /// <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 VisitDesignator([NotNull] SLangGrammarParser.DesignatorContext context) { return(VisitChildren(context)); }