X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=gmqcc.h;h=26428b82ac6c104063a0d80b5ae830f9ebbcc0fa;hb=cf04b5ed01d7f90329c36b87d8b2bf7d170ad7b3;hp=072048d4e20de340e88ec49ff2f8ac5c10086ca1;hpb=3c462539a6ebef7226385bdd4ca825f242e76319;p=xonotic%2Fgmqcc.git diff --git a/gmqcc.h b/gmqcc.h index 072048d..26428b8 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -287,6 +287,9 @@ void util_debug (const char *, const char *, ...); int util_getline (char **, size_t *, FILE *); void util_endianswap (void *, int, int); +size_t util_strtocmd (const char *, char *, size_t); +size_t util_strtononcmd (const char *, char *, size_t); + uint32_t util_crc32(const char *, int, register const short); #ifdef NOTRACK @@ -339,7 +342,7 @@ uint32_t util_crc32(const char *, int, register const short); while (N##_add(*++elements) != -1 && len--); \ return N##_elements; \ } \ - typedef char VECTOR_FILL(extra_semicolon_,__COUNTER__) + typedef char VECTOR_FILL(extra_semicolon_##N,__COUNTER__) #define VECTOR_PROT(T,N) \ extern T* N##_data ; \ extern long N##_elements ; \ @@ -581,6 +584,9 @@ VECTOR_PROT(prog_section_function, code_functions ); VECTOR_PROT(int, code_globals ); VECTOR_PROT(char, code_chars ); +typedef float qcfloat; +typedef int32_t qcint; + /* * code_write -- writes out the compiled file * code_init -- prepares the code file @@ -589,6 +595,7 @@ bool code_write (const char *filename); void code_init (); uint32_t code_genstring (const char *string); uint32_t code_cachedstring(const char *string); +qcint code_alloc_field (size_t qcsize); /*===================================================================*/ /*========================= assembler.c =============================*/ @@ -671,20 +678,6 @@ void asm_init (const char *, FILE **); void asm_close(FILE *); void asm_parse(FILE *); /*===================================================================*/ -/*============================= main.c ==============================*/ -/*===================================================================*/ -enum { - COMPILER_QCC, /* circa QuakeC */ - COMPILER_FTEQCC, /* fteqcc QuakeC */ - COMPILER_QCCX, /* qccx QuakeC */ - COMPILER_GMQCC /* this QuakeC */ -}; -extern bool opts_debug; -extern bool opts_memchk; -extern bool opts_darkplaces_stringtablebug; -extern bool opts_omit_nullcode; -extern int opts_compiler; -/*===================================================================*/ /*============================= ast.c ===============================*/ /*===================================================================*/ #define MEM_VECTOR_PROTO(Towner, Tmem, mem) \ @@ -877,9 +870,6 @@ typedef struct { * Since we may want to support that as well, let's redefine * float and int here. */ -typedef float qcfloat; -typedef int32_t qcint; - typedef union { qcint _int; qcint string; @@ -927,6 +917,7 @@ typedef struct qc_program_s { MEM_VECTOR_MAKE(char, strings); MEM_VECTOR_MAKE(qcint, globals); MEM_VECTOR_MAKE(qcint, entitydata); + MEM_VECTOR_MAKE(bool, entitypool); size_t tempstring_start; size_t tempstring_at; @@ -982,28 +973,53 @@ typedef uint32_t longbit; typedef struct { const char *name; longbit bit; -} opt_flag_def; +} opts_flag_def; /*===================================================================*/ /* list of -f flags, like -fdarkplaces-string-table-bug */ enum { - DP_STRING_TABLE_BUG, - OMIT_NULLBYTES, +# define GMQCC_DEFINE_FLAG(X) X, +# include "flags.def" +# undef GMQCC_DEFINE_FLAG + COUNT_FLAGS +}; +static const opts_flag_def opts_flag_list[] = { +# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(X) }, +# include "flags.def" +# undef GMQCC_DEFINE_FLAG + { NULL, LONGBIT(0) } +}; - NUM_F_FLAGS +enum { +# define GMQCC_DEFINE_FLAG(X) WARN_##X, +# include "warns.def" +# undef GMQCC_DEFINE_FLAG + COUNT_WARNINGS }; -static const opt_flag_def opt_flag_list[] = { - { "darkplaces-string-table-bug", LONGBIT(DP_STRING_TABLE_BUG) }, - { "omit-nullbytes", LONGBIT(OMIT_NULLBYTES) }, +static const opts_flag_def opts_warn_list[] = { +# define GMQCC_DEFINE_FLAG(X) { #X, LONGBIT(WARN_##X) }, +# include "warns.def" +# undef GMQCC_DEFINE_FLAG + { NULL, LONGBIT(0) } }; -static const size_t opt_flag_list_count = sizeof(opt_flag_list) / sizeof(opt_flag_list[0]); /* other options: */ -extern uint32_t opt_O; /* -Ox */ -extern const char *opt_output; /* -o file */ +enum { + COMPILER_QCC, /* circa QuakeC */ + COMPILER_FTEQCC, /* fteqcc QuakeC */ + COMPILER_QCCX, /* qccx QuakeC */ + COMPILER_GMQCC /* this QuakeC */ +}; +extern uint32_t opts_O; /* -Ox */ +extern const char *opts_output; /* -o file */ +extern int opts_standard; +extern bool opts_debug; +extern bool opts_memchk; /*===================================================================*/ -#define OPT_FLAG(i) (!! (opt_flags[(i)/32] & (1<< ((i)%32)))) -extern uint32_t opt_flags[1 + (NUM_F_FLAGS / 32)]; +#define OPTS_FLAG(i) (!! (opts_flags[(i)/32] & (1<< ((i)%32)))) +extern uint32_t opts_flags[1 + (COUNT_FLAGS / 32)]; +#define OPTS_WARN(i) (!! (opts_warn[(i)/32] & (1<< ((i)%32)))) +extern uint32_t opts_warn[1 + (COUNT_WARNINGS / 32)]; #endif