public static void SetVar(string name, int i1, int i2, Value val) { if (DeclaredVariables.Contains(name)) { if (ScopedVariables.ContainsKey(name)) { if (ScopedVariables[name].IsReadOnly) { throw new ProgramError(Error.CannotAssign); } ScopedVariables[name][i1, i2] = val; } else { ScopedVariables.Add(name, new Variable(i1, i2, val)); } } else if (GlobalVariableExists(name)) { var globalvar = GetGlobalVariable(name); if (globalvar.IsReadOnly) { throw new ProgramError(Error.CannotAssign); } globalvar[i1, i2] = val; } else if (Current != null) { if (Current.VariableExists(name)) { var instancevar = Current.Variable(name); if (instancevar.IsReadOnly) { throw new ProgramError(Error.CannotAssign); } instancevar[i1, i2] = val; } else { Current.SetLocalVar(name, val); } } }
public static GetSetValue Variable(int instance, string name) { switch ((InstanceTarget)instance) { case InstanceTarget.Self: return(Current.Variable(name)); case InstanceTarget.Other: return(Other.Variable(name)); case InstanceTarget.All: return(Instances.Where(e => e.VariableExists(name)).Select(e => e.Variable(name)).FirstOrDefault()); case InstanceTarget.Noone: return(null); case InstanceTarget.Global: return(GetGlobalVariable(name)); default: return(GetInstance(instance).Variable(name)); } }