/// <summary>
        /// Set type for parameter
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitArg_declaration([NotNull] Arg_declarationContext context)
        {
            var type      = ResolveType(context.type(), currentScope);
            var argSymbol = context.identifier().Symbol as ParameterSymbol;

            argSymbol.SetType(type);
            return(context.identifier());
        }
        /// <summary>
        /// Define parameter of function
        /// </summary>
        /// <param name="context"></param>
        public override void EnterArg_declaration([NotNull] Arg_declarationContext context)
        {
            var             identityContext = context.identifier();
            ParameterSymbol parameterSymbol = new ParameterSymbol(identityContext.GetText())
            {
                DefNode = identityContext
            };

            identityContext.Symbol = parameterSymbol;
            identityContext.Scope  = currentScope;

            Define(parameterSymbol);
        }