Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        public virtual RCValue Edit(RCRunner runner, RCValueDelegate editor)
        {
            RCValue edit = editor(this);

            if (edit != null)
            {
                return(edit);
            }
            return(null);
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }