public virtual void VisitInstanceFunctionCall(BoundInstanceFunctionCall x) { Accept(x.Instance); VisitRoutineCall(x); }
public virtual TResult VisitInstanceFunctionCall(BoundInstanceFunctionCall x) => VisitRoutineCall(x);
public override void VisitInstanceFunctionCall(BoundInstanceFunctionCall x) { Accept(x.Instance); Accept(x.Name.NameExpression); VisitRoutineCall(x); if (x.Name.IsDirect) { var typeref = TypeCtx.GetTypes(x.Instance.TypeRefMask); if (typeref.Count > 1) { // TODO: some common base ? } if (typeref.Count == 1) { var classtype = typeref.Where(t => t.IsObject).AsImmutable().SingleOrDefault(); if (classtype != null) { var type = (NamedTypeSymbol)_model.GetType(classtype.QualifiedName); if (type != null) { var candidates = type.LookupMethods(x.Name.NameValue.Name.Value); var args = x.ArgumentsInSourceOrder.Select(a => a.Value.TypeRefMask).ToArray(); x.TargetMethod = new OverloadsList(candidates.ToArray()).Resolve(this.TypeCtx, args, this.TypeCtx.ContainingType); } } } } VisitRoutineCallEpilogue(x); }