public override Tree VisitExpression(ExpressionContext context)
        {
            PrimaryContext primaryCtx = context.primary();

            if (primaryCtx != null)
            {
                Expression            expr             = (Expression)VisitPrimary(primaryCtx);
                FuncInvocationContext methodInvocation = context.funcInvocation();
                if (methodInvocation != null)
                {
                    expr = makeMethodInvocation(expr, methodInvocation);
                }
                return(expr);
            }
            FuncInvocationContext invocation = context.funcInvocation();

            if (invocation != null)
            {
                return((Expression)VisitFuncInvocation(invocation));
            }
            if (context.NEW() != null)
            {
                return(context.Identifier() != null
                    ? makeNewStruct(context)
                    : makeNewArray(context));
            }
            if (context.index != null)
            {
                return(makeArrayIndex(context));
            }
            IToken postfix = context.postfix;

            if (postfix != null)
            {
                return(makeUnary(context, postfix.Type));
            }
            IToken prefix = context.prefix;

            if (prefix != null)
            {
                return(makeUnary(context, prefix.Type));
            }
            IToken binOp = context.bop;

            if (binOp != null)
            {
                if (binOp.Type == DOT)
                {
                    return(makeSelect(context));
                }
                return(context.isAssignment
                    ? makeAssignment(context)
                    : makeBinary(context));
            }
            return(makeConditional(context));
        }
Example #2
0
        public void Initialization()
        {
            var method            = (MethodInfo)MethodInfo.GetCurrentMethod();
            var invocationContext = new FuncInvocationContext <ValidationContextTest, string, int> (method, this, "123")
            {
                ReturnValue = 12
            };

            var validationContext = new ValidationContext(invocationContext);

            Assert.That(validationContext.Method, Is.SameAs(method));
            Assert.That(validationContext.Instance, Is.SameAs(this));
            Assert.That(validationContext.Arguments, Is.EquivalentTo(new[] { "123" }));
            Assert.That(validationContext.ReturnValue, Is.EqualTo(12));
        }
        private void prepareInvocation(FuncInvocationContext context, out IToken funcName, out Expression[] args,
                                       out int endLine, out int endCol)
        {
            funcName = context.neme;
            ArgumentListContext       argumentList = context.argumentList();
            IList <ExpressionContext> parsedArgs   = argumentList != null
                ? argumentList._args
                : CollectionUtils.emptyList <ExpressionContext>();

            args = new Expression[parsedArgs.Count];

            for (var i = 0; i < parsedArgs.Count; i++)
            {
                args[i] = (Expression)VisitExpression(parsedArgs[i]);
            }

            IToken stopToken = context.Stop;

            endLine = stopToken.Line;
            endCol  = stopToken.StopIndex - stopToken.StartIndex + 1;
        }
 private MethodInvocation makeMethodInvocation(Expression receiver, FuncInvocationContext invocation)
 {
     prepareInvocation(invocation, out IToken funcName, out Expression[] args, out int endLine, out int endCol);
     return(new MethodInvocation(funcName.Line, funcName.Column, endLine, endCol, receiver, funcName.Text, args));
 }
 public override Tree VisitFuncInvocation(FuncInvocationContext context)
 {
     prepareInvocation(context, out IToken funcName, out Expression[] args, out int endLine, out int endCol);
     return(new FuncInvocation(funcName.Line, funcName.Column, endLine, endCol, funcName.Text, args));
 }