Author: dion
Date: Mon Mar 20 23:29:02 2006
New Revision: 387450

URL: http://svn.apache.org/viewcvs?rev=387450&view=rev
Log:
Basic Implementation of bitwise or

Modified:
    
jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java
    
jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
    jakarta/commons/proper/jexl/trunk/xdocs/changes.xml

Modified: 
jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java?rev=387450&r1=387449&r2=387450&view=diff
==============================================================================
--- 
jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java
 (original)
+++ 
jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java
 Mon Mar 20 23:29:02 2006
@@ -2,6 +2,17 @@
 
 package org.apache.commons.jexl.parser;
 
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.util.Coercion;
+
+/**
+ * Bitwise Or. Syntax:
+ *      a | b
+ * Result is a Long
+ * @author Dion Gillard
+ * @since 1.0.1
+ */
+
 public class ASTBitwiseOrNode extends SimpleNode {
   public ASTBitwiseOrNode(int id) {
     super(id);
@@ -15,5 +26,18 @@
   /** Accept the visitor. **/
   public Object jjtAccept(ParserVisitor visitor, Object data) {
     return visitor.visit(this, data);
+  }
+
+  /**
+   * @return a [EMAIL PROTECTED] Long} which is the bitwise or of the two 
operands.
+   */
+  public Object value(JexlContext context) throws Exception
+  {
+      Object left = ((SimpleNode) jjtGetChild(0)).value(context);
+      Object right = ((SimpleNode) jjtGetChild(1)).value(context);
+    
+      Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
+      Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
+      return new Long(l.longValue() | r.longValue());
   }
 }

Modified: 
jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java?rev=387450&r1=387449&r2=387450&view=diff
==============================================================================
--- 
jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
 (original)
+++ 
jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java
 Mon Mar 20 23:29:02 2006
@@ -108,4 +108,51 @@
         Object o = e.evaluate(jc);
         assertEquals("Result is wrong", new Long(-16), o);
     }
+
+    public void testOrWithTwoNulls() throws Exception {
+        Expression e = ExpressionFactory.createExpression("null | null");
+        JexlContext jc = JexlHelper.createContext();
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(0), o);
+    }
+
+    public void testOrWithLeftNull() throws Exception {
+        Expression e = ExpressionFactory.createExpression("null | 1");
+        JexlContext jc = JexlHelper.createContext();
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(1), o);
+    }
+
+    public void testOrWithRightNull() throws Exception {
+        Expression e = ExpressionFactory.createExpression("1 | null");
+        JexlContext jc = JexlHelper.createContext();
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(1), o);
+    }
+
+    public void testOrSimple() throws Exception {
+        Expression e = ExpressionFactory.createExpression("12 | 3");
+        JexlContext jc = JexlHelper.createContext();
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(15), o);
+    }
+
+    public void testOrVariableNumberCoercion() throws Exception {
+        Expression e = ExpressionFactory.createExpression("x | y");
+        JexlContext jc = JexlHelper.createContext();
+        jc.getVars().put("x", new Integer(12));
+        jc.getVars().put("y", new Short((short)3));
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(15), o);
+    }
+
+    public void testOrVariableStringCoercion() throws Exception {
+        Expression e = ExpressionFactory.createExpression("x | y");
+        JexlContext jc = JexlHelper.createContext();
+        jc.getVars().put("x", new Integer(12));
+        jc.getVars().put("y", "3");
+        Object o = e.evaluate(jc);
+        assertEquals("Result is wrong", new Long(15), o);
+    }
+
 }

Modified: jakarta/commons/proper/jexl/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/xdocs/changes.xml?rev=387450&r1=387449&r2=387450&view=diff
==============================================================================
--- jakarta/commons/proper/jexl/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/jexl/trunk/xdocs/changes.xml Mon Mar 20 23:29:02 2006
@@ -25,7 +25,7 @@
   </properties>
   <body>
     <release version="1.0.1-SNAPSHOT" date="in SVN">
-      <action dev="dion" type="add">Added implementation for bitwise and 
operator, plus bitiwse complement.</action>
+      <action dev="dion" type="add">Added implementation for bitwise 
operators: and, complement, or.</action>
       <action dev="dion" type="add">Added implementation for the foreach 
statement.</action>
       <action dev="dion" type="add">Added implementation for the while 
statement.</action>
       <action dev="dion" type="add">Added implementation for block statements, 
e.g. curly braces containing multiple statements.</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to