--- /dev/null
+struct a b c d end;
+
+method inc()
+ this.a := this.a - -1;
+ this.b := this.b - -1;
+ this.c := this.c - -1;
+ this.d := this.d - -1;
+ return this.a;
+end;
+
+method m(ar)
+ 5;
+ 20 - ar.inc() - 70;
+ inc();
+ ar.inc();
+ 20 * inc();
+ 20 * (5 - 4 - (4 * ((5 or 6) < ar.inc())));
+ inc() * 20;
+ (((ar.inc() < (5 or 6)) *4) - 4 - 5) * 20;
+
+ 15 * (ar.inc() < (5 -inc()));
+ ar.inc() < inc();
+
+ inc(4-5);
+ (((ar.inc(4-5,6*4,5<5) < (5 or 6)) *4) - 4 - 5) * 20;
+ return 0;
+end;
+
+
--- /dev/null
+extern long long m(long long* ar1, long long *ar2);
+
+long long z1[] = { 0, 2, 4, 6, 8, 10, 12 };
+long long z2[] = { 10, 20, 40, 60, 80, 100, 120 };
+int i;
+
+
+/* based on intelli_03 */
+
+for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
+ printf("z1[%i]: %ld, z2[%i]: %ld\n", i, z1[i], i, z2[i]);
+}
+
+long long ret = m(&z1[1], &z2[1]);
+printf("ret: %ld\n", ret);
+
+for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
+ printf("z1[%i]: %ld, z2[%i]: %ld\n", i, z1[i], i, z2[i]);
+}
+
+RET(ret == 0 && z1[0] == 0 && z2[0] == 10 && z1[1] == 8 && z1[2] == 10 && z1[3] == 12 && z1[4] == 14 && z1[5] == 10 && z1[6] == 12 && z2[1] == 27 && z2[2] == 47 && z2[3] == 67 && z2[4] == 87 && z2[5] == 100 && z2[6] == 120);