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