public ProcessingResult ProcessExpression(Expression expression, List <NodeReference> references, DataContext context) { var invocationExpression = expression as InvocationExpression; if (invocationExpression == null) { return(ProcessingResult.Unsuccessful); } var argumentsResults = CallProcessingHelper.ProcessArguments(invocationExpression.Arguments, references, context); if (!argumentsResults.All(r => r.IsSuccess)) { return(ProcessingResult.Unsuccessful); } var delegateResult = ExpressionProcessingHelper.ProcessExpression(invocationExpression.Expression, references, context); if (!delegateResult.IsSuccess) { return(ProcessingResult.Unsuccessful); } return(CallProcessingHelper.ProcessCall(argumentsResults, delegateResult, (del, arguments) => { var delegateInstance = del as Delegate; return delegateInstance != null ? new ProcessingResult(true, delegateInstance.DynamicInvoke(arguments)) : ProcessingResult.Unsuccessful; })); }
public ProcessingResult ProcessExpression(Expression expression, List <NodeReference> references, DataContext context) { var newExpression = expression as NewExpression; if (newExpression == null) { return(ProcessingResult.Unsuccessful); } var argumentsResult = CallProcessingHelper.ProcessArguments(newExpression.Arguments, references, context); if (!argumentsResult.All(a => a.IsSuccess)) { return(ProcessingResult.Unsuccessful); } var constructorResult = new ProcessingResult(true, newExpression.Constructor, true); return(CallProcessingHelper.ProcessCall(argumentsResult, constructorResult, (constructor, arguments) => { var constructorInfo = constructor as ConstructorInfo; return constructorInfo != null ? new ProcessingResult(true, constructorInfo.Invoke(arguments)) : new ProcessingResult(true, Activator.CreateInstance(expression.Type)); })); }
public ProcessingResult ProcessExpression(Expression expression, List <NodeReference> references, DataContext context) { var callExpression = expression as MethodCallExpression; if (callExpression == null) { return(ProcessingResult.Unsuccessful); } var processedArguments = CallProcessingHelper.ProcessArguments(callExpression.Arguments, references, context); if (processedArguments.Any(a => !a.IsSuccess)) { return(ProcessingResult.Unsuccessful); } var processedObject = ProcessObjectExpression(callExpression.Object, references, context); if (!processedObject.IsSuccess) { return(ProcessingResult.Unsuccessful); } return(CallProcessingHelper.ProcessCall(processedArguments, processedObject, (obj, arguments) => new ProcessingResult(true, callExpression.Method.Invoke(obj, arguments)))); }
private static ProcessingResult ProcessNewArrayInitExpression(NewArrayExpression expression, List <NodeReference> references, DataContext context) { var items = CallProcessingHelper.ProcessArguments(expression.Expressions, references, context); if (!items.All(i => i.IsSuccess)) { return(ProcessingResult.Unsuccessful); } var arrayElementType = expression.Type.GetElementType(); var elementTypeResult = new ProcessingResult(true, arrayElementType, true); return(CallProcessingHelper.ProcessCall(items, elementTypeResult, ArrayInitResolver)); }
private static ProcessingResult ProcessNewArrayBoundsExpression(NewArrayExpression expression, List <NodeReference> references, DataContext context) { var dimensionsLengths = CallProcessingHelper.ProcessArguments(expression.Expressions, references, context); if (!dimensionsLengths.All(d => d.IsSuccess)) { return(ProcessingResult.Unsuccessful); } var arrayElementType = expression.Type.GetElementType(); var elementTypeResult = new ProcessingResult(true, arrayElementType, true); return(CallProcessingHelper.ProcessCall(dimensionsLengths, elementTypeResult, (elementType, lengths) => { var type = elementType as Type; var dimensions = lengths.Cast <int>().ToArray(); return type != null ? new ProcessingResult(true, Array.CreateInstance(type, dimensions), true) : ProcessingResult.Unsuccessful; })); }