1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.millscript.action;
22
23 import org.millscript.millscript.vm.Machine;
24
25 /**
26 * This class implements the action for a <code>while</code> expression. This
27 * action performs a predicate action and if it's result is <code>true</code> a
28 * body action is performed, otherwise the action ends. Once the body action is
29 * performed we return to the start and perform the predicate again.
30 *
31 * @see org.millscript.millscript.expr.WhileExpr
32 * @see org.millscript.millscript.syntax.WhileSyntax
33 */
34 public final class WhileAction extends Action {
35
36 /**
37 * The predicate action, which must return a boolean result.
38 */
39 private Action predAct;
40
41 /**
42 * The body action.
43 */
44 private Action bodyAct;
45
46 /**
47 * Constructs a new <code>while</code> action, to perform the specified
48 * body action while the specified predicate action returns
49 * <code>true</code>.
50 *
51 * @param a the predicate action
52 * @param b the body action
53 */
54 public WhileAction( final Action a, final Action b ) {
55 this.predAct = a;
56 this.bodyAct = b;
57 }
58
59 /**
60 * @see org.millscript.millscript.action.Action#action(org.millscript.millscript.vm.Machine)
61 */
62 @Override
63 public void action( final Machine mc ) {
64 while ( predAct.predAct( mc ) ) {
65 bodyAct.act( mc );
66 }
67 }
68 }