public override RCValue Edit(RCRunner runner, RCValueDelegate editor) { RCOperator result = (RCOperator)base.Edit(runner, editor); if (result != null) { return(result); } RCValue left = null; if (_left != null) { left = _left.Edit(runner, editor); } RCValue right = _right.Edit(runner, editor); if (left != null || right != null) { if (left == null) { left = _left; } if (right == null) { right = _right; } result = runner.New(_name, left, right); return(result); } else { return(null); } }
public virtual RCValue Edit(RCRunner runner, RCValueDelegate editor) { RCValue edit = editor(this); if (edit != null) { return(edit); } return(null); }
/// <summary> /// DO NOT USE!!! /// </summary> public override RCValue Edit(RCRunner runner, RCValueDelegate editor) { RCValue val = base.Edit(runner, editor); if (val == null) { RCBlock result = null; for (int i = 0; i < Count; ++i) { RCBlock name = GetName(i); val = name.Value.Edit(runner, editor); if (val != null) { if (result == null) { result = name.Previous; if (result == null) { result = RCBlock.Empty; } } result = new RCBlock(result, name.Name, Evaluator, val); } else { // This avoids creating an identical copy if nothing is to be changed // on any of the child values. if (result == null) { result = name; } else { result = new RCBlock(result, name.Name, name.Evaluator, name.Value); } } } return(result); } else { return(val); } }