this should be `struct vm;`