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] }; }
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); }