X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=client%2Finterpret.c;h=51e295177360215580c690c0e03a270649e03f20;hb=7ab8606c3d22a2bc2743eae7a398407c84d502f2;hp=0335f1d08c02fe4b0af4bf938ba856296a2b50d9;hpb=5f4c4b61ea1e4062e90715af9e1027da6d1c7a66;p=mTask.git diff --git a/client/interpret.c b/client/interpret.c index 0335f1d..51e2951 100644 --- 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]); - 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--; @@ -59,51 +72,51 @@ void run_task(struct task *t) 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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"); - 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]);