#include #include #include extern int32_t sp; extern int32_t stack; void emit() { putchar(*(&stack + --sp)); } void print() { printf("%d\n", *(&stack + --sp)); } void sub() { int32_t *st = &stack; st[sp - 2] -= st[sp - 1]; --sp; } void cswap() { int32_t *st = &stack; --sp; if (st[sp]) { int32_t tmp = st[sp - 1]; st[sp - 1] = st[sp - 2]; st[sp - 2] = tmp; } } void eq() { int32_t *st = &stack; --sp; st[sp - 1] = st[sp - 1] == st[sp]; } void alloc() { int32_t *st = &stack; st[sp - 1] = (int32_t)malloc(st[sp - 1] * sizeof(int32_t)); } void dealloc() { int32_t *st = &stack; --sp; free((int32_t *)st[sp]); } void peek() { int32_t *st = &stack; st[sp - 1] = *(int32_t *)st[sp - 1]; } void poke() { int32_t *st = &stack; sp -= 2; int32_t *ptr = (int32_t *)st[sp + 1]; *ptr = st[sp]; } void dumpstack() { int32_t *st = &stack; printf(" "); for (int i = 0; i < sp; ++i) printf("%d ", st[i]); putchar('\n'); }