/// <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); }
/// <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))); }
/// <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))); }