X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=gmqcc.h;h=d8ad37465ef0525ea2298a9eb484f7a6e9220f04;hp=3f960b8462e92c18d5cc39799467cdd43db5c408;hb=46fa12cb265706673927319d07651096e10c5b80;hpb=7df42c95d2b0b7cbe2d61173ac24cce78ff87476 diff --git a/gmqcc.h b/gmqcc.h index 3f960b8..d8ad374 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -35,7 +35,7 @@ #endif /*! _MSC_VER */ #define GMQCC_VERSION_MAJOR 0 -#define GMQCC_VERSION_MINOR 3 +#define GMQCC_VERSION_MINOR 4 #define GMQCC_VERSION_PATCH 0 #define GMQCC_VERSION_BUILD(J,N,P) (((J)<<16)|((N)<<8)|(P)) #define GMQCC_VERSION \ @@ -157,6 +157,8 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \ # define GMQCC_UNLIKELY(X) (X) #endif +#define GMQCC_ARRAY_COUNT(X) (sizeof(X) / sizeof((X)[0])) + #ifndef _MSC_VER # include #else @@ -330,7 +332,6 @@ void *stat_mem_allocate (size_t, size_t, const char *); bool util_filexists (const char *); bool util_strupper (const char *); bool util_strdigit (const char *); -void util_debug (const char *, const char *, ...); void util_endianswap (void *, size_t, unsigned int); size_t util_strtocmd (const char *, char *, size_t); @@ -715,7 +716,17 @@ enum { * Creating this causes IR blocks to be marked as 'final'. * No-Return-Call */ - VINSTR_NRCALL + VINSTR_NRCALL, + + /* Emulated instructions. */ + VINSTR_BITAND_V, /* BITAND_V must be the first emulated bitop */ + VINSTR_BITAND_VF, + VINSTR_BITOR_V, + VINSTR_BITOR_VF, + VINSTR_BITXOR, + VINSTR_BITXOR_V, + VINSTR_BITXOR_VF, + VINSTR_CROSS }; /* TODO: elide */ @@ -729,6 +740,7 @@ typedef uint32_t qcuint_t; typedef struct { prog_section_statement_t *statements; int *linenums; + int *columnnums; prog_section_def_t *defs; prog_section_field_t *fields; prog_section_function_t *functions; @@ -740,6 +752,16 @@ typedef struct { qcint_t string_cached_empty; } code_t; +/* + * A shallow copy of a lex_file to remember where which ast node + * came from. + */ +typedef struct { + const char *file; + size_t line; + size_t column; +} lex_ctx_t; + /* * code_write -- writes out the compiled file * code_init -- prepares the code file @@ -754,18 +776,9 @@ code_t *code_init (void); void code_cleanup (code_t *); uint32_t code_genstring (code_t *, const char *string); qcint_t code_alloc_field (code_t *, size_t qcsize); -void code_push_statement(code_t *, prog_section_statement_t *stmt, int linenum); +void code_push_statement(code_t *, prog_section_statement_t *stmt, lex_ctx_t ctx); void code_pop_statement (code_t *); -/* - * A shallow copy of a lex_file to remember where which ast node - * came from. - */ -typedef struct { - const char *file; - size_t line; - size_t column; -} lex_ctx_t; /*===================================================================*/ /*============================ con.c ================================*/