Ejemplo n.º 1
0
        public static FunctionPointerMethodSymbol CreateFromSource(
            FunctionPointerTypeSyntax syntax,
            Binder typeBinder,
            BindingDiagnosticBag diagnostics,
            ConsList <TypeSymbol> basesBeingResolved,
            bool suppressUseSiteDiagnostics
            )
        {
            ArrayBuilder <CustomModifier> customModifiers =
                ArrayBuilder <CustomModifier> .GetInstance();

            CallingConvention callingConvention = getCallingConvention(
                typeBinder.Compilation,
                syntax.CallingConvention,
                customModifiers,
                diagnostics
                );

            RefKind             refKind = RefKind.None;
            TypeWithAnnotations returnType;

            if (syntax.ParameterList.Parameters.Count == 0)
            {
                returnType = TypeWithAnnotations.Create(typeBinder.CreateErrorType());
            }
            else
            {
                FunctionPointerParameterSyntax?returnTypeParameter =
                    syntax.ParameterList.Parameters[^ 1];
 private Doc PrintFunctionPointerTypeSyntax(
     FunctionPointerTypeSyntax node)
 {
     return(Concat(
                this.PrintSyntaxToken(node.DelegateKeyword),
                this.PrintSyntaxToken(node.AsteriskToken, " "),
                node.CallingConvention != null
             ? this.PrintCallingConvention(node.CallingConvention)
             : Doc.Null,
                this.PrintSyntaxToken(node.ParameterList.LessThanToken),
                Indent(
                    Group(
                        SoftLine,
                        this.PrintSeparatedSyntaxList(
                            node.ParameterList.Parameters,
                            o => Concat(
                                this.PrintAttributeLists(o, o.AttributeLists),
                                this.PrintModifiers(o.Modifiers),
                                this.Print(o.Type)
                                ),
                            Line
                            )
                        )
                    ),
                this.PrintSyntaxToken(node.ParameterList.GreaterThanToken)
                ));
 }
Ejemplo n.º 3
0
 public static Doc Print(FunctionPointerTypeSyntax node)
 {
     return(Doc.Concat(
                Token.Print(node.DelegateKeyword),
                Token.Print(node.AsteriskToken, " "),
                node.CallingConvention != null
             ? PrintCallingConvention(node.CallingConvention)
             : Doc.Null,
                Token.Print(node.ParameterList.LessThanToken),
                Doc.Indent(
                    Doc.Group(
                        Doc.SoftLine,
                        SeparatedSyntaxList.Print(
                            node.ParameterList.Parameters,
                            o =>
                            Doc.Concat(
                                AttributeLists.Print(o, o.AttributeLists),
                                Modifiers.Print(o.Modifiers),
                                Node.Print(o.Type)
                                ),
                            Doc.Line
                            )
                        )
                    ),
                Token.Print(node.ParameterList.GreaterThanToken)
                ));
 }
 public static FunctionPointerTypeSymbol CreateFromSource(FunctionPointerTypeSyntax syntax, Binder typeBinder, DiagnosticBag diagnostics, ConsList <TypeSymbol> basesBeingResolved, bool suppressUseSiteDiagnostics)
 => new FunctionPointerTypeSymbol(
     FunctionPointerMethodSymbol.CreateFromSource(
         syntax,
         typeBinder,
         diagnostics,
         basesBeingResolved,
         suppressUseSiteDiagnostics));
Ejemplo n.º 5
0
        public static FunctionPointerMethodSymbol CreateFromSource(FunctionPointerTypeSyntax syntax, Binder typeBinder, DiagnosticBag diagnostics, ConsList <TypeSymbol> basesBeingResolved, bool suppressUseSiteDiagnostics)
        {
            var(callingConvention, conventionIsValid) = FunctionPointerTypeSymbol.GetCallingConvention(syntax.CallingConvention.Text);
            if (!conventionIsValid)
            {
                // '{0}' is not a valid calling convention for a function pointer. Valid conventions are 'cdecl', 'managed', 'thiscall', and 'stdcall'.
                diagnostics.Add(ErrorCode.ERR_InvalidFunctionPointerCallingConvention, syntax.CallingConvention.GetLocation(), syntax.CallingConvention.Text);
            }

            RefKind             refKind = RefKind.None;
            TypeWithAnnotations returnType;
            var refReadonlyModifiers = ImmutableArray <CustomModifier> .Empty;

            if (syntax.Parameters.Count == 0)
            {
                returnType = TypeWithAnnotations.Create(typeBinder.CreateErrorType());
            }
            else
            {
                var returnTypeParameter = syntax.Parameters[^ 1];
    /// <inheritdoc/>
    public override SyntaxNode?VisitFunctionPointerType(FunctionPointerTypeSyntax node)
    {
        Diagnostics.Add(FunctionPointer, node);

        return(base.VisitFunctionPointerType(node));
    }
Ejemplo n.º 7
0
 public override void VisitFunctionPointerType(FunctionPointerTypeSyntax node) => base.VisitFunctionPointerType(node);
Ejemplo n.º 8
0
 public override void VisitFunctionPointerType(FunctionPointerTypeSyntax node)
 {
     Log(node, "Unsupported Syntax !");
 }
        /// <inheritdoc/>
        public override SyntaxNode?VisitFunctionPointerType(FunctionPointerTypeSyntax node)
        {
            Context.ReportDiagnostic(FunctionPointer, node);

            return(base.VisitFunctionPointerType(node));
        }