Beispiel #1
0
        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;
                    }
                }
            }
Beispiel #2
0
 /// <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));
 }