repositories
/
mTask.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
shares are updated now and visible
[mTask.git]
/
client
/
interpret.c
diff --git
a/client/interpret.c
b/client/interpret.c
index
39c24b0
..
51e2951
100644
(file)
--- a/
client/interpret.c
+++ b/
client/interpret.c
@@
-37,8
+37,21
@@
void run_task(struct task *t)
pc++;
break;
case BCPUSH: trace("push %d", program[pc]*265+program[pc+1]);
pc++;
break;
case BCPUSH: trace("push %d", program[pc]*265+program[pc+1]);
- stack[sp++] = f16(pc);
- pc+=2;
+ switch(program[pc++]){
+ //Long
+ case 'l':
+ //Int
+ case 'i':
+ stack[sp++] = f16(pc);
+ pc+=2;
+ break;
+ case 'b': //Bool
+ case 'c': //Character
+ case 'B': //Button
+ case 'L': //UserLED
+ stack[sp++] = program[pc++];
+ break;
+ }
break;
case BCPOP: trace("pop");
sp--;
break;
case BCPOP: trace("pop");
sp--;
@@
-59,51
+72,51
@@
void run_task(struct task *t)
stack[sp] = stack[sp] > 0 ? 0 : 1;
break;
case BCADD: trace("add");
stack[sp] = stack[sp] > 0 ? 0 : 1;
break;
case BCADD: trace("add");
- stack[sp-2] = stack[sp-
1] + stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] + stack[sp-1
];
sp -= 1;
break;
case BCSUB: trace("sub");
sp -= 1;
break;
case BCSUB: trace("sub");
- stack[sp-2] = stack[sp-
1] - stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] - stack[sp-1
];
sp -= 1;
break;
case BCMUL: trace("mul");
sp -= 1;
break;
case BCMUL: trace("mul");
- stack[sp-2] = stack[sp-
1] * stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] * stack[sp-1
];
sp -= 1;
break;
case BCDIV: trace("div");
sp -= 1;
break;
case BCDIV: trace("div");
- stack[sp-2] = stack[sp-
1] / stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] / stack[sp-1
];
sp -= 1;
break;
case BCAND: trace("and");
sp -= 1;
break;
case BCAND: trace("and");
- stack[sp-2] = stack[sp-
1] && stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] && stack[sp-1
];
sp -= 1;
break;
case BCOR: trace("or");
sp -= 1;
break;
case BCOR: trace("or");
- stack[sp-2] = stack[sp-
1] || stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] || stack[sp-1
];
sp -= 1;
break;
case BCEQ: trace("eq");
sp -= 1;
break;
case BCEQ: trace("eq");
- stack[sp-2] = stack[sp-
1] == stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] == stack[sp-1
];
sp -= 1;
break;
case BCNEQ: trace("neq");
sp -= 1;
break;
case BCNEQ: trace("neq");
- stack[sp-2] = stack[sp-
1] != stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] != stack[sp-1
];
sp -= 1;
break;
case BCLES: trace("les");
sp -= 1;
break;
case BCLES: trace("les");
- stack[sp-2] = stack[sp-
1] < stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] < stack[sp-1
];
sp -= 1;
break;
case BCGRE: trace("gre");
sp -= 1;
break;
case BCGRE: trace("gre");
- stack[sp-2] = stack[sp-
1] > stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] > stack[sp-1
];
sp -= 1;
break;
case BCLEQ: trace("leq");
sp -= 1;
break;
case BCLEQ: trace("leq");
- stack[sp-2] = stack[sp-
1] <= stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] <= stack[sp-1
];
sp -= 1;
break;
case BCGEQ: trace("geq");
sp -= 1;
break;
case BCGEQ: trace("geq");
- stack[sp-2] = stack[sp-
1] >= stack[sp-2
];
+ stack[sp-2] = stack[sp-
2] >= stack[sp-1
];
sp -= 1;
break;
case BCJMP: trace("jmp to %d", program[pc]);
sp -= 1;
break;
case BCJMP: trace("jmp to %d", program[pc]);
@@
-140,10
+153,12
@@
void run_task(struct task *t)
sp--;
break;
case BCLEDON: trace("LedOn(%d)", program[pc]);
sp--;
break;
case BCLEDON: trace("LedOn(%d)", program[pc]);
- led_on(program[pc++]);
+ led_on(stack[sp-1]);
+ sp--;
break;
case BCLEDOFF: trace("LedOn(%d)", program[pc]);
break;
case BCLEDOFF: trace("LedOn(%d)", program[pc]);
- led_off(program[pc++]);
+ led_off(stack[sp-1]);
+ sp--;
break;
default:
trace("unrecognized");
break;
default:
trace("unrecognized");