public override void Evaluate() { Term targetTerm = new Term(RegexMatch.Groups[1].Value); Expression e = new Expression(RegexMatch.Groups[2].Value, ParentContext); if (targetTerm.Type == Term.TermTypes.STRUCTURE) { object baseObj = new Expression(targetTerm.SubTerms[0], ParentContext).GetValue(); if (baseObj is SpecialValue) { if (((SpecialValue)baseObj).SetSuffix(targetTerm.SubTerms[1].Text.ToUpper(), e.GetValue())) { State = ExecutionState.DONE; return; } else { throw new kOSException("Suffix '" + targetTerm.SubTerms[1].Text + "' doesn't exist or is read only", this); } } else { throw new kOSException("Can't set subvalues on a " + Expression.GetFriendlyNameOfItem(baseObj), this); } } else { Variable v = FindOrCreateVariable(targetTerm.Text); if (v != null) { v.Value = e.GetValue(); State = ExecutionState.DONE; return; } } }