void SetArrayVariableValue(VariableNameToken variableNameToken, ValueTokenArray indicies, ValueToken value) { switch (variableNameToken.VariableType) { case VariableValueType.String: var stringValueToken = (StringValueToken)value; SetStringArrayVariableValue(variableNameToken, indicies, stringValueToken); break; case VariableValueType.RealNumber: if (value is IntegerValueToken integerValueToken) { value = new RealValueToken(integerValueToken.RealValue); } SetRealNumberArrayVariableValue(variableNameToken, indicies, (RealValueToken)value); break; case VariableValueType.IntegerNumber: if (value is RealValueToken realValueToken) { IntegerValueToken.CheckValueBounds(realValueToken.RealValue); value = new IntegerValueToken((Int16)realValueToken.IntValue); } SetIntegerNumberArrayVariableValue(variableNameToken, indicies, (IntegerValueToken)value); break; } }
void SetIntegerNumberValue(VariableNameToken nameToken, ValueToken valueToken) { if (valueToken is StringValueToken) { throw new Exceptions.TypeMismatchException(); } var numberToken = (NumericValueToken)valueToken; if (numberToken is IntegerValueToken integerToken) { integerVariables[nameToken.Name] = integerToken; return; } var realToken = (RealValueToken)valueToken; IntegerValueToken.CheckValueBounds(realToken.Value); integerVariables[nameToken.Name] = new IntegerValueToken((Int16)realToken.Value); }