Ejemplo n.º 1
0
        public Node VisitExpression(IronPython.Compiler.Ast.ConstantExpression node)
        {
            var  changed = false;
            Node newCode = node;

            foreach (var edit in _edits)
            {
                if (edit.CanApply(node))
                {
                    changed = true;
                    if (edit is Update)
                    {
                        newCode = edit.ModifiedNode.InnerNode;
                    }
                    else if (edit is Insert)
                    {
                        throw new NotImplementedException();
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
            }
            if (changed)
            {
                return(newCode);
            }
            return(node);
        }
Ejemplo n.º 2
0
        public Node VisitExpression(IronPython.Compiler.Ast.BinaryExpression node)
        {
            var  changed = false;
            Node newCode = node;

            foreach (var edit in _edits)
            {
                if (edit.CanApply(node))
                {
                    changed = true;
                    if (edit is Update)
                    {
                        newCode = edit.ModifiedNode.InnerNode;
                    }
                    else if (edit is Delete)
                    {
                        var deleted = new IronPython.Compiler.Ast.ConstantExpression("Tutor:deletedNode");
                        if (edit.ModifiedNode.InnerNode.Equals(node.Left))
                        {
                            var binary = newCode as IronPython.Compiler.Ast.BinaryExpression;
                            newCode = new IronPython.Compiler.Ast.BinaryExpression(binary.Operator, VisitExpression(binary.Right), deleted);
                        }
                        else
                        {
                            var binary = newCode as IronPython.Compiler.Ast.BinaryExpression;
                            newCode = new IronPython.Compiler.Ast.BinaryExpression(binary.Operator, VisitExpression(binary.Left), deleted);
                        }
                    }
                    else
                    {
                        switch (((Insert)edit).Index)
                        {
                        case 0:
                            var binary = newCode as IronPython.Compiler.Ast.BinaryExpression;
                            newCode = new IronPython.Compiler.Ast.BinaryExpression(binary.Operator, (IronPython.Compiler.Ast.Expression)edit.ModifiedNode.InnerNode, VisitExpression(binary.Right));
                            break;

                        case 1:
                            binary  = newCode as IronPython.Compiler.Ast.BinaryExpression;
                            newCode = new IronPython.Compiler.Ast.BinaryExpression(binary.Operator, VisitExpression(binary.Left), (IronPython.Compiler.Ast.Expression)edit.ModifiedNode.InnerNode);
                            break;
                        }
                    }
                }
            }
            if (changed)
            {
                return(newCode);
            }

            var left  = VisitExpression(node.Left);
            var right = VisitExpression(node.Right);

            return(new IronPython.Compiler.Ast.BinaryExpression(node.Operator, left, right));
        }