public override JSExpression Translate(ILBlockTranslator translator, JSExpression[] arguments) { var thisArgument = FixupThisArgument(arguments[1], translator.TypeSystem); var returnType = ReturnType; if (returnType == null) { returnType = translator.TypeSystem.Void; } var argumentValues = arguments.Skip(2).ToArray(); var memberName = MemberName; if ((TypeArguments != null) && (TypeArguments.Length > 0)) { memberName += "`" + TypeArguments.Length; } var thisArgumentKnownType = JSType.ExtractType(thisArgument); if (thisArgumentKnownType != null) { var replacement = translator.DoJSILMethodReplacement( thisArgumentKnownType.FullName, memberName, null, // FIXME null, argumentValues ); if (replacement != null) { return(replacement); } } return(JSInvocationExpression.InvokeMethod( new JSFakeMethod( memberName, returnType, (from av in argumentValues select av.GetActualType(translator.TypeSystem)).ToArray(), translator.MethodTypes, TypeArguments, escape: true ), thisArgument, arguments.Skip(2).ToArray() )); }