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