/// <summary> /// Executes an if statement /// </summary> /// <param name="tree">Tree to be executed</param> private void IfStatement(KermitAST tree) { KermitAST condition = (KermitAST)tree.GetChild(0); KermitAST code = (KermitAST)tree.GetChild(1); KermitAST elseCode = tree.ChildCount == 3 ? (KermitAST)tree.GetChild(2) : null; KBool cres = TypeHelper.ToBool(Execute(condition)); if (cres) { Execute(code); } else if (elseCode != null) { Execute(elseCode); } }
/// <summary> /// Performs a while loop /// </summary> /// <param name="tree">Tree to be executed</param> private void WhileLoop(KermitAST tree) { KermitAST condition = (KermitAST)tree.GetChild(0); KermitAST code = (KermitAST)tree.GetChild(1); ScopeSpace sp = new ScopeSpace("while", _currentSpace); MemorySpace save = _currentSpace; try { _currentSpace = sp; KBool cond = Execute(condition).Cast <KBool>(); while (cond) { Execute(code); cond = Execute(condition).Cast <KBool>(); } } finally { _currentSpace = save; } }