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