// возвращает List<MethodDeclarationParameter> public override object VisitFormalParameters([NotNull] DoshikParser.FormalParametersContext context) { _compilationContext.SetParsingAntlrContext(context); var parameterList = context.formalParameterList(); if (parameterList == null) { return(new List <MethodDeclarationParameter>(0)); } return(Visit(parameterList)); }
private void HandleEventDeclaration( DoshikParser.TypeTypeOrVoidContext eventReturnTypeCtx, string eventCodeName, DoshikParser.FormalParametersContext eventParametersCtx, DoshikParser.BlockContext eventBodyCtx ) { var eventDeclaration = new EventDeclaration(_compilationContext.CompilationUnit); eventDeclaration.Parameters = new MethodDeclarationParameters(eventDeclaration, _compilationContext.CompilationUnit.Scope); _currentMethodDeclaration = eventDeclaration; eventDeclaration.Name = eventCodeName; var foundType = GetTypeNameVisitor.Apply(_compilationContext, eventReturnTypeCtx); foundType.ThrowIfNotFound(_compilationContext); eventDeclaration.ReturnTypeOrVoid = foundType.DataType; eventDeclaration.ExternalEvent = _compilationContext.FindExternalApiEventByCodeName(eventDeclaration.Name); if (_compilationContext.CompilationUnit.Events.ContainsKey(eventDeclaration.Name)) { throw _compilationContext.ThrowCompilationError($"event handler { eventDeclaration.Name } is already defined"); } eventDeclaration.Parameters.Parameters.AddRange((List <MethodDeclarationParameter>)Visit(eventParametersCtx)); eventDeclaration.AntlrBody = eventBodyCtx; if (eventDeclaration.IsCustom) { ValidateCustomEvent(eventDeclaration); } else { ValidateBuiltInEvent(eventDeclaration); } _compilationContext.CompilationUnit.Events[eventDeclaration.Name] = eventDeclaration; }
/// <summary> /// Visit a parse tree produced by <see cref="DoshikParser.formalParameters"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitFormalParameters([NotNull] DoshikParser.FormalParametersContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="DoshikParser.formalParameters"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitFormalParameters([NotNull] DoshikParser.FormalParametersContext context) { }