Example #1
0
            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()
                           ));
            }