Implement op=.
diff --git a/libacc/tests/data/assignmentop.c b/libacc/tests/data/assignmentop.c
new file mode 100644
index 0000000..10b4637
--- /dev/null
+++ b/libacc/tests/data/assignmentop.c
@@ -0,0 +1,66 @@
+// Test assignment operations
+
+void testAssignment() {
+ int a = 2;
+ a *= 5;
+ printf("2 *= 5 %d\n", a);
+ a = 20;
+ a /= 5;
+ printf("20 /= 5 %d\n", a);
+ a = 17;
+ a %= 5;
+ printf("17 %%= 5 %d\n", a);
+ a = 17;
+ a += 5;
+ printf("17 += 5 %d\n", a);
+ a = 17;
+ a-=5;
+ printf("17 -= 5 %d\n", a);
+ a = 17;
+ a<<=1;
+ printf("17<<= 1 %d\n", a);
+ a = 17;
+ a>>=1;
+ printf("17>>= 1 %d\n", a);
+ a = 17;
+ a&=1;
+ printf("17&= 1 %d\n", a);
+ a = 17;
+ a^=1;
+ printf("17^= 1 %d\n", a);
+ a = 16;
+ a^=1;
+ printf("16|= 1 %d\n", a);
+}
+
+/* Can't use because int* f() is not parsed as a function decl.
+int a;
+
+int* f() {
+ printf("f()\n");
+ return &a;
+}
+
+void testEval() {
+ a = 0;
+ printf("*f() = *f() + 10;");
+ *f() = *f() + 10;
+ printf("a = %d\n", a);
+}
+
+void testOpEval() {
+ a = 0;
+ printf("*f() += 10;");
+ *f() += 10;
+ printf("a = %d\n", a);
+}
+
+*/
+int main() {
+ testAssignment();
+ /*
+ testEval();
+ testOpEval();
+ */
+ return 0;
+}
diff --git a/libacc/tests/test.py b/libacc/tests/test.py
index f9089be..239bb9b 100644
--- a/libacc/tests/test.py
+++ b/libacc/tests/test.py
@@ -340,6 +340,20 @@
a = 2, *pa = 2 **ppa = 2
""")
+ def testassignmentop(self):
+ self.compileCheck(["-R", "data/assignmentop.c"], """Executing compiled code:
+result: 0""", """2 *= 5 10
+20 /= 5 4
+17 %= 5 2
+17 += 5 22
+17 -= 5 12
+17<<= 1 34
+17>>= 1 8
+17&= 1 1
+17^= 1 16
+16|= 1 17
+""")
+
if __name__ == '__main__':
if not outputCanRun():
print "Many tests are expected to fail, because acc is not a 32-bit x86 Linux executable."