コード例 #1
0
        public override void VisitAssignmentExpression(AssignmentExpressionSyntax node)
        {
            var assign = new AssignmentExpressionCPPModel()
            {
                Left  = Invoke <ExpressionVisitor>(node.Left).Expression,
                Right = Invoke <ExpressionVisitor>(node.Right).Expression
            };

            var assignKind = (SyntaxKind)node.RawKind;

            Dictionary <SyntaxKind, AssignType> assignTypes = new Dictionary <SyntaxKind, AssignType>()
            {
                { SyntaxKind.SimpleAssignmentExpression, AssignType.Equals },
                { SyntaxKind.AddAssignmentExpression, AssignType.PlusEquals },
                { SyntaxKind.SubtractAssignmentExpression, AssignType.MinusEquals },
                { SyntaxKind.MultiplyAssignmentExpression, AssignType.MultEquals },
                { SyntaxKind.DivideAssignmentExpression, AssignType.DivEquals },
            };

            if (!assignTypes.ContainsKey(assignKind))
            {
                Unsupported(node, $"Assignment kind not supported");
            }

            assign.Type = assignTypes[assignKind];

            Context.MembersContainer.Members.Add(assign);
        }
        public override void VisitAssignmentExpressionCPPModel(AssignmentExpressionCPPModel model)
        {
            var left  = Invoke <ExpressionBuilder>(model.Left).Expression;
            var right = Invoke <ExpressionBuilder>(model.Right).Expression;

            var assignType = new Dictionary <AssignType, string>()
            {
                { AssignType.Equals, "=" },
                { AssignType.PlusEquals, "+=" },
                { AssignType.MinusEquals, "-=" },
                { AssignType.MultEquals, "*=" },
                { AssignType.DivEquals, "/=" },
            };

            if (!assignType.ContainsKey(model.Type))
            {
                throw new Exception($"Assign type {model.Type} is not supported");
            }

            AppendLine($"{left} {assignType[model.Type]} {right};");
        }