private BaseAst CheckFunctionCallsInBlockAST(ProgramAst program, BlockAst block) { foreach (BaseAst node in block.Statements) { BaseAst err = CheckFunctionCallsInStatementAST(program, node); if ((err != null) && (err.Token != TokenTypes.End) && (err.IsError)) { return(err); } } return(BaseAst.GetEndAstNode()); }
private BaseAst CheckFunctionCallsInStatementAST(ProgramAst program, BaseAst st) { if ((st != null) && (st.AstType == AstNodeTypes.FunctionCall)) { if (!program.OrigFncs.Keys.Contains(st.TokenText)) { return(BaseAst.GetErrorAstNode(string.Format("Funkce '{0}' doposud nebyla deklarovana, radek {1}, sloupec {2}", st.TokenText, st.TokenStartLine, st.TokenStartColumn))); } } BaseAst inner = null; if (st is BlockAst) { inner = CheckFunctionCallsInBlockAST(program, st as BlockAst); } if (st is IfAst) { inner = CheckFunctionCallsInIfAST(program, st as IfAst); } if (st is WhileAst) { inner = CheckFunctionCallsInWhileAST(program, st as WhileAst); } if (st is ForAst) { inner = CheckFunctionCallsInForAST(program, st as ForAst); } if ((inner != null) && (inner.Token != TokenTypes.End) && (inner.IsError)) { return(inner); } return(BaseAst.GetEndAstNode()); }