META
#define M_ALL META('*')
#define M_END META(']')
#define M_NOT META('!')
#define M_ONE META('?')
#define M_RNG META('-')
#define M_SET META('[')
#define M_ALL META('*')
#define M_END META(']')
#define M_NOT META('!')
#define M_ONE META('?')
#define M_RNG META('-')
#define M_SET META('[')
#define M_CLASS META(':')
#define M_ALL META(L'*')
#define M_END META(L']')
#define M_NOT META(L'!')
#define M_ONE META(L'?')
#define M_RNG META(L'-')
#define M_SET META(L'[')
#define M_ALL META(L'*')
#define M_END META(L']')
#define M_NOT META(L'!')
#define M_ONE META(L'?')
#define M_RNG META(L'-')
#define M_SET META(L'[')
#define SNAPSHOT_BUF_OR_LEAVE(DATA, LEN, META, RES, LABEL) \
(RES) = vm_snapshot_buf((DATA), (LEN), (META)); \
vm_snapshot_buf_err(#DATA, (META)->op); \
#define SNAPSHOT_VAR_OR_LEAVE(DATA, META, RES, LABEL) \
SNAPSHOT_BUF_OR_LEAVE(&(DATA), sizeof(DATA), (META), (RES), LABEL)
#define SNAPSHOT_BUF_CMP_OR_LEAVE(DATA, LEN, META, RES, LABEL) \
(RES) = vm_snapshot_buf_cmp((DATA), (LEN), (META)); \
vm_snapshot_buf_err(#DATA, (META)->op); \
#define SNAPSHOT_VAR_CMP_OR_LEAVE(DATA, META, RES, LABEL) \
SNAPSHOT_BUF_CMP_OR_LEAVE(&(DATA), sizeof(DATA), (META), (RES), LABEL)
case META:
case META:
case META:
*cre = META | OPT;
*cs = META;
*cs = META;
*cs = META;
switch (*cs & (OPER | STR | META)) {
case META:
#define SNAPSHOT_GUEST2HOST_ADDR_OR_LEAVE(CTX, ADDR, LEN, RNULL, META, RES, LABEL) \
(RNULL), (META)); \
return META | SPECIAL;
case META | SPECIAL:
case META: