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); }
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; }