예제 #1
0
        public override object VisitFunctionDecl([NotNull] SLangGrammarParser.FunctionDeclContext context)
        {
            var symbol = context.Id().Symbol;

            InitializeRoutineStates(context.thisHeader(), symbol);
            CheckParamsNameConflicts(context.thisHeader(), context.routineArgList());

            var result = Visit(context.statementSeq()) as StatementResult;

            // функция, которая не импортируется извне и не является абстрактным методом?
            if (result != null && !result.Returning && currentRoutine.Header == null && !(currentRoutine is MethodNameTableItem method && method.IsAbstract))
            {
                ThrowNotAllCodePathException(file, context.statementSeq().Start);
            }

            currentType    = null;
            currentRoutine = null;
            return(null);
        }
예제 #2
0
        public override object VisitFunctionDecl([NotNull] SLangGrammarParser.FunctionDeclContext context)
        {
            // init states, check of abstract methods or imported functions
            // add entries in h & cpp
            // visit sequence

            InitRoutines(context.thisHeader(), context.Id().GetText());
            TranslateRoutines(context.statementSeq());
            currentRoutine = null;
            currentType    = null;
            return(null);
        }
        public override object VisitFunctionDecl([NotNull] SLangGrammarParser.FunctionDeclContext context)
        {
            ValidateContext(context.thisHeader(), context.Id(), context.importHead(), context.AccessModifier(), context.Abstract(), context.Override(), context.routineArgList(), context.typeName(), context.statementSeq());

            return(base.VisitFunctionDecl(context));
        }