Author: Stephan <[email protected]>
Branch: 
Changeset: r72:e5843a039c67
Date: 2011-05-18 16:01 +0200
http://bitbucket.org/pypy/lang-js/changeset/e5843a039c67/

Log:    implemented STORE_MEMBER_BITOR

diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -585,17 +585,23 @@
     def decision(self, ctx, value, prev):
         return plus(ctx, value, prev)
 
-class STORE_MEMBER_BITXOR(BaseStoreMemberAssign):
+class BaseStoreMemberBitOp(BaseStoreMemberAssign):
     def decision(self, ctx, value, prev):
         op0 = value.ToInt32(ctx)
         op1 = prev.ToInt32(ctx)
-        return W_IntNumber(op0 ^ op1)
+        return W_IntNumber(self.bitop(op0, op1))
 
-class STORE_MEMBER_BITAND(BaseStoreMemberAssign):
-    def decision(self, ctx, value, prev):
-        op0 = value.ToInt32(ctx)
-        op1 = prev.ToInt32(ctx)
-        return W_IntNumber(op0 & op1)
+class STORE_MEMBER_BITXOR(BaseStoreMemberBitOp):
+    def bitop(self, op0, op1):
+        return op0 ^ op1
+
+class STORE_MEMBER_BITAND(BaseStoreMemberBitOp):
+    def bitop(self, op0, op1):
+        return op0 & op1
+
+class STORE_MEMBER_BITOR(BaseStoreMemberBitOp):
+    def bitop(self, op0, op1):
+        return op0 | op1
 
 class BaseStoreMemberPost(Opcode):
     def eval(self, ctx, stack):
diff --git a/js/test/test_interp.py b/js/test/test_interp.py
--- a/js/test/test_interp.py
+++ b/js/test/test_interp.py
@@ -726,6 +726,12 @@
     yield assertv, 'var i = {x:1}; i.x&=0;', 0
     yield assertv, 'var i = {x:1}; i.x&=1;', 1
 
+def test_member_bitor():
+    yield assertv, 'var i = {x:0}; i.x|=0;', 0
+    yield assertv, 'var i = {x:0}; i.x|=1;', 1
+    yield assertv, 'var i = {x:1}; i.x|=0;', 1
+    yield assertv, 'var i = {x:1}; i.x|=1;', 1
+
 def test_loop_continue():
     yield assertv, """
       i = 0;
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to