// возвращает 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;
        }
Esempio n. 3
0
 /// <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)
 {
 }