#ifndef _MME_H_
#define _MME_H_
#ifdef __cplusplus
extern "C" {
#endif
#define ZIMPL_VERSION 353
enum code_type
{
CODE_ERR = 0, CODE_NUMB, CODE_STRG, CODE_NAME, CODE_TUPLE,
CODE_SET, CODE_TERM, CODE_BOOL, CODE_SIZE,
CODE_IDXSET, CODE_LIST, CODE_VOID, CODE_ENTRY, CODE_VARCLASS, CODE_CONTYPE,
CODE_RDEF, CODE_RPAR, CODE_BITS, CODE_SYM, CODE_DEF, CODE_BOUND
};
enum symbol_type { SYM_ERR = 0, SYM_NUMB, SYM_STRG, SYM_SET, SYM_VAR };
typedef enum symbol_type SymbolType;
typedef struct symbol Symbol;
typedef enum code_type CodeType;
typedef struct code_node CodeNode;
typedef CodeNode* (*Inst)(CodeNode* self);
typedef struct entry Entry;
typedef struct list_element ListElem;
typedef struct list List;
typedef enum var_type VarType;
typedef struct mono Mono;
#define SYMBOL_NAME_INTERNAL "@@"
#define VERB_QUIET 0
#define VERB_NORMAL 1
#define VERB_VERBOSE 2
#define VERB_CHATTER 3
#define VERB_DEBUG 5
extern int verbose;
extern void zpl_exit(int retval) is_NORETURN;
extern void show_source(FILE* fp, char const* text, int column) expects_NONNULL;
extern void interns_init(void);
extern void interns_exit(void);
#define Min(a, b) (((a) <= (b)) ? (a) : (b))
#define Sgn(a) (((a) > 0) ? 1 : (((a) < 0) ? -1 : 0))
#ifndef DIRSEP
#define DIRSEP '/'
#endif
#ifndef NDEBUG
#define SID unsigned int sid;
#define SID_set(p, id) (p->sid = id)
#define SID_del(p) (p->sid = 0xdeadda7a)
#define SID_ok(p, id) (p->sid == id)
#define SID_set2(p, id) (p.sid = id)
#define SID_del2(p) (p.sid = 0xdeadda7a)
#define SID_ok2(p, id) (p.sid == id)
#else
#define SID
#define SID_set(p, sid)
#define SID_del(p)
#define SID_ok(p, id) true
#define SID_set2(p, sid)
#define SID_del2(p)
#define SID_ok2(p, id) true
#endif
#define DISPERSE(x) (1664525U * (x) + 1013904223U)
#ifdef TRACE
#define Trace(fname) fprintf(stderr, "Trace: %s\n", fname);
#else
#define Trace(fname)
#endif
#ifdef __clang__
#define MAKE_STRING(x) #x
#define CLANG_WARN_OFF(warningoption) \
_Pragma("clang diagnostic push") \
_Pragma(MAKE_STRING(clang diagnostic ignored #warningoption))
#define CLANG_WARN_ON _Pragma("clang diagnostic pop")
#else
#define CLANG_WARN_OFF(warningoption)
#define CLANG_WARN_ON
#endif
#ifdef __cplusplus
}
#endif
#endif