Babel.Compiler.TypeCheckingVisitor.VisitCall C# (CSharp) Method

VisitCall() public method

public VisitCall ( CallExpression call ) : void
call CallExpression
return void
        public override void VisitCall(CallExpression call)
        {
            TypeData receiverType;
            if (call.Receiver != null) {
                call.Receiver.Accept(this);
                receiverType = call.Receiver.NodeType;
            }
            else {
                call.TypeSpecifier.Accept(this);
                receiverType = call.TypeSpecifier.NodeType;
            }
            if (receiverType == null) {
                report.Error(call.Location, "no match for {0}", call.Name);
                return;
            }
            call.Arguments.Accept(this);
            try {
                MethodData method = receiverType.LookupMethod(call.Name,
                                                              call.Arguments,
                                                              call.HasValue);
                call.IsBuiltin = method.IsBuiltin;
                SetupMethod(call, method.MethodInfo, receiverType);
            }
            catch (LookupMethodException e) {
                string routInfo = receiverType.FullName +
                    "::" + call.Name;
                if (call.Arguments.Length > 0) {
                    routInfo += "(";
                    foreach (ModalExpression arg in call.Arguments) {
                        if (arg != call.Arguments.First)
                            routInfo += ",";
                        routInfo += arg.NodeType.FullName;
                    }
                    routInfo += ")";
                }
                if (call.HasValue)
                    routInfo += ":_";
                report.Error(call.Location,
                             "{0} for {1}", e.Message, routInfo);
            }
        }