#ifndef GMQCC_HDR
#define GMQCC_HDR
#include <vector>
+#include <string>
+#include <utility>
+#include <memory>
+using std::move;
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
/* exposed interface */
#define vec_meta(A) ((vector_t*)(((char *)(A)) - sizeof(vector_t)))
-#define vec_free(A) ((void)((A) ? (_util_vec_delete((void *)(A)), (A) = NULL) : 0))
+#define vec_free(A) ((void)((A) ? (_util_vec_delete((void *)(A)), (A) = nullptr) : 0))
#define vec_push(A,V) (GMQCC_VEC_WILLGROW((A),1), (A)[vec_meta(A)->used++] = (V))
#define vec_size(A) ((A) ? vec_meta(A)->used : 0)
#define vec_add(A,N) (GMQCC_VEC_WILLGROW((A),(N)), vec_meta(A)->used += (N), &(A)[vec_meta(A)->used-(N)])
/* code.c */
/* Note: if you change the order, fix type_sizeof in ir.c */
-enum {
+enum qc_type {
TYPE_VOID ,
TYPE_STRING ,
TYPE_FLOAT ,
/* ir.c */
/* TODO: cleanup */
-enum store_types {
+enum store_type {
store_global,
store_local, /* local, assignable for now, should get promoted later */
store_param, /* parameters, they are locals with a fixed position */