public IExpression MethodCall(Ast.MethodCall methodCall) { var arguments = ResolveArguments(methodCall.Arguments); if (methodCall.Operand is IdentifierAccess identifierAccess) { var result = ResolveGlobalMethod(identifierAccess.Name, arguments); if (result != null) return result; throw new ExpressionsException( String.Format("Cannot resolve symbol '{0}'", identifierAccess.Name), ExpressionsExceptionType.UndefinedName ); } if (methodCall.Operand is MemberAccess memberAccess) { var operand = memberAccess.Operand.Accept(this); if (operand is ImportAccess) { foreach (var import in ((ImportAccess)operand).Import.Imports) { if (import.Type != null) { var result = _resolver.ResolveMethod( new TypeAccess(import.Type), memberAccess.Member, arguments ); if (result != null) return result; } } } else { var result = _resolver.ResolveMethod(operand, memberAccess.Member, arguments); if (result != null) return result; } } throw new ExpressionsException("Cannot resolve symbol", ExpressionsExceptionType.UndefinedName); }
public IExpression MethodCall(Ast.MethodCall methodCall) { var arguments = ResolveArguments(methodCall.Arguments); var identifierAccess = methodCall.Operand as IdentifierAccess; if (identifierAccess != null) { var result = ResolveGlobalMethod(identifierAccess.Name, arguments); if (result != null) { return(result); } if (_resolver.DynamicExpression.Language == ExpressionLanguage.VisualBasic) { return(Index(methodCall.Operand, methodCall.Arguments)); } throw new ExpressionsException( String.Format("Cannot resolve symbol '{0}'", identifierAccess.Name), ExpressionsExceptionType.UndefinedName ); } var memberAccess = methodCall.Operand as MemberAccess; if (memberAccess != null) { var operand = memberAccess.Operand.Accept(this); if (operand is ImportAccess) { foreach (var import in ((ImportAccess)operand).Import.Imports) { if (import.Type != null) { var result = _resolver.ResolveMethod( new TypeAccess(import.Type), memberAccess.Member, arguments ); if (result != null) { return(result); } } } } else { var result = _resolver.ResolveMethod(operand, memberAccess.Member, arguments); if (result != null) { return(result); } } } if (_resolver.DynamicExpression.Language == ExpressionLanguage.VisualBasic) { return(Index(methodCall.Operand, methodCall.Arguments)); } throw new ExpressionsException("Cannot resolve symbol", ExpressionsExceptionType.UndefinedName); }