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