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.expr;
22
23 import org.millscript.millscript.action.AndAction;
24 import org.millscript.millscript.vm.CompilerState;
25
26 /**
27 * This class implements an <code>and</code> expression. This expression always
28 * returns one result.
29 *
30 * @see org.millscript.millscript.syntax.AndSyntax
31 * @see AndAction
32 */
33 public final class AndExpr extends Expr< AndAction > implements OneResult {
34
35 /**
36 * The left hand side expression
37 */
38 private final Expr< ? > lhs;
39
40 /**
41 * The right hand side expression
42 */
43 private final Expr< ? > rhs;
44
45 /**
46 * Creates a new <code>And</code> expression with the specifed left and
47 * right hand side expressions.
48 *
49 * @param l the left hand side expression, which must return a single
50 * result
51 * @param r the right hand side expression, which must return a single
52 * result
53 */
54 public AndExpr( final Expr< ? > l, final Expr< ? > r ) {
55 lhs = CheckExpr.make( l );
56 rhs = CheckExpr.make( r );
57 }
58
59 /**
60 * @see org.millscript.millscript.expr.Expr#compileIt()
61 */
62 @Override
63 public AndAction compileIt() {
64 return new AndAction( lhs.compile(), rhs.compile() );
65 }
66
67 /**
68 * @see org.millscript.millscript.expr.Expr#resolve(org.millscript.millscript.vm.CompilerState)
69 */
70 @Override
71 public void resolve( final CompilerState state ) {
72 this.lhs.resolve( state );
73 this.rhs.resolve( state );
74 }
75
76 /**
77 * @see org.millscript.millscript.expr.Expr#showComponents(int)
78 */
79 @Override
80 void showComponents( final int n ) {
81 this.lhs.show( n );
82 this.rhs.show( n );
83 }
84
85 }