Пример #1
0
        public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
        {
            ILRange.WriteTo(output, options);
            output.Write("call.indirect ");
            ReturnType.WriteTo(output);
            output.Write('(');
            bool first = true;

            foreach (var(inst, type) in Arguments.Zip(ParameterTypes, (a, b) => (a, b)))
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    output.Write(", ");
                }
                inst.WriteTo(output, options);
                output.Write(" : ");
                type.WriteTo(output);
            }
            if (Arguments.Count > 0)
            {
                output.Write(", ");
            }
            functionPointer.WriteTo(output, options);
            output.Write(')');
        }
Пример #2
0
        public override void WriteTo(ITextOutput output, ILAstWritingOptions options)
        {
            WriteILRange(output, options);
            output.Write("call.indirect ");
            FunctionPointerType.ReturnType.WriteTo(output);
            output.Write('(');
            functionPointer.WriteTo(output, options);
            int firstArgument = IsInstance ? 1 : 0;

            if (firstArgument == 1)
            {
                output.Write(", ");
                Arguments[0].WriteTo(output, options);
            }
            foreach (var(inst, type) in Arguments.Zip(FunctionPointerType.ParameterTypes, (a, b) => (a, b)))
            {
                output.Write(", ");
                inst.WriteTo(output, options);
                output.Write(" : ");
                type.WriteTo(output);
            }
            if (Arguments.Count > 0)
            {
                output.Write(')');
            }
        }