struct union_exp { ptroff sel; void *data; };
Values of sel are assigned sequentially from 0 [[maybe 1 would be better, use 0 for error marks of some kind, but I don't know what they could be needed for...]], in order they are given in union definition. Union values are passed between functions are struct union_exp*