1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl.parser;
18
19 import org.apache.commons.jexl.JexlContext;
20 import org.apache.commons.jexl.util.Coercion;
21
22 /***
23 * Bitwise Or. Syntax: a ^ b Result is a Long
24 *
25 * @author Dion Gillard
26 * @since 1.1
27 */
28 public class ASTBitwiseXorNode extends SimpleNode {
29 /***
30 * Create the node given an id.
31 *
32 * @param id node id.
33 */
34 public ASTBitwiseXorNode(int id) {
35 super(id);
36 }
37
38 /***
39 * Create a node with the given parser and id.
40 *
41 * @param p a parser.
42 * @param id node id.
43 */
44 public ASTBitwiseXorNode(Parser p, int id) {
45 super(p, id);
46 }
47
48 /***
49 * {@inheritDoc}
50 */
51 public Object jjtAccept(ParserVisitor visitor, Object data) {
52 return visitor.visit(this, data);
53 }
54
55 /***
56 * {@inheritDoc}
57 */
58 public Object value(JexlContext context) throws Exception {
59 Object left = ((SimpleNode) jjtGetChild(0)).value(context);
60 Object right = ((SimpleNode) jjtGetChild(1)).value(context);
61
62 Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
63 Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
64 return new Long(l.longValue() ^ r.longValue());
65 }
66 }