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 is the base of all binary actions, i.e. those that operate on two
27 * values.
28 */
29 public abstract class BinaryOpAction extends Action {
30
31 /**
32 * The action for the left hand side of the binary operation.
33 */
34 private final Action lhs;
35
36 /**
37 * The action for the right hand side of the binary operation.
38 */
39 private final Action rhs;
40
41 /**
42 * Constructs a new binary action, with the specified left and right hand
43 * side actions.
44 *
45 * @param a the left hand side action
46 * @param b the right hand side action
47 */
48 protected BinaryOpAction( final Action a, final Action b ) {
49 this.lhs = a;
50 this.rhs = b;
51 }
52
53 /**
54 * Performs this binary action on the specified left and right hand side
55 * values.
56 *
57 * @param x the left hand side value
58 * @param y the right hand side value
59 * @return the result of this binary action on the left and right hand
60 * side values
61 */
62 public abstract Object perform( final Object x, final Object y );
63
64 /**
65 * @see org.millscript.millscript.action.Action#action(org.millscript.millscript.vm.Machine)
66 */
67 @Override
68 public final void action( final Machine mc ) {
69 mc.pushObject( perform( lhs.act1( mc ), rhs.act1( mc ) ) );
70 }
71
72 }