#ifndef _ENCODING_H_ #define _ENCODING_H_ #include #include #include "slice.h" #include "value.h" typedef uint8_t local; // An arg can be a value or a constant. struct arg { local local; value constant; }; enum opcode { OALLOC = 1, OCALL = 2, OPOKE = 3, OPEEK = 4, OSHUF = 5, OEXIT = 6, }; struct op { enum opcode code; union { struct { local out; struct arg size; } alloc; struct { uint8_t offset; local pointer; struct arg value; } poke; struct { local out; uint8_t offset; struct arg value; } peek; struct { local out; struct arg value; } shuf; struct { struct arg value; } exit; }; }; struct result { struct op op; int n; }; struct result parse(struct slice); #endif