* of my time.
*/
#ifdef _MSC_VER
-# pragma warning(disable : 4244 ) // conversion from 'int' to 'float', possible loss of data
-# pragma warning(disable : 4018 ) // signed/unsigned mismatch
-# pragma warning(disable : 4996 ) // This function or variable may be unsafe
-# pragma warning(disable : 4700 ) // uninitialized local variable used
+# pragma warning(disable : 4244 ) /* conversion from 'int' to 'float', possible loss of data */
+# pragma warning(disable : 4018 ) /* signed/unsigned mismatch */
+# pragma warning(disable : 4996 ) /* This function or variable may be unsafe */
+# pragma warning(disable : 4700 ) /* uninitialized local variable used */
#endif
#define GMQCC_VERSION_MAJOR 0
/*===================================================================*/
/*=========================== util.c ================================*/
/*===================================================================*/
+FILE *util_fopen(const char *filename, const char *mode);
+
void *util_memory_a (unsigned int, unsigned int, const char *);
void util_memory_d (void *, unsigned int, const char *);
void util_meminfo ();
typedef prog_section_both prog_section_def;
typedef prog_section_both prog_section_field;
+/* this is ORed to the type */
+#define DEF_SAVEGLOBAL (1<<15)
+#define DEF_TYPEMASK ((1<<15)-1)
+
typedef struct {
int32_t entry; /* in statement table for instructions */
uint32_t firstlocal; /* First local in local table */
INSTR_DONE,
INSTR_MUL_F,
INSTR_MUL_V,
- INSTR_MUL_FV,
- INSTR_MUL_VF,
+ INSTR_MUL_FV, /* NOTE: the float operands must NOT be at the same locations: A != C */
+ INSTR_MUL_VF, /* and here: B != C */
INSTR_DIV_F,
INSTR_ADD_F,
INSTR_ADD_V,
{ "ADD_F" , 3, 5 },
{ "ADD_V" , 3, 5 },
{ "SUB_F" , 3, 5 },
- { "DUB_V" , 3, 5 },
+ { "SUB_V" , 3, 5 },
{ "EQ_F" , 0, 4 },
{ "EQ_V" , 0, 4 },
{ "EQ_S" , 0, 4 },
bool GMQCC_WARN Tself##_##mem##_append(Tself *s, Twhat *p, size_t c) \
{ \
Twhat *reall; \
- if (s->mem##_count+c >= s->mem##_alloc) { \
+ if (s->mem##_count+c > s->mem##_alloc) { \
if (!s->mem##_alloc) { \
s->mem##_alloc = c < 16 ? 16 : c; \
+ s->mem = (Twhat*)mem_a(sizeof(Twhat) * s->mem##_alloc); \
} else { \
s->mem##_alloc *= 2; \
if (s->mem##_count+c >= s->mem##_alloc) { \
s->mem##_alloc = s->mem##_count+c; \
} \
+ reall = (Twhat*)mem_a(sizeof(Twhat) * s->mem##_alloc); \
+ if (!reall) { \
+ return false; \
+ } \
+ memcpy(reall, s->mem, sizeof(Twhat) * s->mem##_count); \
+ mem_d(s->mem); \
+ s->mem = reall; \
} \
- reall = (Twhat*)mem_a(sizeof(Twhat) * s->mem##_alloc); \
- if (!reall) { \
- return false; \
- } \
- memcpy(reall, s->mem, sizeof(Twhat) * s->mem##_count); \
- mem_d(s->mem); \
- s->mem = reall; \
} \
memcpy(&s->mem[s->mem##_count], p, c*sizeof(*p)); \
s->mem##_count += c; \
if (!reall) { return false; } \
memcpy(reall, s->mem, sizeof(Twhat) * s->mem##_count); \
s->mem##_alloc = c; \
+ s->mem##_count = c; \
mem_d(s->mem); \
s->mem = reall; \
return true; \
};
typedef struct {
- float x, y, z;
+ qcfloat x, y, z;
} vector;
vector vec3_add (vector, vector);
MEM_VECTOR_MAKE(qcint, entitydata);
MEM_VECTOR_MAKE(bool, entitypool);
+ uint16_t crc16;
+
size_t tempstring_start;
size_t tempstring_at;
MEM_VECTOR_MAKE(qc_exec_stack, stack);
size_t statement;
+ size_t xflags;
+
int argc; /* current arg count for debugging */
} qc_program;
extern bool opts_debug;
extern bool opts_memchk;
extern bool opts_dump;
+extern bool opts_werror;
+extern bool opts_forcecrc;
+extern uint16_t opts_forced_crc;
/*===================================================================*/
#define OPTS_FLAG(i) (!! (opts_flags[(i)/32] & (1<< ((i)%32))))