let get_stack_offset inst = match inst with
Push -> 1
| Pop -> -1
| Read -> 0
| Print -> 0
| PrintLn -> 0
| Swap -> 0
| Stop -> 0
| Return -> 0
| Cons -> -1
| Car -> 0
| Cdr -> 0
| IsNull -> 0
| Nil -> 0
| GetElem -> -1
| SetElem -> -2
| And -> -1
| Or -> -1
| Add -> -1
| Sub -> -1
| Mul -> -1
| Div -> -1
| DivI -> -1
| RemI -> -1
| Concat -> -1
| Neg -> 0
| Frac -> 0
| Int -> 0
| Lt -> -1
| Gt -> -1
| Lte -> -1
| Gte -> -1
| Eq -> -1
| Neq -> -1
| ConstUninit -> 0
| ConstInt _ -> 0
| ConstFloat _ -> 0
| ConstString _ -> 0
| PushSf _ -> 2
| Assign _ -> 0
| Acc _ -> 0
| Rev _ -> 0
| MakeBlock _ -> 0
| AllocFields _ -> 0
| GetField _ -> 0
| SetField _ -> 0
| Call _ -> 0
| Apply -> 0
| Jmp _ -> 0
| Jz _ -> 0
| Jnz _ -> 0
| RPC _ -> 0
| Label _ -> 0
| Comment _ -> 0
| Annotation _ -> 0
| GetElemStatic _ -> 0
| SetElemStatic _ -> -1
| MakeBlockStatic (_,n) -> -n
| MakeBlockFilled _ -> -1