Ejemplo n.º 1
0
        private static SyntaxNode RightAssignment(RParser.RightAssignmentContext assignment, Func <ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
        {
            var left  = transform(assignment.expr()[1], scope) as ExpressionSyntax;
            var right = transform(assignment.expr()[0], scope) as ExpressionSyntax;

            Debug.Assert(left != null && right != null);

            if (topLevel(assignment))
            {
                return(assigmentStatement(left, right, scope));
            }

            Debug.Assert(left is IdentifierNameSyntax);
            var leftValue = left.ToString();

            if (!scope.hasVariable(leftValue))
            {
                scope.PreStatements().Add(preVariable.Get <StatementSyntax>(left));
                scope.addVariable(leftValue);
            }

            return(preAssignment.Get(left, right));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="RParser.RightAssignment"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitRightAssignment([NotNull] RParser.RightAssignmentContext context)
 {
 }