示例#1
0
        /// <summary>
        /// Applies the transformation
        /// </summary>
        /// <returns>The transformed item.</returns>
        /// <param name="el">The item to visit.</param>
        public virtual ASTItem Transform(ASTItem el)
        {
            if (el is AST.AssignmentExpression)
            {
                var ase = ((AST.AssignmentExpression)el);
                if (ase.Operator != AssignmentOperatorType.Assign)
                {
                    AST.Expression clonedleft = ase.Left.Clone();

                    var newop = new AST.BinaryOperatorExpression()
                    {
                        Operator         = ase.Operator.ToBinaryOperator(),
                        Left             = clonedleft,
                        Right            = ase.Right,
                        Parent           = ase,
                        SourceExpression = ase.SourceExpression,
                        SourceResultType = ase.SourceResultType
                    };

                    newop.Left.Parent = newop.Right.Parent = newop;
                    ase.Operator      = AssignmentOperatorType.Assign;
                    ase.Right         = newop;

                    return(null);
                }
            }

            return(el);
        }
示例#2
0
        /// <summary>
        /// Renders a single ArrayCreateExpression to VHDL
        /// </summary>
        /// <returns>The VHDL equivalent of the expression.</returns>
        /// <param name="e">The expression to render</param>
        private string RenderExpression(AST.BinaryOperatorExpression e)
        {
            if (Parent.Config.AVOID_SLL_AND_SRL)
            {
                if (e.Operator == ICSharpCode.Decompiler.CSharp.Syntax.BinaryOperatorType.ShiftLeft)
                {
                    return(string.Format("shift_left({0}, {1})", RenderExpression(e.Left), RenderExpression(e.Right)));
                }
                else if (e.Operator == ICSharpCode.Decompiler.CSharp.Syntax.BinaryOperatorType.ShiftRight)
                {
                    return(string.Format("shift_right({0}, {1})", RenderExpression(e.Left), RenderExpression(e.Right)));
                }
            }

            return(string.Format("{0} {1} {2}", RenderExpression(e.Left), e.Operator.ToVHDL(), RenderExpression(e.Right)));
        }
示例#3
0
 /// <summary>
 /// Renders a single ArrayCreateExpression to VHDL
 /// </summary>
 /// <returns>The VHDL equivalent of the expression.</returns>
 /// <param name="e">The expression to render</param>
 private string RenderExpression(AST.BinaryOperatorExpression e)
 {
     return(string.Format("{0} {1} {2}", RenderExpression(e.Left), e.Operator.ToCpp(), RenderExpression(e.Right)));
 }