Beispiel #1
0
        private FunctionInfo ExitMethod(GolangParser.IFunctionContext context)
        {
            string identifer = context.IDENTIFIER().GetText();

            GolangParser.SignatureContext signatureContext = context.signature();

            if (!Signatures.TryGetValue(signatureContext, out Signature signature))
            {
                signatureContext = context.function().signature();
                Signatures.TryGetValue(signatureContext, out signature);
            }

            return(new FunctionInfo
            {
                Signature = new FunctionSignature
                {
                    Name = identifer,
                    Signature = signature,
                    Comments = CheckForCommentsRight(signatureContext),
                    IsPromoted = false
                },
                Variables = new Dictionary <string, VariableInfo>(m_variables),
                HasDefer = m_hasDefer,
                HasPanic = m_hasPanic,
                HasRecover = m_hasRecover
            });
        }
 public override void EnterSignature(GolangParser.SignatureContext context)
 {
     Result = new List <ParameterInfo>(new[] { new ParameterInfo
                                               {
                                                   Name       = "",
                                                   Type       = TypeInfo.VoidType,
                                                   IsVariadic = false
                                               } });
 }
 public override void ExitSignature(GolangParser.SignatureContext context)
 {
     Parameters.TryGetValue(context.parameters(), out List <ParameterInfo> parameters);
     Signatures[context] = new Signature
     {
         Parameters = parameters?.ToArray() ?? new ParameterInfo[0],
         Result     = Result?.ToArray() ?? new ParameterInfo[0]
     };
 }
Beispiel #4
0
        public override Base VisitSignature([NotNull] GolangParser.SignatureContext context)
        {
            var ret = new Signature();

            ret.Parameters = context.parameters().Accept(this) as Parameters;
            if (context.result() != null)
            {
                var result = context.result().Accept(this);
                switch (result)
                {
                case AST.Type t:
                    ret.Returns = new Parameters();
                    ret.Returns.AddChild(new Parameter(string.Empty, t));
                    break;

                case Parameters p:
                    ret.Returns = p;
                    break;
                }
            }

            return(ret);
        }