Ejemplo n.º 1
0
        public override InjectionValue VisitAssignment([NotNull] injectionParser.AssignmentContext context)
        {
            var value = Visit(context.expression());

            if (context.lvalue().indexedSymbol() != null)
            {
                var name  = context.lvalue().indexedSymbol().SYMBOL().GetText();
                var index = (int)Visit(context.lvalue().indexedSymbol().expression());

                if (debugger != null)
                {
                    debugger.BeforeVariableAssignment(new IndexedVariableAssignmentContex(context, currentFileName, name, value, index));
                }
                semanticScope.SetDim(name, index, value);
            }
            else
            {
                var name = context.lvalue().SYMBOL().GetText();

                if (debugger != null)
                {
                    debugger.BeforeVariableAssignment(new VariableAssignmentContext(context, currentFileName, name, value));
                }

                semanticScope.SetVar(name, value);
            }

            return(InjectionValue.Unit);
        }
Ejemplo n.º 2
0
 public VariableAssignmentContext(injectionParser.AssignmentContext context, string file, string name, InjectionValue value)
 {
     this.context = context;
     File         = file;
     Name         = name;
     Value        = value;
 }
        public override bool VisitAssignment([NotNull] injectionParser.AssignmentContext context)
        {
            var name = context.lvalue()?.SYMBOL()?.GetText();

            if (!string.IsNullOrEmpty(name))
            {
                if (!varNames.Contains(name) && !metadata.GlobalVariableExists(name) &&
                    !metadata.ShortcutVariableExists(name))
                {
                    messages.Add(new Message(context.lvalue().Start.Line, context.lvalue().Start.Column, context.lvalue().Stop.Line, context.lvalue().Stop.Column,
                                             MessageSeverity.Warning, MessageCodes.UndefinedVariable,
                                             $"Variable not found '{name}'."));
                }
            }
            else
            {
                name = context.lvalue()?.indexedSymbol()?.SYMBOL()?.GetText();
                if (!string.IsNullOrEmpty(name) && !varNames.Contains(name) && !metadata.TryGetIntrinsicVariable(name, out _))
                {
                    messages.Add(new Message(context.lvalue().Start.Line, context.lvalue().Start.Column, context.lvalue().Stop.Line, context.lvalue().Stop.Column,
                                             MessageSeverity.Warning, MessageCodes.UndefinedVariable,
                                             $"Variable not found '{name}'."));
                }
            }

            return(base.VisitAssignment(context));
        }
 public IndexedVariableAssignmentContex(injectionParser.AssignmentContext context, string file, string name, InjectionValue value, int index)
     : base(context, file, name, value)
 {
     Index = index;
 }